はじめに
この記事では、Gihub での Release タグの作成 〜 EKS へのデプロイを自動で行うための作成した仕組みを紹介します。
AWS 上で使用する各リソースは、 AWS CDK を使って構築します。
注意点
この仕組みは R&D 的に作成した構成で、実運用では使ったことがない(実際に本番環境やステージング環境などにデプロイしたことがない)ので、参考程度にみていただけると幸甚です。
構成
全体図
流れ
- ユーザが
Github上でReleaseタグを作成 -
Releaseタグを作成したタイミングでGithub Actionが実行され、Lambdaを実行する -
Lambdaで、Githubからソースコードをダウンロードし、zipファイルに圧縮し直して、S3へアップロードする -
LambdaからCode pipelineを実行する -
Code pipelineの中で、EKSへのデプロイと、Slackへの完了通知を送る
実際のコードたち
要点の説明
Github Action でのLambda の実行
Github 上で Release タグを作成したタイミングで、 Lambda の Functional endpoint に curl でリクエストを送る。
リクエストの中身には、 Organization、 Repository と tag が含まれている。
Lambda で zip ファイルを、S3 へアップロードする
Github Action から受け取ったリクエストから Organization、 Repository と tag を取得し、その情報を元に Github からソースコードを zip ファイルとしてダウンロードする。
ダウンロード後、 zip ファイルの作成し直しをして、 s3 にアップロードする
Lambda から Code pipeline を実行する
aws cli を使って Code pipeline を実行する(実際には、 Python のライブラリを使って実行する)
Code pipeline の中で、 EKS へのデプロイ
Code pipeline の中で実行している Code build の buildspec.yml の中で、 EKS へのデプロイを実行している。
Slack への完了通知を送る
Slack の通知用URLを設定している場合、終了通知を Slack に通知する
おわりに
もっと簡単にスマートにできる方法がありましたら、教えて頂けると幸いです。
