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 を実行しているホスト名を指定しています)。
実行したいファクションを選択して INVOKE
ボタンを押すと実行できます。