はじめに
LambdaのCI/CDを実現したい!と思ったのですが、社内ルール的にAWS SAMを利用した開発はアクセスキーの発行が難しいため選択しにくく、一体どのような手段を取ればLambdaのCI/CDを実現できるか整理してみました。
**調査にかなり苦戦しています。**どうか皆さんのご意見をいただければ幸いです。
事前調査
名前から安易に「AWS CodeDeployがあればデプロイの自動化が出来る!」と思って調査していますが、
基本的にLambdaのデプロイはSAMを利用することを前提としている予感...
(※CodeDeploy Lambdaなどで検索してもSAMを前提とした記事がヒットしてしまう)
CodeDeployのBlackBelt(動画も見ました...)を確認していますが、CanaryやLinerのようなデプロイ戦略については触れられますが、直接的なLambdaのデプロイに関する言及が少なく、この辺自分には難しかったです...
調査方法
- AWS 公式ドキュメント・チュートリアル
- Qiita記事(優秀な先達の記事をたくさん参考にさせていただいております)
- その他Web検索
調査結果
LambdaのDeploy方法の候補としては以下の通り?
3が出来そうにだけ見えてやる方法が見つからず、現状2が最適解のような気持ち悪さ...
- AWS SAMを用いてローカル(またはCloud9などのEC2インスタンス)からDeployコマンドを発行
- ローカルからやりたい場合はアクセスキーの発行が必要(なはずであり、となるとベストプラクティス的には...)
-
git push
によるリポジトリの変更をフックとするのではなく、あくまで人のsam deploy
コマンドがフックとなる
- CodeBuildでbuildspec.yamlのcommands欄から
aws cloudformation package
,aws cloudformation deploy
コマンドを発行しzip化、その後CodeDeployではなくcFnでデプロイを実行する- いしだろぐさんの記事が大変参考になりました。天才です。突然のリンク失礼します..
- CodeDeployでLambda関数のデプロイをする
- これが出来そうで調べているのに詳細な情報やハンズオン記事が見つからず気持ち悪い...
CodeDeployを用いてLambdaのデプロイができる(だろう)と判断した根拠
-
そもそもCodeDeployのコンピューティングプラットフォームの欄にLambdaがある
- https://docs.aws.amazon.com/ja_jp/codedeploy/latest/userguide/deployment-steps-lambda.html#deployment-process-workflow-lambda
-
Amazon S3 に AppSpec ファイルを配置するか、コンソールまたは AWS CLI に直接入力します。
という記載もあるので、適切なAppSpec.ymlを記載すればできるか?
-
そもそも公式のドキュメントにも
[Compute platform (コンピューティングプラットフォーム)] で [AWS Lambda] を選択します。
などと言って説明している欄がある -
しかしながら2020年段階の @akihiro-moriwaki さんの記事では無理だったことが明言(こちらも大変参考になりました...大感謝)
-
Qiitaをざっと見たところ、CodeDeploy + Lambda + SAM不使用 の記事が見付けられず...
まとめ
- CodeDeployの機能を見る限りLambdaのデプロイが出来そうであるが、デプロイ戦略についてのドキュメントばかりで具体的なデプロイ方法がよく分からない
- 先達たちはcFnを使用することで自動デプロイを実現している
- CodeDeployで設定項目もあるし名前的にDeployできそうなのに詳しい方法も実際にやっている人の記事も見つからなくて気持ち悪い!!
以上になります。悩みを書き連ねてすみません。。是非皆さんのコメントを頂ければと思います。
ちなみに、近いうちにCodeStarを使用してみようと思っています。
ここでテンプレ選んでよしなにやってもらうのが最適解になりそうな予感がしていますが、結局じゃあCodeDeployのLambdaに関する設定は何なのっていう気持ち悪さは残りそうです。
何かわかり次第更新していきます。(最終更新:2022/02/13)