Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 部署管理器无法更新存储桶名称_Google Cloud Platform_Google Deployment Manager - Fatal编程技术网

Google cloud platform 部署管理器无法更新存储桶名称

Google cloud platform 部署管理器无法更新存储桶名称,google-cloud-platform,google-deployment-manager,Google Cloud Platform,Google Deployment Manager,我使用与示例完全相同的模板。 我首先使用bucket名称X部署模板: imports: - path: templates/gcs_bucket/gcs_bucket.py name: gcs_bucket.py resources: - name: X type: gcs_bucket.py properties: name: X location: us-east1 versioning: enabled:

我使用与示例完全相同的模板。 我首先使用bucket名称X部署模板:

imports:
  - path: templates/gcs_bucket/gcs_bucket.py
    name: gcs_bucket.py

resources:
  - name: X
    type: gcs_bucket.py
    properties:
      name: X
      location: us-east1
      versioning:
        enabled: True
      labels:
        env: development
它运行成功

接下来,我尝试使用相同的模板进行部署,但将bucket名称更改为:Y

imports:
  - path: templates/gcs_bucket/gcs_bucket.py
    name: gcs_bucket.py

resources:
  - name: Y
    type: gcs_bucket.py
    properties:
      name: Y
      location: us-east1
      versioning:
        enabled: True
      labels:
        env: development
使用update命令

gcloud deployment-manager deployments create s3-sample --config gcs_bucket.yaml
它以失败告终

Waiting for update [operation-1596317964460-5abd7bd3863a0-46f678bb-c6e8f7f7]...failed.                                                                                                                                                        
ERROR: (gcloud.deployment-manager.deployments.update) Error in Operation [operation-1596317964460-5abd7bd3863a0-46f678bb-c6e8f7f7]: errors:
- code: RESOURCE_ERROR
  location: /deployments/s3-sample/resources/X
  message: '{"ResourceType":"gcp-types/storage-v1:buckets","ResourceErrorCode":"403","ResourceErrorMessage":{"code":403,"errors":[{"domain":"global","message":"XXX@cloudservices.gserviceaccount.com
    does not have storage.buckets.get access to the Google Cloud Storage bucket.","reason":"forbidden"}],"message":"XXX@cloudservices.gserviceaccount.com
    does not have storage.buckets.get access to the Google Cloud Storage bucket.","statusMessage":"Forbidden","requestPath":"https://storage.googleapis.com/storage/v1/b/X","httpMethod":"GET","suggestion":"Consider
    granting permissions to XXX@cloudservices.gserviceaccount.com"}}'
但是bucket Y创建成功,bucket X没有被删除? 我做错了什么?
删除X bucket后,我再次尝试了update命令,它成功了。

在云存储中,对象是不可变的,这意味着上载或创建的对象在其存储生命周期内无法更改。这意味着不能重命名存储桶

:

  • bucket name只能在创建过程中分配。无法更改现有存储桶的名称。相反,您应该使用所需的名称创建一个新的bucket,并从中移动内容 旧桶换新桶。看一看 循序渐进的指导
:

创建bucket时,将永久定义其名称。 但是,您可以有效地移动或重命名存储桶:

  • 如果旧bucket中没有数据,请删除该bucket并使用新名称创建另一个bucket
根据错误消息,第二次部署在创建新bucketY时没有问题,但缺少对先前创建的bucketX的权限

默认情况下,部署管理器使用的Google API服务代理帐户被授予
项目编辑器
角色:

CloudShell:$ gcloud projects get-iam-policy my-project --flatten="bindings[].members" --format='table(bindings.role)' --filter="bindings.members:111111111111@cloudservices.gserviceaccount.com"
  ROLE
  roles/editor
CloudShell:$ gcloud iam roles describe roles/editor | grep storage.buckets
- storage.buckets.create
- storage.buckets.delete
- storage.buckets.list
如您所见,
项目编辑器
角色包括对bucket的
创建
删除
权限,但不包括
获取
。这就是为什么第一次部署正常并创建一个新bucketX。但是第二次部署失败,因为它无法删除以前的bucketX,而成功创建了新bucketY。这也解释了当您手动删除bucketX时,第二次部署成功的原因

要使其正常工作,您应该遵循cloud foundation toolkit上的文档。
:

先决条件

  • storage.admin
    IAM角色授予部署管理器服务帐户
Storage Admin
角色包括所有
Storage.bucket.
角色,包括
get



根据描述判断,您正试图再次为bucket Y创建一个名为s3 sample的部署。您实际想要实现的是:1)创建两个bucket X和Y;或者2)更新bucket X的现有部署s3示例,以便将bucket名称更改为Y?您使用的帐户是否被授予了
storage.admin
IAM角色?@mebius99 2)我想将bucket名称X更新为Y。我相信这是因为部署管理器使用的服务帐户没有足够的权限删除存储桶。重命名一个bucket只是创建一个新bucket,移动内容并删除旧bucket
CloudShell:$ gcloud projects get-iam-policy my-project --flatten="bindings[].members" --format='table(bindings.role)' --filter="bindings.members:111111111111@cloudservices.gserviceaccount.com"
  ROLE
  roles/editor
CloudShell:$ gcloud iam roles describe roles/editor | grep storage.buckets
- storage.buckets.create
- storage.buckets.delete
- storage.buckets.list