ZIPファイルのクラウド実行環境へのデプロイ

このチュートリアルでは、ZIPアーカイブ型のクラウド実行環境にアプリケーションをデプロイし、HTTPトリガーで実行する方法を説明します。(所要時間30分)

Node.jsとPythonの両方のサンプルを提供します。

Table of Contents

  1. Node.jsアプリケーションの作成とデプロイ
    1. Node.jsアプリケーションの作成
    2. ZIPファイルの作成
    3. enebularへのZIPファイル登録
    4. クラウド実行環境の作成
    5. ZIPファイルのデプロイ
    6. HTTPトリガーの設定
    7. 動作確認
  2. Pythonアプリケーションの作成とデプロイ
    1. Pythonアプリケーションの作成
    2. ZIPファイルの作成
    3. enebularへのZIPファイル登録
    4. クラウド実行環境の作成
    5. ZIPファイルのデプロイ
    6. HTTPトリガーの設定
    7. 動作確認

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"
}

必要に応じて、descriptionauthorなどを編集できます。

重要な注意事項:

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の場合:

  1. index.jspackage.json(およびnode_modulesフォルダーがあれば含める)を選択します
  2. 右クリックして「送る」→「圧縮(zip形式)フォルダー」を選択します
  3. 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.jspackage.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.jspackage.jsonが配置されている必要があります
  • node_modulesを含める場合、不要な開発用パッケージは除外することでファイルサイズを削減できます

enebularへのZIPファイル登録

作成したZIPファイルをenebularに登録します。

  1. プロジェクトのメニューから ファイル を選択します
  2. 右下の + ボタンをクリックします
  3. デプロイ先クラウド実行環境を選択します
  4. 以下の項目を入力します:
    • ファイル: 作成したnodejs-app.zipを選択
    • 名称: nodejs-hello-world(任意の名前)
    • 詳細: Node.js Hello World application(任意)
    • ハンドラー: index.handler
  5. アップロードボタンをクリックします

ハンドラーの説明:

index.handlerは以下の形式です:

  • index = ファイル名(index.jsの拡張子を除いた部分)
  • handler = index.js内でエクスポートされている関数名(exports.handlerの部分)

詳細な手順については、ファイルの登録を参照してください。

クラウド実行環境の作成

ZIP向けクラウド実行環境を作成します。

  1. プロジェクトのサイドバーからクラウド実行環境を選択します
  2. 右下の + ボタンをクリックします
  3. 以下の項目を設定します:
    • 名称: nodejs-zip-env(任意の名前)
    • .zipファイルアーカイブのデプロイ: チェックをオンにします
    • ランタイム: Node.js 22.xを選択
    • アーキテクチャ: ARM64を選択
  4. OK ボタンをクリックします

作成が完了するまで待機します。完了後、クラウド実行環境の概要タブに遷移します。

詳細な手順については、クラウド実行環境の管理を参照してください。

ZIPファイルのデプロイ

登録したZIPファイルをクラウド実行環境にデプロイします。

ファイルの詳細画面からデプロイする場合:

  1. プロジェクトのメニューからファイルを選択します
  2. 登録したnodejs-hello-worldファイルをクリックします
  3. デプロイボタンをクリックします
  4. クラウド実行環境nodejs-zip-envを選択します
  5. デプロイボタンをクリックします

クラウド実行環境の概要タブからデプロイする場合:

  1. プロジェクトのサイドバーからクラウド実行環境を選択します
  2. 作成したnodejs-zip-envをクリックします
  3. デプロイボタンをクリックします
  4. 登録したファイルnodejs-hello-worldを選択します
  5. デプロイボタンをクリックします

デプロイが完了すると、デプロイ履歴にデプロイ済みのステータスが表示されます。

詳細な手順については、ファイルのデプロイを参照してください。

HTTPトリガーの設定

デプロイが完了したら、HTTPトリガーを設定してアプリケーションを呼び出せるようにします。

  1. クラウド実行環境の詳細画面で設定タブをクリックします
  2. 設定を編集するボタンをクリックします
  3. HTTPトリガーセクションで、トグルスイッチをONにします
  4. パスに任意の文字列を入力します(例: nodejs-hello)
    • 注意: 同じパスはenebular内で1つしか使えません。エラーが表示された場合は、別の文字列を入力してください
  5. 画面下部の保存ボタンをクリックします

「更新に成功しました」と表示されれば、HTTPトリガーの設定完了です。

動作確認

HTTPトリガーの設定が完了したら、アプリケーションを実行してみましょう。

ブラウザからアクセス:

  1. クラウド実行環境の設定画面で、HTTPトリガー欄のURLの横にあるコピーアイコンをクリックします
  2. 新しいブラウザタブを開き、コピーしたURLにアクセスします
  3. 以下のような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に登録します。

  1. プロジェクトのメニューからファイルを選択します
  2. 右下の + ボタンをクリックします
  3. デプロイ先クラウド実行環境を選択します
  4. 以下の項目を入力します:
    • ファイル: 作成したpython-app.zipを選択
    • 名称: python-hello-world(任意の名前)
    • 詳細: Python Hello World application(任意)
    • ハンドラー: lambda_function.lambda_handler
  5. アップロードボタンをクリックします

詳細な手順については、ファイルの登録を参照してください。

クラウド実行環境の作成

Pythonランタイム用のZIPファイル向けクラウド実行環境を作成します。

  1. プロジェクトのサイドバーからクラウド実行環境を選択します
  2. 右下の + ボタンをクリックします
  3. 以下の項目を設定します:
    • 名称: python-zip-env(任意の名前)
    • .zipファイルアーカイブのデプロイ: チェックをオンにします
    • ランタイム: Python 3.13を選択
    • アーキテクチャ: ARM64を選択
  4. OKボタンをクリックします

作成が完了するまで待機します。完了後、クラウド実行環境の概要画面に遷移します。

詳細な手順については、クラウド実行環境の管理を参照してください。

ZIPファイルのデプロイ

登録したZIPファイルをクラウド実行環境にデプロイします。

ファイルの詳細画面からデプロイする場合:

  1. プロジェクトのメニューから ファイル を選択します
  2. 登録したpython-hello-worldファイルをクリックします
  3. デプロイボタンをクリックします
  4. 作成したクラウド実行環境python-zip-envを選択します
  5. デプロイボタンをクリックします

クラウド実行環境の詳細画面からデプロイする場合:

  1. プロジェクトのサイドバーからクラウド実行環境を選択します
  2. 作成したpython-zip-envをクリックします
  3. デプロイボタンをクリックします
  4. 登録したファイルpython-hello-worldを選択します
  5. デプロイボタンをクリックします

デプロイが完了すると、デプロイ履歴にデプロイ成功のステータスが表示されます。

詳細な手順については、ファイルのデプロイを参照してください。

HTTPトリガーの設定

デプロイが完了したら、HTTPトリガーを設定してアプリケーションを呼び出せるようにします。

  1. クラウド実行環境の詳細画面で設定タブをクリックします
  2. 設定を編集するボタンをクリックします
  3. HTTPトリガーセクションで、トグルスイッチをONにします
  4. パスに任意の文字列を入力します(例: python-hello)
    • 注意: 同じパスはenebular内で1つしか使えません。エラーが表示された場合は、別の文字列を入力してください
  5. 画面下部の保存ボタンをクリックします

「更新に成功しました」と表示されれば、HTTPトリガーの設定完了です。

動作確認

HTTPトリガーの設定が完了したら、アプリケーションを実行してみましょう。

ブラウザからアクセス:

  1. クラウド実行環境の設定画面で、HTTPトリガー欄のURLの横にあるコピーアイコンをクリックします
  2. 新しいブラウザタブを開き、コピーしたURLにアクセスします
  3. 以下のようなJSON形式のレスポンスが表示されます:
{
  "message": "Hello from enebular ZIP deployment with Python!",
  "timestamp": "2025-01-15T12:34:56.789000",
  "event": {...}
}

データストアを利用するアプリの開発

Node.jsやPythonからデータストアにアクセスするアプリケーションを作成することもできます。 データストアにアクセスするアプリケーションを作成するには以下のモジュールを利用頂く必要があります。

利用方法については、上記各モジュールのリンク先をご確認ください。

まとめ

このチュートリアルでは、以下の手順を学びました:

  1. Node.jsとPythonでシンプルなLambda関数を作成する
  2. アプリケーションをZIPファイルにパッケージ化する
  3. enebularにZIPファイルを登録する
  4. ZIPアーカイブ型のクラウド実行環境を作成する
  5. ZIPファイルをクラウド実行環境にデプロイする
  6. HTTPトリガーを設定してアプリケーションを公開する
  7. ブラウザでアプリケーションの動作を確認する

これで、enebularを使用してサーバーレスアプリケーションをデプロイし、HTTPトリガーで実行できるようになりました。

results matching ""

    No results matching ""