이 가이드에서는 배포 그룹을 만들고, 관리하고, 삭제하는 방법을 설명합니다.
배포 그룹은 방향성 비순환 그래프로 정렬된 배포의 모음입니다. 배포 그룹을 사용하여 관련 배포를 단일 논리 리소스로 관리합니다. 토폴로지 순서로 배포를 적용하거나 토폴로지 역순으로 삭제할 수 있습니다.
시작하기 전에
- Infra Manager가 사용 설정되어 있고 Google Cloud CLI가 설치 및 초기화되어 있는지 확인합니다.
- 구성 관리자 (
roles/config.admin) Identity and Access Management 역할이 있는지 확인합니다. 프로젝트에 기존 배포가 있는지 확인하거나 배포를 만듭니다. 배포 그룹을 만들기 위한 테스트 배포를 만들려면 다음 명령어를 실행하세요.
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: Google Cloud 프로젝트의 ID입니다.
- LOCATION: 배포 그룹을 만들기 위해 만들어야 하는 배포의 Google Cloud 위치입니다. 예를 들면
us-central1입니다. - NEW_DEPLOYMENT_ID: 배포의 ID입니다. 배포 그룹을 만들려면 기존 배포가 필요합니다.
다음 섹션에서
EXISTING_DEPLOYMENT_ID를NEW_DEPLOYMENT_ID로 바꿉니다. - SERVICE_ACCOUNT: 배포를 만드는 데 사용하는 서비스 계정의 ID입니다.
배포 그룹 만들기
배포 그룹은 Infra Manager가 단일 논리 단위로 관리하는 배포 모음입니다.
배포 그룹을 만들 때 그룹에 추가하는 각 배포는 배포 단위입니다.
배포 그룹을 만들려면 다음과 같이 REST API를 사용하세요.
deploymentGroups엔드포인트에POST요청을 전송합니다.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: Google Cloud 프로젝트의 ID입니다.
- LOCATION: 배포 그룹의 Google Cloud 위치입니다. 예를 들면
us-central1입니다. - DEPLOYMENT_GROUP_ID: 만들려는 배포 그룹의 ID입니다.
- DEPLOYMENT_UNIT_ID_1: 배포 그룹에 추가할 배포 단위의 ID입니다.
- EXISTING_DEPLOYMENT_ID: 배포 그룹의 배포 단위를 만드는 데 사용하는 기존 배포의 ID입니다.
- DEPLOYMENT_UNIT_ID_2: 배포 그룹에 추가할 두 번째 배포 단위의 ID입니다. 배포 그룹에 추가할 각 배포 단위의 정의를 추가할 수 있습니다.
- 선택사항: DEPENDENT_UNIT_ID: 종속 항목으로 사용되는 배포 단위의 ID입니다. 이 종속 항목은 정의된 단위 전에 프로비저닝되고 단위 후에 프로비저닝 해제되어야 합니다.
deploymentGroup엔드포인트에GET요청을 전송합니다.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: Google Cloud 프로젝트의 ID입니다.
- LOCATION: 배포 그룹의 Google Cloud 위치입니다. 예를 들면
us-central1입니다. - DEPLOYMENT_GROUP_ID: 새 배포 그룹의 ID입니다.
배포 그룹 프로비저닝
배포 그룹에서 참조된 배포를 적용하려면 그룹을 프로비저닝해야 합니다. 프로비저닝은 deploymentUnits 구조로 정의된 순서대로 배포를 적용합니다. 이 프로세스 중에 배포를 만들거나 업데이트해야 하는 경우 프로비저닝 요청의 deploymentSpecs 객체에 정의를 제공하면 됩니다.
배포 그룹을 프로비저닝하려면 다음과 같이 REST API를 사용하세요.
provision엔드포인트에POST요청을 전송합니다.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: Google Cloud 프로젝트의 ID입니다.
- 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입니다.
작업 엔드포인트에
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: Google Cloud 프로젝트의 ID입니다.
- LOCATION: 배포 그룹의 Google Cloud 위치입니다. 예를 들면
us-central1입니다. - OPERATION_ID: 쿼리할 작업 ID입니다. 예를 들면
operation-1000000000000-64d67ecd2868c-caa044f9-6b48677e입니다.
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입니다.
배포 그룹의 버전 나열
Infra Manager는 provision 또는 deprovision 작업이 완료된 후 배포 그룹 버전을 만듭니다.
배포 그룹 버전을 나열하려면 다음과 같이 REST API를 사용하세요.
revisions엔드포인트에GET요청을 전송합니다.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: Google Cloud 프로젝트의 ID입니다.
- LOCATION: 배포 그룹의 Google Cloud 위치입니다. 예를 들면
us-central1입니다. - DEPLOYMENT_GROUP_ID: 수정사항을 나열할 배포 그룹의 ID입니다.
배포 그룹 업데이트
배포 그룹을 업데이트하려면 배포 그룹 정의를 변경하세요. 선택적으로 업데이트된 정의를 배포 그룹에 프로비저닝할 수 있습니다.
배포 그룹을 업데이트하려면 다음과 같이 REST API를 사용하세요.
deploymentGroups엔드포인트에PATCH요청을 전송합니다.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: Google Cloud 프로젝트의 ID입니다.
- LOCATION: 배포 그룹의 Google Cloud 위치입니다. 예를 들면
us-central1입니다. - DEPLOYMENT_GROUP_ID: 업데이트할 배포 그룹의 ID입니다.
- DEPLOYMENT_UNIT_ID_3: 업데이트할 배포의 ID입니다.
선택사항: 업데이트된 배포 그룹을 프로비저닝합니다.
provision엔드포인트에POST요청을 전송합니다.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: Google Cloud 프로젝트의 ID입니다.
- LOCATION: 배포 그룹의 Google Cloud 위치입니다. 예를 들면
us-central1입니다. - DEPLOYMENT_GROUP_ID: 업데이트할 배포 그룹의 ID입니다.
- DEPLOYMENT_UNIT_ID_3: 배포 그룹에 추가할 서드 파티 배포 단위의 ID입니다.
- EXISTING_DEPLOYMENT_ID: 기존 배포의 ID입니다.
- SERVICE_ACCOUNT: 배포 그룹을 업데이트하는 데 사용하는 서비스 계정의 문자열 ID입니다.
배포 그룹을 프로비저닝하면 마지막으로 성공한 버전을 기반으로 한 변경사항이 배포 그룹 내 배포에 적용됩니다.
배포 그룹 정의에서 배포를 삭제한 후 프로비저닝하면 삭제된 배포가 리소스와 함께 삭제됩니다.
성공적인 응답은 프로비저닝이 완료되었음을 나타냅니다.
{ "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를 사용하세요.
deprovision엔드포인트에POST요청을 전송합니다.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: Google Cloud 프로젝트의 ID입니다.
- LOCATION: 배포 그룹의 Google Cloud 위치입니다.
예를 들면
us-central1입니다. - DEPLOYMENT_GROUP_ID: 프로비저닝 해제할 배포 그룹의 ID입니다.
성공적인 응답은 프로비저닝 해제가 완료되었음을 나타냅니다.
{ "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를 사용하세요.
deploymentGroups엔드포인트에DELETE요청을 보냅니다. 수정사항이 있는 경우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: Google Cloud 프로젝트의 ID입니다.
- LOCATION: 배포 그룹의 Google Cloud 위치입니다. 예를 들면
us-central1입니다. - DEPLOYMENT_GROUP_ID: 삭제할 배포 그룹의 ID입니다.
다음 단계
- Infra Manager에 대해 자세히 알아보세요.
- Infrastructure Manager API 참조를 참고하세요.