4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

UzabaseAdvent Calendar 2021

Day 6

AWS Step Functions を利用したCI フローについて

Posted at

はじめに

AWSにはAWS CodePipeline をはじめとして、CI/CD パイプラインを構築するためのツールが色々と揃っていますが、
今回、AWS Step Functions を利用して、デプロイフローを構築したところなかなかに使い勝手が良かったので、共有させていただきます。

構築したCI/CD パイプライン

構築したCI/CD パイプラインは次のような流れで実行されます。

  1. Slackのショートカットからデプロイコマンドを実行
  2. AWS chatbotからAWS Step Functionsを呼び出し
  3. AWS Step Functionsでは、図のようにLambdaを実行して、CodeBuildを実行
  4. CodeBuildが完了したら、deploy用のlambdaを呼び出す

[イメージ図]
20211206-ci-cd-flow.png

実装内容の紹介

SlackからAWS Chatbotを通じて、Step Functionsの呼び出し

Slackのワークフロービルダーを用いて、AWS Chatbotを通じてStep Functionsのステートマシーンの呼び出しを行うメッセージを送信できるようにしました。

下記のようなメッセージを最終的に呼び出します。

@aws lambda invoke --payload {payload: ""} --function-name deploy-function --region ap-northeast-1

AWS Step Functionsのフロー

Build Task => Deploy Task の2つのタスクだけをstatemachineに登録します。

Build Task

Build TaskではAWS Lambdaを呼び出し、LambdaからCodebuildを呼び出します。

[AWS Lambdaの処理]

  1. ParameterStoreから必要なparameterの取得
  2. CodeBuildの呼び出し

[AWS CodeBuildの処理]

  1. Dockerfileのビルド
  2. ECRにイメージの登録

State machineではCodeBuildの呼び出しまでしか行っていないので、waitForTaskTokenを利用してCodeBuildの処理完了まで処理を待つようにしました。
(waitの対応を行わないと、CodeBuildの呼び出しを行った時点で次のDeploy Taskが実行されます。)

waitForTaskTokenを利用したwait対応

  1. Build Task のintegrationPatternにwaitForTaskTokenを設定
  2. buildspec.ymlのpost_buildにsend-task-successを設定

こちらの対応を行うことで、CodeBuild完了までDeployTaskの実行を待つことができます。

Deploy Task

Deploy TaskではAWS LambdaでtaskDefinitionの登録とfargateのserviceの更新を行います。

Step Functionsを利用して良かったところ

  • 簡単にTaskを連携させるフローが組める
  • Taskを追加することで、承認やe2eテストの処理を追加できる余地がある

今後、改善したいところ

いったんCIフローを作成したのですが、まだまだ改善の余地はあるので少しずついいものにしていこうと思います。
直近では、下記のような改善を行おうと思っています。

  1. AWS Step Functionsで直接CodeBuildを呼び出せるので、そちらを利用してみてコードをスッキリさせたい
  2. e2eの自動テストを実行するTaskをフローに追加

おわりに

AWS Step Functions が AWS SDK 統合で 200 を超える AWS のサービスのサポートを追加にもあるようにAWS Step Functionsはどんどん改善がされているので、キャッチアップしてCI/CDフローも改善していきたいと思います。

参考

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?