Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.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 Cloud Storage_Google Cloud Build_Google Cloud Run - Fatal编程技术网

Google cloud platform 如何为云构建用于云运行部署的云存储桶指定区域?

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地区

在将docker容器映像部署到Cloud Run时,我可以选择一个区域,这很好。云运行将构建委托给云构建,这显然创建了两个bucket来实现这一点。意外的行为是,bucket不是在云运行部署的区域中创建的,而是默认为multi-region-US

如何将区域指定为“us-east1”,以便存储成本由“始终免费”层承担?(显然,美国多区域存储桶将数据存储在免费层限制之外的区域,这导致了一笔意外费用-我正试图避免该费用。)

如果重要的话,我也在这个项目中使用Firebase。我在us-east1地区创建了Firebase默认存储桶,希望它也能成为其他存储桶的默认存储桶,但事实并非如此。最终的存储桶列表如下所示,您可以看到使用不需要的多区域设置自动创建的两个存储桶

这是我用来构建和部署的shell脚本:

#/垃圾箱/垃圾箱
项目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
。您可以执行以下操作:

  • 在您可能需要的区域、双区域或多区域中创建一个bucket。例如,我在
    澳大利亚东南部1
    中创建了一个名为“example bucket”的bucket
  • 创建一个
    cloudbuild.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