Goコード専用関数の作成

OCI FunctionsでGoコード専用関数をパッケージ化および作成する方法をご覧ください。

Goコード専用ファンクションは、コンテナ・イメージを作成および公開せずにGoファンクションをデプロイする場合に使用します

Goコード専用関数は、静的にリンクされた自己完結型のLinux実行可能バイナリから実行されます。

Goコード専用ファンクションを作成する前に、アプリケーションのアーキテクチャに必要なアーカイブ・レイアウトを使用してGo実行可能ファイルをパッケージ化します。一般的なコード専用ファンクションの前提条件は、コード専用ファンクションの作成を参照してください。Goコード専用関数で使用するランタイム名は、「コード専用関数でサポートされている言語」を参照してください。

さらに、Goコード専用機能をパッケージ化および作成するには、次のものが必要です。

  • Go開発環境。
  • Go関数のソース・コード。
  • ターゲット・アプリケーション・アーキテクチャ用に、静的にリンクされた自己完結型のLinux実行可能バイナリを構築する機能。

アーカイブ要件に進む

Goコード専用関数の場合:

  • 実行可能ファイルは、静的にリンクされた自己完結型のLinux実行可能バイナリである必要があります。
  • 実行可能ファイルの名前はfuncである必要があります。
  • Goバイナリはアーキテクチャ固有です。
  • macOSまたはWindows用に構築されたバイナリは、OCI Functions Linuxランタイムで直接実行できません。
  • x86用に作成されたバイナリをARM上で実行することはできません。
  • ARM用に作成されたバイナリはx86で実行できません。
  • マルチアーキテクチャ・アプリケーションでは、アーキテクチャごとに1つのバイナリが必要です。

ビルド・ターゲット値

LinuxおよびOCI Functionsアプリケーションで使用されるプロセッサ・アーキテクチャ用のGo実行可能ファイルをビルドします。

アプリケーション・アーキテクチャ GOOS GOARCH
x86 linux amd64
アーム linux arm64

単一アーキテクチャGoアーカイブ

単一アーキテクチャ・アプリケーションの場合、アーカイブ・ルートにfuncという名前の、静的にリンクされた自己完結型のLinux実行可能バイナリをパッケージ化します。

archive-root/
├── func
└── resources/  # optional

ルール:

  • アーカイブ・ルートにはfuncが必要です。
  • resources/はオプションです。
  • funcが欠落している場合、アーカイブは無効です。
  • バイナリは、静的にリンクされ、自己完結型で、Linuxおよびアプリケーションのターゲット・アーキテクチャ用に構築されている必要があります。

x86の例:

GOOS=linux GOARCH=amd64 go build -o func .
zip function.zip func

ARMの例:

GOOS=linux GOARCH=arm64 go build -o func .
zip function.zip func

リソースを使用する場合:

zip -r function.zip func resources/

マルチアーキテクチャGoアーカイブ

マルチアーキテクチャ・アプリケーションの場合、対応するアーキテクチャ・ディレクトリに、サポートされている各アーキテクチャについて、funcという名前の自己完結型のLinux実行可能バイナリを静的にリンクしてパッケージ化します。

archive-root/
├── fn-arch-x86/
    ├── func
    └── resources/  # optional
└── fn-arch-arm/
    ├── func
    └── resources/  # optional

ルール:

  • fn-arch-x86/は必須です。
  • fn-arch-arm/は必須です。
  • 各アーキテクチャ・ディレクトリには、funcという名前のバイナリが含まれている必要があります。
  • いずれかのアーキテクチャ・ディレクトリがない場合、アーカイブは無効です。
  • いずれかのアーキテクチャ・ディレクトリにfuncがない場合、アーカイブは無効です。
  • 各バイナリは、静的にリンクされ、自己完結型で、Linuxおよび対応するアーキテクチャ用に構築されている必要があります。

例:

mkdir -p fn-arch-x86 fn-arch-arm
GOOS=linux GOARCH=amd64 go build -o fn-arch-x86/func .
GOOS=linux GOARCH=arm64 go build -o fn-arch-arm/func .
zip -r function.zip fn-arch-x86 fn-arch-arm

オプションのリソース・ディレクトリ

ファンクションが実行時に必要とするファイル(静的ファイル、テンプレート、構成ファイルなど)には、オプションのresources/ディレクトリを使用します。

単一アーキテクチャ・アーカイブの場合は、resources/をアーカイブ・ルートに配置します。マルチアーキテクチャ・アーカイブの場合、必要に応じて、アーキテクチャ固有のリソースを各アーキテクチャ・ディレクトリに配置します。

Goコード専用ファンクションの作成

Goコード専用ファンクションを作成するには、「コード専用ファンクションの作成」の手順に従います。たとえば、コンソールを使用してGoコード専用ファンクションを作成するには:

  1. 「アプリケーション」リスト・ページで、Goコード専用関数を作成するアプリケーションを選択します。リストページまたはアプリケーションの検索に関するヘルプが必要な場合は、Listing Applicationsを参照してください。
  2. 「Functions」タブを選択します。

    「関数」リスト・ページが開きます。選択したアプリケーションのすべての関数が表に表示されます。

  3. 「アーカイブから作成」を選択し、ファイル・ソース、Goアーカイブ、Goコード専用ファンクションでサポートされるランタイムなど、Goコード専用ファンクションの詳細を指定します。

    Goコード専用関数の場合は、個別のハンドラ値を指定しないでください。アーカイブには、必要な場所にfuncという名前のLinux実行可能ファイルが含まれている必要があります。

  4. 必要に応じて、ファンクションの他の詳細を指定します(コードのみのファンクションの作成を参照)。
  5. 「作成」を選択してファンクションを作成します。

    Goコード専用ファンクションが作成され、他のファンクションと同様に起動できます。

トラブルシューティング

エラー・コード 問題 おそらく原因 推奨される修正
400 funcがないため、アーカイブの検証に失敗する バイナリが予期されたパスにありません 単一アーキテクチャ・アプリケーションの場合はアーカイブ・ルートにfuncを、複数アーキテクチャ・アプリケーションの場合は両方のアーキテクチャ・ディレクトリに配置します。
400 デプロイメント後にファンクションが失敗する バイナリは、間違ったオペレーティング・システムまたはアーキテクチャ用に構築されました GOOS=linuxおよび正しいGOARCHを使用して再構築します。
400 マルチアーキテクチャ・アーカイブが拒否されました 1つのアーキテクチャ・ディレクトリがありません fn-arch-x86/とfn-arch-arm/の両方を含めます。
400 1つのバイナリがないため、マルチアーキテクチャ・アーカイブは拒否されます 1つのアーキテクチャ・ディレクトリにはfuncは含まれません。 両方のアーキテクチャ・ディレクトリにfuncを構築し、含めます。
400 リソースが実行時に見つかりません。 リソースが予期しない場所にパッケージ化されました サポートされているresources/ディレクトリ構造を使用します。
500 アーカイブ・ファイルの処理に失敗しました 一時的エラー 再試行するか、Oracle Supportに連絡してください。