- 公開日
- 最終更新日
Step Functions × CodePipeline 実践編
この記事を共有する
目次
はじめに
こんにちは!パーソル&サーバーワークスの野間です。
これまでのブログでは AWS Step Functions(以下、Step Functions)を使って、
GUI 上で簡単な AWS リソース操作や条件分岐を行う方法をご紹介してきました。
今回は少し実践的な内容として、Step Functions を AWS CodePipeline(以下、CodePipeline)に組み込み、
CI/CD パイプラインの中で活用する方法をご紹介します。
今回作成する CodePipeline の概要
事前に、EC2 インスタンスに対して簡単なコマンドを実行するための CodePipeline を作成しました。

今回は、この CodePipeline を 実行するタイミングでのみ EC2 インスタンスを起動 するように、
Step Functions を組み込んでいきます。
構成は以下の通りです。
- Source ステージ:S3 からファイルを取得
- PreBuild ステージ:EC2 インスタンスを起動(ここで 1 つ目の Step Functions を利用)
- Build ステージ:EC2 インスタンス上で指定のコマンドを実行
- AfterBuild ステージ:EC2 インスタンスを停止(ここで 2 つ目の Step Functions を利用)
作成してみる
CodePipeline のステージで実行するための Step Functions ワークフローは、
あらかじめ作成しておく必要があります。
今回は、EC2 インスタンスを起動/停止し、
その後インスタンスのステータスを確認するワークフローを事前に作成しました。
- CodePipeline の編集画面から「PreBuild」ステージを追加します。

- アクションプロバイダーで「AWS Step Functions」を選択します。

- Step Functions の実行時に必要なパラメータを入力します。(今回は実行時に "InstanceId" パラメータを指定するワークフローのため、画像のように指定を行いました。)
- 同様の手順で「AfterBuild」ステージも作成します。
実行してみる
それでは、CodePipeline を実行してみます。

実行結果を確認すると、想定通りすべてのステージが成功しました。
PreBuild ステージで EC2 インスタンスが起動し、
Build ステージの処理完了後に AfterBuild ステージで EC2 インスタンスが停止していることも確認できました。

このように、パイプライン実行時のみ EC2 インスタンスを起動する構成にすることで、
不要な起動時間を減らし、コスト最適化を実現することができます。
まとめ
今回は Step Functions を CodePipeline に組み込み、
CI/CD 実行時に EC2 インスタンスの起動・停止を制御する構成を作成してみました。
CodePipeline には AWS Lambda 関数を組み込むことも可能ですが、
Step Functions は GUI 上で直感的にワークフローを作成できるため、
複雑な処理や条件分岐がある場合でも実装しやすい点が大きなメリットだと感じました。
これから Step Functions を活用される方の参考になれば幸いです。
この記事は私が書きました
野間 太一
記事一覧猫とCloudFormationが好きです。