從區域存取全域資源,確保高可用性

在 Compute Engine 上使用自動調度資源指令碼或執行階段服務,即可自動執行持續整合與持續部署 (CI/CD) 管道。不過,由於這些資源在查詢全域 API 端點時,會大量依附於全域資源定義,因此這種做法可能會在多區域架構中造成單一故障點。

如要降低這項風險,您可以設定服務,存取全域資源的區域檢視畫面。只要將 GET 和 LIST 要求傳送至運算工作負載所在區域的區域化唯讀端點,服務就能將 API 用量與全球控制層或其他區域的潛在服務中斷問題隔離開來。如要進一步瞭解區域性唯讀端點和復原最佳做法,請參閱「使用區域檢視畫面,確保控制層讀取作業具備復原能力」。

事前準備

  • 如果尚未設定驗證,請先完成設定。驗證程序會確認您的身分,以便授予 Cloud de Confiance by S3NS 服務和 API 的存取權。如要從本機開發環境執行程式碼或範例,您可以選取下列其中一個選項,向 Compute Engine 進行驗證:

    選取這個頁面上範例的預計用途分頁:

    控制台

    使用 Cloud de Confiance 控制台存取 Cloud de Confiance by S3NS 服務和 API 時,您不需要設定驗證機制。

    gcloud

    1. 安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。登入後,執行下列指令來初始化 Google Cloud CLI:

      gcloud init
  • 設定預設區域和可用區。
  • REST

    如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

      安裝 Google Cloud CLI,然後 使用聯合身分登入 gcloud CLI。

    詳情請參閱 Cloud de Confiance 驗證說明文件中的「使用 REST 進行驗證」。

必要的角色

如要取得以區域性方式存取全域性資源所需的權限,請要求管理員授予您專案或 OS 映像檔的 Compute 執行個體管理員 (v1) (roles/compute.instanceAdmin.v1) IAM 角色。如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這個預先定義的角色具備以區域方式存取全域性資源所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

如要存取區域性全域資源,必須具備下列權限:

  • 如要取得專案的區域檢視畫面: compute.projects.get 專案
  • 如要取得 OS 映像檔的區域檢視畫面: 專案或 OS 映像檔的 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 要求的 Cloud de Confiance by S3NS 區域,例如 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 要求的 Cloud de Confiance 區域,例如 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"
}

OS 映像檔資源

您可以使用 imageViews 唯讀端點,取得全域 OS 映像檔資源的區域檢視畫面。查詢 imageViews 端點時,Compute Engine 會傳回標準的全球 compute.Image 資源物件。資源本身仍為全域資源。

取得 OS 映像檔資源的區域清單

您可以使用 gcloud CLI 或 REST API,透過特定區域端點列出專案可用的所有全域 OS 映像檔。

gcloud

如要使用區域端點列出全域 OS 映像檔,請執行 gcloud compute image-views list 指令:

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

更改下列內容:

  • REGION:API 要求的 Cloud de Confiance 區域,例如 us-central1。
  • PROJECT_ID:您的專案 ID。

REST

如要使用區域端點列出全域 OS 映像檔,請對 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 要求的 Cloud de Confiance 區域,例如 us-central1。

取得 OS 映像檔資源的區域檢視畫面

您可以使用 gcloud CLI 或 REST API,透過區域端點擷取特定全域 OS 映像檔的資訊。

gcloud

如要使用區域端點擷取全域 OS 映像檔的詳細資料,請執行 gcloud compute image-views describe 指令:

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

更改下列內容:

  • IMAGE_NAME:全域 OS 映像檔資源的名稱。
  • REGION:API 要求的 Cloud de Confiance 區域,例如 us-central1。
  • PROJECT_ID:您的專案 ID。

REST

如要使用區域端點擷取全域 OS 映像檔的詳細資料,請向特定 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 要求的 Cloud de Confiance 區域,例如 us-central1。
  • IMAGE_NAME:全域 OS 映像檔資源的名稱。

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"
}

後續步驟