LoginSignup
1
3

More than 1 year has passed since last update.

[AWS]CodePipelineでStepFunctionsを実行する

Last updated at Posted at 2021-08-12

はじめに

AWS CodePipelineでStepFunctionsのステートマシンを実行します。

準備

S3バケットを2つとStepFunctionsのステートマシンを1つ用意します。S3バケットの1つは、バージョニングを有効にします。CodePipelineのソース(Source)ステージのアクションに使用するS3バケットは、バージョニング有効が条件のようです。

  • S3バケット名
    • tmp-0wwkdvhvwz (バージョニング有効)
    • tmp-hokdvhvwzw

StepFuncitions ステートマシン HOGE を作成しました。ペイロード(入力値:JSON形式)のHOGEの値によって処理が分岐します。

image.png

StepFunctionsステートマシンHOGE
{
  "Comment": "This is your state machine",
  "StartAt": "Choice",
  "States": {
    "Choice": {
      "Type": "Choice",
      "Choices": [
        {
          "Variable": "$.HOGE",
          "NumericEquals": 100,
          "Next": "Pass HOGE 100"
        }
      ],
      "Default": "Pass HOGE Not 100"
    },
    "Pass HOGE 100": {
      "Type": "Pass",
      "End": true
    },
    "Pass HOGE Not 100": {
      "Type": "Pass",
      "End": true
    }
  }
}

CodePipeline

パイプラインを作ります。



パイプライン test001 (S3 -> S3)

S3バケットのデータを別のS3バケットに格納するパイプラインを作ります。(StepFunctionsは使用しません)
Sourceステージと、DeployステージにS3バケットを使用したアクションを設定しました。

image.png

sample.json
{"HOGE": 50}

s3バケット tmp-0wwkdvhvwz に test/sample.zipをアップロードします。

image.png


sample.zipのアップロードを検知しパイプライン test001 が実行を開始します。

image.png

パイプライン test001実行により、s3バケット tmp-hokdvhvwzw にsample.jsonがアップロードされます。

sample.json(s3バケットtmp-hokdvhvwzw)
{"HOGE": 50}


パイプライン test002 (S3 -> StepFunctions-> S3)

S3バケットtmp-0wwkdvhvwzのデータを入力値としてStepFunctionsを実行します。また、StepFunctionsの実行結果をS3バケットtmp-hokdvhvwzwに出力します。

image.png

  • SourceステージとDeployステージの間に、invokeステージを追加
  • ① SouceステージのSourceアクションについて
    • S3バケットtmp-0wwkdvhvwzを指定
    • test/hoges.zipが更新された際にパイプラインが実行する
    • 出力アーティファクト名SourceArtifactとする
  • ② invokeステージのStepFuncアクションについて
    • S3バケットtmp-hokdvhvwzwを指定
    • 入力アーティファクトをSourceArtifactとする
    • StepFunctions スマートマシンHOGEとする
    • 入力タイプをファイルパスとし、hoge-200.jsonとする
      • hoges.zipの中のhoge-200.jsonをStepFunctionに渡す
    • 出力アーティファクト名hogeoutとする
  • ③ DeployステージのDeployアクションについて
    • S3バケットtmp-0wwkdvhvwzを指定
    • 入力アーティファクトをhogeoutとする

実行します
以下2つのファイルを圧縮したhoges.zipをS3バケットtmp-0wwkdvhvwztest/hoges.zipとしてアップロードします。

アップロードするhoges.zipの内容を変えて2回実施します

1回目のhoges.zip

hoge-100.json
{"HOGE": 100}
hoge-200.json
{"HOGE": 200}

2回目のhoges.zip

hoge-100.json
{"HOGE": 100}
hoge-200.json
{"HOGE": 100}

実行結果
1回目と2回目でStepFunctionsの処理が変わっていることを確認しました(期待した処理)。

image.png

また、S3バケットtmp-hokdvhvwzwtest2/out.zipを解凍するとoutput.jsonがあります。

2回目のoutput.json
{"HOGE": 100}

(おまけ)パイプライン test002 に承認処理を加える

Sourceステージとinvokeステージに間にProcedureステージを作成し、承認処理を設定しました。承認依頼はメール送信なのでSNSトピックが必要になります。

image.png


実行します
実行すると、以下のようなメールが送信されます。

image.png

メールにはパイプラインtest002へのリンクがあり、パイプライン上のレビューボタンから却下/承認を選択します。

image.png

承認処理を承認すると処理はそのまま実行されます。却下すると以下のようになり、その後の処理は実行されません。


実行者と承認者をわける権限設定について
承認プロセスを追加しても、実行者が承認できないように権限を設定する必要があります。動作確認はしていませんが、おそらく以下の権限割り当てでいけると思います。

  • 実行者
    • S3バケットtmp-0wwkdvhvwzへファイルをアップロードする権限
    • パイプラインtest002を閲覧する権限
      • IAMポリシーAWSCodePipelineReadOnlyAccess
  • 承認者
    • パイプラインtest002で承認できる権限
      • IAMポリシーAWSCodePipelineApproverAccess

※課題※ 承認者が、却下/承認の判断を楽にできる仕組みが必要そう。


最後に

CodePipelineとStepFunctionsを組み合わせると、運用にかかわる手順を自動化できそうです。

1
3
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
1
3