Node.jsコード専用ファンクションの作成
OCI FunctionsでNode.jsコード専用関数をパッケージ化および作成する方法をご覧ください。
コンテナ・イメージを作成せずにJavaScriptコードおよび依存関係をデプロイする場合は、Node.jsコード専用関数を使用します。
Node.jsソース・コードは、ルート・レベルのfunction/ディレクトリにパッケージ化する必要があります。
Node.jsコード専用ファンクションを作成する前に、Node.jsコード専用ファンクションに必要なアーカイブ・レイアウトを使用して、ファンクション・コードおよび依存関係をパッケージ化します。一般的なコード専用ファンクションの前提条件は、コード専用ファンクションの作成を参照してください。サポートされているNode.jsランタイム・バージョンおよびランタイム名は、コード専用関数でサポートされている言語を参照してください。
また、Node.jsコード専用関数をパッケージ化および作成するには、次のものが必要です。
- Node.js開発環境。
- JavaScript関数ファイルおよびハンドラ。
- ファンクションにNode.js依存性がある場合、それらの依存性は
node_modules/にインストールされます。 - 有効なNode.jsハンドラ値。
Node.jsアーカイブ要件
Node.jsコード専用関数の場合:
- アーカイブには、ルート・レベルの
function/ディレクトリが含まれている必要があります。 function/ディレクトリには、ハンドラ・ファイルおよびアプリケーション・ソース・コードが含まれます。- ルート・レベルの
node_modules/ディレクトリはオプションです。ファンクションにNode.js依存性がある場合にのみ含めます。 - ルート・レベルの
resources/ディレクトリはオプションで、ランタイム・リソースが含まれます。 - ルート・レベルの
native/ディレクトリは、マルチアーキテクチャのネイティブ依存性ユースケースでのみオプションです。 - 単一アーキテクチャのNode.js関数の場合、ルート・レベルの
native/は許可されません。 - ネイティブ依存性を備えた単一アーキテクチャのNode.jsファンクションの場合、ネイティブ依存性を
node_modules/の直下にパッケージ化します。 - マルチアーキテクチャのNode.js関数の場合、
native/が存在する場合は、アーキテクチャ固有のネイティブ依存性ファイルをnative/fn-arch-x86/およびnative/fn-arch-arm/の下にのみ配置します。 - ハンドラは必須です。
Node.jsハンドラ
ハンドラは、どのJavaScriptファイルを呼び出すかをOCI関数に指示します。
ハンドラの例:
func.js
単一アーキテクチャのNode.jsアーカイブ
archive-root/
├── function/
└── func.js
├── node_modules/ # optional
└── resources/ # optional
ルール:
function/は必須です。node_modules/はオプションです。resources/はオプションです。native/は、単一アーキテクチャのNode.js関数では許可されません。- 単一アーキテクチャのネイティブ依存関係の場合は、依存関係を
node_modules/の下にパッケージ化します。 - ハンドラは、
function/ディレクトリのJavaScriptファイルを参照する必要があります。
依存関係のないNode.jsソースをパッケージ化します
mkdir -p build/archive/function
cp func.js build/archive/function/
cd build/archive
zip -r ../function.zip function/
ハンドラ:
func.js
依存関係のあるNode.jsソースをパッケージ化します
mkdir -p build/archive/function
cp func.js build/archive/function/
cp package.json package-lock.json build/archive/
cd build/archive
npm ci --omit=dev
zip -r ../function.zip function/ node_modules/
リソースを使用する場合は、アーカイブ・ルートにresources/を含めます。
依存性のパッケージ化
OCI Functionsは、ファンクションの作成中にNode.js依存関係をダウンロードしません。関数を作成または更新する前に、必要な依存関係をアーカイブにパッケージ化します。
Node.js FDKは、コード専用関数の管理対象Node.jsランタイムに含まれています。FDKをアーカイブにパッケージ化する必要はありません。別のFDKバージョンをnode_modules/にパッケージ化すると、パッケージ化されたバージョンによって、ランタイムに含まれるFDKがオーバーライドされます。本番にデプロイする前に互換性を検証してください。
ネイティブ依存性を持つNode.jsアーカイブ
Node.js関数は、.nodeバイナリやnode-gypなどのツールを使用して構築されたネイティブ・アドオンなどのコンパイル済ネイティブ・コードを含むパッケージに依存できます。
単一アーキテクチャのNode.js関数の場合:
- ルート・レベルの
native/は含めないでください。 - ネイティブ依存性を
node_modules/のすぐ下にパッケージ化します。 - 依存関係が正しいLinuxプラットフォームおよびアーキテクチャ用に構築されていることを確認します。
複数アーキテクチャのNode.js関数の場合:
function/の下のパッケージ・ソース。- 必要に応じて、
node_modules/の下に共有依存関係をパッケージ化します。 - アーキテクチャ固有のネイティブ依存関係のパッケージ化:
native/fn-arch-x86/native/fn-arch-arm/
archive-root/
├── function/
└── func.js
├── node_modules/ # optional
├── resources/ # optional
└── native/
├── fn-arch-x86/
└── fn-arch-arm/
ルール:
native/は、ファンクションがマルチアーキテクチャ・アプリケーションでアーキテクチャ固有のネイティブ依存関係を使用する場合にのみ必要です。- マルチアーキテクチャ・アプリケーションに
native/が存在する場合は、fn-arch-x86/とfn-arch-arm/の両方が含まれている必要があります。 - ネイティブ依存性ファイルは、一致するアーキテクチャ・ディレクトリの下にのみ配置します。
node_modules/は、非ネイティブまたは共有の依存関係に対しても使用できます。function/は常に必須です。
Node.jsランタイム動作
Node.js FDKは、コード専用関数の管理対象Node.jsランタイムに含まれています。ハンドラ・ファイル、アプリケーション・コードおよび必要な依存関係をアーカイブにパッケージ化します。
Node.jsコード専用ファンクションの作成
共有コードのみの関数作成ステップを使用します。サポートされているNode.jsランタイムを選択し、Node.jsハンドラを入力して、Node.jsアーカイブを指定します。
Node.js関数が作成され、他の関数と同様に起動できます。
Node.jsコード専用関数を作成するには、コード専用関数の作成の手順に従います。たとえば、コンソールを使用してNode.jsコード専用ファンクションを作成するには:
- 「アプリケーション」リスト・ページで、Node.jsコード専用ファンクションを作成するアプリケーションを選択します。リストページまたはアプリケーションの検索に関するヘルプが必要な場合は、Listing Applicationsを参照してください。
-
「Functions」タブを選択します。
「関数」リスト・ページが開きます。選択したアプリケーションのすべての関数が表に表示されます。
- 「アーカイブから作成」を選択し、ファイル・ソース、Node.jsアーカイブ、サポートされているNode.jsランタイム、Node.jsハンドラなど、Node.jsコード専用関数の詳細を指定します。
Node.jsコード専用関数の場合、関数の作成時にハンドラを指定する必要があります。
- 必要に応じて、ファンクションの他の詳細を指定します(コードのみのファンクションの作成を参照)。
- 「作成」を選択してファンクションを作成します。
Node.jsコード専用関数が作成され、他の関数と同様に起動できます。
トラブルシューティング
| エラー・コード | 問題 | おそらく原因 | 推奨される修正 |
|---|---|---|---|
400 |
function/がないため、アーカイブの検証に失敗する |
ソースファイルはZIPルートまたは間違ったフォルダにあります | ハンドラおよびアプリケーション・コードをfunction/の下に配置します。 |
400 |
ハンドラが見つかりません | ハンドラ・ファイルがアーカイブと一致しません | ハンドラ・ファイルがfunction/の下に存在することを確認します。 |
400 |
依存関係がないため、関数が失敗します | 依存性はnode_modules/の下にパッケージ化されませんでした |
npm ci --omit=devを実行し、node_modules/をZIPに含めます。 |
400 |
ネイティブ依存関係に互換性がないため、関数は失敗します | 依存関係はmacOS、Windows、または間違ったLinuxアーキテクチャ用に構築されました | 正しいLinuxアーキテクチャの依存関係を構築またはダウンロードします。 |
400 |
単一アーキテクチャ・アーカイブが検証に失敗する | ルート・レベルのnative/ディレクトリが存在します |
native/を削除します。node_modules/の下に単一アーキテクチャのネイティブ依存性をパッケージ化します。 |
400 |
マルチアーキテクチャのネイティブ・アーカイブが検証に失敗する | 1つのアーキテクチャ・ディレクトリがありません | native/fn-arch-x86/とnative/fn-arch-arm/の両方を含めます。 |
400 |
ネイティブ・アーカイブの検証に失敗しました | ファイルはnative/の直下に配置されました。 |
native/fn-arch-x86/またはnative/fn-arch-arm/の下にファイルを移動します。 |