これは#CloudGarageアドベントカレンダー2日目のブログ記事です。
AWS Lambdaに代表されるマイクロサービスやAPIで実行されるサービスが人気です。サーバを立てることなく、ちょっとしたコードをさくっと実行できるので重宝します。
CloudGarageにはそういった機能はありませんので、代替を考えてみました。今回はAWS Lambdaクローンとして作られているOpenLambdaをCloudGarageのインスタンス上にホストする方法を紹介します。
OSはUbuntuで
今回はLinuxディストリビューションとしてUbuntu 18.04を使っています。恐らくCentOSなどの他のディストリビューションでも同じように構築できるはずです。
ダウンロード
まずコードをダウンロードします。
wget https://github.com/open-lambda/open-lambda/archive/master.zip
最初はunzipもなかったのでインストールします。
sudo apt-get install unzip
そして解凍します。
unzip master.zip
インストール
インストールはスクリプトが用意されているので簡単です。
cd open-lambda-master
sudo ./quickstart/deps.sh
このスクリプトはDockerやGo言語などをインストールしてくれます。そしてインストールを実行します。
sudo make test-all
これでインストール完了です。ちなみに私の環境では At least one worker failed the status check
といったエラーが出てしまっていました。
クラスターの用意
まず最初にクラスターを作ります。
./bin/admin new -cluster my-cluster
そしてこのクラスターを実行します。
./bin/admin workers -cluster=my-cluster
ワーカーのステータスは status コマンドで分かります。
./bin/admin status -cluster=my-cluster
Worker Pings:
http://localhost:8080/status => ready
[200 OK]
Cluster containers:
関数の作成
では実際に関数を作成します。まずテンプレートをコピーします。
cp -r ./quickstart/handlers/hello ./my-cluster/registry/hello
内容は次のようになっています。
# my-cluster/registry/hello/lambda_func.py の内容
def handler(event):
try:
return "Hello, %s!" % event['name']
except Exception as e:
return {'error': str(e)}
handlerというイベントが呼ばれるので、そこの何か返すだけです。
実行する
では実行してみます。実行はHTTP経由でできます。
curl -X POST localhost:8080/runLambda/hello -d '{"name": "CloudGarage"}'
"Hello, CloudGarage!"
ちゃんと実行されて、結果が返ってきました。
OpenLambdaは今のところPythonにしか対応していないようですが、Dockerベースなので他の言語への対応もさほど難しくはないでしょう。Dockerを使うことで、安全にセキュアな環境でコードを実行して結果を得られます。
オリジナルで手軽な関数実行環境を手に入れるのにOpenLambdaは良い選択肢になりそうです。
open-lambda/open-lambda: An open source serverless computing platform