はじめに
こんにちは、技術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!」で取り上げますますので、是非ご覧ください!