はじめに
この記事では、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
に通知する
おわりに
もっと簡単にスマートにできる方法がありましたら、教えて頂けると幸いです。