初体験したときのことをお話します

どうも、こんにちは。お元気ですか？
コロナ禍（コロ中？）ではいかかお過ごしでしょうか？
体調など崩しておりませんでしょうか？

わたしは以前、こんなこと↓を書いていました。
**[試験に出るAWS:SAAでしょう 第６夜](https://qiita.com/han-aru/items/652dd12c92c1b8f69ac0)**
あれから早、３ヶ月が過ぎようとしております。
あれから更新しておりませんし、いまだ試験も受けておりません！

が、勉強は続けており、もうすぐ終わりますので
近々試験を受けようと思っております。多分！

さて、今回は有識者の方々のを見たり、聞いたりして、教わりながら
色々と新しいことを体験しながら覚えていったので
それらの知見？ 感想？ をここに残しておきたいと思います。

## 準備として、すでに行っていたところ

- [AWS CLIをインストール](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-mac.html)した
- [Serverless Frameworkをインストール](https://qiita.com/sugo/items/c9de09421fe8d78f5fbd)した
- [pipenvをインストール](https://qiita.com/anvinon/items/5d9c128ef8b65b866dfe)した

## 初体験したところ `英語ばっかり！`

- Serverless Framework

```shell
サーバレス？ フレームワーク？ わかりそうでわからなかったんですが、
# Serverless
サーバを使わず（実際にはほんのちょっとアクセスするだけで）、
処理を行う（サーバにずっと何かを置いておかないで）っていう仕組みの、
# Framework
枠組みを用意した（レゴプロックと説明書を買ってきた）ので、
あとはそれを使って自分で好きなように細かく組み立て直してね、という感じ
```

- Deploy

```shell
よく聞きます。デプロイしました。デプロイします。など。
直訳では配置と配備らしいです。（展開すると間違えてました、展開はdevelopment）
所定の場所にデータを置くことでしょうか。
```

- Lambda

```shell
Λ っていう記号らしいです。
ラムダ計算というものがあるらしいです。
計算の実行を関数への引数の評価（英語: evaluation）と適用（英語: application）として
モデル化・抽象化した計算体系である。…らしいです。
AWSの中のサービスの一つです。
```

- Token_Get

```shell
あるサービスでトークンというもの（なんかめちゃくちゃ長いアルファベット羅列です。
skadfjhakjlsdhfop....とかそういう感じの）が発行されているという、知らせを受けたので
それを取得する記述をPythonで書きました
```

- Python
  - [そもそもPythonの意味とは？ より引用](https://www.sejuku.net/blog/24155)しました。ありがとうございます。

```shell
インデントで文法を管理するため、誰が書いても綺麗で似たようなコードになるらしいです。
（ああ！ だからインデントですぐエラーになるんですね！）
Pythonという名前はイギリスのお笑い番組空飛ぶモンティ・パイソンにちなんでつけられたらしく
パイソンは和訳すると、ニシキヘビらしいです。
```

- Python環境構築
  - [pyenv/pipenvとは より引用](https://tekunabe.hatenablog.jp/entry/2018/12/28/pyenv_pipenv)しました。ありがとうございます。

```shell
これは上の {pipenvをインストール} したことで完了しました。
pipenvとは複数のバージョンの Python とパッケージのまとめて管理するツールらしいです。
```

- Git（プルリク）

```shell
これもよく聞きますね。プルリク投げました。プルリクしたのでお願いします。
あれのイメージです。小学生の頃、班に分かれてグループ研究(Repository)しましたよね。
一つの班の生徒たちは研究する内容を話し合って決めて(Clone)
それぞれがメモ帳持って、各地で調査(Branch)してきて、教室に帰ってきて、
その班のリーダーに調査内容を報告(Commit,Push,PullRequest)する。
その調査結果を、リーダーがみて(Review)、OKなら大きな紙にまとめて書いて(Merge)発表する。
そんな感じですよね。違いますか。ややこしくなりましたか。
```

## 初体験したところの詳細

- AWS Credensialを更新
  - [ここが詳しいです。](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-quickstart.html)今回は公式ドキュメントというものをよく見た気がします。

```shell
こういうものがあるんですね。
AWS CLI をインストールすると、ローカルPCのなかに `~/.aws/credentials` ができるそうです。
その中身はこんな感じ↓
[ なんちゃら ]
aws_access_key_id = かんちゃら
aws_secret_access_key = なんちゃら
aws_session_token = かんちゃら
ローカルからAWSの自分のアカウントにアクセスできる鍵ですね。
クレデンシャル...なんというかラグジュアリーみたいな、クレンジングシャンプーみたいな。
なんでもありません。
```

- app.py,handler.py,serverless.ymlの３ファイルを書換えた
  - [handler.pyの仕組みについてはこちらを参考](https://qiita.com/tshun55/items/89fa5258a64e822f9a17)にしました。ありがとうございます。

```shell
app.py は、処理の詳細を書く。
handler.py は、 app.pyを処理をトレースしてログに残す処理。
serverless.yml は、 handler.py を経由して app.py の処理を請け負いながら、AWSに自分の行いたい内容を設定する。
AWSの管理画面でボタンや、選択や、書き込み欄に書くことが、この{.yml}（ヤムルというらしいです）ファイルに書いてあるのです。
```

- Pythonで、
  - 指定された箇所からTokenを取得した
  - AWS Systems Managerのパラメータストアに取得したトークンを配置する処理を書いた
  - 配置したトークンを決めた日時に自動で更新する処理を書いた

```shell
ほんとに上記のことができるのかヒヤヒヤしました。
この話を聞いたときに知っていたのは、Pythonという言語で、
なにやら書くと、なんだか色々良い感じ、くらいのレベルでしたから。
聞いただけで、ああ、あそこのあれを書いてああすればいいかもね。というレベルまで行きたいものです。
```

- slsコマンドを使って、デプロイを行った
  - [slsコマンドの仕組みについてはこちらを参考](https://qiita.com/kohashi/items/537a2c702b937b91078e)にしました。ありがとうございます。
  - [あとここも今回自分の知りたかったポイント](https://serverless-stack.com/chapters/configure-multiple-aws-profiles.html)が書いてありました。ありがとうございます。
  - 英語のサイトなので、このありがとうが届くことはないと思いますが、今回は英語のサイトを翻訳してよく見ました。

```shell
sls コマンドとは、serverless コマンドの短縮形らしいです。
このコマンドを使って初めて、AWSにもろもろ、こっちで作った内容が設定されます。
最初は、awsのトークンが違うとか、いろいろエラーになりました。
sls deploy -s dev --profile <ここにAWS Credentioals内にかかれてる[]で囲まれた部分を入れる>
トークンがあれば何でもできますが、トークンがなければ何もできませんよ。
トークンが全てです。
```

- Lambda関数画面でテストを行った

```shell
最初に引っかかったのは{テストイベントの設定}ですね。
テストボタンを押せばできるつもりでいたものですから、
テストボタンを押したらまた何か設定画面がニョキっと出てくるんだけど！？ となりました。
テストイベントの設定については、適当に名前をつけて、
key1: とかのところは特になにも変えずに作成ボタンを押したらテストできました。
```

- プルリク、レビューを行った

```shell
プルリクエストはコマンドでもできるらしいですが、
基本的には？ Githubのサイトに行ってプルリクエストボタンを押すのが良さそうですね。
プルリクボタンの隣に歯車マークがあって、グループに入っているなら
その中の誰にレビューをしてもらうのか、だれにマージをお願いするのか設定できるのがいいですね。
```

---

長くなってしまったので、下記２つは次回にまわしたいと思います。
#### Pythonで処理を書いてみて得た知識
#### serverless.ymlを書き換えてみて得た知識