【发布时间】:2021-07-07 22:17:04
【问题描述】:
我正在尝试使用 Deployment Manager 创建 Cloud Run 服务,因为没有对 Cloud Run 资源类型的本机支持,我通过在 https://run.googleapis.com/$discovery/rest?version=v1 处提供它的描述符为 Cloud Run API 创建了一个类型提供程序。
但是,当我运行此配置以使用部署管理器创建服务时,我收到错误 404 - 未找到请求的实体。
这是因为当部署管理器尝试执行创建操作时,它不是调用位置特定的服务端点(例如https://us-central1-run.googleapis.com),而是使用发现 url 返回的全局端点(https://run.googleapis.com),并且作为在 API 文档中声明,全局端点仅支持列表方法。
为了解决这个问题,我创建了一个自定义描述文件,并通过将 rootUrl 指向特定位置的服务端点来替换它,这样我就能够使用 DM 创建一个 Cloud Run 服务。
我不打算保留自定义描述符文件,因为它可能会随着 API 的发展而过时,我想知道是否有另一种推荐的方法可以从 Google 的官方 API 发现文档中获取正确的 API url。
以下是我的 DM 配置:
resources:
- name: cloudrun-type-provider
type: deploymentmanager.v2beta.typeProvider
properties:
descriptorUrl: https://us-central1-run.googleapis.com/$discovery/rest?version=v1
options:
inputMappings:
- fieldName: Authorization
location: HEADER
value: >
$.concat("Bearer ", $.googleOauth2AccessToken())
collectionOverrides:
- collection: namespaces.services
options:
virtualProperties: |
schema: http://json-schema.org/draft-04/schema#
type: object
properties:
metadata:
type: object
description: https://cloud.google.com/run/docs/reference/rest/v1/ObjectMeta
spec:
type: object
description: https://cloud.google.com/run/docs/reference/rest/v1/namespaces.services#ServiceSpec
status:
type: object
description: https://cloud.google.com/run/docs/reference/rest/v1/namespaces.services#ServiceStatus
inputMappings:
- methodMatch: ^create$
location: PATH
fieldName: parent
value: $.concat("namespaces/", $.project)
- methodMatch: ^(get|replaceService|delete)$
location: PATH
fieldName: name
value: $.concat("namespaces/", $.project, "/services/", $.resource.name)
- methodMatch: ^create$
location: BODY
fieldName: apiVersion
value: $.concat("serving.knative.dev/v1")
- methodMatch: ^create$
location: BODY
fieldName: kind
value: $.concat("Service")
- methodMatch: ^create$
location: BODY
fieldName: metadata.name
value: $.resource.name
- methodMatch: ^replaceService$
location: BODY
fieldName: metadata
value: $.resource.self.metadata
- methodMatch: ^(create|replaceService)$
location: BODY
fieldName: spec.template.spec
value: $.resource.properties.spec
- name: dm-cloud-run
type: MY-PROJECT/cloudrun-type-provider:namespaces.services
metadata:
dependsOn:
- cloudrun-type-provider
properties:
spec:
containerConcurrency: 50
timeoutSeconds: 300
containers:
- image: marketplace.gcr.io/google/nginx1
env:
- name: ENV_VAR_1
value: VALUE_1
- name: ENV_VAR_1
value: VALUE_2
resources:
limits:
memory: 512Mi
【问题讨论】:
-
@Luth 即使在根中使用了位置特定的描述符 URL,创建服务 DM 仍然使用全局端点“run.googleapis.com/apis/serving.knative.dev/v1”而不是“us-central1-run.googleapis.com/apis/serving.knative.dev/v1”。我创建了一个与您类似的自定义描述符文件。有什么想法或建议吗?
标签: google-cloud-run google-deployment-manager