コード専用関数のパッケージング・アーカイブ
OCI Functionsのコード専用関数のアーカイブ要件(ランタイム固有およびアーキテクチャ固有のパッケージング・ルールを含む)についてご確認ください。
概要
コード専用ファンクション・アーカイブでは、選択したランタイムとOCI Functionsアプリケーションのアーキテクチャで想定される構造を使用する必要があります。コードのみの関数ではx86、Armおよびマルチアーキテクチャ・アプリケーションがサポートされ、アーカイブ・レイアウトはアプリケーション・シェイプと一致する必要があります。
サポートされるアーカイブ形式
コードのみの機能はZIPアーカイブをサポートします。
Javaコード専用関数の場合、単純な関数にJARファイルを使用することもできます。ファンクションにランタイム固有のアーカイブ・ディレクトリ、リソースまたはネイティブ依存性が含まれている場合は、Javaコード専用ファンクションにZIPアーカイブを使用します。指定するJARファイルは、uber/fat JARである必要があります。
実行時アーカイブのサマリー
コード専用関数のアーカイブ・レイアウトは、ランタイムと、アプリケーションで単一のアーキテクチャ・シェイプと複数アーキテクチャ・シェイプのどちらを使用するかによって異なります。
| ランタイム | 必要なファンクション・コードまたはアーティファクト | オプション・リソース | オプションの依存関係 | ハンドラの要件 |
|---|---|---|---|---|
| 移動 | funcという名前の、静的にリンクされた自己完結型のLinux実行可能バイナリ。単一アーキテクチャ・アプリケーションの場合は、funcをアーカイブ・ルートに配置します。マルチアーキテクチャ・アプリケーションの場合は、funcをfn-arch-x86/とfn-arch-arm/の両方の下に配置します。 |
resources/という名前のディレクトリはオプションです。マルチアーキテクチャGoアーカイブの場合は、必要に応じて各アーキテクチャ・ディレクトリ内にresources/を配置します。 |
Go実行可能ファイルに依存性をパッケージ化します。 | 個別のハンドラ・プロパティがありません。実行可能ファイルの名前はfuncである必要があります。 |
| Java | 単純な関数用のUber/fat JARファイル、またはルート・レベルのuber/fat JARファイルが1つのみ含まれるZIPアーカイブ。 | ZIPアーカイブを使用する場合、resources/という名前のディレクトリはアーカイブ・ルートでオプションです。 |
ネイティブ依存性が必要な場合、native/という名前のディレクトリはオプションです。ネイティブ依存ファイルを、アプリケーション・シェイプに必要なアーキテクチャ固有のディレクトリに配置します。 |
ハンドラが必要です。 |
| Node.js | ハンドラJavaScriptファイルを含むfunction/ディレクトリ。 |
resources/という名前のディレクトリは、アーカイブ・ルートではオプションです。 |
node_modules/という名前のディレクトリはオプションです。マルチアーキテクチャのネイティブ依存関係の場合、native/はオプションですが、存在する場合は、fn-arch-x86/とfn-arch-arm/の両方が含まれている必要があります。 |
ハンドラが必要です。 |
| Python | ハンドラPythonファイルを含むfunction/ディレクトリ。 |
resources/という名前のディレクトリは、アーカイブ・ルートではオプションです。 |
python/という名前のディレクトリはオプションです。マルチアーキテクチャのネイティブ依存関係の場合、native/はオプションですが、存在する場合は、fn-arch-x86/とfn-arch-arm/の両方が含まれている必要があります。 |
<file>.<function>形式で必要なハンドラ。 |
アプリケーション・アーキテクチャがアーカイブ・レイアウトに与える影響
アプリケーション・シェイプによって、アプリケーションの機能を実行できるプロセッサ・アーキテクチャが決まります。コード専用ファンクション・アーカイブには、アプリケーションのシェイプに必要なファイルが含まれている必要があります。
単一アーキテクチャ・シェイプのアプリケーションの場合、選択したアーキテクチャのファイルをパッケージ化します。マルチアーキテクチャ・シェイプのアプリケーションの場合、ランタイムにアーキテクチャ固有のファイルが必要なときに、x86アーキテクチャとArmアーキテクチャの両方のファイルをパッケージ化します。
アーキテクチャ固有のパッケージ化は、関数にCPUアーキテクチャに固有のコンパイル済アーティファクトが含まれている場合に最も重要です。
たとえば、Go関数は、静的にリンクされた自己完結型のLinux実行可能バイナリとしてコンパイルされます。静的にリンクされたバイナリでは、アプリケーションで実行する必要があるすべての外部ライブラリ、依存関係、および実行時コードがコンパイルされ、単一の独立した実行可能ファイルに直接パックされます。Node.js、PythonおよびJava関数には、関数で使用されるオペレーティング・システムおよびプロセッサ・アーキテクチャと一致する必要があるネイティブ依存関係を含めることもできます。
アプリケーション・シェイプの選択の詳細は、ファンクションを実行するコンピュート・アーキテクチャの指定を参照してください。実行時固有のアーカイブ・レイアウトについては、次のトピックを参照してください。
ネイティブ依存関係
ネイティブ依存関係は、関数が実行時に使用するコンパイル済みライブラリまたはバイナリです。ネイティブ依存性は、x86上のLinuxやArm上のLinuxなど、特定のオペレーティング・システムおよびプロセッサ・アーキテクチャ用に構築されます。
ネイティブ依存性はプラットフォーム固有であるため、ファンクションを実行できるアーキテクチャ用にパッケージ化します。アプリケーションが単一アーキテクチャ・シェイプを使用する場合は、そのアーキテクチャのネイティブ依存関係を含めます。アプリケーションでマルチアーキテクチャ・シェイプを使用する場合は、ランタイム固有のアーカイブ・レイアウトを使用して、x86アーキテクチャとArmアーキテクチャの両方のネイティブ依存関係を含めます。
依存関係のインストール
PythonおよびNode.jsコード専用関数の場合、OCI Functionsはファンクションの作成中にユーザーの依存関係をダウンロードしません。関数を作成または更新する前に、必要な依存関係をアーカイブにパッケージ化します。