OpenFaaS Functions

前回使用したDockerでなくKubernetesでOpenFaaSを構築して、サーバーレスファンクションのデプロイを試してみました。
DockerSwarmでできなかったため、下記を参考にやり直してみました。

“Create Serverless Functions with OpenFaaS”
https://gcore.com/learning/create-serverless-functions-with-openfaas/

環境) Kubernetes v1.24.1 / Docker Desktop v4.10.1 / Ubuntu 20.02 / WSL2 / Windows 11

faas-cli インストール

curl -sSL https://cli.openfaas.com | sh
cp faas-cli ~/.local/bin

OpenFaaSインストール

$ arkade install openfaas

Developmentの確認

$ kubectl get deployments -n openfaas -l “release=openfaas, app=openfaas”
NAME READY UP-TO-DATE AVAILABLE AGE
alertmanager 1/1 1 1 50m
gateway 1/1 1 1 50m
nats 1/1 1 1 50m
prometheus 1/1 1 1 50m
queue-worker 1/1 1 1 50m

Deploymentのロールアウトの状況確認

$ kubectl rollout status -n openfaas deploy/gateway
deployment “gateway” successfully rolled out

gatewayサービスのpodのポートフォワード設定

$ kubectl port-forward -n openfaas svc/gateway 8080:8080 &
[1] 306
Forwarding from 127.0.0.1:8080 -> 8080
Forwarding from [::1]:8080 -> 8080

サーバーレスファンクションのテンプレート作成

$ faas-cli new hello-go –lang go

 参考サイトはJavaScriptで、Goで試した。(jsより構造がシンプル)

hello-go/handler.go

hello-go.yml

$ faas-cli build -f hello-go.yml

※ ******** はDockerアカウント名を記述

$ docker login –username ********

※ password入力

Docker Hubにプッシュ
$ faas-cli push -f hello-go.yml
(ローカルのみで完結していないよう・・)

ローカルインスタンス(OpenFaaS gateway)にログイン
$ PASSWORD=$(kubectl get secret -n openfaas basic-auth -o jsonpath=”{.data.basic-auth-password}” | base64 –decode; echo)
$ echo -n $PASSWORD | faas-cli login –username admin –password-stdin
※ このパスワードは毎回同じか・・Aではじまり12けた?

サーバーレスファンクションのデプロイ
$ faas-cli deploy -f hello-go.yml

UIで実行

ストアにあるファンクションをデプロイ、実行

コンソールから実行

(アクセスカウントの増加確認)

サービスの表示
(ファンクションがサービスとなっていることを確認)

AWSのLambda関数のエッセンス(サーバーレスファンクション)を少し試そうと思ってもアカウントを用意したりするのが手間なので、このようなオープンな環境はどんどん普及してほしいです。