Google Cloud Function 在使用 Deployment Manager 时不会根据更改进行更新

Google Cloud Function doesn't update on change when using Deployment Manager

使用 Deployment Manager 和 Cloud Function 时,当对函数进行代码更改时,Deployment Manager 似乎没有检测和更新函数。

重现:

  1. 创建 helloworld 函数。
  2. 使用部署管理器部署函数。
  3. 更改代码。
  4. 再次部署。
  5. 通过访问控制台并检查源代码,发现已部署的函数尚未更新。

如何使函数失效以使其正确部署?

这与提供的link、github.com/hashicorp/terraform-provider-google/issues/1938.

有关

似乎未执行 zip 哈希,因此需要对部署名称或其他属性进行某种更改。

我的解决方案是获取当前部署版本,递增它并将其作为 属性 传递给函数。

increment_function_version() {
  FUN=
  [[ -z "$FUN" ]] && echo "error: require function name" && exit 1

  if ! gcloud functions describe $FUN --region=europe-west2 2> /dev/null; then
    NEW_VERSION=1
  else
    VERSION=$(gcloud functions describe $FUN --region=europe-west2 | grep versionId | awk '{ print  }' | sed "s|\'||g")
    NEW_VERSION=$(expr $(($VERSION + 1)))
  fi
}

为了使用部署管理器执行此操作,我不得不从 YAML 转换到完整的 python 模式(或 Jinja),因为无法使用 --config 标志传递属性。

gcloud deployment-manager --project $PROJECT_ID deployments update $NAME $TEMPLATE_FLAG --template mytemplate.py --properties version:$NEW_VERSION

为导入提供带有 python 模板的架构很重要,否则部署会失败。