Step APIs を呼び出す - AWS Step Functions

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Step APIs を呼び出す

HTTP タスクは、ワークフローで HTTPS API を呼び出すことができるTask ワークフロー状態状態の一種です。API は、Stripe や Salesforce などのサードパーティー SaaS アプリケーションなど、パブリックにすることができます。Amazon Virtual Private Cloud で HTTPS ベースのアプリケーションなどのプライベート API を呼び出すこともできます。

認可とネットワーク接続の場合、HTTP タスクには EventBridge 接続が必要です。

HTTPS API を呼び出すには、 arn:aws:states:::http:invokeリソースでタスク状態を使用します。次に、API URL、使用するメソッド、接続の詳細など、API エンドポイント設定の詳細を指定します。

Workflow Studio を使用して HTTP タスクを含むステートマシンを構築すると、Workflow Studio は HTTP タスクの IAM ポリシーを含む実行ロールを自動的に生成します。詳細については、「Workflow Studio で HTTP タスクをテストするためのロール」を参照してください。

注記

HTTP タスクは現在、プライベート APIs を使用する場合、HTTPS エンドポイントのパブリックに信頼された証明書を持つパブリックドメイン名のみをサポートしています。HTTP タスクは相互 TLS (mTLS) をサポートしていません。

HTTP タスクの接続

HTTP タスクには、API プロバイダーの認証情報を安全に管理する EventBridge 接続が必要です。接続は、特定の API への接続に使用する認可方法と認証情報を定義します。Amazon Virtual Private Cloud (Amazon VPC) のプライベート API などのプライベート API に接続する場合は、 接続を使用して、安全なpoint-to-pointネットワーク接続を定義することもできます。接続を使用すると、API キーなどのシークレットをステートマシン定義にハードコーディングすることを避けることができます。EventBridge 接続は、Basic、OAuth、API キーの各認可スキームをサポートしています。

EventBridge 接続を作成するときは、認可とネットワーク接続の詳細を指定します。API での認可に必要なヘッダー、本文、およびクエリパラメータを含めることもできます。HTTPS API を呼び出す HTTP タスクには、接続 ARN を含める必要があります。

接続を作成すると、EventBridge は にシークレットを作成します AWS Secrets Manager。このシークレットでは、EventBridge は接続パラメータと認可パラメータを暗号化された形式で保存します。接続を正常に作成または更新するには、Secrets Manager を使用するアクセス許可 AWS アカウント を持つ を使用する必要があります。ステートマシンが EventBridge 接続にアクセスするために必要な IAM アクセス許可の詳細については、「HTTP タスクを実行するための IAM アクセス許可」を参照してください。

次の図は、 が EventBridge接続を使用して HTTPS API コールの認可Step Functionsを処理する方法を示しています。EventBridge 接続は HTTPS API プロバイダーの認証情報を管理します。 は にシークレットEventBridgeを作成しSecrets Manager、接続パラメータと認可パラメータを暗号化された形式で保存します。プライベート APIs、EventBridge はネットワーク接続設定も保存します。

接続のタイムアウト

HTTP タスクリクエストは 60 秒後にタイムアウトします。

Step Functions は、HTTPS エンドポイントへの呼び出しに EventBridge 接続の認可とネットワーク設定を使用します。

HTTP タスク定義

ASL 定義は、http:invoke リソースを含む HTTP タスクを表します。次の HTTP タスク定義は、すべてのお客様のリストを返すパブリック Stripe API を呼び出します。

"Call HTTPS API": { "Type": "Task", "Resource": "arn:aws:states:::http:invoke", "Parameters": { "ApiEndpoint": "https://api.stripe.com/v1/customers", "Authentication": { "ConnectionArn": "arn:aws:events:us-east-2:123456789012:connection/Stripe/81210c42-8af1-456b-9c4a-6ff02fc664ac" }, "Method": "GET" }, "End": true }

HTTP タスクフィールド

HTTP タスクの定義には以下のフィールドが含まれます。

Resource (必須)

タスクタイプを指定するには、Resource フィールドにで ARN を指定します。HTTP タスクの場合、Resource フィールドを次のように指定します。

"Resource": "arn:aws:states:::http:invoke"
Parameters (必須)

呼び出す HTTPS API に関する情報を提供する ApiEndpointMethod、および ConnectionArnフィールドが含まれます。 には、 Headersや などのオプションフィールドParametersも含まれていますQueryParameters

Parameters フィールドの Parameters のように、静的 JSON 構文と JsONPath 構文の組み合わせを指定できます。詳細については、「Step Functions でサービス API にパラメータを渡す」を参照してください。

EventBridge 接続を指定するには、 Authentication または InvocationConfigフィールドを使用します。

ApiEndpoint (必須)

呼び出す HTTPS API の URL を指定します。URL にクエリパラメータを追加するには、QueryParameters フィールドを使用します。次の例は、Stripe API を呼び出して、すべての顧客のリストを取得する方法を示しています。

"ApiEndpoint":"https://api.stripe.com/v1/customers"

JsonPath 構文を使用して参照パスを指定し、HTTPS API URL を含む JSON ノードを選択することもできます。例えば、特定の顧客 ID を使用して Stripe の API のいずれかを呼び出す場合を想定します。次のようなステートの入力を指定したとします。

{ "customer_id": "1234567890", "name": "John Doe" }

Stripe API を使用してこの顧客 ID の詳細を取得するには、次の例に示されているように、ApiEndpoint を指定します。この例では、組み込み関数と参照パスを使用しています。

"ApiEndpoint.$":"States.Format('https://api.stripe.com/v1/customers/{}', $.customer_id)"

実行時に、Step Functions は以下のように ApiEndpoint の値を解決します。

https://api.stripe.com/v1/customers/1234567890
Method (必須)

HTTPS API の呼び出しに使用する HTTP メソッドを指定します。HTTP タスクでは、以下のいずれかのメソッドを指定できます。GET、POST、PUT、DELETE、PATCH、OPTIONS、または HEAD。

例えば、GET メソッドを使用するには、Method フィールドを次のように指定します。

"Method": "GET"

参照パスを使用して実行時にメソッドを指定することもできます。例えば、"Method.$": "$.myHTTPMethod" と指定します。

Authentication (条件付き)

Authentication または を指定する必要がありますInvocationConfig

パブリック HTTPS API コールを認証する方法を指定する ConnectionArnフィールドが含まれます。 は、 の接続リソースApiEndpointを使用して指定された の認証Step FunctionsをサポートしますAmazon EventBridge。

ConnectionArn (必須)

EventBridge 接続 ARN を指定します。

HTTP タスクには、API プロバイダーの認可認証情報を安全に管理する EventBridge 接続が必要です。接続は、HTTPS API の認可に使用する認可タイプと認証情報を指定します。接続を使用すると、API キーなどのシークレットをステートマシン定義にハードコーディングすることを避けることができます。接続では、HeadersQueryParametersRequestBody パラメータを指定することもできます。

詳細については、「HTTP タスクの接続」を参照してください。

次の例は、HTTP タスク定義で Authentication フィールドを指定する方法を示しています。

"Authentication": { "ConnectionArn": "arn:aws:events:us-east-2:123456789012:connection/Stripe/81210c42-8af1-456b-9c4a-6ff02fc664ac" }
InvocationConfig (条件付き)

Authentication または を指定する必要がありますInvocationConfig

プライベート HTTPS API コールの認可とネットワーク接続の設定が含まれます。 は、 の接続リソースApiEndpointを使用して指定された の接続Step FunctionsをサポートしますAmazon EventBridge。詳細については、「Amazon EventBridge ユーザーガイド」の「プライベート APIs」を参照してください。

ConnectionArn (必須)

EventBridge 接続 ARN を指定します。

HTTP タスクには、API プロバイダーの認可認証情報を安全に管理する EventBridge 接続が必要です。接続は、HTTPS API の認可に使用する認可タイプと認証情報を指定します。プライベート APIs、接続は安全なpoint-to-pointネットワーク接続も定義します。接続を使用すると、API キーなどのシークレットをステートマシン定義にハードコーディングすることを避けることができます。接続では、HeadersQueryParametersRequestBody パラメータを指定することもできます。

詳細については、「HTTP タスクの接続」を参照してください。

次の例は、HTTP タスク定義で InvocationConfigフィールドを指定する方法を示しています。

"InvocationConfig": { "ConnectionArn": "arn:aws:events:us-east-2:123456789012:connection/connection-id" }
Headers (オプション)

API エンドポイントに追加のコンテキストとメタデータを提供します。ヘッダーは文字列または JSON 配列として指定できます。

ヘッダーは、EventBridge 接続と HTTP タスクの Headers フィールドで指定できます。API プロバイダへの認証情報を Headers フィールドに入力しないことをお勧めします。これらの情報は、EventBridge 接続に含めることをお勧めします。

Step Functions は EventBridge 接続で指定したヘッダーを HTTP タスク定義で指定したヘッダーに追加します。定義と接続に同じヘッダーキーが存在する場合、Step Functions はそれらのヘッダーに EventBridge 接続で指定された対応する値を使用します。Step Functions がデータマージを実行する方法の詳細については、「EventBridge 接続データと HTTP タスク定義データをマージする」を参照してください。

次の例では、HTTPS API コールに含まれるヘッダーを指定します: content-type

"Headers": { "content-type": "application/json" }

参照パスを使用して実行時にヘッダーを指定することもできます。例えば、"Headers.$": "$.myHTTPHeaders" と指定します。

Step Functions は、User-AgentRangeHost ヘッダーを設定します。Step Functions は呼び出している API に基づいて Host ヘッダーの値を設定します。以下は、ヘッダーの例です。

User-Agent: Amazon|StepFunctions|HttpInvoke|us-east-1, Range: bytes=0-262144, Host: api.stripe.com

HTTP タスク定義では以下のヘッダーは使用できません。これらのヘッダーを使用すると、HTTP タスクは States.Runtime エラーで失敗します。

  • A-IM

  • Accept-Charset

  • Accept-Datetime

  • Accept-Encoding

  • Cache-Control

  • 接続

  • Content-Encoding

  • Content−MD5

  • 日付

  • Expect

  • Forwarded

  • From

  • ホスト

  • HTTP2-Settings

  • If-Match

  • If-Modified-Since

  • If-None-Match

  • If-Range

  • If-Unmodified-Since

  • Max-Forwards

  • オリジン

  • Pragma

  • Proxy-Authorization

  • リファラー

  • [Server] (サーバー)

  • TE

  • Trailer

  • Transfer-Encoding

  • アップグレード

  • Via

  • 警告

  • x-forwarded-*

  • x-amz-*

  • x-amzn-*

QueryParameters (オプション)

API URL の末尾にキーと値のペアを挿入します。クエリパラメータは、文字列、JSON 配列、または JSON オブジェクトとして指定できます。 は、HTTPS API を呼び出すときにクエリパラメータStep Functionsを自動的に URL エンコードします。

例えば、Stripe API を呼び出して、取引を米ドル (USD) で行っている顧客を検索したい場合を想定します。ステート入力として以下の QueryParameters を指定したとします。

"QueryParameters": { "currency": "usd" }

実行時に、Step Functions は次のように QueryParameters を API URL に追加します。

https://api.stripe.com/v1/customers/search?currency=usd

参照パスを使用して実行時にクエリパラメータを指定することもできます。例えば、"QueryParameters.$": "$.myQueryParameters" と指定します。

EventBridge 接続でクエリパラメータを指定した場合、Step Functions はこれらのクエリパラメータを HTTP タスク定義で指定するクエリパラメータに追加します。定義と接続に同じクエリパラメータキーが存在する場合、Step Functions はそれらのヘッダーに EventBridge 接続で指定されている対応する値を使用します。Step Functions がデータマージを実行する方法の詳細については、「EventBridge 接続データと HTTP タスク定義データをマージする」を参照してください。

Transform (オプション)

RequestBodyEncoding および RequestEncodingOptions フィールドが含まれます。デフォルトでは、Step Functions はリクエスト本文を JSON データとして API エンドポイントに送信します。

API プロバイダーが form-urlencoded リクエスト本文を受け入れる場合は、Transform フィールドを使用してリクエスト本文の URL エンコーディングを指定します。また、content-type ヘッダーを application/x-www-form-urlencoded として指定する必要があります。Step Functions は、リクエスト本文を自動的に URL エンコードします。

RequestBodyEncoding

リクエスト本文の URL エンコーディングを指定します。値は NONE または URL_ENCODED のいずれかを指定できます。

  • NONE — HTTP リクエスト本文は、RequestBody フィールドのシリアル化された JSON になります。これは、デフォルト値です。

  • URL_ENCODED — HTTP リクエスト本文は、RequestBody フィールドの URL エンコードされたフォームデータになります。

RequestEncodingOptions

RequestBodyEncodingURL_ENCODED に設定した場合、リクエスト本文の配列に使用するエンコーディングオプションを決定します。

Step Functions では、次の配列エンコーディングオプションをサポートします。これらのオプションと例の詳細については、「リクエスト本文に URL エンコーディングを適用します。」を参照してください。

  • INDICES — 配列要素のインデックス値を使用して配列をエンコードします。デフォルトでは、Step Functions はこのエンコーディングオプションを使用します。

  • REPEAT — 配列内の各項目に対してキーを繰り返します。

  • COMMAS — キー内のすべての値を、カンマで区切られた値のリストとしてエンコードします。

  • BRACKETS — 配列内の各項目についてキーを繰り返し、そのキーに括弧 [] を追加して配列であることを示します。

次の例では、リクエスト本文データに URL エンコーディングを設定します。また、リクエスト本文の配列に COMMAS エンコーディングオプションを使用するように指定します。

"Transform": { "RequestBodyEncoding": "URL_ENCODED", "RequestEncodingOptions": { "ArrayFormat": "COMMAS" } }
RequestBody (オプション)

ステート入力で指定した JSON データを受け入れます。RequestBody では、静的 JSON 構文と JsONPath 構文の組み合わせを指定できます。例えば、以下の入力を使用するとします。

{ "CardNumber": "1234567890", "ExpiryDate": "09/25" }

実行時にこれらの CardNumberExpiryDate の値をリクエスト本文で使用するには、リクエスト本文に次の JSON データを指定できます。

"RequestBody": { "Card": { "Number.$": "$.CardNumber", "Expiry.$": "$.ExpiryDate", "Name": "John Doe", "Address": "123 Any Street, Any Town, USA" } }

呼び出す HTTPS API にform-urlencodedリクエスト本文が必要な場合は、リクエスト本文データに URL エンコードを指定する必要があります。詳細については、「リクエスト本文に URL エンコーディングを適用します。」を参照してください。

EventBridge 接続データと HTTP タスク定義データをマージする

HTTP タスクを呼び出すと、EventBridge 接続と HTTP タスク定義のデータを指定できます。このデータには HeadersQueryParameters、および RequestBody パラメータが含まれます。HTTPS API を呼び出す前に、Step Functions はリクエストボディが文字列で、接続ボディパラメータが空でない場合を除き、すべてのケースでリクエストボディを接続ボディパラメータとマージします。この場合、HTTP タスクは States.Runtime エラーで失敗します。

HTTP タスク定義と EventBridge 接続に重複するキーが指定されている場合、Step Functions は HTTP タスクの値を接続の値で上書きします。

次のリストは、HTTPS API を呼び出す前に がデータをStep Functionsマージする方法を示しています。

  • ヘッダー — Step Functions は接続で指定したヘッダーを HTTP タスクの Headers フィールドのヘッダーに追加します。ヘッダーキーが競合する場合、Step Functions はそのヘッダーに接続で指定された値を使用します。例えば、HTTP タスク定義と EventBridge 接続の両方で content-type ヘッダーを指定した場合、Step Functions は接続で指定された content-type ヘッダー値を使用します。

  • クエリパラメータ — Step Functions は接続で指定したクエリパラメータを HTTP タスクの QueryParameters フィールドのクエリパラメータに追加します。クエリパラメータキーが競合する場合は、Step Functions は接続で指定された値をクエリパラメータに使用します。例えば、HTTP タスク定義と EventBridge 接続の両方で maxItems クエリパラメータを指定した場合、Step Functions は接続で指定された maxItems クエリパラメータ値を使用します。

  • Body パラメータ

    • Step Functions は接続で指定されたすべてのリクエスト本文値を HTTP タスクの RequestBody フィールドのリクエスト本文に追加します。リクエスト本文のキーが競合する場合は、Step Functions は接続で指定された値をリクエスト本文として使用します。例えば、HTTP タスク定義と EventBridge 接続の両方で RequestBodyMode フィールドを指定したとします。Step Functions は接続で指定した Mode フィールド値を使用します。

    • リクエスト本文を JSON オブジェクトではなく文字列として指定し、EventBridge 接続にリクエスト本文も含まれている場合、Step Functions はこの 2 つの場所で指定されたリクエスト本文をマージすることはできません。HTTP タスクは States.Runtime エラーで失敗します。

    リクエスト本文のマージが完了したら、Step Functions はすべての変換を適用してリクエスト本文をシリアル化します。

次の例では、HTTP タスクと EventBridge 接続の両方に HeadersQueryParameters、および RequestBody フィールドを設定します。

HTTP タスク定義

{ "Comment": "Data merging example for HTTP Task and EventBridge connection", "StartAt": "ListCustomers", "States": { "ListCustomers": { "Type": "Task", "Resource": "arn:aws:states:::http:invoke", "Parameters": { "Authentication": { "ConnectionArn": "arn:aws:events:us-east-1:123456789012:connection/Example/81210c42-8af1-456b-9c4a-6ff02fc664ac" }, "ApiEndpoint": "https:/example.com/path", "Method": "GET", "Headers": { "Request-Id": "my_request_id", "Header-Param": "state_machine_header_param" }, "RequestBody": { "Job": "Software Engineer", "Company": "AnyCompany", "BodyParam": "state_machine_body_param" }, "QueryParameters": { "QueryParam": "state_machine_query_param" } } } } }

EventBridge 接続

{ "AuthorizationType": "API_KEY", "AuthParameters": { "ApiKeyAuthParameters": { "ApiKeyName": "ApiKey", "ApiKeyValue": "key_value" }, "InvocationHttpParameters": { "BodyParameters": [ { "Key": "BodyParam", "Value": "connection_body_param" } ], "HeaderParameters": [ { "Key": "Header-Param", "Value": "connection_header_param" } ], "QueryStringParameters": [ { "Key": "QueryParam", "Value": "connection_query_param" } ] } } }

この例では、HTTP タスクと EventBridge 接続に重複するキーが指定されています。そのため、Step Functions は HTTP タスクの値を接続の値で上書きします。次のコードスニペットは、 が HTTPS API Step Functionsに送信する HTTP リクエストを示しています。

POST /path?QueryParam=connection_query_param HTTP/1.1 Apikey: key_value Content-Length: 79 Content-Type: application/json; charset=UTF-8 Header-Param: connection_header_param Host: example.com Range: bytes=0-262144 Request-Id: my_request_id User-Agent: Amazon|StepFunctions|HttpInvoke|us-east-1 {"Job":"Software Engineer","Company":"AnyCompany","BodyParam":"connection_body_param"}

リクエスト本文に URL エンコーディングを適用します。

デフォルトでは、Step Functions はリクエスト本文を JSON データとして API エンドポイントに送信します。HTTPS API プロバイダーでform-urlencodedリクエストボディが必要な場合は、リクエストボディに URL エンコードを指定する必要があります。 Step Functions は、選択した URL エンコードオプションに基づいてリクエストボディを自動的に URL エンコードします。

URL エンコードは Transform を使用してフィールドを指定します。このフィールドには、リクエスト本文に URL エンコードを適用するかどうかを指定する RequestBodyEncoding フィールドが含まれます。RequestBodyEncoding フィールドを指定すると、 は HTTPS API を呼び出す前に JSON リクエスト本文をform-urlencodedリクエスト本文Step Functionsに変換します。URL でエンコードされたデータを受け入れる API は content-type ヘッダーを必要とするため、content-type ヘッダーも application/x-www-form-urlencoded として指定する必要があります。

リクエスト本文の配列をエンコードするために、Step Functions では以下の配列エンコードオプションが用意されています。

  • INDICES — 配列内の各項目についてキーを繰り返し、そのキーに括弧 [] を追加して配列であることを示します。この括弧には配列要素のインデックスが含まれます。インデックスを追加すると、配列要素の順序を指定しやすくなります。デフォルトでは、Step Functions はこのエンコーディングオプションを使用します。

    例えば、リクエスト本文に次の配列が含まれているとします。

    {"array": ["a","b","c","d"]}

    Step Functions はこの配列を次の文字列にエンコードします。

    array[0]=a&array[1]=b&array[2]=c&array[3]=d
  • REPEAT — 配列内の各項目に対してキーを繰り返します。

    例えば、リクエスト本文に次の配列が含まれているとします。

    {"array": ["a","b","c","d"]}

    Step Functions はこの配列を次の文字列にエンコードします。

    array=a&array=b&array=c&array=d
  • COMMAS — キー内のすべての値を、カンマで区切られた値のリストとしてエンコードします。

    例えば、リクエスト本文に次の配列が含まれているとします。

    {"array": ["a","b","c","d"]}

    Step Functions はこの配列を次の文字列にエンコードします。

    array=a,b,c,d
  • BRACKETS — 配列内の各項目についてキーを繰り返し、そのキーに括弧 [] を追加して配列であることを示します。

    例えば、リクエスト本文に次の配列が含まれているとします。

    {"array": ["a","b","c","d"]}

    Step Functions はこの配列を次の文字列にエンコードします。

    array[]=a&array[]=b&array[]=c&array[]=d

HTTP タスクを実行するための IAM アクセス許可

HTTP タスクが HTTPS API を呼び出すには、ステートマシンの実行ロールに次のアクセス許可が必要です。

  • states:InvokeHTTPEndpoint

  • events:RetrieveConnectionCredentials

  • secretsmanager:GetSecretValue

  • secretsmanager:DescribeSecret

次のIAMポリシーの例では、Stripe APIを呼び出すために必要な最小特権をステートマシンのロールに付与しています。このIAMポリシーは、Secrets Manager に保存されているこの接続のシークレットを含め、特定のEventBridge 接続にアクセスするアクセス許可をステートマシンのロールに付与します。

{ "Version": "2012-10-17", "Statement": [ { "Sid": "Statement1", "Effect": "Allow", "Action": "states:InvokeHTTPEndpoint", "Resource": "arn:aws:states:us-east-2:123456789012:stateMachine:myStateMachine", "Condition": { "StringEquals": { "states:HTTPMethod": "GET" }, "StringLike": { "states:HTTPEndpoint": "https://api.stripe.com/*" } } }, { "Sid": "Statement2", "Effect": "Allow", "Action": [ "events:RetrieveConnectionCredentials", ], "Resource": "arn:aws:events:us-east-2:123456789012:connection/oauth_connection/aeabd89e-d39c-4181-9486-9fe03e6f286a" }, { "Sid": "Statement3", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "arn:aws:secretsmanager:*:*:secret:events!connection/*" } ] }

HTTP タスク例

次のステートマシン定義は HeadersQueryParametersTransform、および RequestBody パラメータを含む HTTP タスクを示しています。HTTP タスクは Stripe API (https://api.stripe.com/v1/invoices) を呼び出して請求書を生成します。HTTP タスクでは、INDICES エンコーディングオプションを使用してリクエスト本文の URL エンコーディングも指定します。

EventBridge 接続が作成されていることを確認します。次の例は、BASIC 認証タイプを使用して作成された接続を示しています。

{ "Type": "BASIC", "AuthParameters": { "BasicAuthParameters": { "Password": "myPassword", "Username": "myUsername" }, } }

イタリック体のテキストを、リソース固有の情報に必ず置き換えてください。

{ "Comment": "A state machine that uses HTTP Task", "StartAt": "CreateInvoiceAPI", "States": { "CreateInvoiceAPI": { "Type": "Task", "Resource": "arn:aws:states:::http:invoke", "Parameters": { "ApiEndpoint": "https://api.stripe.com/v1/invoices", "Method": "POST", "Authentication": { "ConnectionArn": ""arn:aws:events:us-east-2:123456789012:connection/Stripe/81210c42-8af1-456b-9c4a-6ff02fc664ac" }, "Headers": { "Content-Type": "application/x-www-form-urlencoded" }, "RequestBody": { "customer.$": "$.customer_id", "description": "Monthly subscription", "metadata": { "order_details": "monthly report data" } }, "Transform": { "RequestBodyEncoding": "URL_ENCODED", "RequestEncodingOptions": { "ArrayFormat": "INDICES" } } }, "Retry": [ { "ErrorEquals": [ "States.Http.StatusCode.429", "States.Http.StatusCode.503", "States.Http.StatusCode.504", "States.Http.StatusCode.502" ], "BackoffRate": 2, "IntervalSeconds": 1, "MaxAttempts": 3, "JitterStrategy": "FULL" } ], "Catch": [ { "ErrorEquals": [ "States.Http.StatusCode.404", "States.Http.StatusCode.400", "States.Http.StatusCode.401", "States.Http.StatusCode.409", "States.Http.StatusCode.500" ], "Comment": "Handle all non 200 ", "Next": "HandleInvoiceFailure" } ], "End": true } } }

このステートマシンを実行するには、次の例のように顧客 ID を入力として指定します。

{ "customer_id": "1234567890" }

次の例は、Stripe API Step Functions に送信する HTTP リクエストを示しています。

POST /v1/invoices HTTP/1.1 Authorization: Basic <base64 of username and password> Content-Type: application/x-www-form-urlencoded Host: api.stripe.com Range: bytes=0-262144 Transfer-Encoding: chunked User-Agent: Amazon|StepFunctions|HttpInvoke|us-east-1 description=Monthly%20subscription&metadata%5Border_details%5D=monthly%20report%20data&customer=1234567890

HTTP タスクのテスト

TestState API は、コンソール、SDK、または を使用して AWS CLI HTTP タスクをテストできます。次の手順では、Step Functions コンソールを使用してを TestState API 実行する方法について説明します。HTTP タスクが期待どおりに動作するまで、API リクエスト、応答、認証の詳細を繰り返しテストできます。

HTTP タスクステートを Step Functions コンソールでテストする
  1. Step Functions コンソールを開きます。

  2. [ステートマシンの作成] を選択してステートマシンの作成を開始するか、HTTP タスクを含む既存のステートマシンを選択します。

    既存のステートマシンでタスクをテストする場合は、ステップ 4 を参照してください。

  3. デザインモード の Workflow Studio で、HTTP タスクを視覚的に設定します。または、コードモードを選択して、ローカル開発環境からステートマシン定義をコピーして貼り付けます。

  4. デザインモードで、Workflow Studio の インスペクターパネル パネルで [ステートをテスト] を選択します。

  5. [ステートをテスト] ダイアログボックスで、次の操作を行います。

    1. [実行ロール] では、ステートをテストする実行ロールを選択します。HTTP タスクに必要なアクセス許可を持つロールがない場合は、ロールを作成するために「Workflow Studio で HTTP タスクをテストするためのロール」を参照してください。

    2. (オプション) 選択したステートでテストに必要な JSON 入力を入力します。

    3. [検査レベル] は、デフォルトの [INFO] のままにします。このレベルには、API 呼び出しのステータスと状態出力が表示されます。API レスポンスをすばやく確認するのに便利です。

    4. [テストを開始] を選択します。

    5. テストが成功すると、[ステートをテスト] ダイアログボックスの右側にステートの出力が表示されます。テストに失敗すると、エラーが表示されます。

      ダイアログボックスの [ステートの詳細] タブには、ステート定義と EventBridge 接続へのリンクが表示されます。

    6. [検査レベル][TRACE] に変更します。このレベルは未加工の HTTP リクエストと応答を表示し、ヘッダー、クエリパラメータ、その他の API 固有の詳細を検証するのに役立ちます。

    7. [シークレットを公開] チェックボックスを選択します。この設定を [TRACE] と組み合わせると、API キーなど、EventBridge 接続によって挿入される機密データを確認できます。コンソールへのアクセスに使用する IAM ユーザー ID には、states:RevealSecrets アクションを実行するアクセス許可が必要です。このアクセス許可がない場合、Step Functions はテストの開始時にアクセス拒否エラーをスローします。これらの states:RevealSecrets アクセス許可を付与する IAM ポリシーの例については、「TestState API を使用するための IAM アクセス許可」を参照してください。

      次の図は、HTTP タスクが成功するかどうかのテストを示しています。このステートの [検査レベル][TRACE] に設定されています。次の図の HTTP リクエストとレスポンスタブは、HTTPS API コールの結果を示しています。

      [TRACE] レベルのテストに成功した、選択されたステートの出力。
    8. [テストを開始] を選択します。

    9. テストが成功すると、[HTTP リクエストおよびレスポンス] タブに HTTP の詳細が表示されます。

サポートされていない HTTP タスクレスポンス

返された応答が次のいずれかの条件に当てはまる場合、HTTP タスクは States.Runtime エラーで失敗します。

  • レスポンスには、application/octet-streamimage/*video/*、または audio/* というコンテンツタイプヘッダーが含まれています。

  • 応答は有効な文字列として読み取ることができません。例えば、バイナリデータや画像データなどです。

接続エラー

ワークフローの実行中に指定された API への接続中に EventBridge で問題が発生した場合、Step Functions はワークフローで エラーを発生させます。接続エラーには というプレフィックスが付きますEvents.ConnectionResource.

これらのエラーには以下が含まれます。

  • Events.ConnectionResource.InvalidConnectionState

  • Events.ConnectionResource.InvalidPrivateConnectionState

  • Events.ConnectionResource.AccessDenied

  • Events.ConnectionResource.ResourceNotFound

  • Events.ConnectionResource.AuthInProgress

  • Events.ConnectionResource.ConcurrentModification

  • Events.ConnectionResource.InternalError