📖

Git Push で CodeBuild と Step Functions を連携させる方法しらべてみた

2024/11/22に公開

1. Git Push をトリガーとして CodeBuild を起動する

Gitリポジトリへの push をトリガーとしてCodeBuildを動作させるためには、以下の手順を設定します。

CodePipelineの利用

  1. AWS CodePipelineを作成し、GitHubまたはAWS CodeCommitをソースプロバイダとして接続します。
  2. ソースステージでGitの変更(push)を検知し、自動的に次のステージ(ビルド)を開始します。

Webhookの利用

  1. GitHubやAWS CodeCommitでWebhookを設定し、変更イベントをAWS Lambdaに通知します。
  2. LambdaでCodeBuildを起動するように処理を実装します。

これにより、Gitリポジトリへの変更が検知されると、自動的にCodeBuildが起動されます。


2. CodeBuild でビルドを実行

CodeBuildプロジェクトでは、buildspec.yml ファイルを利用してビルド手順を定義します。以下は、buildspec.yml の例です。

version: 0.2
phases:
  install:
    runtime-versions:
      python: 3.9
  build:
    commands:
      - echo "Starting build process..."
      - pip install -r requirements.txt
      - pytest
  post_build:
    commands:
      - echo "Build completed successfully!"
      - aws stepfunctions start-execution --state-machine-arn <YOUR_STEP_FUNCTIONS_ARN>

主な処理内容

必要なライブラリのインストール。
テストの実行。
ビルド完了後、AWS Step Functionsの実行をトリガー。
CodeBuildプロジェクトは、特定のソース(Gitリポジトリ)を指定しておくことで、自動的にソースコードを取得しビルドを実行します。

3. AWS Step Functions を動作させる

ビルド完了後にStep Functionsを起動し、複雑なワークフローを実行します。

Step Functions のステートマシン例
以下は、シンプルなStep Functionsステートマシンの例です。


{
  "Comment": "Sample Step Function",
  "StartAt": "LambdaInvoke",
  "States": {
    "LambdaInvoke": {
      "Type": "Task",
      "Resource": "arn:aws:lambda:<region>:<account_id>:function:<your_lambda_function>",
      "End": true
    }
  }
}

Step Functionsの実行手順

CodeBuildで指定した aws stepfunctions start-execution コマンドを使用し、ステートマシンを起動します。
ステートマシン内でLambda関数を呼び出し、さらに必要なAWSサービス(S3、DynamoDBなど)を操作します。
実装例: Git Push → CodeBuild → Step Functions

Gitリポジトリの変更

GitHubまたはAWS CodeCommitでリポジトリに変更を push します。

CodePipelineのトリガー

ソースステージで変更を検知し、ビルドステージ(CodeBuild)を開始します。

CodeBuildのビルドプロセス

ソースコードを取得し、ビルド・テストを実行します。
ビルド完了後、Step Functionsを起動します。

Step Functionsの実行

よくある運用だと思いますがなんだかよくわからないので調べてみました!
ステートマシンがLambda関数やその他のAWSサービスを連携し、必要な処理を実行します。
おわりに
この仕組みを構築することで、コードの変更からテスト、デプロイ、さらには複雑なワークフローの実行までを自動化できます。これにより、開発の効率化と品質向上が期待できます。

どんどん自動化していきたいですね

Discussion