Dou*_*son 13 google-cloud-storage google-cloud-platform google-cloud-build google-cloud-run
将 docker 容器映像部署到 Cloud Run 时,我可以选择一个区域,这很好。Cloud Run 将构建委托给 Cloud Build,它显然创建了两个存储桶来实现这一点。意外的行为是存储分区不是在 Cloud Run 部署的区域中创建的,而是默认为美国多区域。
如何将区域指定为“us-east1”,以便“始终免费”层承担存储成本? (显然,美国多区域存储桶将数据存储在免费层限制之外的区域,这导致了意外账单 - 我试图避免该账单。)
如果重要的话,我也在这个项目中使用 Firebase。我在 us-east1 区域创建了 Firebase 默认存储桶,希望它也能成为其他桶的默认存储桶,但事实并非如此。最终的存储桶列表如下所示,您可以在其中看到使用不需要的多区域设置自动创建的两个存储桶。
这是我用来构建和部署的 shell 脚本:
#!/bin/sh
project_id=$1
service_id=$2
if [ -z "$project_id" ]; then
echo "First argument must be the Google Cloud project ID" >&2
exit 1
fi
if [ -z "$service_id" ]; then
echo "Second argument must be the Cloud Run app name" >&2
exit 1
fi
echo "Deploying $service_id to $project_id"
tag="gcr.io/$project_id/$service_id"
gcloud builds submit \
--project "$project_id" \
--tag "$tag" \
&& \
gcloud run deploy "$service_id" \
--project "$project_id" \
--image "$tag" \
--platform managed \
--update-env-vars "GOOGLE_CLOUD_PROJECT=$project_id" \
--region us-central1 \
--allow-unauthenticated
Run Code Online (Sandbox Code Playgroud)
正如您提到的,Cloud Build 创建一个或多个具有多区域的存储桶,因为在 Cloud Run 中创建服务时,只添加了部署服务所需的标志和参数。
该命令的文档gcloud builds submit提到了以下标志--gcs-source-staging-dir:
Run Code Online (Sandbox Code Playgroud)--gcs-source-staging-dir=GCS_SOURCE_STAGING_DIRGoogle Cloud Storage 中的一个目录,用于复制用于暂存构建的源。如果指定的存储桶不存在,Cloud Build 将创建一个。如果不设置此字段,则使用 gs://[PROJECT_ID]_cloudbuild/source。
由于未设置此标志,因此在multi-region和 中创建了存储桶us。此行为也适用于标志--gcs-log-dir。
现在,在您想要的双区域、区域或多区域中使用存储桶的必要步骤是使用 acloudbuild.yaml和使用 flag --gcs-source-staging-dir。您可以执行以下操作:
australia-southeast1.cloudbuild.yaml文件。这是必要的,以构建的文物保存在你想要提到水桶在这里。一个例子如下:--gcs-source-staging-dir=GCS_SOURCE_STAGING_DIR
Run Code Online (Sandbox Code Playgroud)
steps:
- name: 'gcr.io/cloud-builders/gcloud'
args:
- 'run'
- 'deploy'
- 'cloudrunservice'
- '--image'
- 'gcr.io/PROJECT_ID/IMAGE'
- '--region'
- 'REGION_TO_DEPLOY'
- '--platform'
- 'managed'
- '--allow-unauthenticated'
artifacts:
objects:
location: 'gs://example-bucket'
paths: ['*']
Run Code Online (Sandbox Code Playgroud)
前面提到的步骤可以适应您的脚本。请试一试:),您会看到,即使 Cloud Run 服务部署在亚洲、欧洲或美国,之前指定的存储桶也可以在其他位置。
| 归档时间: |
|
| 查看次数: |
2313 次 |
| 最近记录: |