このトピックでは、Node.js コードのサードパーティの依存関係をインストールし、コードをパッケージ化して Function Compute にデプロイする方法について説明します。このトピックでは、サードパーティの emoji 依存関係ライブラリを例として使用します。
準備
テスト用のコードディレクトリを作成し、ディレクトリの名前を指定します。この例では、
mycodeを使用します。Linux および macOS
mkdir -p /tmp/mycodeコマンドを実行してディレクトリを作成します。Windows
フォルダを作成し、
mycodeという名前を付けます。
mycode ディレクトリに
index.mjsまたはindex.jsファイルを作成します。次のコードは例を示しています。
ECMAScript モジュール
説明この例は、Node.js 18 以降のみをサポートします。
// index.mjs 'use strict'; import * as emoji from 'node-emoji' export const handler = async (event, context) => { console.log('hello world'); return emoji.get(':unicorn:'); }CommonJS モジュール
// index.js 'use strict'; var emoji = require('node-emoji') exports.handler = (event, context, callback) => { console.log('hello world'); callback(null, emoji.get(':unicorn:')); }
npm を使用して依存関係をインストールし、コードをデプロイする
前提条件
オンプレミスのマシンに npm がインストールされており、npm コマンドを実行する権限が取得されていること。
Function Compute コンソールで Node.js 関数が作成されていること。詳細については、「イベント関数を作成する」をご参照ください。
手順
mycodeディレクトリでnpm install node-emojiコマンドを実行して、現在のディレクトリに emoji 依存関係ライブラリをインストールします。mycodeディレクトリ内のすべてのファイルをパッケージ化します。Linux および macOS
mycodeディレクトリに移動し、zip code.zip -r ./*を実行します。説明ディレクトリに対する読み取りおよび書き込み権限があることを確認してください。
Windows
mycodeディレクトリに移動し、すべてのファイルを選択して右クリックし、ファイルを .zip ファイルに圧縮します。
説明作成した
index.jsファイルがパッケージのルートディレクトリにあることを確認してください。Function Compute コンソールで、管理する関数を見つけます。関数詳細ページの右上隅にある [コードのアップロード] をクリックし、準備した ZIP パッケージをアップロードします。
コードがアップロードされたら、[コード] タブで [関数のテスト] をクリックして、コードが正しいかどうかを確認できます。
Function Compute は Linux 環境で実行されます。Windows または macOS デバイスに emoji 依存関係ライブラリをインストールする際にバイナリファイルが含まれていると、コードパッケージの実行に失敗します。Function Compute したがって、WebIDE を使用してサードパーティの依存関係をパッケージ化するか、Serverless Devs を使用して依存関係をインストールし、プロジェクトをデプロイすることをお勧めします。詳細については、「WebIDE を使用して関数のサードパーティ依存関係をパッケージ化する」および「Serverless Devs を使用して依存関係をインストールし、プロジェクトをデプロイする」をご参照ください。
Serverless Devs を使用して依存関係をインストールし、コードをデプロイする
前提条件
Serverless Devs と依存関係がインストールされていること。詳細については、「クイックスタート」をご参照ください。
Serverless Devs が設定されていること。詳細については、「Serverless Devs の設定」をご参照ください。
手順
cd /tmp/mycodeコマンドを実行してmycodeディレクトリに移動します。s.yamlファイルを作成します。次のサンプルコードは、ファイルの編集方法の例を示しています。
edition: 3.0.0 name: fcDeployApp access: "default" vars: # グローバル変数。 region: "cn-hangzhou" resources: hello_world: component: fc3 # コンポーネントの名前。 props: region: ${vars.region} # 変数の使用方法については、https://docs.serverless-devs.com/serverless-devs/yaml#%E5%8F%98%E9%87%8F%E8%B5%8B%E5%80%BC をご覧ください。 functionName: "emoji" description: 'this is emoji' runtime: "nodejs18" code: ./ handler: index.handler memorySize: 128 timeout: 30package.jsonファイルを追加します。次のサンプルコードは、ファイルの編集方法の例を示しています。
{ "dependencies": { "node-emoji": "^1.11.0" } }sudo s build --use-dockerを実行して依存関係をインストールします。実行が完了すると、
mycodeディレクトリに.sディレクトリが生成され、依存関係は.s/build/artifacts/{functionName}ディレクトリにインストールされます。sudo s deployを実行してプロジェクトをデプロイします。実行後、関数を Function Compute にデプロイできます。
重要な注意
Node.js のカスタムランタイムを使用し、コンパイル済みの実行可能ファイルを起動コマンドとして指定する場合、WebIDE で直接ソースコードを修正しても効果はありません。これは、関数が以前にコンパイルされた実行可能ファイルを実行し続けるためです。コードの変更を適用するには、ソースコードをローカルで更新し、実行可能ファイルを再コンパイルしてパッケージ化し、更新されたパッケージを WebIDE にアップロードしてから、関数を再実行する必要があります。
詳細情報
コードパッケージが大きすぎる場合は、依存関係を分離し、レイヤーをビルドして、ビジネスコードのみをアップロードできます。詳細については、次のトピックをご参照ください。