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 !

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

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

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

テナンシにすでに存在するアプリケーションの数を再確認します。 作成できるアプリケーションの数と比較してください。 「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:Not authenticated}

例えば:

  • 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を正しく指定していますか。
  • ファンクション関連およびネットワーク・リソースへのグループ・アクセスを可能にするポリシーが正しく設定されているか。
  • ユーザー・アカウントは、ファンクション関連およびネットワーク・リソースへのアクセス権が付与されているグループに属していますか。
  • ネットワーク・リソースへのOracle Functionsアクセスを提供するようにポリシーが設定されているかどうか。

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

ファンクションの起動は、FunctionInvokeSyslogUnavailableメッセージおよび502エラーを戻します

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

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

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

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

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

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

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

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

ファンクションの呼出しでは、ゲートウェイのタイムアウト・メッセージと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サービス・アクセスを提供するためのポリシーの作成」も参照してください。

ファンクションを起動すると、FunctionInvokeContainerInitFailおよびコンテナ初期化でタイムアウトしたメッセージ、504エラーが戻されます

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

{"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

このエラーが表示された場合は、ファンクションの起動時に最大メモリーしきい値を増やします。 最大メモリーしきい値の有効な値は、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ファイルに自動的に追加されます。

ファンクションを起動すると、FunctionInvokeTimeoutメッセージおよび504エラーが戻されます

Oracle Functionsにデプロイした関数を起動すると、その関数は一定時間だけ実行できます。 この時間制限を超過すると、関数の実行が停止され、次のエラー・メッセージが返されます:

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

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

このエラーが表示された場合は、関数の実行が許可される最大時間を増やします。 たとえば、最大時間を120秒に設定するには、次のいずれかを実行します:

  • コンソール「ファンクション詳細」ページで「ファンクションの編集」をクリックし、「タイムアウト」フィールドに120と入力します。
  • Fn Project CLIを使用してファンクションを呼び出す場合は、次の構文を使用します。 これによって、現在の関数を起動する時間制限が120秒に設定されます:

    $ fn invoke <app-name> <function-name> --timeout 120
  • ファンクションfunc.yamlファイルに次の行を追加します。 関数が起動されるたびに最大時間制限を120秒に設定します:

    timeout: 120

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

ファンクションの起動は、FunctionInvokeImageNotAvailableメッセージおよび502エラーを戻します

ファンクションを起動すると、Oracle Functionsはアプリケーションに指定されているVCNとサブネットを使用して、「Oracle Cloud Infrastructureレジストリ」から対応するイメージを抽出します。

Oracle Functionsがイメージをプルできない場合は、関数の起動時に次のメッセージが返されます:

{"code":"FunctionInvokeImageNotAvailable","message":"Failed to pull function image"} Fn: Error invoking function. status: 502 message: Failed to pull function image

考えられる解決策:

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

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

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

Fn Project CLIコマンドを実行するとX509が返されます: 復号化パスワードの不正なエラー

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

$ fn list apps
			
Fn: x509: decryption password incorrect

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

アプリケーションのデプロイが"未認可: 不正なユーザー名またはパスワード"メッセージを返します

アプリケーションをデプロイする場合、次のようなメッセージが表示される場合があります:

$ fn -v deploy --app acme-app

Deploying go-app to app: acme-app
Bumped to version 0.0.2
Building image phx.ocir.io/ansh81vru1zp/acme-repo/go-app:0.0.2
FN_REGISTRY: phx.ocir.io/ansh81vru1zp/acme-repo
Current Context: acme-functions-compartment
Sending build context to Docker daemon 5.12kB
Step 1/10 : FROM fnproject/go:dev as build-stage
Get https://registry-1.docker.io/v2/fnproject/go/manifests/dev: unauthorized: incorrect username or password

このメッセージは、Docker Hubへのログイン試行が不要で失敗したことを示します。 この状況を解決するには、次のコマンドを使用してDockerからログアウトします:

$ docker logout

Dockerからログアウトした後、コマンドを再実行してアプリケーションをデプロイします。

UbuntuでOracle Functionsを実行する際、Dockerログインは"エラー資格証明の取得中にエラー - err: exit status 1..."メッセージを返します

Oracle Functionsの開発環境を構成する場合は、Dockerをインストールする必要があります(「4. Oracle Functionsとともに使用するためのDockerのインストール」を参照)。 開発環境でUbuntuを実行している場合は、次の手順に従って、Dockerを使用して「Oracle Cloud Infrastructureレジストリ」にログインします(「10. Oracle Cloud Infrastructure Registryにログイン」を参照)。次のようなメッセージが表示される場合があります:

error getting credentials - err: exit status 1, out: Error spawning command line 'dbus-launch --autolaunch=d7159335070ef1c0854c75de55c8f588 --binary-syntax --close-stderr': Child process exited with code 1

考えられる原因や可能性のある解決など、Dockerの問題に関する詳細は、https://github.com/docker/docker-credential-helpers/issues/60を参照してください。

ファンクションのデプロイによって、ListTriggersメッセージと500エラーが戻されます

以前に作成した関数をFn Project CLIの以前のバージョンを使用してデプロイする場合、次のようなメッセージが表示される場合があります:

Fn: [GET /triggers][500] ListTriggers default  &{Fields: Message:Internal server error}

このメッセージは、関数func.yamlファイルに1つ以上のHTTPトリガー定義が含まれていることを示します。 Oracle Functionsは現在HTTPトリガーをサポートしていません。 関数をデプロイするには、func.yamlファイルからtriggers:セクションを削除します。

トリガー定義を含む新しいfunc.yamlファイルの作成を回避するには、「5. Fn Project CLIをインストール」の指示に従って、Fn Project CLIを最新バージョンにアップグレードします。

Fn Project CLIを使用してDocker関連の操作を実行すると、"デーモンからのエラー・レスポンス... 不明: 未認可"メッセージが表示されます

Fn Project CLIを有効にしてFn Project CLIコンテキストで指定されたDockerレジストリにアクセスするには、開発環境のローカルDockerクライアント(LinuxのDockerデーモン)がそのDockerレジストリにログインする必要があります。 DockerクライアントがDockerレジストリにログインしていない場合は、次のようなメッセージが表示されます:

Error response from daemon: Get https://phx.ocir.io/v2/: unknown: Unauthorized

「10. Oracle Cloud Infrastructure Registryにログイン」の指示に従って、Dockerクライアントを適切な「Oracle Cloud Infrastructureレジストリ」にログインします。そのため、Oracle管理のDockerレジストリは、複数の異なるリージョンで使用できます。