【问题标题】:Changing label of existing GCP Cloud functions更改现有 GCP Cloud 函数的标签
【发布时间】:2020-11-02 21:33:41
【问题描述】:

我正在使用以下命令更新已部署的 GCP Cloud 功能的标签。

   $ gcloud functions deploy GCFunction --update-labels env=dev,app=myapp
     Deploying function (may take a while - up to 2 minutes)...failed.

当我们尝试更改现有功能的标签时,它看起来会进行部署。我们是否可以在不进行任何部署的情况下更改标签,而无需像任何其他 API 或 Cloud 函数一样执行相同的任务。

【问题讨论】:

标签: google-cloud-platform google-cloud-functions gcloud


【解决方案1】:

有效。

PROJECT=[[YOUR-PROJECT]]
REGION=[[YOUR-REGION]]
FUNCTION=[[YOUR-FUNCTION]]
ENDPOINT="https://cloudfunctions.googleapis.com/v1"
NAME="projects/${PROJECT}/locations/${REGION}/functions/${FUNCTION}"
URL="${ENDPOINT}/${NAME}"

gcloud functions describe ${FUNCTION} \
--project=${PROJECT} \
--region=${REGION} \
--format="yaml(labels)"
labels:
  app: myapp
  deployment-tool: cli-gcloud
  env: dev

curl \
--request PATCH \
--header "Authorization: Bearer $(gcloud auth print-access-token)"  \
--header "content-type: application/json" \
--data "{\"labels\":{\"env\":\"testing\"}}" \
${URL}?updateMask=labels


gcloud functions describe ${FUNCTION} \
--project=${PROJECT} \
--region=${REGION} \
--format="yaml(labels)"
labels:
  env: testing

注意您需要复制您希望保留的标签。在我的示例中,我没有复制 app,它已被 PATCH 删除。

注意响应正文是异步Operation,因此您需要检查其是否完成。

更新:操作

如果您安装了最出色的jq(或类似的 JSON 解析器),那么您可以轮询操作的状态,直到它完成(更好的是,也为读者设置超时...)。

ENDPOINT="https://cloudfunctions.googleapis.com/v1"
NAME="projects/${PROJECT}/locations/${REGION}/functions/${FUNCTION}"
URL="${ENDPOINT}/${NAME}"

TOKEN=$(gcloud auth print-access-token)

VALUE="full-testing"
DATA="{\"labels\":{\"env\":\"${VALUE}\"}}"

NAME=$(curl \
--silent \
--request PATCH \
--header "Authorization: Bearer ${TOKEN}"  \
--header "content-type: application/json" \
--data "${DATA}" \
${URL}?updateMask=labels |\
jq -r .name) && echo ${NAME}

URL="${ENDPOINT}/${NAME}"

while [ $(curl --silent --request GET --header "Authorization: Bearer ${TOKEN}" ${URL} | jq -r .done) != "true" ]
do
  printf "."
  sleep 15s
done

gcloud functions describe ${FUNCTION} \
--project=${PROJECT} \
--region=${REGION} \
--format="yaml(labels)"

我找不到gcloud functions operations 已实现。

【讨论】:

  • 注意:它部署了你的函数的一个新版本(这就是为什么它是异步的)
  • PATH不应该是PATH="https://cloudfunctions.googleapis.com/v1/":$PATH 否则找不到gcloud命令
  • gcloud 命令没有为我执行...低于错误-bash: labels:: command not found
  • 抱歉,这将教我编写代码而不是测试它。是的,不要使用PATH :-( 更新答案。
猜你喜欢
  • 2020-01-14
  • 2021-12-27
  • 2013-03-14
  • 2022-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-18
  • 1970-01-01
相关资源
最近更新 更多