アプリケーションおよびファンクションのデプロイの問題

OCI Functionsを使用してアプリケーションおよびファンクションをデプロイする際の問題のトラブルシューティング方法を確認します。

OCI Functionsを使用してアプリケーションおよびファンクションをデプロイするときに、これらの問題が発生することがあります。

アプリケーションをデプロイすると、「unauthorized: incorrect username or password」メッセージが返される

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

$ 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からログアウトしたら、コマンドを再実行してアプリケーションをデプロイします。

ファンクションをデプロイすると、「docker pushの実行中にエラーが発生しました。dockerにログインしましたか。」というメッセージが返されます

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

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レジストリ(docker.io)との対話を可能にできます。

FN_REGISTRY環境変数によって、Fn ProjectのCLIコンテキストにあるレジストリ・オプションの値が上書きされます。

OCI FunctionsFn ProjectのCLIを使用するには、次のいずれかを行います:

  • FN_REGISTRY環境変数の設定を解除します。
  • Oracle Cloud Infrastructure Registryと相互作用するFn ProjectのCLIコマンドを入力するたびに、--registryグローバル・オプションを使用してFN_REGISTRY環境変数を上書きします。

ファンクションをデプロイすると、ListTriggersメッセージと500エラーが返される

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

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

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

トリガー定義を含む新しいfunc.yamlファイルが作成されないようにするには、Fn ProjectのCLIのインストールに従い、Fn ProjectのCLIを最新バージョンにアップグレードします。

ファンクションをデプロイすると「イメージが存在しないか、それを使用するためのアクセス権がありません」というメッセージが返される

Oracle Cloud Infrastructureコンピュート・インスタンスをOCI Functions開発環境として使用してファンクションをデプロイする場合、次のようなメッセージが表示されます:

Fn: Image phx.ocir.io/ansh81vru1zp/acme-repo/helloworld-func:0.0.2 does not exist or you do not have access to use it.

このメッセージは、コンピュート・インスタンスがOracle Cloud Infrastructure Registryにアクセスできないことを示します。

テナンシのルート・コンパートメントに(次のような)ポリシー・ステートメントが存在することを再度確認し、コンピュート・インスタンスのOCIDを含む動的グループがOracle Cloud Infrastructure Registryにアクセスできるようにします:

 Allow dynamic-group <dynamic-group-name> to read repos in tenancy

Oracle Cloud Infrastructureコンピュート・インスタンスを開発環境として使用する方法の詳細は、ファンクション開発環境の様々なオプションを参照してください。

OCI Functionsにファンクションをデプロイすると、「Fn: Missing subnetsotations」メッセージが返されます

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

$ 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コンテキストで指定されているコンパートメントにない可能性があります
  • アプリケーションは以前に存在していた可能性がありますが、その後で削除されています

ファンクションをOCIファンクションにデプロイすると、「ファンクションのイメージ・アーキテクチャ'x86'に互換性がありません...」というメッセージが返されます

OCI Functionsにファンクションをデプロイすると、次のようなメッセージが表示されます:

$ fn deploy --app joes-helloworld-app

Deploying helloworld-func to app: joes-helloworld-app
.
.
.
Fn: Service error:InvalidParameter. Invalid Invalid image - Function's image architecture 'x86' is incompatible with the application's shape type 'GENERIC_X86_ARM'. http status code: 400. Opc request id:...

このメッセージは、ファンクションのイメージにアプリケーションのシェイプに必要な依存関係(子イメージ)が含まれていないことを示します。メッセージの原因として考えられるのは、Fn ProjectのCLIバージョン0.6.24(またはそれ以前)を使用して、x86イメージを持つファンクションをデプロイし、次の操作を実行することです。

  • マルチアーキテクチャ・シェイプを持つアプリケーション(Generic_X86_ARMなど)
  • x86イメージと互換性がない単一のアーキテクチャ・シェイプを持つアプリケーション(Generic_ARMなど)

Fn Project CLIバージョン0.6.25以降では、コマンドfn deploy --app <app-name>を使用してファンクションを構築し、OCI Functionsにデプロイすると、Fn Project CLIによって、アプリケーションのシェイプに必要な依存関係を持つファンクションのDockerイメージが構築されます。アプリケーションにマルチアーキテクチャ・シェイプ(2023年9月以降のデフォルトのアプリケーション・シェイプであるGeneric_X86_ARMなど)がある場合、Fn Project CLIは、ファンクションのマルチアーキテクチャ・イメージを構築します。関数のイメージとアプリケーションのシェイプは常に互換性があります。

ただし、Fn Project CLIバージョン0.6.24(およびそれ以前)では、単一のアーキテクチャであるx86アーキテクチャに必要な依存関係を持つDockerイメージが常に構築されます。単一のアーキテクチャ・イメージとして、このようなx86イメージは、Generic_X86単一アーキテクチャ・シェイプを持つアプリケーションのみと互換性があります。x86イメージは、次のアプリケーションと互換性がありません:

  • マルチアーキテクチャ・シェイプ(Generic_X86_ARMなど、2023年9月以降のデフォルトのアプリケーション・シェイプ)
  • Generic_X86ではない単一のアーキテクチャ・シェイプ(Generic_ARMなど)

ファンクションを正常にデプロイするには、アプリケーションのシェイプと互換性のあるイメージを指定する必要があります。次のいずれかを行います。

  • Fn Project CLIバージョン0.6.25以降を使用します(推奨)。
  • ファンクションのイメージと互換性のあるシェイプを持つ別のアプリケーションにファンクションをデプロイします(必要に応じて新しいアプリケーションを作成します)。Fn Project CLIバージョン0.6.24以前を使用している場合は、常にGeneric_X86シェイプを持つアプリケーションにファンクションをデプロイします。
  • Dockerを使用して、アプリケーションのアーキテクチャ・シェイプと互換性のあるイメージを構築します。

詳細は、ファンクションを実行するコンピュート・アーキテクチャの指定を参照してください。