管理部署項目群組

本指南說明如何建立、管理及刪除部署群組。

部署群組是依有向非循環圖排列的部署項目集合。您可以使用部署群組,以單一邏輯資源的形式管理相關部署作業。您可以依拓撲順序套用部署作業,或依反向拓撲順序刪除部署作業。

事前準備

  1. 確認已啟用 Infra Manager,並安裝及初始化 Google Cloud CLI
  2. 確認您具備「Config Admin」 (roles/config.admin) 身分與存取權管理角色。
  3. 確認專案已有部署作業,或建立部署作業。如要建立測試部署作業來建立部署群組,請執行下列指令:

    gcloud infra-manager deployments apply projects/PROJECT_ID/locations/LOCATION/deployments/NEW_DEPLOYMENT_ID \
     --service-account=SERVICE_ACCOUNT \
     --git-source-repo="https://github.com/terraform-google-modules/terraform-google-network" \
     --git-source-directory="examples/simple_project_with_regional_network" \
     --git-source-ref="v6.0.1" \
     --input-values=network_name=test-network,project_id=PROJECT_ID \
     --import-existing-resources
    

    更改下列內容:

    • PROJECT_ID:專案的 ID。 Google Cloud
    • LOCATION:您需要建立部署作業的位置,才能建立部署作業群組。 Google Cloud 例如:us-central1
    • NEW_DEPLOYMENT_ID:部署作業的 ID。您必須先有現有部署作業,才能建立部署群組。 將下列章節中的 EXISTING_DEPLOYMENT_ID 替換為 NEW_DEPLOYMENT_ID
    • SERVICE_ACCOUNT:用於建立部署作業的服務帳戶 ID。

建立部署作業群組

部署群組是 Infra Manager 做為單一邏輯單元管理的部署集合。

建立部署群組時,您加入群組的每個部署作業都是部署單元

如要建立部署群組,請使用 REST API,如下所示:

  1. POST 要求傳送至 deploymentGroups 端點:

    curl \
        -X POST \
        -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/deploymentGroups/?deployment_group_id=DEPLOYMENT_GROUP_ID" \
        --data '{
          "deploymentUnits": [
            {
                "id": "DEPLOYMENT_UNIT_ID_1",
                "deployment": "projects/PROJECT_ID/locations/LOCATION/deployments/EXISTING_DEPLOYMENT_ID"
            },
            {
                "id": "DEPLOYMENT_UNIT_ID_2",
                "dependencies": ["DEPENDENT_UNIT_ID"]
            }
          ]
        }'
    

    更改下列內容:

    • PROJECT_ID:專案的 ID。 Google Cloud
    • LOCATION:部署群組的 Google Cloud 位置。例如:us-central1
    • DEPLOYMENT_GROUP_ID:要建立的部署群組 ID。
    • DEPLOYMENT_UNIT_ID_1:要新增至部署群組的部署單元 ID。
    • EXISTING_DEPLOYMENT_ID:現有部署作業的 ID,您會使用這個 ID 建立部署作業群組的部署作業單元。
    • DEPLOYMENT_UNIT_ID_2:要新增至部署群組的第二個部署單元 ID。您可以為要新增至部署群組的每個部署單元新增定義。
    • 選用:DEPENDENT_UNIT_ID:做為依附元件的部署單元 ID。這個依附元件必須在定義單元之前佈建,並在定義單元之後取消佈建。
  2. GET 要求傳送至 deploymentGroup 端點:

    curl \
        -X GET \
        -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/deploymentGroups/DEPLOYMENT_GROUP_ID"
    

    更改下列內容:

    • PROJECT_ID:專案的 ID。 Google Cloud
    • LOCATION:部署群組的 Google Cloud 位置。例如:us-central1
    • DEPLOYMENT_GROUP_ID:新部署群組的 ID。

佈建部署作業群組

如要套用部署群組中參照的部署項目,您必須佈建該群組。佈建作業會按照 deploymentUnits 結構定義的順序套用部署作業。如果您需要在這個程序中建立或更新部署作業,可以在佈建要求的 deploymentSpecs 物件中提供定義。

如要佈建部署群組,請使用 REST API,如下所示:

  1. POST 要求傳送至 provision 端點:

    curl \
        -X POST \
        -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/deploymentGroups/DEPLOYMENT_GROUP_ID:provision" \
        --data '{
          "deploymentSpecs": {
            "DEPLOYMENT_UNIT_ID_2": {
                "deploymentId": "DEPLOYMENT_ID_2",
                "deployment": {
                    "terraformBlueprint": {
                        "gitSource": {
                            "directory": "examples/simple_project_with_regional_network",
                            "ref": "v6.0.1",
                            "repo": "https://github.com/terraform-google-modules/terraform-google-network"
                        },
                        "inputValues": {
                            "network_name": {
                                "inputValue": "test-network"
                            }
                        },
                        "externalValues": {
                            "project_id": {
                                "deploymentSource": {
                                    "deployment": "projects/PROJECT_ID/locations/LOCATION/deployments/EXISTING_DEPLOYMENT_ID",
                                    "outputName": "project_id"
                                }
                            }
                        }
                    },
                    "serviceAccount": "SERVICE_ACCOUNT",
                    "importExistingResources": true
                }
            }
          }
        }'
    

    更改下列內容:

    • PROJECT_ID:專案的 ID。 Google Cloud
    • LOCATION:部署群組的 Google Cloud 位置。例如:us-central1
    • DEPLOYMENT_GROUP_ID:新部署群組的 ID。
    • DEPLOYMENT_UNIT_ID_2:要新增至部署群組的第二個部署單元 ID。您可以為要新增至部署群組的每個部署單元新增定義。
    • DEPLOYMENT_ID_2:要新增至部署群組的第二個部署單元字串 ID。
    • EXISTING_DEPLOYMENT_ID:現有部署作業的 ID。
    • SERVICE_ACCOUNT:用於佈建部署群組的服務帳戶字串 ID。
  2. 如要向作業端點傳送 GET 要求,請使用 REST API,如下所示:

     curl \
         -X GET \
         -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
         -H "Content-Type: application/json" \
         "https://config.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/operations/OPERATION_ID"
    

    更改下列內容:

    • PROJECT_ID:專案的 ID。 Google Cloud
    • LOCATION:部署群組的 Google Cloud 位置。例如:us-central1
    • OPERATION_ID:要查詢的作業 ID。例如:operation-1000000000000-64d67ecd2868c-caa044f9-6b48677e
  3. Infra Manager 會使用長時間執行的作業 (LRO) 顯示佈建進度。成功的回應表示佈建完成:

    {
      "name": "projects/PROJECT_ID/locations/LOCATION/operations/OP_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.config.v1.OperationMetadata",
        "createTime": "2026-02-24T01:27:57.045161236Z",
        "target": "projects/PROJECT_ID/locations/LOCATION/deploymentGroups/DEPLOYMENT_GROUP_ID",
        "verb": "update",
        "requestedCancellation": false,
        "apiVersion": "v1",
        "provisionDeploymentGroupMetadata": {
          "step": "PROVISIONING_DEPLOYMENT_UNITS",
          "deploymentUnitProgresses": [
            {
              "unitId": "DEPLOYMENT_UNIT_ID_1",
              "deployment": "projects/PROJECT_ID/locations/LOCATION/deployments/EXISTING_DEPLOYMENT_ID",
              "state": "APPLYING_DEPLOYMENT",
              "intent": "UPDATE_DEPLOYMENT",
              "deploymentOperationSummary": {
                "build": "56c739c7-cf42-457c-a889-0e0c139cf7b3",
                "logs": "gs://path/to/log",
                "content": "gs://path/to/content",
                "artifacts": "gs://path/to/artifacts"
              }
            },
            {
              "unitId": "DEPLOYMENT_UNIT_ID_2",
              "state": "QUEUED",
              "intent": "CREATE_DEPLOYMENT"
            }
          ]
        }
      }
    }
    

    其中:

    • OP_ID:作業 ID。由 Infra Manager 生成。
    • EXISTING_DEPLOYMENT_ID:Infra Manager 在 DEPLOYMENT_UNIT_ID_1 之前佈建的部署作業 ID。

列出部署項目群組的修訂版本

provisiondeprovision 作業完成後,Infra Manager 會建立部署群組修訂版本。

如要列出部署群組修訂版本,請使用下列 REST API:

  1. GET 要求傳送至 revisions 端點:

    curl \
        -X GET \
        -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/deploymentGroups/DEPLOYMENT_GROUP_ID/revisions"
    

    更改下列內容:

    • PROJECT_ID:專案的 ID。 Google Cloud
    • LOCATION:部署群組的 Google Cloud 位置。例如:us-central1
    • DEPLOYMENT_GROUP_ID:要列出修訂版本的部署群組 ID。

更新部署項目群組

如要更新部署項目群組,請變更部署項目群組定義。 您可以選擇將更新後的定義佈建至部署群組。

如要更新部署群組,請使用 REST API,如下所示:

  1. PATCH 要求傳送至 deploymentGroups 端點:

    curl \
        -X PATCH \
        -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/deploymentGroups/DEPLOYMENT_GROUP_ID" \
        --data '{
          "deploymentUnits": [
            {
                "id": "DEPLOYMENT_UNIT_ID_3"
            }
          ]
        }'
    

    更改下列內容:

    • PROJECT_ID:專案的 ID。 Google Cloud
    • LOCATION:部署群組的 Google Cloud 位置。例如:us-central1
    • DEPLOYMENT_GROUP_ID:要更新的部署群組 ID。
    • DEPLOYMENT_UNIT_ID_3:要更新的部署作業 ID。
  2. 選用:佈建更新後的部署項目群組。 將 POST 要求傳送至 provision 端點:

    curl \
        -X POST \
        -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/deploymentGroups/DEPLOYMENT_GROUP_ID:provision" \
        --data '{
          "deploymentSpecs": {
            "DEPLOYMENT_UNIT_ID_3": {
                "deploymentId": "EXISTING_DEPLOYMENT_ID",
                "deployment": {
                    "terraformBlueprint": {
                        "gitSource": {
                            "directory": "examples/simple_project_with_regional_network",
                            "ref": "v6.0.1",
                            "repo": "https://github.com/terraform-google-modules/terraform-google-network"
                        },
                        "inputValues": {
                            "network_name": {
                                "inputValue": "test-network"
                            },
                            "project_id": {
                              "inputValue": "PROJECT_ID"
                            }
                        }
                    },
                    "serviceAccount": "SERVICE_ACCOUNT",
                    "importExistingResources": true
                }
            }
          }
        }'
    

    更改下列內容:

    • PROJECT_ID:專案的 ID。 Google Cloud
    • LOCATION:部署群組的 Google Cloud 位置。例如:us-central1
    • DEPLOYMENT_GROUP_ID:要更新的部署群組 ID。
    • DEPLOYMENT_UNIT_ID_3:要新增至部署群組的第三方部署單元 ID。
    • EXISTING_DEPLOYMENT_ID:現有部署作業的 ID。
    • SERVICE_ACCOUNT:用於更新部署群組的服務帳戶字串 ID。

    佈建部署群組時,系統會根據上次成功修訂版本的內容,對部署群組內的部署作業套用變更。

    如果您從部署群組定義中移除部署,然後進行佈建,系統會一併刪除移除的部署及其資源。

  3. 成功的回應表示佈建完成。

    {
      "name": "projects/PROJECT_ID/locations/LOCATION/operations/OP_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.config.v1.OperationMetadata",
        "createTime": "2026-02-26T20:03:26.580085899Z",
        "target": "projects/PROJECT_ID/locations/LOCATION/deploymentGroups/DEPLOYMENT_GROUP_ID",
        "verb": "update",
        "requestedCancellation": false,
        "apiVersion": "v1",
        "provisionDeploymentGroupMetadata": {
          "step": "PROVISIONING_DEPLOYMENT_UNITS",
          "deploymentUnitProgresses": [
            {
              "unitId": "revisions/REVISION_ID/deploymentUnits/DEPLOYMENT_UNIT_ID_2",
              "deployment": "projects/PROJECT_ID/locations/LOCATION/deployments/DEPLOYMENT_ID_2",
              "state": "DELETING_DEPLOYMENT",
              "intent": "CLEAN_UP",
              "deploymentOperationSummary": {
                "deploymentStep": "VALIDATING_REPOSITORY"
              }
            },
            {
              "unitId": "revisions/REVISION_ID/deploymentUnits/DEPLOYMENT_UNIT_ID_1",
              "deployment": "projects/PROJECT_ID/locations/LOCATION/deployments/NEW_DEPLOYMENT_NAME",
              "state": "QUEUED",
              "intent": "CLEAN_UP"
            },
            {
              "unitId": "DEPLOYMENT_UNIT_ID_3",
              "state": "QUEUED",
              "intent": "RECREATE_DEPLOYMENT"
            }
          ]
        }
      },
      "done": false
    }
    

    其中:

    • OP_ID:代表作業 ID。由 Infra Manager 生成。
    • REVISION_ID:代表修訂版本 ID。由 Infra Manager 生成。

取消佈建部署作業群組

取消佈建部署群組,即可刪除所有參照的部署項目,以及屬於上次成功修訂版本的所有部署項目 (但之後已刪除)。

如要取消佈建部署群組,請使用 REST API,如下所示:

  1. POST 要求傳送至 deprovision 端點:

    curl \
        -X POST \
        -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/deploymentGroups/DEPLOYMENT_GROUP_ID:deprovision" \
        --data '{
          "deletePolicy": "DELETE",
          "force": true
        }'
    

    更改下列內容:

    • PROJECT_ID:專案的 ID。 Google Cloud
    • LOCATION:部署群組的 Google Cloud 位置。例如:us-central1
    • DEPLOYMENT_GROUP_ID:要取消佈建的部署群組 ID。
  2. 成功的回應表示取消佈建完成。

    {
      "name": "projects/PROJECT_ID/locations/LOCATION/operations/OP_ID",
      "metadata": {
        "@type": "type.googleapis.com/google.cloud.config.v1.OperationMetadata",
        "createTime": "2026-02-26T20:12:46.929574561Z",
        "endTime": "2026-02-26T20:14:04.390333218Z",
        "target": "projects/PROJECT_ID/locations/LOCATION/deploymentGroups/DEPLOYMENT_GROUP_ID",
        "verb": "update",
        "requestedCancellation": false,
        "apiVersion": "v1",
        "provisionDeploymentGroupMetadata": {
          "step": "SUCCEEDED",
          "deploymentUnitProgresses": [
            {
              "unitId": "DEPLOYMENT_UNIT_ID",
              "deployment": "projects/PROJECT_ID/locations/LOCATION/deployments/DEPLOYMENT_NAME_3",
              "state": "SUCCEEDED",
              "deploymentOperationSummary": {
                "deploymentStep": "SUCCEEDED"
              }
            }
          ]
        }
      },
      "done": true,
      "response": {
        "@type": "type.googleapis.com/google.cloud.config.v1.DeploymentGroup",
        "name": "projects/PROJECT_ID/locations/LOCATION/deploymentGroups/DEPLOYMENT_GROUP_ID",
        "createTime": "2026-02-24T01:21:14.001716666Z",
        "updateTime": "2026-02-26T20:12:46.931142650Z",
        "state": "ACTIVE",
        "deploymentUnits": [
          {
            "id": "DEPLOYMENT_UNIT_ID_3"
          }
        ],
        "provisioningState": "DEPROVISIONED"
      }
    }
    

刪除部署作業群組

取消佈建部署群組後,系統仍會保留其中繼資料。如要移除中繼資料,必須刪除部署項目群組。

如要刪除部署群組,請使用 REST API,如下所示:

  1. DELETE 要求傳送至 deploymentGroups 端點。如有修訂版本,請將 force 設為 true

    curl \
        -X DELETE \
        -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
        -H "Content-Type: application/json" \
        "https://config.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/deploymentGroups/DEPLOYMENT_GROUP_ID" \
        --data '{
          "force": true
        }'
    

    更改下列內容:

    • PROJECT_ID:專案的 ID。 Google Cloud
    • LOCATION:部署群組的 Google Cloud 位置。例如:us-central1
    • DEPLOYMENT_GROUP_ID:要刪除的部署作業群組 ID。

後續步驟