Step Functions ワークフローで HTTPS API を呼び出す
HTTP タスクは Task ワークフロー状態 ステートの一種で、ワークフロー内から HTTPS API を呼び出す際に使用できます。API は、Stripe や Salesforce などのサードパーティ SaaS アプリのようなパブリック API でもかまいません。また、Amazon Virtual Private Cloud 内の HTTPS ベースのアプリケーションなど、プライベート API を呼び出すこともできます。
認可とネットワーク接続のために、HTTP タスクでは EventBridge 接続が必要です。
HTTPS API を呼び出すには、Task ステートと arn:aws:states:::http:invoke リソースを使用します。次に、API の URL、使用するメソッド、接続の詳細など、API エンドポイント設定の詳細を指定します。
Workflow Studio を使用して HTTP タスクを含むステートマシンを構築すると、Workflow Studio は HTTP タスクの IAM ポリシーを含む実行ロールを自動的に生成します。詳細については、「Workflow Studio で HTTP タスクをテストするためのロール」を参照してください。
注記
HTTP タスクは現在、プライベート API を使用する場合、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 での認可に必要なヘッダー、本文、およびクエリパラメータを含めることもできます。HTTP API を呼び出す HTTP タスクには、接続 ARN を含める必要があります。
接続を作成すると、EventBridge は AWS Secrets Manager にシークレットを作成します。このシークレットでは、EventBridge は接続パラメータと認可パラメータを暗号化された形式で保存します。接続を正常に作成または更新するには、Secrets Manager を使用するアクセス許可を持つ AWS アカウント を使用する必要があります。ステートマシンが EventBridge 接続にアクセスするために必要な IAM アクセス許可の詳細については、「HTTP タスクを実行するための IAM アクセス許可」を参照してください。
次の図では、Step Functions が EventBridge 接続を使用して HTTPS API コールの認可を処理する方法を示しています。EventBridge 接続では、HTTPS API プロバイダーの認証情報を管理します。EventBridge は、Secrets Manager にシークレットを作成し、接続と認可のパラメータを暗号化して保存します。プライベート API の場合、EventBridge ではネットワーク接続の設定も保存します。
接続のタイムアウト
HTTP タスクのリクエストは 60 秒後にタイムアウトします。
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:region:account-id: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 に関する情報を提供する
ApiEndpoint、Method、およびConnectionArnフィールドが含まれます。ParametersにはHeadersや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(条件付き)-
パブリックとプライベートの両方の HTTPS API コールに、
AuthenticationではなくInvocationConfigを使用することをお勧めします。既存の
Authentication参照は下位互換性のために保持されています。このフィールド内では、ApiEndpointに接続するための Amazon EventBridge の接続リソースを指定するConnectionArnフィールドを指定する必要があります。 InvocationConfig(条件付き)-
パブリックとプライベートの両方の HTTPS API コールの認可とネットワーク接続設定が含まれます。
Step Functions は Amazon EventBridge の接続リソースを使用して、指定された
ApiEndpointの接続を処理します。詳細については、「Amazon EventBridge ユーザーガイド」の「プライベート API への接続」を参照してください。ConnectionArn(必須)-
EventBridge 接続 ARN を指定します。
HTTP タスクには、API プロバイダーの認証情報を安全に管理する EventBridge 接続が必要です。接続には、HTTPS API の認可に使用する認可タイプと認証情報を指定します。プライベート API の場合、接続にはセキュアなポイントツーポイントのネットワーク接続も定義します。接続を使用すると、API キーなどのシークレットをステートマシン定義にハードコーディングすることを避けることができます。接続では、
Headers、QueryParameters、RequestBodyパラメータを指定することもできます。詳細については、「HTTP タスクの接続」を参照してください。
次の例では、HTTP タスク内の
InvocationConfigの形式を示しています。"InvocationConfig": { "ConnectionArn": "arn:aws:events:region:account-id: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-Agent、Range、Hostヘッダーを設定します。Step Functions は呼び出している API に基づいてHostヘッダーの値を設定します。以下は、ヘッダーの例です。User-Agent: Amazon|StepFunctions|HttpInvoke|, Range: bytes=0-262144, Host: api.stripe.comregionHTTP タスク定義では以下のヘッダーは使用できません。これらのヘッダーを使用すると、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
-
Origin
-
Pragma
-
Proxy-Authorization
-
Referer
-
サーバー
-
TE
-
Trailer
-
Transfer-Encoding
-
アップグレード
-
Via
-
警告
-
x-forwarded-*
-
x-amz-*
-
x-amzn-*
-
QueryParameters(オプション)-
API URL の末尾にキーと値のペアを挿入します。クエリパラメータは、文字列、JSON 配列、または JSON オブジェクトとして指定できます。Step Functions は HTTPS API を呼び出すとき、クエリパラメータを自動的に 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-
RequestBodyEncodingをURL_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" }実行時にこれらの
CardNumberとExpiryDateの値をリクエスト本文で使用するには、リクエスト本文に次の 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 タスク定義のデータを指定できます。このデータには Headers、QueryParameters、および RequestBody パラメータが含まれます。Step Functions は、リクエスト本文が文字列で接続本文のパラメータが空でない場合を除き、HTTPS API を呼び出す前に、リクエスト本文と接続本文パラメータをマージします。この場合、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 接続の両方でRequestBodyのModeフィールドを指定したとします。Step Functions は接続で指定したModeフィールド値を使用します。 -
リクエスト本文を JSON オブジェクトではなく文字列として指定し、EventBridge 接続にリクエスト本文も含まれている場合、Step Functions はこの 2 つの場所で指定されたリクエスト本文をマージすることはできません。HTTP タスクは
States.Runtimeエラーで失敗します。
リクエスト本文のマージが完了したら、Step Functions はすべての変換を適用してリクエスト本文をシリアル化します。
-
次の例では、HTTP タスクと EventBridge 接続の両方に Headers、QueryParameters、および 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:region:account-id: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 タスクの値を接続の値で上書きします。次のコードスニペットは、Step Functions が HTTPS API に送信する 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|region
{"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 フィールドを指定すると、Step Functions は HTTPS API を呼び出す前に JSON リクエスト本文を form-urlencoded リクエスト本文に変換します。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:InvokeHTTPEndpointevents:RetrieveConnectionCredentialssecretsmanager:GetSecretValuesecretsmanager: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::stateMachine:123456789012myStateMachine", "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::connection/123456789012oauth_connection/aeabd89e-d39c-4181-9486-9fe03e6f286a" }, { "Sid": "Statement3", "Effect": "Allow", "Action": [ "secretsmanager:GetSecretValue", "secretsmanager:DescribeSecret" ], "Resource": "arn:aws:secretsmanager:*:*:secret:events!connection/*" } ] }
HTTP タスク例
次のステートマシン定義は Headers、QueryParameters、Transform、および 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:region:account-id: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|region
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 コンソールでテストする
-
Step Functions コンソール
を開きます。 -
[ステートマシンの作成] を選択してステートマシンの作成を開始するか、HTTP タスクを含む既存のステートマシンを選択します。
既存のステートマシンでタスクをテストする場合は、ステップ 4 を参照してください。
-
デザインモード の Workflow Studio で、HTTP タスクを視覚的に設定します。または、コードモードを選択して、ローカル開発環境からステートマシン定義をコピーして貼り付けます。
-
デザインモードで、Workflow Studio の インスペクターパネル パネルで [ステートをテスト] を選択します。
-
[ステートをテスト] ダイアログボックスで、次の操作を行います。
-
[実行ロール] では、ステートをテストする実行ロールを選択します。HTTP タスクに必要なアクセス許可を持つロールがない場合は、ロールを作成するために「Workflow Studio で HTTP タスクをテストするためのロール」を参照してください。
-
(オプション) 選択したステートでテストに必要な JSON 入力を入力します。
-
[検査レベル] は、デフォルトの [INFO] のままにします。このレベルには、API 呼び出しのステータスと状態出力が表示されます。API レスポンスをすばやく確認するのに便利です。
-
[テストを開始] を選択します。
-
テストが成功すると、[ステートをテスト] ダイアログボックスの右側にステートの出力が表示されます。テストに失敗すると、エラーが表示されます。
ダイアログボックスの [ステートの詳細] タブには、ステート定義と EventBridge 接続へのリンクが表示されます。
-
[検査レベル] を [TRACE] に変更します。このレベルは未加工の HTTP リクエストと応答を表示し、ヘッダー、クエリパラメータ、その他の API 固有の詳細を検証するのに役立ちます。
-
[シークレットを公開] チェックボックスを選択します。この設定を [TRACE] と組み合わせると、API キーなど、EventBridge 接続によって挿入される機密データを確認できます。コンソールへのアクセスに使用する IAM ユーザー ID には、
states:RevealSecretsアクションを実行するアクセス許可が必要です。このアクセス許可がない場合、Step Functions はテストの開始時にアクセス拒否エラーをスローします。これらのstates:RevealSecretsアクセス許可を付与する IAM ポリシーの例については、「TestState API を使用するための IAM アクセス許可」を参照してください。次の図は、HTTP タスクが成功するかどうかのテストを示しています。このステートの [検査レベル] は [TRACE] に設定されています。次の画像の [HTTP リクエストおよびレスポンス] タブには、HTTPS API コールの結果が表示されます。
-
[テストを開始] を選択します。
-
テストが成功すると、[HTTP リクエストおよびレスポンス] タブに HTTP の詳細が表示されます。
-
サポートされていない HTTP タスクレスポンス
返された応答が次のいずれかの条件に当てはまる場合、HTTP タスクは States.Runtime エラーで失敗します。
-
レスポンスには、
application/octet-stream、image/*、video/*、またはaudio/*というコンテンツタイプヘッダーが含まれています。 -
応答は有効な文字列として読み取ることができません。例えば、バイナリデータや画像データなどです。
接続エラー
ワークフロー実行の進行中、指定された API への接続時に EventBridge で問題が発生した場合、Step Functions はワークフローでエラーをスローします。接続エラーには Events.ConnectionResource. というプレフィックスが付きます。
これらのエラーには以下が含まれます。
Events.ConnectionResource.InvalidConnectionStateEvents.ConnectionResource.InvalidPrivateConnectionStateEvents.ConnectionResource.AccessDeniedEvents.ConnectionResource.ResourceNotFoundEvents.ConnectionResource.AuthInProgressEvents.ConnectionResource.ConcurrentModificationEvents.ConnectionResource.InternalError