LoginSignup
1
1

More than 5 years have passed since last update.

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

Posted at

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

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1