ファンクションの呼出しの問題

OCI Functionsにデプロイされたファンクションを起動する際の問題のトラブルシューティング方法をご確認ください。

OCI Functionsにデプロイされたファンクションを呼び出すと、これらの問題が発生する可能性があります。

ファンクションを呼び出すと、FunctionInvokeRequestContentTooLargeメッセージおよび413エラーが返されます。

OCI Functionsにデプロイしたファンクションを呼び出すと、次のエラー・メッセージが表示される場合があります:

{"code":"FunctionInvokeRequestContentTooLarge","message":"Request content too large"}
Fn: Error invoking function. status: 413 message: Request content too large

このメッセージは、OCI Functionsへのリクエストの内容が最大許容サイズ6MBを超えていることを示しています。

このエラーが表示された場合は、リクエストの内容が最大許容サイズを超えていないことを再度確認してください。

ファンクションを呼び出すと、TooManyRequestsメッセージおよび429エラーが返されます。

OCI Functionsにデプロイしたファンクションを呼び出すと、次のエラー・メッセージが表示される場合があります:

{"code":"TooManyRequests","message":"User-rate limit exceeded"}
Fn: Error invoking function. status: 429 message: User-rate limit exceeded

このメッセージは、OCI Functionsがすでにテナンシに許可されている最大リクエスト数を処理しており、別のリクエストを受け入れることができないことを示しています。

このエラーの事前予測および回避の詳細は、OCI関数のメモリー使用量および可用性の監視を参照してください。

このエラーが表示された場合は、数分待ってからファンクションを再度起動してください。または、問題が解決しない場合は、お問合せして同時ファンクション実行の合計メモリーを増やしてください。

ファンクションを呼び出すと、クライアントはタイムアウトを報告し、ファンクションのログに444エラーが表示されます

OCI Functionsにデプロイしたファンクションを呼び出すと、クライアントがタイムアウトをレポートする場合があります。

ファンクションのログを確認してさらに調査します(ファンクション・ログの格納および表示を参照)。ログにステータス444メッセージが含まれている場合、ファンクションの実行中にクライアントとOCIファンクション間の接続が中断されました。ファンクションのログにステータス444のメッセージが表示された場合は、ファンクションを再度起動します。

ファンクションの呼出し方法によって、ファンクションを実行できる最大時間も決まります。詳細は、関数の呼出しを参照してください。

ファンクションを呼び出すと、ファンクションの失敗メッセージおよび502エラーが返されます

ファンクションのコードに問題がある場合は、ファンクションの起動時に次のエラーが表示されます:

Fn: Error invoking function. status: 502 message: Function failed

ファンクションのコードの問題を調査するには、ファンクションによって出力されるログを確認します。Oracle Cloud Infrastructure Loggingサービスは、ファンクション・ログのアクセス、検索および格納を行うデフォルトかつ推奨のオプションです。ファンクションのログを格納および表示するには、そのファンクションにprint文が含まれる必要があることに注意してください。詳細は、ファンクション・ログの格納および表示を参照してください。

ファンクションを呼び出すと、FunctionInvokeSyslogUnavailableメッセージおよび502エラーが返される

OCI Functionsでは、アプリケーションのsyslog URLを設定して、ファンクションのログを外部ロギング宛先(Papertrailなど)に送信できます。ファンクション・ログの格納および表示を参照してください。

syslog URLが無効または到達不能な場合、ファンクションを呼び出すと次のエラーが表示されます:

{"code":"FunctionInvokeSyslogUnavailable","message":"Syslog endpoint unavailable"}

Fn: Error invoking function. status: 502 message: Syslog endpoint unavailable

外部ロギング宛先のURLがエラーの原因であることを確認するには:

  1. Fn Project CLIを使用し、syslog URLの設定を解除するようにアプリケーションを更新します。たとえば、次のように入力します:
    fn update app helloworld-app --syslog-url ''
  2. 実行するファンクションをデプロイします。ファンクションの作成およびデプロイを参照してください。
  3. ファンクションを呼び出します。ファンクションの呼出しを参照してください。

ファンクションが正常に実行されると、ファンクションが実行中のサブネットから外部ロギング宛先のURLにアクセスできなくなります。次のことを再確認します:

  • 外部ロギング宛先のURLが有効である。
  • 外部ロギング宛先のURLはパブリックにアクセス可能である。
  • ファンクションが実行されているサブネットには、パブリック・インターネットへのアウトバウンド・アクセスがある。

ファンクションを呼び出すと、FunctionInvokeImageNotAvailableメッセージおよび502エラーが返される

ファンクションを呼び出すと、OCIファンクションは、アプリケーション用に指定したVCNおよびサブネットを使用して、Oracle Cloud Infrastructure Registryから対応するイメージをプルします。

OCIファンクションがイメージをプルできない場合は、ファンクションの呼出し時に次のメッセージが表示されます:

{"code":"FunctionInvokeImageNotAvailable","message":"Failed to pull function image"}

Fn: Error invoking function. status: 502 message: Failed to pull function image

考えられる解決方法:

  • ファンクションに指定されたイメージが、Oracle Cloud Infrastructure Registryの指定された場所に存在していることを再度確認します。
  • Oracle Cloud Infrastructureが使用可能であることを再確認してください(Oracle Cloud Infrastructureが予期せず使用不可である場合には、このメッセージが返されます)。
  • VCNにインターネット・ゲートウェイまたはサービス・ゲートウェイが含まれていることを再確認します。OCIファンクションがイメージをプルするためにOracle Cloud Infrastructure Registryにアクセスできるようにするには、VCNに次のようにインターネット・ゲートウェイまたはサービス・ゲートウェイを含める必要があります。

    • アプリケーションにパブリック・サブネットが指定されている場合、VCNにはインターネット・ゲートウェイも含まれている必要があります。ルート表には、インターネット・ゲートウェイをターゲットにし、その宛先CIDRブロック・プロパティが0.0.0.0/0に設定されたルート・ルールが含まれている必要があります。セキュリティ・リストには、Oracle Cloud Infrastructure Registryへのアクセスを許可するステートフル・エグレス・ルールを含める必要があります(たとえば、「宛先タイプ」プロパティをServiceに設定し、「宛先サービス」プロパティをAll <region> services In Oracle Services Networkに設定し、「IPプロトコル」プロパティをAllに設定)。
    • アプリケーションにプライベート・サブネットが指定されている場合、VCNにはサービス・ゲートウェイも含まれている必要があります。All <region> Services In Oracle Services Networkにアクセスできるようにサービス・ゲートウェイを設定する必要があります。ルート表には、サービス・ゲートウェイをターゲットにし、その宛先サービス・プロパティがAll <region> Services In Oracle Services Networkに設定されたルート・ルールが含まれている必要があります。セキュリティ・リストには、Oracle Cloud Infrastructure Registryへのアクセスを許可するステートフル・エグレス・ルールを含める必要があります(たとえば、「宛先タイプ」プロパティをServiceに設定し、「宛先サービス」プロパティをAll <region> services In Oracle Services Networkに設定し、「IPプロトコル」プロパティをAllに設定)。

    インターネット・ゲートウェイまたはサービス・ゲートウェイがVCNにまだ定義されていない場合は、ここで定義します。

ファンクションを呼び出すと、FunctionInvokeSubnetOutOfIPsメッセージおよび502エラーが返される

OCI Functionsにデプロイしたファンクションを呼び出すと、次のエラー・メッセージが表示される場合があります:

{"code":"FunctionInvokeSubnetOutOfIPs","message":"subnet ocid1.subnet.oc1.phx.aaaaaaaac... is out of IPs"}
Fn: Error invoking function. status: 502 message: subnet ocid1.subnet.oc1.phx.aaaaaaaac... is out of IPs

このエラーが表示された場合は、VCNの各サブネットに、OCI関数で使用するVCNおよびサブネットの作成(まだ存在しない場合)で指定した最小数の空きIPアドレスがあることを再確認してください。

ファンクションを呼び出すと、FunctionInvokeSubnetNotAvailableメッセージおよび502エラー(サブネットの問題による)が返される

OCI Functionsにデプロイしたファンクションを呼び出すと、次のエラー・メッセージが表示される場合があります:

{"code":"FunctionInvokeSubnetNotAvailable","message":"subnet ocid1.subnet.oc1.phx.aaaaaaaac... does not exist or Oracle Functions is not authorized to use it"}
Fn: Error invoking function. status: 502 message: subnet ocid1.subnet.oc1.phx.aaaaaaaac... does not exist or Oracle Functions is not authorized to use it

このエラーが表示された場合は、アプリケーションに指定したサブネットがまだ存在していることを再確認してください。

ファンクションを呼び出すと、FunctionInvokeSubnetNotAvailableメッセージおよび502エラー(DHCPオプションの問題による)が返される

OCI Functionsにデプロイしたファンクションを呼び出すと、次のエラー・メッセージが表示される場合があります:

{"code":"FunctionInvokeSubnetNotAvailable","message":"dhcp options ocid1.dhcpoptions.oc1.phx.aaaaaaaac... does not exist or Oracle Functions is not authorized to use it"}
Fn: Error invoking function. status: 502 message: dhcp options ocid1.dhcpoptions.oc1.phx.aaaaaaaac... does not exist or Oracle Functions is not authorized to use it

このエラーが表示された場合は、アプリケーションに対して指定されているVCNのDHCPオプションのセットがまだ存在していることを再度確認します。

ファンクションを呼び出すと、FunctionInvokeResponseBodyTooLargeメッセージおよび502エラーが返される

OCI Functionsにデプロイしたファンクションを呼び出すと、次のエラー・メッセージが表示される場合があります:

{"code":"FunctionInvokeResponseBodyTooLarge","message":"function response body too large"}
Fn: Error invoking function. status: 502 message: function response body too large

このメッセージは、ファンクションの実行によって返されるレスポンスが6MBの最大許容サイズを超えていることを示しています。

このエラーが表示された場合は、関数コードを確認し、関数が返す応答のサイズを小さくします。

ファンクションを呼び出すと、FunctionInvokeResponseHeaderTooLargeメッセージおよび502エラーが返される

OCI Functionsにデプロイしたファンクションを呼び出すと、次のエラー・メッセージが表示される場合があります:

{"code":"FunctionInvokeResponseHeaderTooLarge","message":"function response header too large"}
Fn: Error invoking function. status: 502 message: function response body too large

このメッセージは、ファンクションの実行によって返されるレスポンス・ヘッダーが許容される最大サイズを超えていることを示しています。

このエラーが表示された場合は、関数コードを確認し、関数が返すカスタム・ヘッダーの数またはサイズ(あるいはその両方)を減らします。

ファンクションを呼び出すと、FunctionInvokeTooManyMatchingDGsメッセージおよび502エラーが返される

OCI Functionsにデプロイしたファンクションを呼び出すと、次のエラー・メッセージが表示される場合があります:

{"code":" FunctionInvokeTooManyMatchingDGs","message":"Unable to get resource authorization token due to Function resource matching too many Dynamic Groups. Update your Dynamic Groups' matching rules"}
Fn: Error invoking function. status: 502 message: Unable to get resource authorization token due to Function resource matching too many Dynamic Groups. Update your Dynamic Groups' matching rules

このメッセージは、関数がサポートされている最大数よりも多くの動的グループに属していることを示しています。

このエラーが表示された場合は、動的グループ一致ルールを更新して、ファンクションが属する動的グループの数を減らします。ファンクションが属できる動的グループの最大数を確認するには、動的グループの制限を参照してください(単一のコンピュート・インスタンスに対して表示される制限は、ファンクションにも適用されます)。

ファンクションを呼び出すと、FunctionInvokeExecutionErrorメッセージおよび502エラーが返される

OCI Functionsにデプロイしたファンクションを呼び出すと、次のエラー・メッセージが表示される場合があります:

{"code":"FunctionInvokeExecutionError","message":"error receiving function response"}
Fn: Error invoking function. status: 502 message: error receiving function response

このメッセージは、ファンクションの実行からのレスポンスがエラーを返すことを示しています。

このエラーが予期せず発生した場合は、関数コードを確認して、関数が正常に実行されない条件を理解してください。

ファンクションを呼び出すと、FunctionInvokeExecutionFailedメッセージおよび502エラーが返される

OCI Functionsにデプロイしたファンクションを呼び出すと、次のエラー・メッセージが表示される場合があります:

{"code":"FunctionInvokeExecutionFailed","message":"function failed"}
Fn: Error invoking function. status: 502 message: function failed

このメッセージは、関数の実行中にエラーが検出されたことを示します。これは、関数コードのバグが原因である可能性が高くなります。

このエラーが表示された場合は、関数コードを確認し、見つかったバグを修正します。

ファンクションを呼び出すと、FunctionInvokeInvalidResponseメッセージおよび502エラーが返される

OCI Functionsにデプロイしたファンクションを呼び出すと、次のエラー・メッセージが表示される場合があります:

{"code":"FunctionInvokeInvalidResponse","message":"invalid function response"}
Fn: Error invoking function. status: 502 message: invalid function response

このメッセージは、ファンクションを呼び出すと、無効なHTTPレスポンス・コード(ファンクションの失敗もタイムアウトもない)が返されることを示しています。

このエラーが表示された場合は、関数コードを確認し、見つかったバグを修正します。

ファンクションを呼び出すと、FunctionInvokeSubnetConfigErrorメッセージおよび502エラーが返される

OCI Functionsにデプロイしたファンクションを呼び出すと、次のエラー・メッセージが表示される場合があります:

{"code":"FunctionInvokeSubnetConfigError","message":"Customer subnet DNS resolver error. Please fix the subnet configuration and try again"}
Fn: Error invoking function. status: 502 message: Customer subnet DNS resolver error. Please fix the subnet configuration and try again

このメッセージは、カスタム・リゾルバ構成に関連するVCN構成の問題を示しています。

このエラーが表示された場合は、カスタム・リゾルバを使用しているVCN内のサブネットを特定します。サブネットがカスタム・リゾルバを使用している場合(たとえば、インターネット上、VCN内、オンプレミス・ネットワーク上)は、カスタム・リゾルバにアクセスできることを確認します。また、カスタム・リゾルバが正しく動作していることも確認します。カスタム・リゾルバの詳細は、Virtual Cloud NetworkのDNSを参照してください。

エラーが解決しない場合は、新しいVCNで実行されている新しいhello world関数を起動して、VCN構成(およびカスタム・リゾルバ構成(使用されている場合)が正しいことを確認します:

  1. VCNウィザードを使用して新しいVCNを作成します(「インターネット接続性を持つVCN」を選択します)。
  2. 新しいDHCPオプション・リソースを作成し、以前と同じDNSオプションを指定します(カスタム・リゾルバが以前に使用されていた場合は、「Custom Resolver」を選択します)。
  3. VCNに新しいサブネットを作成し、作成したDHCPオプション・リソースを選択します。
  4. 作成したVCNおよびサブネットを指定して、新しいアプリケーションを作成します。
  5. 作成したアプリケーションに単純なhello world関数を作成します。
  6. 新しいhello world関数を正常に起動できることを確認します。

問題が解決しない場合は、VCN構成の問題の解決に役立つお問い合せください。

関数を呼び出すと、「The combined uncompressed size of all Function images in an application has exceeded the allotted limit....」というメッセージおよび502エラーが返されます。

OCI Functionsにデプロイしたファンクションを起動すると、ファンクションのイメージがDockerレジストリからプルされます。イメージのサイズ、およびアプリケーション内の他の関数のイメージのサイズによっては、次のようなメッセージが表示されることがあります。

Fn: Error invoking function. status: 502 message: The combined uncompressed size of all Function images in an application has exceeded the allowed limit. Please reduce the size of the images or number of functions from the application.

このメッセージは、関数のイメージのプルによって、アプリケーション内の関数のすべてのイメージの圧縮されていない合計サイズが最大許容制限を超えたことを示しています。

このエラーが表示される場合は:

  • 標準的な手法を使用して、ファンクションのイメージのサイズ、および/またはアプリケーション内の他のファンクションのイメージのサイズを縮小します。
  • アプリケーション内の関数の数を減らします。

ファンクションを呼び出すと、FunctionInvokeServiceUnavailableメッセージおよび503エラーが返される

OCI Functionsにデプロイしたファンクションを呼び出すと、次のエラー・メッセージが表示される場合があります:

{"code":"FunctionInvokeServiceUnavailable","message":"Timed out - server too busy"}
Fn: Error invoking function. status: 503 message: Timed out - server too busy

このメッセージは、OCI Functionsが現在リクエストを処理できないことを示しています(容量が不足している可能性があります)。このエラー・メッセージを複数回検出することは珍しくありません。これは、OCI Functionsの容量をスケール・アップしてファンクション呼出しからの需要を満たすのに時間がかかる可能性があるためです。

このエラーが表示された場合は、ファンクションの呼出しを再試行してください。メッセージが再表示されるかどうかは気にしないでください。関数の呼び出しを再試行し、呼び出しの試行間隔を短くします。

次に注意してください:

  • このエラーが引き続き表示される場合は、関数呼出し間の時間間隔を増やすことを検討してください(おそらく、間隔にランダム度を追加するために、ジッタ式指数バックオフなどの標準手法を使用します)。
  • イベントによってトリガーされたアクションの結果として関数が呼び出されたときにメッセージが表示された場合は、関数が正常に呼び出されるまで、関数を呼び出すための追加の試行が自動的に再試行されます。ユーザーの操作は必要ありません。
  • 503エラーコードを含む関数エラー応答によってトリガーされるアラームを設定すると、操作が不要な複数の通知が表示される場合があります。
  • メッセージが長期間表示されたままの場合は、お問い合せください。

ファンクションを呼び出すと、FunctionInvokeContainerInitFailエラー・メッセージ、504エラーおよびModuleNotFoundError: 'contextvars'という名前のモジュールがないログ・メッセージが返されます

OCI関数にデプロイしたPython 3.6関数を呼び出すと、次のエラー・メッセージが表示される場合があります:

{"code":"FunctionInvokeContainerInitFail","message":"Container failed to initialize, please ensure you are using the latest fdk and check the logs"}

Fn: Error invoking function. status: 504 message: Container failed to initialize, please ensure you are using the latest fdk and check the logs

このエラーが表示された場合は、関数のログを確認します。ファンクションのログにModuleNotFoundError: No module named 'contextvars'メッセージが表示される場合:

  1. ファンクションのrequirements.txtファイルに次の行を追加します。
    fdk>=0.1.21
  2. OCI Functionsにファンクションを再デプロイします。
  3. ファンクションを再度起動します。

ファンクションを呼び出すとFunctionInvokeContainerInitFailおよび「コンテナ初期化のタイムアウト」メッセージ、ならびに504エラーが返される

OCI関数にデプロイしたファンクションを呼び出すと、ファンクションの実行は最大メモリーしきい値の対象となります。この制限を超過すると、ファンクションの実行が停止され、次のエラー・メッセージが返されます:

{"code":"FunctionInvokeContainerInitFail","message":"Container failed to initialize, please ensure you are using the latest fdk and check the logs"}

Fn: Error invoking function. status: 504 message: Container failed to initialize, please ensure you are using the latest fdk and check the logs

このエラーが表示された場合は、関数の最大メモリーしきい値を増やします。たとえば、256MB、512MB、1024MB、2048MBまたは3072MBです。最大メモリーしきい値の有効な値については、Changing Default Memory and Timeout Settingsを参照してください。

たとえば、ファンクションの最大数を256 MBに設定するには、次のいずれかを実行します:

  • コンソールの「ファンクション詳細」ページで「ファンクションの編集」を選択し、「メモリー(MB)」ドロップダウン・リストから「256」を選択します。
  • ファンクションのfunc.yamlファイルに次の行を追加します。これにより、ファンクションが呼び出されるたびに最大メモリーしきい値が256 MBに設定されます:

    memory: 256

    func.yamlファイルを編集した場合は、ファンクションを再び呼び出す前にOCIファンクションに再デプロイする必要があります。

helloworld Pythonファンクションの作成時には、Fn ProjectのCLIの最新バージョンを使用することをお薦めします。fn init --runtime python <function-name>コマンドを入力してhelloworldファンクションを作成すると、memory: 256行がfunc.yamlファイルに自動的に追加されます。

ファンクションを呼び出すと、FunctionInvokeTimeoutメッセージおよび504エラーが返される

OCI関数にデプロイした関数を呼び出すと、その関数は一定時間だけ実行できます。この時間制限を超過すると、ファンクションの実行が停止され、次のエラー・メッセージが返されます:

{"code":"FunctionInvokeTimeout","message":"Timed out"}

Fn: Error invoking function. status: 504 message: Timed out

このエラーが表示された場合は、ファンクション定義でファンクションを実行できる最大時間を増やしてみてください。たとえば、最大時間を300秒に設定するには、次のいずれかを実行します:

  • コンソールの「ファンクション詳細」ページで「ファンクションの編集」を選択し、「タイムアウト」フィールドに「300」を入力します。
  • ファンクションのfunc.yamlファイルに次の行を追加します。ファンクションが呼び出されるたびに最大時間制限が300秒に設定されます。

    timeout: 300

    func.yamlファイルを編集した場合は、ファンクションを再び呼び出す前にOCIファンクションに再デプロイする必要があります。

ファンクションの呼出し方法によって、ファンクションを実行できる最大時間も決まります。詳細は、関数の呼出しを参照してください。

また、パブリック・サブネットで実行されているファンクションが、アクセス制御リスト(ACL)が有効になっているOracle Autonomous Databaseインスタンスに接続できない場合にも、このエラー・メッセージが表示されることがあります。この場合、次の詳細は、ファンクションの実行からのOracle Autonomous Databaseインスタンスへの接続を参照してください:

  • すべての送信インターネット・トラフィックをNATゲートウェイに送信し、インターネット・トラフィックを許可するようにサブネットを構成します。
  • NATゲートウェイのパブリックIPアドレスをデータベースのアクセス制御リストに追加する。

ファンクションを呼び出すと、FunctionInvokeContainerInitTimeoutメッセージおよび504エラーが返される

OCI Functionsにデプロイしたファンクションを呼び出すと、ファンクションのイメージはDockerレジストリからプルされ、コンテナ内で実行されます。関数の依存関係によっては、コンテナの起動に時間がかかる場合があります。コンテナの起動に時間がかかりすぎると、次のエラー・メッセージが表示されることがあります。

{"code":"FunctionInvokeContainerInitTimeout","message":"Container initialization timed out, please ensure you are using the latest fdk and check the logs"}
Fn: Error invoking function. status: 504 message: Container initialization timed out, please ensure you are using the latest fdk and check the logs

このエラーが表示された場合は、関数の最大メモリーしきい値を増やします。たとえば、256MB、512MB、1024MB、2048MBまたは3072MBです。最大メモリーしきい値の有効な値については、Changing Default Memory and Timeout Settingsを参照してください。

たとえば、ファンクションの最大数を256 MBに設定するには、次のいずれかを実行します:

  • コンソールの「ファンクション詳細」ページで「ファンクションの編集」を選択し、「メモリー(MB)」ドロップダウン・リストから「256」を選択します。
  • ファンクションのfunc.yamlファイルに次の行を追加します。これにより、ファンクションが呼び出されるたびに最大メモリーしきい値が256 MBに設定されます:

    memory: 256

    func.yamlファイルを編集した場合は、ファンクションを再び呼び出す前にOCIファンクションに再デプロイする必要があります。

helloworld Pythonファンクションの作成時には、Fn ProjectのCLIの最新バージョンを使用することをお薦めします。fn init --runtime python <function-name>コマンドを入力してhelloworldファンクションを作成すると、memory: 256行がfunc.yamlファイルに自動的に追加されます。

ファンクションを呼び出すと、FunctionInvokeImagePullTimeoutメッセージおよび504エラーが返される

OCI Functionsにデプロイしたファンクションを呼び出すと、ファンクションのイメージはDockerレジストリからプルされます。イメージのサイズによっては、イメージのプルに時間がかかる場合があります。イメージのプルに時間がかかりすぎると、次のエラー・メッセージが表示されることがあります。

{"code":"FunctionInvokeImagePullTimeout","message":"Image pull timed out"}
Fn: Error invoking function. status: 504 message: Image pull timed out
このエラーが表示される場合は:
  • 標準の手法を使用して、イメージのサイズを小さくします。
  • ファンクションに指定されたイメージが、Oracle Cloud Infrastructure Registryの指定された場所に存在していることを再度確認します。