StepFunctionsを使ってワークフローでは、Third PartyのAPIを実行できるステート(HTTP Endpoint ステート)が用意されています。
このステートの仕様でハマったところがあるのでまとめ。
StepFunctionsとは?
まずはAWSより引用
AWS Step Functions は、分散アプリケーションの構築、プロセスの自動化、マイクロサービスのオーケストレーション、データおよび機械学習 (ML) パイプラインの作成に役立つビジュアルワークフローサービスです。
https://docs.aws.amazon.com/ja_jp/step-functions/latest/dg/welcome.html
自分なりの解釈を交えて簡単に言い換えると、複数のLambda関数などで構成されるアプリケーションがあった時、
「どういう順番でLambda関数を動作させるのか」や「Lambda関数の実行条件に関する条件分岐」といった制御を含む分散アプリケーションのワークフローを視覚的に実装できるサービスとなります。
ここで作成したワークフローにあたるリソースは「ステートマシン」というリソースとしてAWS上に作成されます。
StepFunctionsで定義されるステートマシンを構成する要素のことを「状態(ステート)」と呼びます。
詳細は過去のブログでも紹介しています。
https://frafra-tekuteku.com/?p=14
HTTP Endpoint ステート
StepFunctionsには外部のAPIと連携するための便利なステートである「HTTP Endpoint ステート」が用意されています。
このステートの使用のためには別でEventBridge Connectionリソースの作成やStepFunctionsのIAM Roleに適切なパーミッションを与える必要があります。詳細は公式ドキュメントを参照ください。
An HTTP Task requires an EventBridge connection, which securely manages the authentication credentials of an API provider. A connection specifies the authorization type and credentials to use for authorizing a third-party API.
https://docs.aws.amazon.com/step-functions/latest/dg/connect-third-party-apis.html#http-task-authenticationYour state machine execution role must have the states:InvokeHTTPEndpoint, events:RetrieveConnectionCredentials, secretsmanager:GetSecretValue, and secretsmanager:DescribeSecret permissions for an HTTP Task to call a third-party API.
https://docs.aws.amazon.com/step-functions/latest/dg/connect-third-party-apis.html#connect-http-task-permissions
設定画面はこんな感じ。HTTPのリクエストメソッドやリクエストbodyなどの情報を設定することで、API連携を簡単に行うことができます。
もちろんRetryポリシーなども設定できるので、LambdaなどにHTTP Requestなどの実装をしなくて済むというわけですね!
実際に使ってみた
このHTTP Endpointステートを使用して、PagerDutyのAPIを実行してみます。
実行するAPIリクエストはこちらのブログで使用した内容をそのまま使用します。
すると、、、
“The ‘Headers’ field contains unsupported values: [from]”というエラーが返されてしまいました。。。
エラーの内容でググってみると、公式ドキュメントの以下の記述に辿り着きました。
You can’t use the following headers in your HTTP Task definition. If you use these headers, the HTTP Task fails with the
States.Runtime
error.
どうやら使用できないヘッダーが存在するとのこと、この一覧を探してみると、、、
探してみるとありましたね、”From”ヘッダー。
どうも使えないヘッダーは割とたくさんあるようです。実装する際には、APIで必須のヘッダーが含まれていないかどうかを事前に確認する必要があるようです^^;
結局、PagerDutyへのAPI連携はLambdaを作成して実装しましたw
まとめ
StepFunctionsにはAPI連携に便利なHTTP Endpointステートがある。
しかし、仕様上利用できないヘッダーもたくさんあるので実装前に確認が必要。
参考になれば幸いです。
コメントを残す