PyCon JP 2019 Tutorialに参加したので、学んだことをざっくり書き残しておきます。
資料
進め方
チュートリアルのゴール
- AWS上で構築するサーバーレスアプリケーションの基本構成について知る
- Lambdaの利用に十分な基本的な構成を知る
- AWSの基本的なマネージドサービスを使って、サーバーレスなAPIの構成と作成手順を知る
Lambdaについての説明
AWS Lambdaとは
- FaaS(Function as a Service)の1つ
- AWS上のカテゴリーは「コンピューティング」(その他にはEC2など、プログラミングの実行環境)
- マネージされたコード実行環境を提供
基本機能
- 共有されたステートレスな実行環境
- AWSの各種サービスとの連携
- 柔軟なスケーリング
- 関数のバージョニング
- バージョンを指定することも可能
- CloudWatchによる監視
- StepFunctionsによる関数間オーケストレーション
- より複雑な処理が可能に
- Lambda Layerによる共通コンポーネントの管理
- 割と新しい機能
- 共有レイヤーを作ることができるようになった
AWS Lambdaで利用可能な言語について
- Python
- Node.js
- Go などなど
AWS Lambdaの利点
- コンピューティングリソースの有効活用
- アイドルタイムに課金されない
- アプリケーションコードのスケーラビリティ
- 冪等性は必要(関数の設計が重要になる)
- 事前のリソースプロビジョニングが基本的に不要になる
- AWSの各種サービスとの親和性
- イベントドリブンによる自動化やサーバレス化
実行ライフサイクル
- ENIの作成
- コンテナの作成
- デプロイパッケージのロード
- デプロイパッケージの展開
- ランタイム起動・初期化
- 関数/メソッドの実行(課金対象)
- コンテナの破棄
コールドスタートとウォームスタート
- ライフサイクルの1から全て実施するのがコールドスタート
- コンテナを再利用して実行されるのがウォームスタート
- コールドスタートの場合
- 1~7をすべて行う
- ウォームスタートの場合
- 3~6まで
Lambdaの利用例
Lambdaの開発でよく利用されるツール群
SAM
- AWS Serverless Application Model
- CloudFormationの拡張として実装されていて、構成管理まで含まれる
boto3
開発環境
Cloud9
ハンズオン
ファイルのアップローダ/ダウンローダAPIを作成しながら、Lambdaについて学びました。
デプロイ
makefileを使って、デプロイ手順をMakefileにタスクとして記載することで継続的に実行するようです。
エラーの確認方法
- CloudFormation内部のイベントに、エラーが出力される
- CloudFormationがErrorでRollbackになっているときには、一度削除してから再実行すること
リソースタイプの調べ方
AWSの公式ドキュメントから探していくことになる
困ったら、「使いたい機能 + Cloud Formation」で検索をかけるのが手っ取り早い
SAMはCloudFormationをサーバーレスアプリケーションに拡張したものなので、CloudFormationを知っておくと早いようです。
感想
AWS Lambdaを使用する上で、基本的な知識を学ぶことができました。
デバッグの方法とか、調べ方について学べたことは、本を読んで学ぶ以上に価値があったと思います。
自分でやろうと思ったときに全く分からなくなりそうなので、ハンズオン形式で学べてとても良かったと思いました。
AWS Lambdaは万能ではなく、現場で使う際には、他のAWSサービスと比較・検討した上で使用する必要があると学んだので
取り急ぎは個人でAPIを作りたいときや、何かしらのAWSサービスをトリガーとして関数を実行したいときに使ってみようと思いました。