LoginSignup
2
0

AWS Application Composerを使うと、動的参照があるStep Functionsを簡単に作れる

Posted at

はじめに

Step FunctionsをCloudFormationで作る際、以下のようなことを行っていて面倒でした。

  1. CloudFormationで、簡単なStep Functionsを書いて作成
  2. 作られたStep FunctionsをコンソールのWorkflow Studioから修正
  3. 修正後のASLで、CloudFormationテンプレートのStep Functionsの箇所を差し替え
  4. Lambda関数などを使う場合は、該当箇所を変数に差し替え
  5. スタックを更新
  6. 2.から5.を繰り返して調整

Application Composerでは、Workflow Studioが使えるようになっており、リソースを動的に参照できます。

そのため最初に書いたような、差し替えして文字列置き換え、のような面倒なことがしなくて済むようになります。

今回はこの内容について、簡単に確認してみました。

概要

  • AWS Application Composerで、Step FunctionsがあるSAMテンプレートを作成
    • その際Workflow Studioを使うことで、リソースを動的参照するコードが生成されることを確認
  • AWS Application Composerは、PCにインストールしたVSCodeで実行
  • SAMは、Cloud9を構築して実行

やってみた

準備

VSCodeの拡張機能で、AWS Toolkitを検索してインストールします。

image.png

フォルダを作って、template.yamlを作り、Open with Application Composerで開きます。
image.png

Lambda関数を1つ設置

Lambda関数を置きます。
image.png
ランタイムをPythonにしておきます。(3.9にしているのは、この後Cloud9で動かす際に、デフォルトでインストールされているバージョンのためです。)
image.png

Step Functionsステートマシンを置きます。デフォルトでLambda Taskが作られています
image.png

Lambda TaskとLambda関数を結びます。
image.png
Composer上の詳細では以下のように紐づけられます。
image.png

Cloud9上に移して、SAMで動かしていきます。

sam build
sam validate

sam deploy --guided

作成されたASLは以下になります。

{
  "StartAt": "LambdaTask",
  "States": {
    "LambdaTask": {
      "End": true,
      "Parameters": {
        "FunctionName": "arn:aws:lambda:ap-northeast-1:123456789012:function:sam-app-Function-CAnigRNGzDvR",
        "Payload.$": "$"
      },
      "Resource": "arn:aws:states:::lambda:invoke",
      "Type": "Task"
    }
  }
}

以前であれば、「コンソールのWorkflow Studioから修正されたASLをコピペして、Lambda関数の個所を変数に置き換える」ということをやっていましたが、AWS Application Composerを使えばそのような手間がなくなりました。

Workflow Studioを使って、Lambda関数をもう一つ設置

Lambda関数をもう一つ作って、Step Functionsに追加してみます。

AWS Application ComposerのWorkflow Studioを起動します。
image.png

2個目のLambda関数を設置しました。
image.png
Function nameを、CloudFormation 置換を入力にします。
image.png
変数名を指定します。ここでは${LambdaFunction2}としています。
image.png
右上で保存をして、Application Composerに戻ります。
image.png

Step Functionsに2つ目のLambdaが認識されていました。
image.png
Lambdaをもう一つ追加して、繋いでみます。
image.png
変数のマッピングも作ってくれます。
image.png

再度、上げなおしてデプロイします。
作られたASLは以下で、ちゃんとLambda関数の部分が置換されています。

{
  "StartAt": "LambdaTask",
  "States": {
    "Lambda Invoke": {
      "End": true,
      "OutputPath": "$.Payload",
      "Parameters": {
        "FunctionName": "arn:aws:lambda:ap-northeast-1:123456789012:function:sam-app-Function2-M8Ljf0sG9Hfo",
        "Payload.$": "$"
      },
      "Resource": "arn:aws:states:::lambda:invoke",
      "Retry": [
        {
          "BackoffRate": 2,
          "ErrorEquals": [
            "Lambda.ServiceException",
            "Lambda.AWSLambdaException",
            "Lambda.SdkClientException",
            "Lambda.TooManyRequestsException"
          ],
          "IntervalSeconds": 1,
          "MaxAttempts": 3
        }
      ],
      "Type": "Task"
    },
    "LambdaTask": {
      "Next": "Lambda Invoke",
      "Parameters": {
        "FunctionName": "arn:aws:lambda:ap-northeast-1:123456789012:function:sam-app-Function-CAnigRNGzDvR",
        "Payload.$": "$"
      },
      "Resource": "arn:aws:states:::lambda:invoke",
      "Type": "Task"
    }
  }
}

片付け

sam deleteでAWS上のリソースは削除されます。ロググループは保持されていますので、コンソールから削除してください。

Cloud9やPCで作成したファイル群は適宜削除してください。

おわりに

今回はApplication ComposerのWorkflow Studioを使うことで、Step Functionsのリソースの動的参照を簡単に実現してみました。
これでStep FunctionsのIaC化がかなりはかどるのではないでしょうか。

この記事がどなたかのお役に立てれば幸いです。

2
0
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
2
0