誰よりも易しくAWS LambdaにHello World!!

# はじめに
WEBアプリ的なのをさっくり作ってみたくなりいろいろ方法調べてたのですが、
サーバ周りのこと全くわからんな...となったので
サーバレスなやつならさっくりいけるんちゃうか！（安直）
と思い、AWSの機能組み合わせればなんかできそう！という感触を得たので
まずはLambda触ってみますという記事です。

本格的なアプリ作りこむ前にいくつか実験したいことがあるの
できたところからちまちま記事にしていけたらと思います。

# AWS Lambdaとは
公式の概要は[こちら](https://aws.amazon.com/jp/lambda/)

私のざっくりとしたイメージは、
AWS他サービスでのイベントなどをトリガとしてなんらかの処理を行うものを
特に実行環境用意することなく用意できちゃう！というものです。
またサポートしている言語としてJava、Go、PowerShell、Node.js、C#、Python、Ruby があり
お好きな言語で書けちゃうというのもありがたポイントな気がします。
公式によると「関数の作成にその他のプログラミング言語を使用できるようにするための Runtime API を提供しています」
とのことで上記以外の言語も使える仕組みがあるようです。（参考：[LambdaのFAQ](https://aws.amazon.com/jp/lambda/faqs/)）

 # HelloWorldやってみる
HelloWorldのやり方は公式が親切に解説してくださっているので則ってやってみます。
[「Hello, World!」をサーバーレスで実行する](https://aws.amazon.com/jp/getting-started/hands-on/run-serverless-code/)

ただ公式で表示されてる画面と実際やってみたのが
ちょっとずつ違ってたりしたので（たぶん日本語表示にしてるから）
実際の画面と照らし合わせながらやっていってみます。

### ①Lambda コンソールを起動する
チュートリアルの「ここをクリック」のところ開くと下のような画面が出てくるので
左上「サービス」をクリック
![HW_lambda1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/9d08b03a-3bd8-250c-9f5e-92cd355962c8.png)

そうすると以下のような画面が出てくるので、
「コンピューティング」をクリック→右側に出てきた「Lambda」をクリック
![HW_lambda2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/ea83823c-90d8-5afa-003a-02b40ad46c0b.png)

コンソール画面が表示されます
![HW_lambda3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/b6faa98c-fa10-3411-b5b2-9aa8e43bc4a1.png)

### ②Lambda の設計図を選択する
「関数の作成」をクリック
![HW_lambda4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/a7db851d-6e7a-561b-3491-c42cff443654.png)

「設計図の使用」をクリックし
出てきた下の「ブループリント」の検索ボックスに「hello-world-python」と入力
![HW_lambda5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/9f6272f8-284c-6029-350e-28c241b930ac.png)

出てきた「hello-world-python」が選択されていることを確認して
右下「設定」をクリック
![HW_lambda6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/92084ba2-ef11-9701-1c27-328268807e05.png)

### ③Lambda 関数を設定して作成する
基本的な情報の画面で
「関数名」に「hello-world-python」を入力
「実行ロール」で「AWSポリシーテンプレートから新しいロールを作成」を選択
「ロール名」に「lambda_basic_execution」を入力
![HW_lambda7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/fca612f5-b699-3122-44e4-cc871fece425.png)

一番下までスクロールして「関数の作成」をクリック
![HW_lambda8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/9523c767-75b6-9a7c-b726-c79ae9aa417f.png)

できた！
![HW_lambda9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/443ed10f-8b23-f30a-8c6b-11bf235e0c5f.png)

公式チュートリアルの「c.  [Runtime]」、「d.  [Handler]」については
一番下までスクロールして以下に書いてある
![HW_lambda10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/af7458ca-f713-e0f5-0f29-978ec9bbef41.png)
チュートリアルには「このチュートリアルでは、これをランタイムと同様、Python 2.7 に残します。」
と書いてあるけど表示された通りで特にいじる必要はないと思われるので
編集せずにpython3.7のままにしておく

「e.  下方にスクロールしてメモリ、タイムアウト、VPC 設定を設定します。」については
一番上までスクロールして戻って「設定」をクリックして、
![HW_lambda11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/abad165d-030e-f21f-a855-72897cd69991.png)

下のような画面が開いたら
「メモリ」「タイムアウト」に関しては右上の「編集」をクリックして
![HW_lambda12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/898f9799-fcf7-1ce1-d5a3-e41d7340a452.png)

このの画面からいじれる。
チュートリアルではデフォのままでいいそうなのでそのままにしておく。
![HW_lambda13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/02d34319-5d46-804a-1ad3-d36699a9274b.png)

「VPC」については左側のリストからVPCを選択すると以下のような画面に。
チュートリアルの画面を見てみると「No VPC」となっているので
「設定がありません」のままで良さそう
![HW_lambda14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/08ce5bf2-b15f-efda-8df0-422210ce8c7f.png)

### ④Lambda 関数を呼び出して結果を検証する
「テスト」をクリックする
![HW_lambda15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/0726c0d0-744d-a0c7-04e8-0394bcb2b461.png)

下のような画面が開くので、
「イベント名」に「HelloWorldEvent」と入力
「テンプレート-オプション」に「Hello World」と打ち込んで出てきた項目を選択すると
画像のような「hello-world」の表示になる
「イベントJSON」の"value1"を"hello,world!"に書き換える
以上できたら、右上の「テスト」を押してみる（保存→テストでもよいと思う）
![HW_lambda16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/380c4ce3-7743-a969-11b7-68818fcf8c15.png)

多分成功する。成功すると以下のような表示が出てきて
![HW_lambda18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/e46fbc83-e8ec-e598-9e06-a6738c9e9c2d.png)
詳細を開くと実行結果やログが見られる。
![HW_lambda17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/2cad2e28-0e6c-55b9-c322-99e0e02e77bb.png)

### ⑤メトリクスをモニタリングする
「テスト」のボタンを何回かポチポチしてみた後に、
「モニタリング」のタブを開くと実行にかかった時間やらエラーの有無などをモニタリングできるページが開く
![HW_lambda19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/470f4f9c-f5b5-fafe-2b2e-d35302f918aa.png)

Hello Worldではなにもエラーは起こらないと思うけど、
ちゃんとした関数作っていくときにはモニタリング機能も必要そう。

### ⑥Lambda 関数を削除する
一番上までスクロールして、
右上「アクション」のプルダウンから「関数の削除」を選択
![HW_lambda20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/e4e3032a-72b1-7839-08f0-179a6d5565e6.png)

以下のようなポップアップが出てくるので
「削除」をクリック
![HW_lambda21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/041fa57f-8c56-492f-a192-2d2c7d496adf.png)

削除完了！関数のところにも何も表示されなくなる
![HW_lambda22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/c7c4db70-61cf-bb6d-695a-ea6209a318de.png)

### おまけ：ロールの削除
③で作成したロールは関数を削除しただけでは消えないです。
1回関数消したあとにもう1回おんなじ手順をなぞろうとすると③で「関数の作成」を押した後に以下のようなエラーが出ます
![HW_lambda23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/4a63adf2-d177-3730-b06e-d1ae4734bb40.png)

この名前のロールはすでにあるで！ってことですね。
ロール削除するには「IAM」からロールの削除を行うことになるみたいです。

上のサービス検索できるボックスに「IAM」と入力して
検索結果「IAM」の主な機能の中から「ロール」を選択
![HW_lambda24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/723b02d2-77b3-41b7-b5c4-eb5d7ebebdff.png)

開いたロールの画面で消したいロール名を検索（今回はlambda_basic_execution）
出てきた目的のロールにチェックを入れて
右上の「削除」をクリック
![HW_lambda25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/e3918ea5-d5d5-7621-4bb8-128d273bce32.png)

以下のようなポップアップが出てくるので、
下のテキストボックスに削除したいロール名を入力したうえで「削除」をクリック
![HW_lambda26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/cca3a928-5981-9b1c-af3e-9d95fc69b8ec.png)

削除できた！
![HW_lambda27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/594517/03d75c96-b5aa-d97a-9c2c-d25573d1bd1a.png)

# おわりに
公式チュートリアルとちょこちょこ画面が異なってるところがあったので
丁寧めにHelloWorldしてみました。
次は先人のやってみた！を参考に他サービスと連携させて動かすというのをやってみたいです。