AWS 用の外部関数のトラブルシューティング

このトピックでは、 AWS 用の外部関数のトラブルシューティング情報を提供します。

このトピックの内容:

プラットフォームに依存しないランタイムの問題

データ型の戻り値が期待される戻り値と一致しない

外部関数との間で引数を渡すときは、データ型が適切であることを確認してください。送信された値が受信中のデータ型に適合しない場合、値は切り捨てられるか、他の方法で破損する可能性があります。

詳細については、 外部関数の引数がリモートサービスにより解析される引数に対応していることを確認 をご参照ください。

エラー: 行番号の順序が正しくありません

考えられる原因:

各バッチ内で返される行番号は、0から始まる単調な昇順の整数でなければなりません。入力行番号もこのルールに従う必要があり、各出力行は対応する入力行と一致する必要があります。たとえば、出力行0の出力は、入力行0の入力に対応している必要があります。

考えられる解決策:

返される行番号が受け取った行番号と同じであること、および各出力値が対応する入力の行番号を使用していることを確認してください。これが機能しない場合は、入力された行番号が正しくないか、行を正しい順序で返さなかった可能性があります。

次に、出力行番号が0から始まり、1ずつ増加し、順番に並んでいることを確認します。

データの入力形式および出力形式の詳細については、 リモートサービスの入力および出力データ形式 をご参照ください。

エラー: 「JSON の解析エラー: 無効な応答」

考えられる原因:

最も可能性の高い原因は、リモートサービスから返された JSON (例: AWS Lambda関数)が正しく構築されていないことです。

考えられる解決策:

外部関数が受け取った入力行ごとに1つの内部配列を返し、配列中の配列1つを返すことを確認します。 Snowflakeが受信するデータ形式 で出力形式の説明を確認します。

エラー: 戻り値の形式がJSONではありません

考えられる原因:

考えられる原因の1つは、戻り値の中に二重引用符が含まれていることです。

考えられる解決策:

JSON文字列は二重引用符で区切られますが、ほとんどの場合、文字列自体は引用符で開始および終了できません。埋め込まれた二重引用符が正しくない場合は、削除してください。

エラー: 関数が間違った行数を受け取りました

考えられる原因:

リモートサービスが受信した行よりも多いか少ない行を返そうとしました。関数は名目上スカラーではあるものの、 event パラメーターの body フィールドに複数の行を受け取る可能性があり、受け取った行とまったく同じ数の行を返す必要があります。

考えられる解決策:

リモートサービスが、受信する行ごとに1行を返すことを確認します。

AWS 固有の問題

エンドポイントがLambdaプロキシ統合を使用しているときに、 API Gatewayがエラー502を返す

考えられる原因:

Lambda関数が、次の状態である可能性があります。

  • タイムアウト。

  • 例外をスロー。

  • その他の理由で失敗。

考えられる解決策:

Lambdaまたは API Gatewayログが利用できる場合は、それらを調べます。

Lambda関数のソースコードが利用できる場合は、Lambda関数のコードを分析してデバッグします。場合によっては、そのコードのコピーをより簡単なコンテキスト(AWS の外)で実行してデバッグを支援できる可能性があります。

Lambda関数に送信されるデータが、Lambda関数が予期する形式であることを確認します。小さくて単純なデータセットを送信して、それが成功するかどうかを確認することをお勧めします。

一度に大量のデータを送信していないことを確認します。

特にLambda関数が多くの CPU リソースを必要とする時や、Lambda関数自体が他のリモートサービスを呼び出してより多くの時間を必要とする時には、タイムアウトを増やすと問題が解決する場合があります。

Amazon AWS Lambda関数内の HTTP POST メソッドにあるリクエスト本文を読み取ることができません。

考えられる原因:

Lambdaプロキシ統合を有効にしていない可能性があります。

考えられる解決策:

Lambdaプロキシ統合を有効にします。

詳細については、 API Gatewayエンドポイントを作成する をご参照ください。

AWS_ROLE 引き受けエラー

メッセージの全文は次のとおりです。

SQL execution error: Error assuming AWS_ROLE. Please verify the role and externalId are
configured correctly in your AWS policy.
Copy
考えられる原因:
  • ロールの AWS 信頼関係ポリシーで、 AWS ARN が正しくありません。考えられる原因には、次が含まれます。

    • 設定しなかった。

    • 設定したが、Snowflakeの DESCRIBE INTEGRATION コマンドから確認できるユーザー ARN ではなく、 AWS ロールの ARN を使用(誤り)した。「API_AWS_ROLE_ARN」フィールドの値ではなく、ワークシートの API_AWS_IAM_USER_ARN フィールドにある値を使用していることを確認してください。

  • AWS 信頼関係ポリシーで std:ExternalId が誤っている。考えられる原因には、次が含まれます。

    • 設定しなかった。

    • API 統合オブジェクトを再作成した。API オブジェクトを再作成すると、その外部 ID が変更されます。

エラー: 403 '{"Message":"User: <ARN> is not authorized to perform: execute-api:Invoke"}'

メッセージの全文は次のとおりです。

Request failed for external function <function_name>.
Error: 403 '{"Message":"User: <ARN> is not authorized to perform: execute-api:Invoke on resource: <MethodRequestARN>"}'
Copy
考えられる原因:
  • API Gatewayリソースポリシーには次のものがあります。

    • 間違った IAM ロール ARN。

    • 間違って引き受けたロール。

    • 間違ったメソッドリクエスト ARN。

  • IAM ロールには適切なポリシーが添付されていません。

考えられる解決策:
  • Amazon API Gatewayエンドポイントの保護 のリソースポリシーテンプレートに従っていることを確認してください。具体的には、リソースポリシーについて次を確認してください。

    • <12-digit number> が、 Your AWS account ID という名前のワークシートのフィールドにある値に置き換えられている。

    • <external_function_role> が、ワークシートの New IAM Role Name フィールドにある値に置き換えられている。

    • Resource フィールドの method_request_ARN が、ワークシートの Method Request ARN フィールドにある値に置き換えられている。最後にスラッシュがないことを確認する。

  • IAM ロールに正しいアクセス許可ポリシーが添付されていることを確認する必要がある場合は、以下のステップに従って、ロールのアクセス許可ポリシーリストを見つけることができます。

    1. AWS で、Identity and Access Management(IAM)に移動し、ロールを選択します。

    2. ロールの Summary を表示します。

    3. Permissions タブをクリックします。

    4. 必要なポリシーが Permissions policies リストにあることを確認します。

  • 呼び出されるエンドポイントが、 API Gatewayに設定されているステージではなくリソースであることを確認してください。

エラー: 403 '{"Message":"User: anonymous is not authorized to perform: execute-api:Invoke"}'

メッセージの全文は次のとおりです。

Request failed for external function <function_name>.
Error: 403 '{"Message":"User: anonymous is not authorized to perform: execute-api:Invoke on resource: <MethodRequestARN>"}'
Copy
考えられる原因:

考えられる原因の1つとして、 API Gatewayの承認を構成しているときに、 Method Request にはリソースの AWS_IAM 認証が必要であることを指定しなかった可能性があります。

考えられる解決策:

Amazon API Gatewayを保護する の手順に従わなかった場合は、今すぐそれに従って、 AWS_IAM 認証を指定してください。

JSON 応答の解析中にエラーが発生しました...エラー: 最上位の JSON オブジェクトに「データ」 JSON 配列要素が含まれている必要があります

メッセージの全文は次のとおりです。

Error parsing JSON response for external function ... Error: top-level JSON object must contain "data" JSON array element
Copy
考えられる原因:
  • API Gatewayリソースにある POST コマンドのLambdaプロキシ統合を指定していない可能性があります。

考えられる解決策:

次のリモートサービスエラーで外部関数 EXT_FUNC のリクエストに失敗: 403 '{"message":"Forbidden"}';

考えられる原因:

プロキシサービスには、通常、認証または課金のために API キー が必要でした。API キーがないか、正しくありません。

考えられる解決策:

ALTER API INTEGRATION コマンドを使用して、正しい API キーを指定します。

CloudFormation スタックの作成に失敗する

このエラーは、 AWS CloudFormation テンプレートを使用して外部関数を作成している場合に発生する可能性があります。

考えられる原因:

CloudFormation テンプレートで指定されたリソースを作成するために必要な権限がありません。

考えられる解決策:

スタックの Events タブをチェックして、エラーの詳細を確認してください。

その他のトラブルシューティングのヒントについては、 AWS 外部関数の トラブルシューティング ページもご覧ください。