API Gateway を呼び出す Step Functions でステートマシン保存失敗を回避するには

2023.10.24

困っていた内容

API Gateway を呼び出す Step Functions の構築で、ステートマシンの保存が失敗しました。
HTTP ヘッダーの値が原因のようですが、Lambda オーソライザーのサンプル値(secretToken)でも失敗します。 ステートマシンの保存に成功するにはどうしたら良いでしょうか?

エラー内容

ステートマシンの定義に Amazon ステート言語エラーがあります。エラーを修正して続行してください。
The 'Headers' field contains unsupported values: [authorization] /States/API Gateway Invoke/Parameters 
For more information, see Amazon States Language

どう対応すればいいの?

HTTP ヘッダー名(例:Authorization)を確認してください。

Step Functions の API Gateway 呼び出しでは追加の HTTP ヘッダーが設定可能です。ただし、2023年10月時点で、次の HTTP ヘッダー名はセキュリティの理由から設定できません。

Step Functions を使用して API Gateway を呼び出し - AWS Step Functions

  • X-Forwarded、X-Amz、またはX-Amznのプレフィックスが付いているキー。
  • Authorization
  • Connection
  • Content-md5
  • Expect
  • Host
  • Max-Forwards
  • Proxy-Authenticate
  • Server
  • TE
  • Transfer-Encoding
  • Trailer
  • Upgrade
  • Via
  • Www-Authenticate

そのため、使用できない HTTP ヘッダー名を定義していないか確認し、必要に応じて HTTP ヘッダー名を変更してください。

なお、HTTP API の Lambda オーソライザーではドキュメントのサンプルコードで構築した場合、ヘッダー名にAuthorizationを使用しますが、ヘッダー名は変更できます。

変更する際は、API Gateway の ID ソースと

Lambda のコード変更(13行目)の二つが必要ですので、ご注意ください。

export const handler = async(event) => {
    let response = {
        "isAuthorized": false,
        "context": {
            "stringKey": "value",
            "numberKey": 1,
            "booleanKey": true,
            "arrayKey": ["value1", "value2"],
            "mapKey": {"value1": "value2"}
        }
    };
    
    if (event.headers.hatoauth === "secretToken") {
        response = {
            "isAuthorized": true,
            "context": {
                "stringKey": "value",
                "numberKey": 1,
                "booleanKey": true,
                "arrayKey": ["value1", "value2"],
                "mapKey": {"value1": "value2"}
            }
        };
    }

    return response;

};

参考資料