SAM の記事なんて今さらですけどねー。今まで長らくお世話になってきた Serverless Framework が v4 からはどうも商用では有償になるらしいですし(厳密には組織の収益規模によるようですが、細かいことは気にしない…)、Serverless Framework を使い続けることで Dependabot くんに「脆弱性あるよ早く対処しな!」と頻繁にせかされるのもいいかげんしんどくなってきたので、SAM に乗り換えるのもいいかな、と。 CDK はコードをぐちゃぐちゃ書かないといけないのでメンドクサイ
ここでは、忘れそうになることを箇条書きでメモするだけです。役に立つ記事とかそういうのはよそを当たってください…。
Lambda 実行ロール
Lambda 実行ロールへの基本的な管理ポリシーの付与は SAM が暗黙にやってくれるので、S3 とか DynamoDB とか自分のリソースへのアクセス権限をポリシーテンプレートなりなんなりで追加すればよい。
- 何も書かなくても、自動的に
AWSLambdaBasicExecutionRole
ポリシーが付与される。これによって CloudWatch Logs ロググループ・ログストリームの作成、ログの書き込みが可能になる。template.yaml にわざわざロググループのリソース定義を書く必要はない -
VpcConfig
を指定した Lambda には自動的にAWSLambdaVPCAccessExecutionRole
ポリシーが付与される。これによって ENI の脱着が可能になる -
Tracing: Active
が指定されると自動的にAWSXrayWriteOnlyAccess
ポリシーが付与される
(今後もっと増える、かも。)
Lambda バージョン・エイリアス
- SAM で単純にデプロイしただけではバージョン・エイリアスどちらも作成されない
-
AutoPublishAlias
等を指定すれば作成される - 一度
AutoPublishAlias
指定でエイリアスをデプロイしておくと、2回目以降はDeploymentPreference
と併用することで CodeDeploy による blug/green デプロイ的なことができる (CodeDeploy は「前」がないとうまく動かない融通の利かないサービスなので、初回はAutoPublishAlias
だけ、2回目以降にDeploymentPreference
も付けるといった手順が必要) - Function URL (
FunctionUrlConfig
) を業務用途で使う人はあまりいないと思われるが、FunctionUrlConfig
AutoPublishAlias
DeploymentPreference
の 3 つを併用すると Function URL が (定義は残っているにもかかわらず) アクセスできなくなるという問題が発生した。 公式ドキュメント を見る限り下記のように書いてあるので SAM が Function URL に対応していないということはなさそうだが、CodeDeploy と組み合わせると Function URL 接続先のエイリアスがうまく切り替わらないといった制限があるのかもしれない
If you specify an AutoPublishAlias for your Lambda function, the endpoint connects to the specified function alias.