Oracle Cloud Infrastructureドキュメント

Oracle Functionsのトラブルシューティング

このトピックでは、Oracle Functionsに関連する一般的な問題とその対処方法について説明します。

DEBUG=1を使用して、エラーの詳細を確認

Fn Project CLIコマンドの使用中に予期しないエラーが発生した場合は、文字列DEBUG=1を使用してコマンドを起動し、コマンドを再度実行することで、問題の詳細を確認できます。 例えば:

$ DEBUG=1 fn invoke helloworld-app helloworld-func

DEBUG=1はコマンドの前に指定する必要があり、DEBUGは大文字で指定する必要があります。

問題解決に役立つファンクションを起動するときに使用する--display-call-id

ファンクションの起動時に問題が発生した場合は、Oracle Supportと対話できます。 Oracle Supportでは、ファンクションの起動のコールidを指定すると、より効率的に問題を調査できます。 --display-call-idコマンド・オプションを使用して、コールidを取得できます。 例えば:

$ fn invoke helloworld-app helloworld-func --display-call-id

 

Call ID: 01CS23SDG71BT2N9GZJ002DQM5

Hello World !

アプリケーション内のファンクションを呼び出すと、常にタイムアウト・エラーが返されます。

アプリケーション内の任意のファンクションを起動するときに、次のようなメッセージが表示される場合、アプリケーションに指定されたVCNにインターネット・ゲートウェイまたはサービス・ゲートウェイのいずれかが定義されていることを再確認します:

$ fn invoke helloworld-app helloworld-func

Error invoking function. status: 502 message: Failed to pull image 'phx.ocir.io/ansh81vru1zp/acme-app/acme-func:0.0.3': Get https://phx.ocir.io/v2/: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)

ファンクションを起動すると、Oracle Functionsはアプリケーションに指定されているVCNとサブネットを使用して、「Oracle Cloud Infrastructureレジストリ」から対応するイメージを抽出します。 「Oracle Cloud Infrastructureレジストリ」にアクセスしてイメージをプルできるようにするには、VCNにインターネット・ゲートウェイまたはサービス・ゲートウェイを含める必要があります。次に例を示します:

  • アプリケーションにパブリック・サブネットが指定された場合、VCNにはインターネット・ゲートウェイも含まれている必要があります。
  • アプリケーションにプライベート・サブネットが指定されていた場合、VCNにはサービス・ゲートウェイも含まれている必要があります。

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

新規アプリケーションの作成では、「新規アプリケーション」ダイアログにエラー・メッセージが表示されます。

すでにテナンシのアプリケーション数の制限に達している場合は、新しいアプリケーションを作成しようとすると、「新規アプリケーション」ダイアログに次のようなメッセージが表示されることがあります:

アプリケーションを作成できません。再試行してください。

テナンシにすでに存在するアプリケーションの数を再確認します。 作成できるアプリケーションの数と比較してください。 「Oracle Functions機能と制限」も参照してください。

テナンシに許可されているアプリケーション数を超えた場合は、次の点を考慮してください:

Oracle Functionsでdocker.ioとの対話が試行されます

ファンクションをデプロイするときに次のようなメッセージが表示される場合は、開発環境でFN_REGISTRY環境変数がDockerユーザー名に設定されていないことを再確認してください:

The push refers to repository [docker.io. ...
.
.
.
denied: requested access to the resource is denied
Fn: error running docker push, are you logged into docker?: exit status 1
See fn <command> --help’ for more information.
			

オープン・ソースのFn Projectプラットフォームを使用した場合は、Fn Projectドキュメント」の手順に従い、FN_REGISTRY環境変数をDockerユーザー名に設定して、公式Dockerレジストリとの相互作用を有効にすることができます。

Fn Project CLIコンテキストでは、FN_REGISTRY環境変数によってレジストリ・オプションの値がオーバーライドされます。

Fn Project CLIをOracle Functionsとともに使用するには、次のいずれかを実行します:

  • FN_REGISTRY環境変数を設定解除します。
  • 「Oracle Cloud Infrastructureレジストリ」と相互作用するFn Project CLIコマンドを入力するたびに、--registryグローバル・オプションを使用して、FN_REGISTRY環境変数をオーバーライドします。

fn versionを実行すると、Fn Project CLIの最新バージョンが使用可能であることが表示されます。

fn versionコマンドを入力したときに次のようなメッセージが表示された場合は、より新しいバージョンのFn Project CLIが使用可能です:

$ fn version
			
Client version: 0.5.33 is not latest: 0.5.34
Server version: ?

Fn Project CLIを最新バージョンにアップグレードするには、「5. Fn Project CLIをインストール」の指示に従ってFn Project CLIを再インストールします。

ファンクションをOracle Functionsにデプロイすると、"Fn: サブネット注釈の欠落"メッセージが返されます

Oracle Functionsにファンクションをデプロイすると、次のメッセージが表示される場合があります:

$ fn deploy --app joes-helloworld-app
Deploying helloworld-func to app: joes-helloworld-app
.
.
.
Fn: Missing subnets annotation

Fn: Missing subnets annotationメッセージが表示された場合は、正しいアプリケーション名を入力したことを確認してください。 たとえば、アプリケーション名のスペル・ミスがある場合や、アプリケーションが現在Fn Project CLIコンテキストで指定されているコンパートメントにない場合などです。

Fn Project CLIコマンドを実行すると401エラーが返されます。

Fn Project CLIコマンドを実行しているときに、次のようなメッセージが表示された場合、~/.oci/configファイルの現在のプロファイルに対して指定されている資格証明が正しく認証されていることを再確認します:

$ fn list apps
			
Fn: [GET /apps][401] ListApps default  &{Fields: Message:}

例えば:

  • userでは、Oracle Cloud Infrastructureユーザー・アカウントのOCIDを指定していますか。
  • fingerprintで、コンソールにアップロードされる公開APIキー値のフィンガープリントを指定しますか。
  • key_fileは秘密キー・ファイルへのフルパスを指定していますか。

「2. Oracle Cloud Infrastructure CLI構成ファイルでプロファイルを作成」も参照してください。 「APIエラー」も参照してください。

Fn Project CLIコマンドを実行すると、404エラーが返されます

Fn Project CLIコマンドの実行時に、次のようなメッセージが表示された場合、ファンクション関連およびネットワーク・リソースへのアクセスが認可されていることを再確認してください:

$ fn list apps
			
Fn: [GET /apps][404] ListApps default  &{Fields: Message:Resource is not authorized or not found}

例えば:

  • 現在のコンテキストのoracle.compartment-idで、デプロイされたファンクションを所有するコンパートメントのOCIDを正しく指定していますか。
  • ファンクション関連およびネットワーク・リソースへのグループ・アクセスを可能にするポリシーが正しく設定されているか。
  • ユーザー・アカウントは、ファンクション関連およびネットワーク・リソースへのアクセス権が付与されているグループに属していますか。

「6. Oracle Cloud Infrastructureに接続するFn Project CLIコンテキストの作成」および「ネットワークおよびファンクション関連リソースへのアクセスを制御するポリシーの作成」を参照してください。 「APIエラー」も参照してください。

ファンクションの呼出しでは、InternalServerErrorメッセージと500エラーが返されます。

Oracle Functionsでは、アプリケーションのsyslog URLを設定することにより、ファンクション・ログを外部ロギング宛先(Papertrailなど)にエクスポートできます。 「ファンクション・ログの格納と表示」も参照してください。

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

{"code":"InternalServerError","message":"Internal server error"}
Fn: Error calling function: status 500

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

  1. syslog URLを設定解除するようにアプリケーションを更新してください。 例えば:
    • コンソールを使用して、「アプリケーション詳細」ページで「アプリケーションの編集」をクリックし、「ロギング・ポリシー」オプションから「なし」を選択します。
    • Fn Project CLIを使用して、fn update app helloworld-app --syslog-url ""と入力
  2. 実行するファンクションをデプロイします。 「ファンクションの作成およびデプロイ」も参照してください。
  3. 関数を呼び出します。 「ファンクションの呼出し」も参照してください。

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

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

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

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

{"code":"StatusServiceUnavailable","message":""subnet ocid1.subnet.oc1.phx.aaaaaaaac... does not exist or FaaS is not authorized to use it"}
Fn: Error calling function: status 503

このエラーが表示される場合は、ネットワーク・リソースへのOracle Functionsアクセスを提供するポリシーが作成されていない可能性があります。 「ネットワーク・リソースへのOracle Functionsサービス・アクセスを提供するためのポリシーの作成」も参照してください。

ファンクションの呼出しでは、ゲートウェイのタイムアウト・メッセージと504エラーが返されます。

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

<html>
<head><title>504 Gateway Time-out</title></head>
<body bgcolor="white">
<center><h1>504 Gateway Time-out</h1></center>
<hr><center></center>
</body>
</html>

このエラーが表示される場合は、ネットワーク・リソースへのOracle Functionsアクセスを提供するポリシーが作成されていない可能性があります。 「ネットワーク・リソースへのOracle Functionsサービス・アクセスを提供するためのポリシーの作成」も参照してください。

ファンクションを呼び出すと、StatusGatewayTimeoutと「コンテナの初期化がタイムアウトしました」というメッセージ、および504エラーが返されます。

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

{"code":"StatusGatewayTimeout","message":"Container initialization timed out, please ensure you are using the latest fdk / format and check the logs"}
Fn: Error calling function: status 504

このエラーが表示された場合は、ファンクションの起動時に最大メモリーしきい値を増やします。 最大メモリーしきい値の有効な値は、128MB、256MB、512MBおよび1024MB (「Oracle Functionsのデフォルト動作の変更」を参照)です。

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

  • コンソール「ファンクション詳細」ページで「ファンクションの編集」をクリックし、「メモリー(M単位)」ドロップダウン・リストから256を選択します。
  • Fn Project CLIを使用してファンクションを呼び出す場合は、次の構文を使用します。 これにより、現在のファンクション呼出しの最大メモリーしきい値が256MBに設定されます:

    $ fn invoke <app-name> <function-name> --memory 256
  • ファンクションfunc.yamlファイルに次の行を追加します。 これにより、ファンクションが呼び出されるたびに最大メモリーしきい値が256MBに設定されます:

    memory: 256

    func.yamlファイルを編集した場合は、そのファンクションを再度起動する前に、そのファンクションをOracle Functionsに再デプロイする必要があります。

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