OpenSource
lambda
Cloudgara

OpenLambdaを使って自分だけのLambda環境を作る

これは#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