AWS LambdaやCloudflare WorkersのようなFaaS
ただしAWS Lambdaのようなサービスは、当然ながらクラウド上で動作します。
Orvaとは
Orvaは、セルフホストできるオープンソースのFaaSです。
Orvaを使うメリット
単純にPythonのスクリプトを実行するだけなら、Ubuntu上で以下のようにコマンドを叩けば済む話です。
$ python3 script.py
しかし外部システムと連携し、HTTP経由でAPIからそのスクリプトを呼び出したいのであれば話が変わります。専用のHTTPサーバーを用意したり、Dockerfileを書いてコンテナをビルドしたり、場合によってはリバースプロキシも用意したくなるでしょう。ほんの数十行のスクリプトを動かしたいだけなのに、その周囲に必要なインフラのほうが大げさになってしまいます。
ですがOrvaを使えば、Webブラウザから実行したいコードを関数として登録するだけです。そのスクリプトのためだけにインフラを用意する必要がなくなる上、Orvaはその関数を呼び出すためのHTTPエンドポイントまで用意してくれます。さらにOrvaには、関数ごとのKVストア、cronによるスケジュール実行、Orva内での関数同士の呼び出し、実行履歴やトレーシング、コーディングとデプロイをサポートするAIアシスタントといった機能も組み込まれています。HTTPから呼び出したい簡単なスクリプトの集積場所として、非常に便利なプロダクトだと言えるでしょう。
ただし注意点もあります。Orvaは2026年に登場したばかりの非常に新しいプロジェクトです。そのため公式にも、現時点ではホームラボやサイドプロジェクト、社内向けツールなどでの利用を想定し、顧客向けの本番サービスにはまだ推奨しないと明記されています。そのためまずは、自宅サーバーなどで試してみるのがよいでしょう。
Orvaのインストール
Orvaも今時のアプリの例に漏れず、Docker Composeで動かすのが簡単です。あらかじめ以下のコマンドで、DockerとComposeをインストールしておいてください。
$ sudo apt install -U -y docker.io docker-compose-v2
$ mkdir ~/orva $ cd ~/orva
続いてcompose.
services:
orva:
image: ghcr.io/harsh-2002/orva:latest
container_name: orva
restart: unless-stopped
ports:
- 8443:8443
cgroup: host
pid: host
cap_add:
- SYS_ADMIN
security_opt:
- seccomp=unconfined
- apparmor=unconfined
- systempaths=unconfined
devices:
- /dev/net/tun:/dev/net/tun
volumes:
- ./orva-data:/var/lib/orva
- /sys/fs/cgroup:/sys/fs/cgroup:rw
healthcheck:
test: ["CMD", "curl", "-fsS", "http://localhost:8443/api/v1/system/health"]
interval: 30s
timeout: 5s
start_period: 15s
retries: 3
前述の通り、Orvaはnsjailを使って関数を隔離実行します。コンテナの中でさらにサンドボックスを作る必要があるため、通常のWebアプリケーションと比較して、かなり強い権限を要求します。上記のcompose.
compose.
$ sudo docker compose up -d
Webブラウザから、
ユーザー名とパスワードを設定すると、Orvaのダッシュボードが表示されます。
関数の作成とデプロイ
それでは実際に関数を作ってみましょう。今回は、実行環境のシステム情報をJSONで返す簡単なPythonスクリプトを作成します。まず左ペインにある
関数の作成画面に遷移します。左上に表示されているのが関数名です。ランダムな名前がつけられますので、わかりやすい名前に変えておきましょう。ここでは
import os
import platform
def handler(event):
return {
"hostname": platform.node(),
"system": platform.system(),
"release": platform.release(),
"machine": platform.machine(),
"python": platform.python_version(),
"cpus": os.cpu_count(),
}
ランタイムにはPythonを選択してください。デフォルトでPythonが選択されているはずですが、Node.
ここまでの入力が完了したら、関数をデプロイします。右上にある
デプロイした関数を実行してみましょう。Functionsの画面から、system-info関数の編集アイコンをクリックして、編集画面に遷移します。ここでウィンドウ下部にある
なお繰り返しになりますが、Orvaの関数はnsjailによって隔離された環境内で実行されます。そのためこのsystem-info関数が表示しているのは、Orvaを動かしているUbuntuホストやOrvaコンテナの情報ではなく、Orvaによって作成されたサンドボックス環境の情報になります。この例は実際のホスト情報を調べるのが目的ではなく、あくまでOrvaの関数がどのように動作しているかを確認するサンプルであることをご了承ください。
APIから関数を呼び出す
Orvaが単なるスクリプト置き場と管理UIではなく、FaaSであることをもっとも実感できるのが、作成した関数をHTTPから直接呼び出せる点です。Orvaではそれぞれの関数にUUIDが自動的に割り当てられ、
これで、HTTPリクエストを受けてJSONを返すサービスが完成しました。見ての通りOrva上にPythonのコードをデプロイしたのみで、nginxもApache HTTP ServerもFlaskも必要ありません。もちろんOrvaの裏側にはHTTPサーバーやサンドボックスが存在します。ですがこれらはOrva側がまとめて用意してくれるため、利用者は実行したい関数のみを意識すればよいのです。これはまさに、AWS LambdaをはじめとするFaaSが便利な理由そのものです。
関数に任意のパスを割り当てる
UUIDはお世辞にも、人間にとって使いやすい形式ではありません。UUIDのままでは、関数のURLを覚えることは難しいでしょう。そこでOrvaには自動で割り当てられるUUID以外に、任意のURLを関数へ割り当てる機能が用意されています。例として先ほどのsystem-info関数に、
関数の編集画面に入ったら、右上の
カスタムルートの追加が完了したら
圧倒的にわかりやすいため、よく使う関数にはカスタムルートを設定することをお勧めします。
AIを使ったコーディング
最近は、簡単なスクリプトなどはAIに作らせてしまうのも一般的になりました。Orvaもその例に漏れず、AIアシスタント機能が搭載されています。OrvaにOpenAIやAnthropicなどのLLMを接続し、ダッシュボードから自然言語でOrvaを操作できます。AIからOrvaの機能を操作できるようになっており、関数の作成やデプロイ、実行、ログの確認、シークレットの管理なども、AIに任せることが可能です。OrvaはこのためのMCPサーバーも内蔵しています。ここでは例として、OpenAIを利用して関数の実装とデプロイを行ってみましょう。なお本手順を実行するには、あらかじめOpenAI PlatformからAPIキーを発行しておいてください[1]。
まず左ペインから
左ペインから
ChatGPTなどとチャットする感覚で、挨拶を返す関数を実装するよう指示してみました。するとAIがOrvaの機能を呼び出し、実際に関数の作成を開始します。ただし関数を作成したりコードをデプロイしたりといった
続いて
デプロイが完了すると、AIがその旨のメッセージを返します。実際に関数を実行したレスポンスも表示されますので、確認しておきましょう。
デプロイした関数は、先ほどと同じようにHTTPから呼び出せます。
「AIにコードを書かせる」
もちろん、AIが生成したコードを無条件に信用するのは危険です。特にネットワークアクセスやシークレットを利用する関数を作成する場合は、生成されたコードとAIが実行しようとしている操作を、きちんとコードレビューしてからApproveするようにしましょう。
Webサービスを作るほどでもないものの、
Orvaはまだ非常に新しいプロジェクトであり、本番用途に使うかどうかは、慎重に判断する必要があるでしょう。とはいえ