Azureの外部関数のトラブルシューティング¶
このトピックでは、Azureの外部関数のトラブルシューティング情報を提供します。
このトピックの内容:
プラットフォームに依存しないランタイムの問題¶
データ型の戻り値が期待される戻り値と一致しない¶
外部関数との間で引数を渡すときは、データ型が適切であることを確認してください。送信された値が受信中のデータ型に適合しない場合、値は切り捨てられるか、他の方法で破損する可能性があります。
詳細については、 外部関数の引数がリモートサービスにより解析される引数に対応していることを確認 をご参照ください。
エラー: 行番号の順序が正しくありません¶
- 考えられる原因:
各バッチ内で返される行番号は、0から始まる単調な昇順の整数でなければなりません。入力行番号もこのルールに従う必要があり、各出力行は対応する入力行と一致する必要があります。たとえば、出力行0の出力は、入力行0の入力に対応している必要があります。
- 考えられる解決策:
返される行番号が受け取った行番号と同じであること、および各出力値が対応する入力の行番号を使用していることを確認してください。これが機能しない場合は、入力された行番号が正しくないか、行を正しい順序で返さなかった可能性があります。
次に、出力行番号が0から始まり、1ずつ増加し、順番に並んでいることを確認します。
データの入力形式および出力形式の詳細については、 リモートサービスの入力および出力データ形式 をご参照ください。
エラー: 「JSON の解析エラー: 無効な応答」¶
- 考えられる原因:
最も可能性の高い原因は、リモートサービスから返された JSON (例: AWS Lambda関数)が正しく構築されていないことです。
- 考えられる解決策:
外部関数が受け取った入力行ごとに1つの内部配列を返し、配列中の配列1つを返すことを確認します。 Snowflakeが受信するデータ形式 で出力形式の説明を確認します。
エラー: 戻り値の形式がJSONではありません¶
- 考えられる原因:
考えられる原因の1つは、戻り値の中に二重引用符が含まれていることです。
- 考えられる解決策:
JSON文字列は二重引用符で区切られますが、ほとんどの場合、文字列自体は引用符で開始および終了できません。埋め込まれた二重引用符が正しくない場合は、削除してください。
エラー: 関数が間違った行数を受け取りました¶
- 考えられる原因:
リモートサービスが受信した行よりも多いか少ない行を返そうとしました。関数は名目上スカラーではあるものの、
event
パラメーターのbody
フィールドに複数の行を受け取る可能性があり、受け取った行とまったく同じ数の行を返す必要があります。- 考えられる解決策:
リモートサービスが、受信する行ごとに1行を返すことを確認します。
Azure固有の問題¶
Azure Functionの作成中に設定を変更できない¶
- 考えられる原因:
Azure Functionを作成するときに、 Authentication/Authorization メニューで関数の設定を変更できない場合があります。
これは、次の すべて が当てはまる場合に発生する可能性があります。
Azure Functionが、Microsoft WindowsではなくLinuxで実行されている。
Azure FunctionにAzure AD認証/承認を使用することを計画している。
「Premium」価格レベルではなく、Azureの「従量課金」価格レベルを使用している。
Azure AD認証は、Azure Function用のLinux従量課金プランでは使用できません。Azure ADで認証するには、App ServiceプランまたはPremiumプランを使用する必要があります。
- 考えられる解決策:
Azure Functionを再作成し、LinuxではなくMicrosoft Windowsで実行するように指定する。
Azure FunctionのAzure AD 認証/承認をスキップします。代わりに、次のタスクを実行します。
ステップ6: ポータルでプロキシサービスのAzureセキュリティポリシーを作成する に記載されているように、API Managementインスタンスの Validate JWT (JSON ウェブトークン)ポリシーを設定します。
IP アドレス制限を使用して、リモートサービスが API Managementサービスインスタンスからの接続のみを受け入れるように制限します。
このソリューションを選択する場合は、Azure ADアプリケーションを手動で作成する必要があります。詳細については、Microsoftのドキュメントを参照してください。
Azure AD アプリケーションを手動で作成する場合は、追跡ワークシートに
Azure Function AD app registration name
とAzure Function App AD Application ID
を記録します。従量課金プランからPremiumプランに切り替えるか、App Serviceプランを使用してください。詳細については、Microsoftのドキュメントをご参照ください。
外部関数がタイムアウトする¶
- 考えられる原因:
タイムアウトの原因には多くの可能性が考えられます。Azureで考えられる原因の1つは、Azure Functionsアプリが適切にスケーリングするように記述されていないことです。
- 考えられる解決策:
スケーラブルな関数を作成するためのAzureガイドライン に従っていることを確認してください。
スケーラビリティとパフォーマンスの問題のトラブルシューティングに関する詳細については、 スケーラビリティとパフォーマンスの問題のトラブルシューティング をご参照ください。
エラー: Azure Active Directoryアクセストークンの取得に失敗しました。¶
- 考えられる解決策:
次のステップを試してください。
SnowflakeサービスプリンシパルがAzure ADテナントにアクセスできることを確認します。
テナントIDとAzure ADアプリケーションIDが正しいことを確認します。
IDフィールドでは、先頭と後続の空白(空白など)を含む空白が重要であることに注意してください。誤った先頭または後続の空白を確認してください。
エラー: 401 '{ "statusCode": 401, "message": "Access denied due to missing subscription key..." }'¶
完全なエラーメッセージテキスト:
Request failed for external function <function_name>. Error: 401 '{ "statusCode": 401, "message":
"Access denied due to missing subscription key. Make sure to include subscription key when making requests to an API." }'
- 考えられる原因:
API Managementサービスのサブスクリプション要件がオンになっている可能性があります。
- 考えられる解決策:
API Managementサービスのサブスクリプション要件をオフにする必要がある場合があります。
エラー: 401 '{ "statusCode": 401, "message": "Access denied due to missing subscription key." }¶
- 考えられる原因:
プロキシサービスには、通常、認証または課金のために API キー (「サブスクリプションキー」とも知られる)が必要です。ただし、CREATE API INTEGRATIONコマンドのAPI_KEY句にAPIキーが指定されていません。
- 考えられる解決策:
ALTER API INTEGRATIONコマンドを使用して、API統合を有効なAPIキーで更新します。
エラー: 401 '{ "statusCode": 401, "message": "Access denied due to invalid subscription key." }'¶
- 考えられる原因:
プロキシサービスには、通常、認証または課金のために API キー (「サブスクリプションキー」とも知られる)が必要です。CREATE API INTEGRATIONコマンドのAPI_KEY句で提供されたAPIキーが有効ではありませんでした。
- 考えられる解決策:
ALTER API INTEGRATIONコマンドを使用して、API統合を有効なAPIキーで更新します。
エラー: 401 '{ "statusCode": 401, "message": "Invalid JWT." }'¶
完全なエラーメッセージテキスト:
Request failed for external function <function_name>. Error: 401 '{ "statusCode": 401, "message": "Invalid JWT." }'
- 考えられる原因:
Azure API Managementサービスでセキュリティポリシーの設定が完了していない可能性があります。たとえば、次のようになります。
JWT (JSON ウェブトークン)を作成しましたが、編集していません。
必要な要求/値の1つ以上を省略しました。たとえば、Snowflakeの要求を指定したが、
リモートサービス(Azure Function)は指定しなかった、またはその逆の場合があります。
無効なオープンID URLを使用した可能性があります。
- 考えられる解決策:
Azure API Managementサービスで、セキュリティポリシーの設定を完了してください。たとえば、 JWT を確認し、Snowflakeの要求やリモートサービス(Azure Function)の要求など、必要な要求/値が含まれていることを確認します。
有効なオープンID URLを使用したことを確認してください。
エラー(リモートサービス): 401 '{ "statusCode": 401, "message": "Invalid JWT." }'¶
完全なエラーメッセージテキスト:
Request failed for external function <function_name> with remote service error: 401 '{ "statusCode": 401, "message": "Invalid JWT." }'
- 考えられる原因:
ARM テンプレートを使用している場合は、テンプレートが作成した JWT (JSON ウェブトークン)を更新していない可能性があります。
- 考えられる解決策:
ステップ6: ポータルでプロキシサービスのAzureセキュリティポリシーを更新する に記載されているように JWT を更新します。
エラー: 500 ...¶
- 考えられる原因:
Azure ADアプリに間違ったオプションを選択した可能性があります。
間違ったオプション: Accounts in any organizational directory (Any Azure AD directory - Multitenant) and personal Microsoft accounts (e.g. Skype, Xbox)
正しいオプション: Accounts in this organizational directory only (Default Directory only - Single tenant)