Lambda開発に必要な操作
IAMロールの設定
Lambdaランタイムの設定
Lambda関数のコーディング
イベントソースとなるリソースの作成およびトリガーとして設定
CloudFormationを使った場合の操作
Lambda関数のソースコードをZIPアーカイブしてアップロード
CloudFormationのテンプレートを記述
awsコマンドでCloudFormationに適用
スタックが作成され、AWSリソース一式が作成される
CloudFormationを使う場合の注意点として、AWSリソースはすべてスタックで管理されるため、リソースを手動で変更してはいけない。
Serverless Application Modelを利用した開発手法
SAMはCloudFormationをベースにしたサーバーレスアプリケーションの開発手法である。
SAMの実態は「AWS SAM CLI」というコマンドラインツールである。
開発者は「AWS SAM テンプレート仕様」で定められて書式に則ったテンプレートファイル(SAMテンプレート)に各種設定を記述する。
samコマンドを使ってビルド・デプロイすると設定がCloudFormationへ渡され必要なAWSリソースが作られる。
Lambda関数をビルドする際は実行予定のランタイムと同等の環境が必要。
SAMは、Lambda関数をビルドする際にランタイムをDockerコンテナとして実行する機能がある。Dockerを使わずにローカル環境でビルドすることも可能。
SAMは、ローカル環境でLambda関数をテストする機能も提供している。
イベントと同じ構造のJSONデータを渡すことでLambdaランタイムでの実行をエミュレートする。
SAMを使った開発の流れ
sam initでプロジェクトディレクトリを初期化する
Lambda関数のコーディング
SAMテンプレートの記述
sam build
sam deploy
初回は`--guided`オプションを指定し対話モードでどこにデプロイするか設定できる。2回目以降のデプロイは`--guided`を省力しても初回で設定した内容でデプロイできる。
また`--capabilities CAPABILITY_IAM CAPABILITY_AUTO_EXPAND`オプションをつけないとデプロイの際にIAM変更が必要な場面で失敗することがある。
Serverless Application Repository
サーバーレスアプリケーションを管理するリポジトリ。
SAMで構築したアプリを登録できる。
AWSをはじめとしたサードパーティ製のサーバーレスアプリが多数登録されている。
Boto3でAWSリソースを操作する
AWSリソースにアクセスするためのAPIが公開されており、そのライブラリが各プログラミング言語で用意されている。
Pythonの場合はBoto3というライブラリを使ってAWSリソースにアクセスできる。
LambdaランタイムにはBoto3が既定でインストールされている。
外部ライブラリを含める方法
生成物に含める方法
sam buildする際に外部ライブラリを含めるようにする。
プロジェクトを含むディレクトリの下にサブディレクトリを作り、その中にライブラリ一式をコピーしておく。
または、requirements.txtに使いたいライブラリを記述しておく。(普通はこっち)
レイヤーを使う方法
Lambdaのレイヤーという機能を使う。
レイヤーはライブラリなどをZIPにまとめて事前にアップロードしておく仕組み。
Lambda関数には最大5つのレイヤーを指定でき、Lambdaランタイムが作られる際にレイヤーが順番に展開されて配置される。
たくさんのLambda関数がある場合は、共通で使うライブラリやデータなどをあらかじめ登録しておけるので便利。
レイヤーの実態
レイヤーは単純にZIP形式のファイルを`/opt`ディレクトリ以下に自動で展開する機能である。
Lambdaランタイムは`/opt`ディレクトリ以下の言語ごとに異なるディレクトリにライブラリパスが設定されている。
SAMを使ったレイヤーの構成
プロジェクト配下に、レイヤーに含めたいファイルを配置する作業ディレクトリを作る。
使いたいライブラリをrequirements.txtに記述する
template.yamlを変更する