前回使用した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
$ 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
1 2 3 4 5 6 7 8 9 10 |
package function import ( "fmt" ) // Handle a serverless request func Handle(req []byte) string { return fmt.Sprintf("Hello, Go. You said: %s", string(req)) } |
hello-go.yml
1 2 3 4 5 6 7 8 9 |
version: 1.0 provider: name: openfaas gateway: http://127.0.0.1:8080 functions: hello-go: lang: go handler: ./hello-go image: ********/hello-go:latest |
$ 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
コンソールから実行
サービスの表示
(ファンクションがサービスとなっていることを確認)
AWSのLambda関数のエッセンス(サーバーレスファンクション)を少し試そうと思ってもアカウントを用意したりするのが手間なので、このようなオープンな環境はどんどん普及してほしいです。