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.
- 考えられる原因:
ロールの AWS 信頼関係ポリシーで、 AWS ARN が正しくありません。考えられる原因には、次が含まれます。
設定しなかった。
設定したが、Snowflakeの DESCRIBE INTEGRATION コマンドから確認できるユーザー ARN ではなく、 AWS ロールの ARN を使用(誤り)した。「API_AWS_ROLE_ARN」フィールドの値ではなく、ワークシートの
API_AWS_IAM_USER_ARN
フィールドにある値を使用していることを確認してください。
AWS 信頼関係ポリシーで std:ExternalId が誤っている。考えられる原因には、次が含まれます。
設定しなかった。
API 統合オブジェクトを再作成した。API オブジェクトを再作成すると、その外部 ID が変更されます。
JSON 応答の解析中にエラーが発生しました...エラー: 最上位の JSON オブジェクトに「データ」 JSON 配列要素が含まれている必要があります¶
メッセージの全文は次のとおりです。
Error parsing JSON response for external function ... Error: top-level JSON object must contain "data" JSON array element
- 考えられる原因:
API Gatewayリソースにある POST コマンドのLambdaプロキシ統合を指定していない可能性があります。
- 考えられる解決策:
API GatewayリソースのLambdaプロキシ統合を指定します。
Lambdaプロキシ統合の詳細については、 API Gatewayエンドポイントを作成する のステップをご参照ください。
次のリモートサービスエラーで外部関数 EXT_FUNC のリクエストに失敗: 403 '{"message":"Forbidden"}';¶
- 考えられる原因:
プロキシサービスには、通常、認証または課金のために API キー が必要でした。API キーがないか、正しくありません。
- 考えられる解決策:
ALTER API INTEGRATION コマンドを使用して、正しい API キーを指定します。
CloudFormation スタックの作成に失敗する¶
このエラーは、 AWS CloudFormation テンプレートを使用して外部関数を作成している場合に発生する可能性があります。
- 考えられる原因:
CloudFormation テンプレートで指定されたリソースを作成するために必要な権限がありません。
- 考えられる解決策:
スタックの Events タブをチェックして、エラーの詳細を確認してください。
その他のトラブルシューティングのヒントについては、 AWS 外部関数の トラブルシューティング ページもご覧ください。