Google cloud platform 如何为云构建用于云运行部署的云存储桶指定区域?
在将docker容器映像部署到Cloud Run时,我可以选择一个区域,这很好。云运行将构建委托给云构建,这显然创建了两个bucket来实现这一点。意外的行为是,bucket不是在云运行部署的区域中创建的,而是默认为multi-region-US 如何将区域指定为“us-east1”,以便存储成本由“始终免费”层承担?(显然,美国多区域存储桶将数据存储在免费层限制之外的区域,这导致了一笔意外费用-我正试图避免该费用。) 如果重要的话,我也在这个项目中使用Firebase。我在us-east1地区创建了Firebase默认存储桶,希望它也能成为其他存储桶的默认存储桶,但事实并非如此。最终的存储桶列表如下所示,您可以看到使用不需要的多区域设置自动创建的两个存储桶 这是我用来构建和部署的shell脚本:Google cloud platform 如何为云构建用于云运行部署的云存储桶指定区域?,google-cloud-platform,google-cloud-storage,google-cloud-build,google-cloud-run,Google Cloud Platform,Google Cloud Storage,Google Cloud Build,Google Cloud Run,在将docker容器映像部署到Cloud Run时,我可以选择一个区域,这很好。云运行将构建委托给云构建,这显然创建了两个bucket来实现这一点。意外的行为是,bucket不是在云运行部署的区域中创建的,而是默认为multi-region-US 如何将区域指定为“us-east1”,以便存储成本由“始终免费”层承担?(显然,美国多区域存储桶将数据存储在免费层限制之外的区域,这导致了一笔意外费用-我正试图避免该费用。) 如果重要的话,我也在这个项目中使用Firebase。我在us-east1地区
#/垃圾箱/垃圾箱
项目id=$1
服务id=$2
如果[-z“$project_id”];然后
echo“第一个参数必须是Google云项目ID”>&2
出口1
fi
如果[-z“$service_id”];然后
echo“第二个参数必须是云运行应用程序名称”>&2
出口1
fi
echo“将$service\u id部署到$project\u id”
tag=“gcr.io/$project\u id/$service\u id”
gcloud构建提交\
--项目“$project\U id”\
--标记“$tag”\
&& \
gcloud运行部署“$service\u id”\
--项目“$project\U id”\
--图像“$tag”\
--平台管理\
--更新env vars“谷歌云项目=$PROJECT\u id”\
--美国中部地区1\
--允许未经验证的
正如您所提到的,Cloud Build创建了一个或多个具有多区域的bucket,因为在Cloud Run中创建服务时,只添加了部署服务所需的标志和参数
命令gcloud builds submit
中提到标记--gcs source staging dir
:
Google云存储中的一个目录,用于复制用于暂存构建的源。如果指定的bucket不存在,Cloud Build将创建一个bucket。如果不设置此字段,则使用gs://[PROJECT\u ID]\u cloudbuild/source
由于未设置此标志,因此将在多区域
和美国
中创建存储桶。此行为也适用于标志
现在,在您想要的双区域、区域或多区域中使用bucket的必要步骤是使用cloudbuild.yaml
并使用标志--gcs source staging dir
。您可以执行以下操作:
澳大利亚东南部1
中创建了一个名为“example bucket”的bucketcloudbuild.yaml
文件。如前所述,这对于将构建的工件存储在您想要的bucket中是必要的。例如:步骤:
-名称:“gcr.io/cloud builders/gcloud”
args:
-“跑”
-“部署”
-“cloudrunservice”
-“--图像”
-“gcr.io/PROJECT\u ID/IMAGE”
-“--地区”
-“区域到部署”
-“--平台”
-“管理的”
-“--允许未经验证的”
人工产品:
物体:
位置:“gs://example bucket”
路径:['*']
gcloud builds submit--gcs source staging dir=“gs://example bucket/cloudbuild custom”--config cloudbuild.yaml
前面提到的步骤可以根据您的脚本进行调整。请试一试:)您会发现,即使云运行服务部署在亚洲、欧洲或美国,之前指定的bucket也可以位于其他位置。看起来只有按照您在评论中提到的方法才能做到这一点:
us-east1
中创建一个存储桶作为源桶($source_bucket
)李>
us-east1
中创建工件注册回购李>
cloudbuild.yaml
:
步骤:
-名称:“gcr.io/cloud builders/docker”
参数:['build','-t','us-east1-docker.pkg.dev/$PROJECT\u ID/my repo/my image','.]
图像:
-'us-east1-docker.pkg.dev/$PROJECT\u ID/my repo/my image'
$ gcloud builds submit --config cloudbuild.yaml --gcs-source-staging-dir=gs://$SOURCE_BUCKET/source
我认为至少可以使用
--tag
选项指定工件注册表repo,并自动创建它,但它目前完全拒绝任何不是gcr.io
的域。我认为这是重复的。您应该仍然能够通过电子邮件构建云-contact@google.com获取对早期访问程序的访问权。根本不是,实际上问题是工件存储在哪个区域。@DustinIngram这只是存储工件的区域。我不关心处理构建的计算资源在哪里,甚至不关心它们如何工作。我只是运行gcloud命令来构建和部署。我对问题进行了编辑,以使其具体化。@FernandoRV是的,这只是关于人工制品的问题。我看到了一些关于使用yaml文件来指定容器注册表的说明,但这似乎有些过分,而且似乎没有任何简单的gcloud CLI选项来讨论如何管理这些存储桶。明白了,很抱歉我误读了!好的,太好了。我浏览了一下手册页,完全错过了最好的东西。听起来这里需要创建yaml文件?如果我提前用预期的名称手动创建bucket会怎么样?看起来在我的案例中创建了两个bucket——“staging”和“artifacts”。有趣的事实:我删除了这两个bucket,重新创建了_cloudbuild后缀one OK,但无法重新创建artifacts,因为它需要域名验证。但是一个新的部署使得t
$ gcloud builds submit --config cloudbuild.yaml --gcs-source-staging-dir=gs://$SOURCE_BUCKET/source