コンテンツにスキップ

Luaエントリ種別

Luaベースエントリの設定:関数、プロセス、ワークフロー、ライブラリ。

種別説明
function.luaステートレス関数、オンデマンド実行
process.lua状態を持つ長時間実行アクター
workflow.lua耐久性のあるワークフロー(Temporal)
library.lua他のエントリにインポートされる共有コード
module.luaモジュール表面(複数メソッドのライブラリ)

各種別には事前コンパイル済みのバイトコード対応版(function.lua.bclibrary.lua.bcprocess.lua.bcworkflow.lua.bc)があり、wippy pack --bytecode によって生成されます。作成者は .lua エントリを書き、バイトコード種別はパック時に自動生成されます。

すべてのLuaエントリは以下のフィールドを共有:

フィールド必須説明
nameyes名前空間内で一意の名前
kindyes上記のLua種別の1つ
sourceyesLuaファイルパス(file://path.lua
methodfunction/process/workflowエクスポートする関数(ライブラリでは使用しない)
modulesnorequire()で許可されるモジュール
importsnoローカルモジュールとしての他のエントリ
metano検索可能なメタデータ

オンデマンドで呼び出されるステートレス関数。各呼び出しは独立。

- name: handler
kind: function.lua
source: file://handler.lua
method: main
modules:
- http
- json

用途:HTTPハンドラ、データ変換、ユーティリティ。

メッセージ間で状態を維持する長時間実行アクター。メッセージパッシングで通信。

- name: worker
kind: process.lua
source: file://worker.lua
method: main
modules:
- process
- sql

用途:バックグラウンドワーカー、サービスデーモン、ステートフルアクター。

スーパーバイズされたサービスとして実行:

- name: worker_service
kind: process.service
process: app:worker
host: app:processes
lifecycle:
auto_start: true
restart:
max_attempts: 10

再起動に耐えるdurableワークフロー。状態はTemporalに永続化。

- name: order_processor
kind: workflow.lua
source: file://order_workflow.lua
method: main
modules:
- workflow
- time

用途:マルチステップビジネスプロセス、長時間実行オーケストレーション。

他のエントリにインポートできる共有コード。

- name: helpers
kind: library.lua
source: file://helpers.lua
modules:
- json
- base64

他のエントリはimportsで参照:

- name: handler
kind: function.lua
source: file://handler.lua
method: main
imports:
helpers: app.lib:helpers

Luaコード内で:

local helpers = require("helpers")
helpers.format_date(timestamp)

modulesフィールドはrequire()でロードできるモジュールを制御:

modules:
- http
- json
- sql
- process

channelprintsubscribeunsubscribe は Lua のグローバルとしてロードされ、modules: に記載する必要はありません。

リストされたモジュールのみ利用可能。これにより:

  • セキュリティ:システムモジュールへのアクセスを防止
  • 明示的な依存関係:コードが必要とするものが明確
  • 決定論性:ワークフローは決定論的モジュールのみ取得

利用可能なモジュールについてはLuaランタイムを参照。

他のエントリをローカルモジュールとしてインポート:

imports:
utils: app.lib:utils # require("utils")
auth: app.auth:helpers # require("auth")

キーはLuaコード内のモジュール名になります。値はエントリID(namespace:name)。

関数の実行プールを設定:

- name: handler
kind: function.lua
source: file://handler.lua
method: main
pool:
type: adaptive # デフォルト
size: 4 # 初期ワーカー数
max_size: 16 # エラスティックプールの上限
フィールドプール説明
typeすべてスケジューラ実装(下表参照)
sizestatic, lazy, adaptive初期ワーカー数
workersengine v2ワーカースレッド数
bufferstatic, adaptiveタスクキュー容量(デフォルト workers * 64
warm_startadaptive起動時にエントリを事前コンパイル
max_sizelazy, adaptiveエラスティック拡張の上限(デフォルト 16)
タイプ動作
inline呼び出し元のゴルーチンで同期実行。最低レイテンシ、呼び出し間に分離なし。
lazyアイドル時はワーカーなし、オンデマンドで生成、アイドルで破棄。
staticチャンネルベースの固定サイズプール。安定負荷で予測可能。
adaptive自動スケーリングプール — 負荷時に拡大、アイドル時に縮小。デフォルト。

ルーティングと発見にmetaを使用:

- name: api_handler
kind: function.lua
meta:
type: handler
version: "2.0"
tags: [api, users]
source: file://api.lua
method: handle
modules:
- http
- json

メタデータはレジストリで検索可能:

local registry = require("registry")
local handlers = registry.find({type = "handler"})