AWS CodePipeline が AWS Step Functions の呼び出しをサポートしました

記事タイトルとURLをコピーする

はじめに

こんにちは、技術1課の山中です。 昨日久しぶりに外に買い物に出かけたのですが、紫陽花がきれいに咲いてて6月だな〜と思いました。時が経つのは早いものです。

というのはさておき! 今回はこのアップデートについて見ていきます!

CodePipeline が新しいアクションタイプでの Step Functions の呼び出しをサポート

AWS CodePipeline (以下、 CodePipeline) から AWS Step Functions (以下、 StepFunctions) のステートマシンの実行が可能となったようです。

AWS Step Functions とは

Step Functions は、視覚的なワークフローを使用して、分散アプリケーションとマイクロサービスのコンポーネントを調整できるマネージドなサービスです。ASL (Amazon States Language) と呼ばれる JSON 形式の言語でワークフローを定義できます。

AWS Step Functions(分散アプリケーションの調整)| AWS Step Functions タグが付けられた記事一覧を表示しています。 -サーバーワークスエンジニアブログ

今回 CodePipeline と統合したことによって、アプリケーションのリリースプロセスの一部でテストの実施や、テスト結果による分岐、エラー処理等複雑な処理が Step Functions で実施できるようになりました。

試してみる

今回は Tutorial: Use an AWS Step Functions Invoke Action in a Pipeline - CodePipeline に従い CodePipeline からステートマシンの実行していきます。

準備

パイプラインに StepFunctions を追加する前に、追加対象のパイプラインを 1 つ作成しておく必要があります。 事前に チュートリアル: シンプルなパイプラインを作成する (S3 バケットの場合) - CodePipeline に従いパイプラインを 1 つ作成してください。

サンプルステートマシンの作成

Getting Started with Step Functions - AWS Step Functions に従い、 CodePipeline から実行させるステートマシンを作成します。 テンプレートを利用して作っただけなので、とてもシンプルな ASL となっています。

{
  "Comment": "A Hello World example of the Amazon States Language using Pass states",
  "StartAt": "Hello",
  "States": {
    "Hello": {
      "Type": "Pass",
      "Result": "Hello",
      "Next": "World"
    },
    "World": {
      "Type": "Pass",
      "Result": "World",
      "End": true
    }
  }
}

ステートマシンの実行アクションをパイプラインに追加

作成したステートマシンの実行をパイプラインに追加していきます。

不要なステージの削除

まずは チュートリアル: シンプルなパイプラインを作成する (S3 バケットの場合) - CodePipeline で作成したパイプライン内の不要なステージを削除します。 マネジメントコンソールで CodePipeline を開き MyFirstPipeline を選択します。

編集する ボタンをクリックし、 Production ステージを削除しましょう。

Step Functions 実行ステージの追加

不要なステージを削除できたので、ステートマシンの実行を追加していきます。 Source と Deploy の間にある + ステージを追加する をクリックします。

ステージ名を Invoke とし追加しましょう。

続いて アクショングループを追加する ボタンをクリックし、アクショングループを追加します。

アクション名は Invoke とし、アクションプロバイダーに AWS Step Functions が追加されているので選択しましょう。

入力アーティファクトは SourceArtifact とし、 State Machine Arn に先ほど作成した Step Functions の ステートマシン ARN を入力します。

Input type は Literal を選択し、 Input にステートマシンに渡す JSON を入力します。

{"IsHelloWorldExample": true}

ここまで入力できたら、 完了 ボタンをクリックします。 これで Step Functions の実行ステージが追加されたので、 保存する ボタンをクリックします。

変更をリリースする ボタンをクリックし、パイプラインを実行してみましょう。

Oh……ステートマシンの実行部分で失敗しました… 詳細を見てみると、どうやら CodePipeline から Step Functions を実行するための権限がないようです。

ドキュメントを確認すると、確かに記載されていますね。 Identity and Access Management for AWS CodePipeline - CodePipeline 具体的には以下ポリシーを追加してあげる必要があります。 ※ CodePipeline で既存の IAM ポリシーを利用している場合

{
    "Action": [
        "states:DescribeStateMachine",
        "states:DescribeExecution",
        "states:StartExecution"
    ],
    "Resource": "*",
    "Effect": "Allow"
},

IAM ポリシーを更新したので再度実行!

おお、成功しました!!

Step Functions のコンソールからも対象のステートマシンが実行されていることがわかります。 また、入力には CodePipeline の INPUT で指定した値がきちんと渡されていますね。

おわりに

CodePipeline から Step Functions のステートマシンが実行できるようになったことでより柔軟にリリースプロセスを実装できそうですね。

また、この内容は 2020/6/3(水) 12:00 よりYouTube Liveで配信する「30分でわかる AWS UPDATE!」で取り上げますますので、是非ご覧ください!

参考