OpenFaaS

OpenFaaS は「Raspberry Pi 3 で Amazon Linux 2」 でインストールした containerd だけでも実行するだけなら可能です。後述の custom functions の作成では docker-ce をインストールする必要があります。

インストール

faasd に記述された手順を参照して faasd をインストールします。

git clone https://github.com/openfaas/faasd --depth=1
cd faasd

./hack/install.sh

下のコマンドで表示されるように、OpenFaaS のコンテナイメージはネームスペース openfaas で実行されています。

nerdctl ps --all --namespace openfaas
CONTAINER ID    IMAGE                                      COMMAND                   CREATED         STATUS    PORTS    NAMES
basic-auth-p    ghcr.io/openfaas/basic-auth:0.21.0         "./handler"               19 hours ago    Up                     
gateway         ghcr.io/openfaas/gateway:0.21.3            "./gateway"               19 hours ago    Up                     
nats            docker.io/library/nats-streaming:0.22.0    "/nats-streaming-ser…"    19 hours ago    Up                     
prometheus      docker.io/prom/prometheus:v2.14.0          "/bin/prometheus --c…"    19 hours ago    Up                     
queue-worker    ghcr.io/openfaas/queue-worker:0.12.2       "./app"                   19 hours ago    Up  

ファンクションのデプロイとテスト

OpenFaaS 実行環境にログインします。ブラウザで http://localhost:8080 にアクセスする場合の ID は admin です。これは /var/lib/faasd/secrets/basic-auth-user に書かれています。また、パスワードは、下のコマンドラインと同様に、/var/lib/faasd/secrets/basic-auth-password に書かれています。

sudo cat /var/lib/faasd/secrets/basic-auth-password | faas-cli login --password-stdin

store にはあらかじめすぐにデプロイできるファンクションが用意されています。これを確認する場合は、次のコマンドを実行します。

faas-cli store list

ここでは、環境変数を返す env をデプロイして実行してみます。

faas-cli store deploy env
Deployed. 200 OK.
URL: http://127.0.0.1:8080/function/env

以下のように実行します。

echo -n "" | faas-cli invoke env
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
fprocess=env
HOME=/home/app
Http_User_Agent=Go-http-client/1.1
Http_Content_Type=text/plain
Http_X_Call_Id=63ed420b-a2aa-408e-b5d0-a8288a99e086
Http_X_Start_Time=1646405431615286054
Http_Content_Length=0
Http_Accept_Encoding=gzip
Http_X_Forwarded_For=10.62.0.1:41774
Http_X_Forwarded_Host=127.0.0.1:8080
Http_Method=POST
Http_ContentLength=0
Http_Path=/
Http_Host=10.62.0.8:8080

カスタムファンクションのビルドと実行

ここからは、containerd だけでなく docker-ce、docker-cli が必要になります。

java 11 のテンプレートを使って hello プロジェクトを生成します。

faas-cli new hello --lang java11
Folder: hello created.
  ___                   _____           ____
 / _ \ _ __   ___ _ __ |  ___|_ _  __ _/ ___|
| | | | '_ \ / _ \ '_ \| |_ / _` |/ _` \___ \
| |_| | |_) |  __/ | | |  _| (_| | (_| |___) |
 \___/| .__/ \___|_| |_|_|  \__,_|\__,_|____/
      |_|


Function created in folder: hello
Stack file written: hello.yml

Notes:
You have created a function using the java11 template which uses an LTS
version of the OpenJDK.

hello.yml の image を使用する Docker Registry にあわせて変更します。たとえば、私は DockerHub のアカウントを利用するため、takesection/hello にしました。

hello ファンクションのコンテナイメージをビルドします。

faas-cli build -f ./hello.yml

Docker Registry にログインします。

docker login

Docker Registry に push します。

faas-cli push -f ./hello.yml

OpenFaaS 実行環境にデプロイします。

faas-cli deploy -f ./hello.yml

ここでは、ブラウザを使って試してみましょう。

http://localhost:8080/ にアクセスします (図では別の PC からアクセスしているため、OpenFaaS を実行しているホスト名を指定しています)。

f:id:section27:20220311101500p:plain

実行したいファクションを選択して INVOKE ボタンを押すと実行できます。

f:id:section27:20220311101532p:plain

参考