按区域访问全球资源,实现高可用性

通过在 Compute Engine 上使用自动扩缩脚本或运行时服务,您可以自动执行持续集成和持续部署 (CI/CD) 流水线。 不过,由于这些资源在查询全球 API 端点时严重依赖于全球性资源定义,因此这种方法可能会在多区域架构中引入单点故障。

为了降低这种风险,您可以将服务配置为访问全球资源的区域视图。通过向计算工作负载运行所在的确切区域内的区域化只读端点发送 GET 和 LIST 请求,您的服务可以将其 API 使用与全球控制平面或其他区域中可能发生的服务中断隔离开来。如需详细了解 区域化只读端点和弹性最佳实践,请参阅使用区域视图进行弹性控制平面读取。

准备工作

  • 如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 Google Cloud 服务和 API。如需从本地开发环境运行 代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证: {1

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

    1. 安装 Google Cloud CLI。 安装完成后, 初始化 Google Cloud CLI,方法是运行以下命令:

      gcloud init

      如果您使用的是外部身份提供方 (IdP),则必须先 使用联合身份登录 gcloud CLI。

  • 设置默认区域和可用区。
  • REST

    如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的 凭证。

      安装 Google Cloud CLI。

      如果您使用的是外部身份提供方 (IdP),则必须先 使用联合身份登录 gcloud CLI。

    如需了解详情,请参阅 身份验证文档 中的 Google Cloud 使用 REST 时进行身份验证。

所需角色

如需获得以区域方式访问全球资源所需的权限,请让管理员向您授予项目或操作系统映像的 Compute Instance Admin (v1) (roles/compute.instanceAdmin.v1) IAM 角色。如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。

此预定义角色可提供 以区域方式访问全球资源所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

以区域方式访问全球资源需要以下权限:

  • 如需获取项目的区域视图: compute.projects.get 针对项目的
  • 如需获取操作系统映像的区域视图: compute.images.get 和 compute.images.list 针对项目或操作系统映像

您也可以使用自定义角色或其他预定义角色来获取这些权限。

项目资源

您可以使用 projectViews 只读端点获取全球项目资源的区域视图。 当您查询 projectViews 端点时,Compute Engine 会返回标准全球 compute.Project 资源对象。资源本身仍为全球资源。

获取项目资源的区域视图

您可以使用 Google Cloud CLI 或 REST API 获取全球项目的区域视图。

gcloud

如需通过特定 区域的控制平面描述全球项目,请运行 gcloud compute project-views describe 命令:

gcloud compute project-views describe \
    --region=REGION \
    --project=PROJECT_ID

替换以下内容:

  • REGION: API 请求的 Google Cloud 区域,例如 us-central1。
  • PROJECT_ID:您的项目 ID。

REST

如需通过特定 区域的控制平面描述全球项目,请向 projectViews方法发送 GET 请求。

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/projectViews"

替换以下内容:

  • PROJECT_ID:您的项目 ID。
  • REGION:API 请求的 Google Cloud 区域,例如 us-central1。

API 会直接返回标准 compute.Project 资源表示法。

{
  "kind": "compute#project",
  "id": "1234567890123456789",
  "creationTimestamp": "2024-01-15T10:00:00.000-08:00",
  "name": "my-project12345",
  "commonInstanceMetadata": {
    "items": [
      {
        "key": "example-key",
        "value": "example-value"
      }
    ]
  },
  "selfLink": "https://www.googleapis.com/compute/v1/projects/my-project12345",
  "defaultServiceAccount": "SERVICE_ACCOUNT_EMAIL"
}

操作系统映像资源

您可以使用 imageViews 只读端点获取全球操作系统映像资源的区域视图。 当您查询 imageViews 端点时,Compute Engine 会返回标准全球 compute.Image 资源对象。资源本身仍为全球资源。

获取操作系统映像资源的区域列表

您可以使用 gcloud CLI 或 REST API 列出可通过特定区域端点供您的项目使用的所有全球操作系统映像。

gcloud

如需使用区域端点列出全球操作系统映像,请运行 gcloud compute image-views list 命令:

gcloud compute image-views list \
    --region=REGION \
    --project=PROJECT_ID

替换以下内容:

  • REGION:API 请求的 Google Cloud 区域,例如 us-central1。
  • PROJECT_ID:您的项目 ID。

REST

如需使用区域端点列出全球操作系统映像,请向 imageViews 方法发送 GET 请求:

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/imageViews"

替换以下内容:

  • PROJECT_ID:您的项目 ID。
  • REGION:API 请求的 Google Cloud 区域,例如 us-central1。

获取操作系统映像资源的区域视图

您可以使用 gcloud CLI 或 REST API 通过区域端点检索特定全球操作系统映像的信息。

gcloud

如需使用区域端点检索全球操作系统映像的详细信息,请运行 gcloud compute image-views describe命令:

gcloud compute image-views describe IMAGE_NAME \
    --region=REGION \
    --project=PROJECT_ID

替换以下内容:

  • IMAGE_NAME:全球操作系统映像资源的名称。
  • REGION:API 请求的 Google Cloud 区域,例如 us-central1。
  • PROJECT_ID:您的项目 ID。

REST

如需使用区域端点检索全球操作系统映像的详细信息,请向特定的 imageViews 方法发送 GET 请求:

curl -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/imageViews/IMAGE_NAME"

替换以下内容:

  • PROJECT_ID:您的项目 ID。
  • REGION: API 请求的 Google Cloud 区域,例如 us-central1。
  • IMAGE_NAME:全球操作系统映像资源的名称。

API 会直接返回标准 compute.Image 资源表示法。

{
  "kind": "compute#image",
  "id": "1234567890123456789",
  "creationTimestamp": "2024-01-15T10:00:00.000-08:00",
  "name": "my-image12345",
  "sourceDisk": "https://www.googleapis.com/compute/v1/projects/my-project12345/zones/us-central1-a/disks/my-disk12345",
  "sourceDiskId": "1234567890123456789",
  "sourceType": "RAW",
  "status": "READY",
  "selfLink": "https://www.googleapis.com/compute/v1/projects/my-project12345/global/images/my-image12345"
}

后续步骤