背景
Cloud Functionsをデプロイしたあと、テスト実行したい。
そんなときにコマンド一発で実行できる方法があったのでこちらにメモとして記載する。
やりかた
前提として以下を想定
- HTTPトリガーはPOST(他のでもできるはず)
- 呼び出しに認証が必要な関数
gen1の場合
FUNCTION_NAME=hogehoge
curl -X POST \
$(gcloud functions describe ${FUNCTION_NAME} --region asia-northeast1 --format="value(httpsTrigger.url)") \
-H "Authorization: Bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json" \
-d '{"key": "value"}'
gen2の場合
FUNCTION_NAME=hogehoge
curl -X POST \
$(gcloud functions describe ${FUNCTION_NAME} --gen2 --region asia-northeast1 --format="value(serviceConfig.uri)") \
-H "Authorization: Bearer $(gcloud auth print-identity-token)" \
-H "Content-Type: application/json" \
-d '{"key": "value"}'
解説
gcloud functions describe
関数のURLを取るためのコマンド。
Cloud Functionsのgen1/gen2でちょっと違うコマンドになるので注意。
gcloud auth print-identity-token
認証用トークンを取得するコマンド。
ローカルに設定してあるアカウントでトークンを取得するので、事前にアカウントに対して権限が付与されている必要がある。
必要な権限
- gen1:
cloudfunctions.functions.invoke
(roles/cloudfunctions.invoker
ロールをつけとけばOK) - gen2:
run.routes.invoke
(roles/run.invoker
ロールをつけとけばOK)