ZIPファイルのクラウド実行環境へのデプロイ
このチュートリアルでは、ZIPアーカイブ型のクラウド実行環境にアプリケーションをデプロイし、HTTPトリガーで実行する方法を説明します。(所要時間30分)
Node.jsとPythonの両方のサンプルを提供します。
Table of Contents
Node.jsアプリケーションの作成とデプロイ
Node.jsアプリケーションの作成
まず、Node.jsでシンプルなLambda関数を作成します。
プロジェクトの初期化
作業用のディレクトリを作成し、Node.jsプロジェクトを初期化します。
mkdir nodejs-app
cd nodejs-app
npm init -y
npm init -yコマンドにより、package.jsonがデフォルト設定で作成されます。
依存パッケージのインストール(オプション)
このサンプルでは外部パッケージを使用しませんが、必要に応じて以下のようにパッケージをインストールできます。
# 例: axiosパッケージをインストールする場合
npm install axios
パッケージをインストールした場合、後述のZIPファイル作成時にnode_modulesディレクトリも含める必要があります。
Lambda関数の作成
プロジェクトディレクトリ内に、以下の内容でindex.jsファイルを作成します。
index.js
exports.handler = async (event) => {
console.log('Event:', JSON.stringify(event, null, 2));
const response = {
statusCode: 200,
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({
message: 'Hello from enebular ZIP deployment!',
timestamp: new Date().toISOString(),
event: event
})
};
return response;
};
```
このコードは、HTTPリクエストを受け取り、リクエストの詳細情報を含むJSON形式のレスポンスを返すLambda関数です。
package.jsonの確認
作成されたpackage.jsonは以下のような内容になっています。
{
"name": "nodejs-app",
"version": "1.0.0",
"description": "enebular ZIP deployment sample",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
必要に応じて、descriptionやauthorなどを編集できます。
重要な注意事項:
package.jsonに"type": "module"の記載が含まれている場合は、削除してください。Lambda関数はCommonJS形式(exports.handler)で記述しているため、ES Modules形式("type": "module")との互換性がありません。
"type": "module"が含まれていると、index.mjsが見つからないというエラーが発生します。
正しいpackage.jsonの例:
{
"name": "nodejs-app",
"version": "1.0.0",
"description": "enebular ZIP deployment sample",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC"
}
"type": "module"が含まれていないことを確認してください。
ZIPファイルの作成
作成したアプリケーションをZIPファイルにパッケージ化します。
プロジェクトディレクトリ(nodejs-app)内で、以下のコマンドを実行します。
macOS/Linuxの場合:
# 外部パッケージを使用していない場合
zip -r ../nodejs-app.zip index.js package.json
# 外部パッケージを使用している場合(node_modulesを含める)
zip -r ../nodejs-app.zip index.js package.json node_modules/
Windowsの場合:
index.jsとpackage.json(およびnode_modulesフォルダーがあれば含める)を選択します- 右クリックして「送る」→「圧縮(zip形式)フォルダー」を選択します
nodejs-app.zipという名前で保存します
ZIPファイルが作成されたら、プロジェクトディレクトリの親ディレクトリ(../nodejs-app.zip)に保存されています。
ZIPファイルの構造確認:
作成したZIPファイルの構造が正しいか確認します。ZIPファイルを解凍せずに中身を確認するには:
# macOS/Linux
unzip -l nodejs-app.zip
# 正しい構造の例:
# Archive: nodejs-app.zip
# Length Date Time Name
# --------- ---------- ----- ----
# 500 2025-01-15 10:00 index.js
# 200 2025-01-15 10:00 package.json
重要: ZIPファイルのルートディレクトリに直接index.jsとpackage.jsonが配置されている必要があります。
誤った構造の例(親フォルダーが含まれている):
nodejs-app/
├── index.js
└── package.json
正しい構造:
index.js
package.json
もし親フォルダーが含まれている場合は、以下のように修正してください:
# nodejs-appディレクトリ内で実行(親フォルダーを含めない)
cd nodejs-app
zip -r ../nodejs-app.zip index.js package.json
# または、既存のZIPファイルを削除して再作成
注意事項:
- ZIPファイルのサイズは250MB以下である必要があります
- ZIPファイル内のファイル構造は、ルートに
index.jsとpackage.jsonが配置されている必要があります node_modulesを含める場合、不要な開発用パッケージは除外することでファイルサイズを削減できます
enebularへのZIPファイル登録
作成したZIPファイルをenebularに登録します。
- プロジェクトのメニューから ファイル を選択します
- 右下の + ボタンをクリックします
- デプロイ先でクラウド実行環境を選択します
- 以下の項目を入力します:
- ファイル: 作成した
nodejs-app.zipを選択 - 名称:
nodejs-hello-world(任意の名前) - 詳細:
Node.js Hello World application(任意) - ハンドラー:
index.handler
- ファイル: 作成した
- アップロードボタンをクリックします
ハンドラーの説明:
index.handlerは以下の形式です:
index= ファイル名(index.jsの拡張子を除いた部分)handler=index.js内でエクスポートされている関数名(exports.handlerの部分)
詳細な手順については、ファイルの登録を参照してください。
クラウド実行環境の作成
ZIP向けクラウド実行環境を作成します。
- プロジェクトのサイドバーからクラウド実行環境を選択します
- 右下の + ボタンをクリックします
- 以下の項目を設定します:
- 名称:
nodejs-zip-env(任意の名前) - .zipファイルアーカイブのデプロイ: チェックをオンにします
- ランタイム:
Node.js 22.xを選択 - アーキテクチャ:
ARM64を選択
- 名称:
- OK ボタンをクリックします
作成が完了するまで待機します。完了後、クラウド実行環境の概要タブに遷移します。
詳細な手順については、クラウド実行環境の管理を参照してください。
ZIPファイルのデプロイ
登録したZIPファイルをクラウド実行環境にデプロイします。
ファイルの詳細画面からデプロイする場合:
- プロジェクトのメニューからファイルを選択します
- 登録した
nodejs-hello-worldファイルをクリックします - デプロイボタンをクリックします
- クラウド実行環境
nodejs-zip-envを選択します - デプロイボタンをクリックします
クラウド実行環境の概要タブからデプロイする場合:
- プロジェクトのサイドバーからクラウド実行環境を選択します
- 作成した
nodejs-zip-envをクリックします - デプロイボタンをクリックします
- 登録したファイル
nodejs-hello-worldを選択します - デプロイボタンをクリックします
デプロイが完了すると、デプロイ履歴にデプロイ済みのステータスが表示されます。
詳細な手順については、ファイルのデプロイを参照してください。
HTTPトリガーの設定
デプロイが完了したら、HTTPトリガーを設定してアプリケーションを呼び出せるようにします。
- クラウド実行環境の詳細画面で設定タブをクリックします
- 設定を編集するボタンをクリックします
- HTTPトリガーセクションで、トグルスイッチをONにします
- パスに任意の文字列を入力します(例:
nodejs-hello)- 注意: 同じパスはenebular内で1つしか使えません。エラーが表示された場合は、別の文字列を入力してください
- 画面下部の保存ボタンをクリックします
「更新に成功しました」と表示されれば、HTTPトリガーの設定完了です。
動作確認
HTTPトリガーの設定が完了したら、アプリケーションを実行してみましょう。
ブラウザからアクセス:
- クラウド実行環境の設定画面で、HTTPトリガー欄のURLの横にあるコピーアイコンをクリックします
- 新しいブラウザタブを開き、コピーしたURLにアクセスします
- 以下のようなJSON形式のレスポンスが表示されます:
{
"message": "Hello from enebular ZIP deployment!",
"timestamp": "2025-01-15T12:34:56.789Z",
"event": {...}
}
Pythonアプリケーションの作成とデプロイ
Pythonアプリケーションの作成
次に、PythonでシンプルなLambda関数を作成します。
作業用のディレクトリを作成し、以下のファイルを作成してください。
lambda_function.py
import json
from datetime import datetime
def lambda_handler(event, context):
print(f'Event: {json.dumps(event)}')
response = {
'statusCode': 200,
'headers': {
'Content-Type': 'application/json'
},
'body': json.dumps({
'message': 'Hello from enebular ZIP deployment with Python!',
'timestamp': datetime.now().isoformat(),
'event': event
})
}
return response
このコードは、HTTPリクエストを受け取り、JSON形式のレスポンスを返すシンプルなLambda関数です。
ZIPファイルの作成
作成したアプリケーションをZIPファイルにパッケージ化します。
macOS/Linuxの場合:
zip -r python-app.zip lambda_function.py
Windowsの場合:
lambda_function.pyを右クリックして「送る」→「圧縮(zip形式)フォルダー」を選択し、python-app.zipという名前で保存します。
注意: ZIPファイルのサイズは250MB以下である必要があります。
enebularへのZIPファイル登録
作成したZIPファイルをenebularに登録します。
- プロジェクトのメニューからファイルを選択します
- 右下の + ボタンをクリックします
- デプロイ先でクラウド実行環境を選択します
- 以下の項目を入力します:
- ファイル: 作成した
python-app.zipを選択 - 名称:
python-hello-world(任意の名前) - 詳細:
Python Hello World application(任意) - ハンドラー:
lambda_function.lambda_handler
- ファイル: 作成した
- アップロードボタンをクリックします
詳細な手順については、ファイルの登録を参照してください。
クラウド実行環境の作成
Pythonランタイム用のZIPファイル向けクラウド実行環境を作成します。
- プロジェクトのサイドバーからクラウド実行環境を選択します
- 右下の + ボタンをクリックします
- 以下の項目を設定します:
- 名称:
python-zip-env(任意の名前) - .zipファイルアーカイブのデプロイ: チェックをオンにします
- ランタイム:
Python 3.13を選択 - アーキテクチャ:
ARM64を選択
- 名称:
- OKボタンをクリックします
作成が完了するまで待機します。完了後、クラウド実行環境の概要画面に遷移します。
詳細な手順については、クラウド実行環境の管理を参照してください。
ZIPファイルのデプロイ
登録したZIPファイルをクラウド実行環境にデプロイします。
ファイルの詳細画面からデプロイする場合:
- プロジェクトのメニューから ファイル を選択します
- 登録した
python-hello-worldファイルをクリックします - デプロイボタンをクリックします
- 作成したクラウド実行環境
python-zip-envを選択します - デプロイボタンをクリックします
クラウド実行環境の詳細画面からデプロイする場合:
- プロジェクトのサイドバーからクラウド実行環境を選択します
- 作成した
python-zip-envをクリックします - デプロイボタンをクリックします
- 登録したファイル
python-hello-worldを選択します - デプロイボタンをクリックします
デプロイが完了すると、デプロイ履歴にデプロイ成功のステータスが表示されます。
詳細な手順については、ファイルのデプロイを参照してください。
HTTPトリガーの設定
デプロイが完了したら、HTTPトリガーを設定してアプリケーションを呼び出せるようにします。
- クラウド実行環境の詳細画面で設定タブをクリックします
- 設定を編集するボタンをクリックします
- HTTPトリガーセクションで、トグルスイッチをONにします
- パスに任意の文字列を入力します(例:
python-hello)- 注意: 同じパスはenebular内で1つしか使えません。エラーが表示された場合は、別の文字列を入力してください
- 画面下部の保存ボタンをクリックします
「更新に成功しました」と表示されれば、HTTPトリガーの設定完了です。
動作確認
HTTPトリガーの設定が完了したら、アプリケーションを実行してみましょう。
ブラウザからアクセス:
- クラウド実行環境の設定画面で、HTTPトリガー欄のURLの横にあるコピーアイコンをクリックします
- 新しいブラウザタブを開き、コピーしたURLにアクセスします
- 以下のようなJSON形式のレスポンスが表示されます:
{
"message": "Hello from enebular ZIP deployment with Python!",
"timestamp": "2025-01-15T12:34:56.789000",
"event": {...}
}
データストアを利用するアプリの開発
Node.jsやPythonからデータストアにアクセスするアプリケーションを作成することもできます。 データストアにアクセスするアプリケーションを作成するには以下のモジュールを利用頂く必要があります。
- Node.js: npmjs - enebular-sdk TODO: npmjsのURLが決まったら修正予定
- Python: pypi - enebular-sdk TODO: pypiのURLが決まったら修正予定
利用方法については、上記各モジュールのリンク先をご確認ください。
まとめ
このチュートリアルでは、以下の手順を学びました:
- Node.jsとPythonでシンプルなLambda関数を作成する
- アプリケーションをZIPファイルにパッケージ化する
- enebularにZIPファイルを登録する
- ZIPアーカイブ型のクラウド実行環境を作成する
- ZIPファイルをクラウド実行環境にデプロイする
- HTTPトリガーを設定してアプリケーションを公開する
- ブラウザでアプリケーションの動作を確認する
これで、enebularを使用してサーバーレスアプリケーションをデプロイし、HTTPトリガーで実行できるようになりました。