OpenFaas をセットアップして function を呼び出す

AWS lambda を何となく触ってみて、ベンダロックインしない形で同じような機能を実現できないかなと思って色々と調べているとOpenFaasというOSSを見つけた。 AWS lambda とAPI Gatewayをまとめた感じの処理をdockerを使って実現するプロジェクトのようだ。 試しに触ってみたのでその記録を書く。

OpenFaas とは

Serverless な処理を Docker や Kubernetes で実装するためのフレームワーク。 公式で日本語化されたチュートリアルがある link

OpenFaas のセットアップ

必要なソフトは下記の通り

  • Docker

まずは OpenFaas を動かすための swarm をセットアップ

$ docker swarm init

openfaas-cli のインストール

次に OpenFaas を動かすためのCLIコマンドをインストールする。 ここでインストールするfaas-cliを使用すればCLIからfunctionの新規作成、ビルド、デプロイ等の操作ができるようになる。 mac環境なら以下のコマンドでインストール

$ brew install faas-cli

Linux とかの環境なら下記のコマンドでインストール

$ curl -sL cli.openfaas.com | sudo sh

インストールされたか確認

$ faas-cli version

OpenFaasのデプロイ

GitHub から最新版の OpenFaas をダウンロードして Docker swarm で起動させる。

$ git clone https://github.com/openfaas/faas
$ cd faas
$ git checkout master
$ ./deploy_stack.sh --no-auth

OpenFaas で function を動かす

試しにいくつか function をデプロイしてみる。

$ faas-cli deploy -f https://raw.githubusercontent.com/openfaas/faas/master/stack.yml

デプロイした function が動いているか確認する。 function を呼び出す時は下記コマンドのようにinvoke オプションを付けて function 名を書き実行する。

$ faas-cli invoke <function名>

function は標準入力を読み込んで標準出力に結果を出すようになっている。 今回はmarkdownをHTMLに変換するmarkdown functionを試す。 以下はechoでmarkdown形式の入力をfaas-cliでfunctionに読み込ませている。

$ echo "## The **OpenFaaS** _workshop_" | faas-cli invoke markdown
<h2>The <strong>OpenFaaS</strong> <em>workshop</em></h2>

markdownがHTMLに変換されて出力されている。 web経由でも呼び出せる(というかこっちが本来の使い方?) curlを使った例

$ curl -X POST -d "## The **OpenFaaS** _workshop_" http://127.0.0.1:8080/function/markdown
<h2>The <strong>OpenFaaS</strong> <em>workshop</em></h2>

まとめ

とりあえず OpenFaas をセットアップして function を呼び出すところまでやってみた。 次回は function を実装してデプロイしてみる。