如何为 Cloud Build 用于 Cloud Run 部署的 Cloud Storage 存储分区指定区域?

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)

Fer*_*ona 7

正如您提到的,Cloud Build 创建一个或多个具有多区域的存储桶,因为在 Cloud Run 中创建服务时,只添加了部署服务所需的标志和参数。

该命令的文档gcloud builds submit提到了以下标志--gcs-source-staging-dir

--gcs-source-staging-dir=GCS_SOURCE_STAGING_DIR
Run Code Online (Sandbox Code Playgroud)

Google Cloud Storage 中的一个目录,用于复制用于暂存构建的源。如果指定的存储桶不存在,Cloud Build 将创建一个。如果不设置此字段,则使用 gs://[PROJECT_ID]_cloudbuild/source。

由于未设置此标志,因此在multi-region和 中创建了存储桶us。此行为也适用于标志--gcs-log-dir

现在,在您想要的双区域、区域或多区域中使用存储桶的必要步骤是使用 acloudbuild.yaml和使用 flag --gcs-source-staging-dir。您可以执行以下操作:

  1. 在您可能需要的区域、双区域或多区域中创建一个存储桶。例如,我在australia-southeast1.
  2. 创建一个cloudbuild.yaml文件。这是必要的,以构建的文物保存在你想要提到水桶在这里。一个例子如下:
--gcs-source-staging-dir=GCS_SOURCE_STAGING_DIR
Run Code Online (Sandbox Code Playgroud)
  1. 最后,您可以运行以下命令:
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 服务部署在亚洲、欧洲或美国,之前指定的存储桶也可以在其他位置。