[アップデート] AWS Step FunctionsがHTTPエンドポイントおよびTestState APIをサポートしました #AWSreInvent

こんにちは。サービス開発室の武田です。AWS Step FunctionsにHTTPエンドポイントステートと、状態をテストできるAPIが追加されました。
2023.11.27

こんにちは。サービス開発室の武田です。

re:Invent期間ということで、次から次へとアップデートが発表されていますね。さて今回はAWS Step Functionsのアップデートです。

次の2つの機能が同時に発表されました。

  • HTTPエンドポイントステートの追加
  • テスト状態APIの追加

うれしいポイント

まずHTTPエンドポイントの追加ですが、これは外部のURLに対してStep Functionsに統合されたタスクでリクエストできます。これまでLambda関数などを経由する必要がありましたが、それが不要になります。単純にコードが減るのでバグも減ることが期待できますね。

次にテスト状態APIですが、これまで定義したステートをテストするには、いちいちステートマシン全体を実行する必要がありました。さらに確認したいステートがワークフローの深いところにあると時間もかかりますし、依存関係の把握も面倒です。今回テスト機能が追加されたことで、指定したステートを単独で実行して挙動を確認できます。これはとてもうれしいアップデートですね!

やってみた

それではさっそく試してみましょう。

HTTPエンドポイントを使用する上での注意点として、必ず認証の設定が必要です。認証はEventBridgeの接続リソースを定義し、Step Functionsからをそれを参照して使用します。接続リソースはBasic認証、OAuth、APIキーといった認証に対応しています。今回は認証の必要ないAPIをたたくのですが、その場合でも接続リソースの指定は必須となります。そのため事前にダミーの認証設定を作成します。

まずEventBridgeのページにアクセスし、「APIの送信先」を選択します。タブが切り替えられるので「接続」にします。「作成」ボタンを押して新規に作成していきます。

「接続名」はtest-connとしました。任意の名前でOKです。

次に認証の設定です。実際には必要ない情報ですが、「認証タイプ」を「APIキー」とし、名前と値に適当な値を入力します。

「作成」ボタンを押せば完了です。

作成できたら、次にステートマシンを作成しましょう。新規に作成し、ワークフロースタジオを操作していきます。左のアクション一覧に「HTTP Endpoint Call third-party API」というステートがあるので、これをドラッグ&ドロップします。

次に各パラメーターを埋めていきましょう。今回はzipcloudさんの郵便番号検索APIを呼び出してみます。それぞれ次のパラメーターを指定します。

  • APIエンドポイント
    • https://zipcloud.ibsnet.co.jp/api/search
  • メソッド
    • GET
  • Authentication
    • test-conn

このAPIはボディではなく、クエリパラメーターとして検索する郵便番号を指定します。今回は次のように指定しました。実用性を考えるなら、ハードコーディングではなく、前のステートから受け取るようにすべきでしょう。

{
  "zipcode": "1050003"
}

ここまで指定できたら、一度ステートマシンを保存します。ステートマシンの実行にはIAMロールが必要で、HTTPエンドポイントの実行にもいくつかの権限が必要です。ワークフロースタジオではIAMロールを自動作成してくれますので、まずはそれに任せます。

作成されたIAMロールを確認すると、次のような権限が設定されていることを確認できます。こちらはEventBridgeの接続リソースへのアクセス権限。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Sid": "RetrieveConnectionCredentials1",
            "Action": [
                "events:RetrieveConnectionCredentials"
            ],
            "Resource": [
                "arn:aws:events:ap-northeast-1:123456789012:connection/test-conn/*"
            ]
        },
        {
            "Effect": "Allow",
            "Sid": "GetAndDescribeSecretValue1",
            "Action": [
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret"
            ],
            "Resource": [
                "arn:aws:secretsmanager:ap-northeast-1:123456789012:secret:events!connection/test-conn/*"
            ]
        }
    ]
}

こちらはHTTPエンドポイントを実行するための権限。

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Sid": "InvokeHttpEndpoint1",
            "Action": [
                "states:InvokeHTTPEndpoint"
            ],
            "Resource": [
                "arn:aws:states:ap-northeast-1:123456789012:stateMachine:*"
            ],
            "Condition": {
                "StringEquals": {
                    "states:HTTPEndpoint": [
                        "https://zipcloud.ibsnet.co.jp/api/search"
                    ],
                    "states:HTTPMethod": [
                        "GET"
                    ]
                }
            }
        }
    ]
}

手動でIAMロールなどを作成する場合、これらの権限の付与し忘れに注意しましょう。

IAMロールが確認できたら、あらためてワークフロースタジオでステートマシンの編集画面を開きます。右上に「テスト状態」ボタンがあるので、これをクリックします。

ステートをテストする画面が開きます。「テストを開始」ボタンをクリックするとテストできます。その際「状態の入力」を指定することで、実際に渡される値を想定してテストできます。今回は空のまま実行しました。

右の「出力」に実行結果が出ました。きちんとAPIからのレスポンスが確認できました。

まとめ

Step Functionsのアップデートをお届けしました。外部のAPIをたたくのが簡単になりました!また、これまでステートを単体で実行する手段がありませんでしたが、今回追加されたことで開発が楽になりそうですね!