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コード専用ファンクションを作成するには:
- 「アプリケーション」リスト・ページで、Goコード専用関数を作成するアプリケーションを選択します。リストページまたはアプリケーションの検索に関するヘルプが必要な場合は、Listing Applicationsを参照してください。
-
「Functions」タブを選択します。
「関数」リスト・ページが開きます。選択したアプリケーションのすべての関数が表に表示されます。
- 「アーカイブから作成」を選択し、ファイル・ソース、Goアーカイブ、Goコード専用ファンクションでサポートされるランタイムなど、Goコード専用ファンクションの詳細を指定します。
Goコード専用関数の場合は、個別のハンドラ値を指定しないでください。アーカイブには、必要な場所に
funcという名前のLinux実行可能ファイルが含まれている必要があります。 - 必要に応じて、ファンクションの他の詳細を指定します(コードのみのファンクションの作成を参照)。
- 「作成」を選択してファンクションを作成します。
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に連絡してください。 |