AWS Lambdaの入門としてやってみた事をまとめた話（Python）

※2022年に下書きに書いたまま残っていた記事を2023年に投稿

`AWS Lambda`はAWSが提供するサーバーレスでコードを実行するサービスですが。

今回、`AWS Lambda`を普段さわっていない人間がその入門として、下記のような流れで学習してみました。

- AWSの各種ドキュメントを参照
- AWSのチュートリアルを実施（Python）

3つ実施したチュートリアルのうち最後に実施したひとつ。[チュートリアル: Amazon S3 トリガーを使用してサムネイル画像を作成する](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-s3-tutorial.html)
でドキュメントに書いてある内容の理解に時間を要し、チュートリアルを完了するのにだいぶ苦労しましたが。

それ以外は概ねスムーズに学習できたかと思います。

2022年現在、`AWS Lambda`を知らない所からの理解の助けにはなったと思うの、どのように学習を進めたのか本記事に記載しておきます。

あと自分は、[チュートリアル: Amazon S3 トリガーを使用してサムネイル画像を作成する](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-s3-tutorial.html)を`Python`でやろうとして記述に戸惑ったので、そのメモ。

参照した各種ドキュメント・チュートリアル

- [AWS Lambda](https://aws.amazon.com/jp/lambda/)
- [AWS Lambda デベロッパーガイド](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html)
- [AWS サービス別資料のAWS Lambda Part1～4（[AWS Black Belt Online seminar] Let's Dive Deep into AWS Lambda）](https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-service-cut/)
- [「Hello, World!」をサーバーレスで実行する](https://aws.amazon.com/jp/getting-started/hands-on/run-serverless-code/)
- [チュートリアル: Amazon S3 トリガーを使用して Lambda 関数を呼び出す](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-s3-example.html)
- [チュートリアル: Amazon S3 トリガーを使用してサムネイル画像を作成する](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-s3-tutorial.html)
- [AWS サービス別資料のAWS Serverless Application Model](https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-service-cut/)

## まずは製品ページとドキュメントにあたる。

- [AWS Lambda](https://aws.amazon.com/jp/lambda/)
- [AWS Lambda デベロッパーガイド](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html)
- [AWS サービス別資料のAWS Lambda Part1～4（[AWS Black Belt Online seminar] Let's Dive Deep into AWS Lambda）](https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-service-cut/)

[AWS Lambdaの製品ページ](https://aws.amazon.com/jp/lambda/)を確認し、どのようなサービスで料金体系がどんな感じのサービスなのか確認します。

製品ページについては、読むとリソースの所にホワイトペーパーだったりチュートリアルだったり、よくある質問だったりと。

多くの情報が提供されている事に気が付きます。

今回の入門時には直接は関係ない、開発ツールの話だったりもあり非常に幅広く情報が得られるかと思います。

製品ページを参照した後は、[AWS Lambda デベロッパーガイド]の`AWS Lambda とは`とか`Lambda の基礎`あたりを読み込みます。

他の部分については、目次を気になる部分をよんでみるくらい。

[AWS Lambda デベロッパーガイド](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html)

次に AWS サービス別資料のページに掲載されている`AWS Black Belt Online seminar`の資料と動画を参照して、理解を深めました。

[AWS サービス別資料のAWS Lambda Part1～4（[AWS Black Belt Online seminar] Let's Dive Deep into AWS Lambda）](https://aws.amazon.com/jp/aws-jp-introduction/aws-jp-webinar-service-cut/)

`AWS Black Belt Online seminar`はPart1からpart4までボリュームがありますが。
Lambdaについての知識がまとまっているので見ておくと、理解が深まるのでおすすめ。

## チュートリアルをやってみる

`AWS Lambda`がどのような物かイメージできてきたら、チュートリアルで実際に手を動かして感覚をつかんでいきます。

[「Hello, World!」をサーバーレスで実行する](https://aws.amazon.com/jp/getting-started/hands-on/run-serverless-code/)

[チュートリアル: Amazon S3 トリガーを使用して Lambda 関数を呼び出す](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-s3-example.html)

[チュートリアル: Amazon S3 トリガーを使用してサムネイル画像を作成する](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-s3-tutorial.html)


[Hello, World](https://aws.amazon.com/jp/getting-started/hands-on/run-serverless-code/)と[Amazon S3 トリガーを使用して Lambda 関数を呼び出す](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-s3-example.html)のチュートリアルについては、手順が詳細に記載されているため、これをなぞってリソースを作り、確認すればOKです。

[「Hello, World!」をサーバーレスで実行する](https://aws.amazon.com/jp/getting-started/hands-on/run-serverless-code/)では用意されているテンプレートを利用して`Hello Wolrd`のコード実行　＆　テストの方法を確認する事ができ。

[チュートリアル: Amazon S3 トリガーを使用して Lambda 関数を呼び出す](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-s3-example.html)ではS3バケットにS3トリガーを設定し、格納されたイメージファイルの情報を取得する方法とS3トリガーのイベントテストの方法が確認できます。

最初に記載しましたが、これらのチュートリアルは手順が詳細に記載されており。
実行にあたって悩む部分はないかと思います。

## チュートリアル: Amazon S3 トリガーを使用してサムネイル画像を作成する（Python） ではまった

[チュートリアル: Amazon S3 トリガーを使用してサムネイル画像を作成する](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-s3-tutorial.html)

前段のチュートリアルが詳細に記載れているのに比べて、こちらのチュートリアルは3段階くらい色々と飛ばしている用に感じます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/026fce51-c3be-50d9-80bf-2e95dcc49a03.png)

>このチュートリアルでは、中程度のレベルの AWS と Lambda ドメイン知識、Docker オペレーション、および AWS SAM が必要です。最初に チュートリアル: Amazon S3 トリガーを使用して Lambda 関数を呼び出す を試すことをお勧めします。

ドキュメントの注記として上記のように記載されていて不穏な感じを受けますが。
[チュートリアル: Amazon S3 トリガーを使用して Lambda 関数を呼び出す](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-s3-example.html)　を実施したのでこちらも試してみたところ見事にハマりました。

手順を進めていくと気が付きますが、[ステップ 5. デプロイパッケージの作成（今回はPythonを選択）](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-s3-tutorial.html#with-s3-tutorial-create-function-package)で壁にぶつかるかと思います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1670622/89ceee60-793f-4be2-e4d9-b2aae48c52fd.png)


このステップではデプロイパッケージを作成する必要がありますが、`Python`を選択するとAWS
　SAMCLIのsam buildコマンドを利用してデプロイパッケージを作成する事が推奨されます。　とだけ記載されています。

[Lambda デプロイパッケージ](https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/gettingstarted-package.html)

今回作成するPython番では[Pillow](https://pypi.org/project/Pillow/)というモジュールを利用するので、このモジュールが利用できるように依存関係を含めたデプロイパッケージを作成する必要がある事はわかりますが、どのように作成するかは手順が用意されていません。

Lambda デプロイパッケージでは`コンテナイメージ`と`.zip ファイルアーカイブ`の2種類のデプロイパッケージをサポートしていますが、このステップではSAMを使い、`コンテナイメージ`を利用する事を推奨しているだけしかわかりません。

冒頭に`このチュートリアルでは、中程度のレベルの AWS と Lambda ドメイン知識、Docker オペレーション、および AWS SAM が必要です。`と記載してあった部分がここで伏線回収されます。

`AWS Lambda`の入門をさっくりやるつもりが、デプロイパッケージ（コンテナイメージ）を作成するためにここで`AWS SAM`の入門にも手をだす事になります。

もしくは`AWS SAM`に手を出さずに、`AmazonLinux2`を用意して`Pillows`が利用できる`.zip ファイルアーカイブ`を用意する方法もあるかと思います。

これを読み解くのに苦労しましたが、今回はAmazonLinux2を用意してその環境で`.zip ファイルアーカイブ`を用意して対応しました。

## 総評

3つ実施したチュートリアルのうち、2022年現在は一つだけだいぶ説明がはしょられている気がしますが。
そこさえ乗り越えればチュートリアルとしては簡単かと思います。