Lambda入門#1 はじめてのLambda関数作成 S3との連携

# 参考URL
クラスメソッドさんのページみて勉強してみました。
https://dev.classmethod.jp/cloud/aws/lambda-my-first-step/

## Lambda関数の作成

まずはどんなものなのかを知っていくことが重要だと思いますので、ページに記載されている内容に沿って、実際に操作してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/3e0d4002-95c7-407d-7402-18f3d71bcda2.png)

ロールは新規作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/bda7c6c7-ba8d-6de9-638f-f0c13e78c130.png)

と思ったら、以下のエラーが出力されて作成できませんでした。
IAMのロール作成権限が必要なのですね。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/0e13346c-9409-87ee-74ef-115abece3551.png)

IAMのロール作成権限を持つユーザーで改めて、操作したところ、無事に関数を作成できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/6db69c46-96f3-f98a-0b5a-6e5bafc01651.png)

ところが、やっぱり、ここでも「う～ん？」って感じです。
作成はできたのですが、記事で紹介されているデフォルトの「Amazon CloudWatch Logs」が出てきません（汗

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/2b255b21-cc06-0f02-4ad0-d79f5215f362.png)

記事によると画面左側に「トリガー」が表示され、画面右側の「送信先」には「アクセス可能なAWSのサービス」が表示されるとのこと。
デフォルトでは「Amazon CloudWatch Logs」が表示されるそうなのですが、「う～ん？」です。

とりあえず、記事にならって、「トリガー」にS3を指定して、追加してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/fa3a45c6-a498-7e46-0cb3-e6478a41f2b0.png)

ひとまず、適当なバケットを指定し、やってみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/e2bc4352-6deb-cf4f-770d-eff3709cdc87.png)

なんでも適当はダメですね（汗
「トリガーとS3のバケットは同じリージョンの必要がある」と表示されました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/ec5a168d-03f1-c12c-a34d-5533d35530b1.png)

追加できましたー

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/844324af-ef93-7733-b32d-ab5001109c67.png)

そして、このタイミングで最初の疑問だったデフォルトの設定「Amazon CloudWatch Logs」が表示されていない件について、進展がありました。
「アクセス権限」というタブを選択すると設定が紐づいておりました。
トップ画面に表示されていなかっただけのようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/abfef0d7-d77f-4449-7d73-02fe6752b2b0.png)

ですので、気を取り直して、Lambdaのコード編集に入ります。

```python:テストコード
def lambda_handler(event, context):
    print("Lambdaが呼ばれたよ！！！！！！")
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/b6595455-fbc3-202f-1a3b-0ae60c55e593.png)


コードの内容が究極シンプルなので、理解しやすかったです。
イベントが発生したら、printの処理を実行する。

Lambdaのコードが書けたら、テストを行うことができるようです。
最初は↓のような感じです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/c7609833-f973-8098-6244-4f99cade5851.png)

イベントテンプレートをS3のPut処理に選択しなおして、テストしてみます。
jsonの中身は空でイベントのみを拾うようにします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/b6443092-b154-9877-4f82-ac866bbf3336.png)

画面右上のプルダウンメニューに作成したテスト名が表示されるので、そのままテストを実行します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/fc2a4093-f5cd-b3b3-a290-504d35a381be.png)

おっ！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/ac26f8e2-63c5-02d6-3520-ac09d9cb4efb.png)

本当に記事に記載されていた通り、「Lambdaが呼ばれたよ！！！！！！」のprint処理が実行されました！

実行ログも確認してみます。
テストを実行すると、画面の上部に「実行結果：成功（ログ）」と表示され、リンクが貼られているので、辿ってみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/4976230d-662a-ef84-66b7-21cd22947910.png)

おや、Cloud Watch Management Consoleに飛びました。
ログストリームの項目に1行だけアクティブなリンクが貼られています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/59aee136-7b0c-b30f-2065-98fb0360c25b.png)

ログにも記録されていることが確認できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/d0cf4446-b4c4-2835-14ae-e1b7be1d75a7.png)

実際にファイルをS3にPutして、同じ動作（イベントを取得して、print処理を実行）するか確認してみます。

プレフィックスがtargetsのフォルダに.txt拡張子のファイルが保存されたら、イベントが実行される条件で設定しているため、S3にフォルダを用意します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/080474b3-7ee9-85fa-0036-e58c7ec83738.png)

用意したフォルダにtxt拡張子のファイルを保存してみます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/d8fd9cf6-8e81-28e3-91ae-168fb1833a06.png)

アップロードできました！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/c06f6386-7eab-d943-8e90-e63f722df191.png)

ここでCloud Watch Management Consoleに戻って、画面更新を行います。
おっ！新しいイベントが生成されています！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/052d4eb7-5e1b-5d05-3134-e08ff5e8cc82.png)

ちゃんと狙い通りの動作はできているようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138274/6a9b9301-e0a0-ef69-f824-937368c2bfb2.png)

次もこの記事の続きをやっていきたいと思います！