Knative Lambda Runtimes(KLR、クリアー)はKnative、TektonベースのOSSです。AWS Lambda互換のfunctionをKnative、TektonがインストールされたKubernetesクラスタで実行できます。
セットアップが済んだらKnariveで構築するFaaSプラットフォームの事例としてプラットフォーム利用者観点で見ていきましょう。
KLRはtm
というコマンドで操作します。つぎのコマンドを実行してtm
をインストールしてください。
$ go get github.com/triggermesh/tm
つぎにKLRがGoのLambda functionをビルドするためのTask
を利用できるようにします。つぎのコマンドを実行してください。
$ tm deploy task -f https://raw.githubusercontent.com/triggermesh/knative-lambda-runtime/master/go-1.x/runtime.yaml
コンテナイメージの保存はこのワークショップではGCRを利用します。GCRを利用するにあたってKubernetesのSecret
オブジェクトの登録が必要です。つぎのコマンドを実行して一時的なアクセストークンを発行し、登録してください。
$ tm set registry-auth gcr-image-puller
# Registry: gcr.io/<your-project-id> ご自身のGCPプロジェクトIDに置き換えてください
# Username: oauth2accesstoken
# Password: <gcloud auth print-access-tokenを実行して得られる値>
いよいよfuncionをデプロイします。つぎのファイルをklr
というフォルダの下にmain.go
という名前で保存し、tm
コマンドを実行してデプロイしてください。
package main
import (
"fmt"
"context"
"github.com/aws/aws-lambda-go/lambda"
)
type MyEvent struct {
Name string `json:"name"`
}
func HandleRequest(ctx context.Context, name MyEvent) (string, error) {
return fmt.Sprintf("Hello %s!", name.Name ), nil
}
func main() {
lambda.Start(HandleRequest)
}
$ tm deploy service go-lambda -f ./klr --build-template knative-go-runtime --registry-secret gcr-image-puller --wait
Uploading "." to go-lambda-q7dzp-pod-7881a3
Waiting for taskrun "go-lambda-q7dzp" ready state
Waiting for service "go-lambda" ready state
Service go-lambda URL: http://go-lambda.default.example.com
つぎのコマンドでfunctionが実行されるのを確認してください。
# export IP_ADDRESS=$(kubectl get svc istio-ingressgateway --namespace istio-system --output 'jsonpath={.status.loadBalancer.ingress[0].ip}')
$ curl -H "Host: go-lambda.default.example.com" http://$IP_ADDRESS --data '{"Name": "Foo"}'
- GCR Authentication methods
- triggermesh/tm
- triggermesh/knative-lambda-runtime
- triggermesh/aws-custom-runtime
- triggermesh/knative-local-registry
- KLRのアーキテクチャーとCustom AWS Lambda Runtimes