こんばんわ、フリーランスエンジニアの堀口です。
AWS環境の構築に Terraform と SAM を使う場合の役割分担について。
それぞれについて簡単に説明すると、
Terraformは、インフラをコードで定義・管理するためのもの。
AWS SAM(Serverless Application Model)とは、AWSが提供するサーバーレスアプリケーションを構築・デプロイするためのもの。
両方を使ったシステム開発を行う際に迷ったのは、どこまでをインフラとして管理し、どこからはアプリケーションとして管理させるか。
特に迷ったのは、Lambda関連のSecurity Group と IAMをどちらで管理するのか?という部分。
私の中では、Terraform は「インフラ構築用」、SAM は「アプリケーション+インフラ構築用」と解釈しています。
そこで、Lambdaの仕様変更による影響での修正要否を境界線としました。
Security Group はLambdaの仕様が変わってもほとんどの場合は変更はしない。
一方、IAM はLambdaの仕様が変わったことで追加・変更・削除が発生する可能性がある。
私の場合は、Lambdaの仕様変更したことにより、インフラ構築用のTerraformを修正しなければならないという状況を減らすことを最優先としました。
正解はないですが、最終的に「Security Group は Terraformで管理」「IAM は SAMで管理」と判断しました。
Terraform や SAM を使った開発をする方の一助になれば幸いです。
以上です。