モチベーション
普段のAWS開発ではサーバーレス構成の管理のためのIaC(=Infrasctacture as Code)ツールとしてはAWS CDKを主に使っています。AWSによる説明は以下のリンク。
AWS CDKはAWSの中でも好きなサービスなので、別のIaCツールを積極的に利用する気はないです。ただAWS CDKの何が良いのか聞かれた時に明確に答えられなかったので、他のIaCで同じ構成のデプロイを経験しておくことで、今後AWS CDKの何が良いかを説明できるようになることを目的にしています。
構成図
Lambdaは共通で、ハンドラーが受け取るイベントをDynamoDBに保存する機能のみ。
GitHub
(コミット整理中)
やってみたいIaCツール一覧
- AWS CDK
- AWS CloudFormation
- AWS SAM
- AWS Amplify
- Terraform
- Serverless
AWS CDK
AWS CloudFormation
事前の印象
AWS CDKがAWS CloudFormationの欠点を解消しているという認識なので、使いにくそう。
触った感想
AWS CDKの正しい理解のために細かい部分まで確認するべき。実際にはAWS CDKが使えるならAWS CDKを利用すればいいと思う。
YAMLなのでレビューが大変そう。
同じようなリソースにデフォルト値を設定したいケースでは、AWS CDKでTypeScriptを使って共通化できることはAWS CDKの利点。(Lambda Layerを設定する場合など。)
Lambdaの綺麗な管理方法が公式のドキュメントのみではわからなかった(特にRoleとCode。今後の課題)。
API Gatewayについては、今までAWS CDKのデフォルトでやっていたので記述量が多いと感じた。
デプロイ方法としてAWS CLIを直接利用したので、細かく指定する必要があった。AWS CDKだとcdk deploy
だけで実行できる。
AWS SAM
事前の印象
Lambdaをデプロイする方法として使えるらしい。
触った感想
LambdaのデプロイができるAWS CloudFormationという印象。
API Gatewayについては、AWS CDKと同じような共通化がされていて記述量が抑えられそう。
デプロイについても、sam deploy
でデプロイできるのでAWS CDKと同じ感覚で実行できる。
まとめ
他の候補を実際に触ることができた。プログラミング言語なので慣れている・共通化がわかりやすいという2点でAWS CDKが良いと感じました。利用するLambdaやAPI数が少なく、共通化をする必要がない場合は、AWS CloudFormationの方が必要最低限の設定を正確にできるという利点があるかもしれないです。
次の目標は、Terraformをやることと、AWS CloudFormationを通してAWS CDKを改めて正しく理解すること。
去年のアドベントカレンダーの時に候補として考えていた内容でしたが、結局今年のアドベントカレンダーでの着手となりました。
来年の目標として、やったことを定期的にまとめておきたいです。