1단계: 프로젝트 준비
이 페이지에서는 Terraform을 사용하여 Manufacturing Data Engine (MDE)을 배포하기 전에 Google Cloud 프로젝트를 준비하는 단계를 설명합니다.
개요
MDE는 패키지 솔루션으로 제공됩니다. Terraform 스크립트는 필요한 모든 구성요소와 통합 코드를 Google Cloud 프로젝트에 배포합니다. 이를 통해 필요에 따라 아키텍처를 수정하고 확장할 수 있는 최대한의 유연성을 확보할 수 있습니다.
배포 스크립트는 Google Cloud 프로젝트 및 권한과 같은 필수 구성요소가 마련되어 있다고 가정하고 솔루션을 자동으로 설정하고 구성합니다. 일부 고객은 광범위하고 맞춤설정된 Google Cloud제한을 적용하고 있을 수 있습니다. 이 경우 이러한 제한사항을 해결하기 위해 배포에 추가 작업 ( Google Cloud 컨설팅 또는 시스템 통합 파트너를 통해)이 필요할 수 있습니다.
1. 클라이언트 환경 준비
클라이언트 환경에 다음 CLI 도구가 최신 버전으로 설치되어 있어야 합니다.
다음 추가 구성요소가 설치된 Google Cloud CLI
- kubectl
- cbt
- Terraform CLI (v1.9.x 이상)
- Helm CLI (v3.9.x 이상)
클라이언트 환경을 사용하여 MDE를 배포할 수 있지만, 필요한 도구가 대부분 이미 설치되어 있는 Cloud Shell에서 배포하면 시간을 절약할 수 있습니다.
2. Google Cloud 프로젝트 준비
Google Cloud 프로젝트에 다음 특성이 있는지 확인합니다.
- 활성 Cloud Billing 계정
활성 상태인 Cloud ID 또는 Workspace 계정이 있는 조직에 속해 있습니다.
다음 명령어를 사용하여 기본 프로젝트를 MDE 배포 프로젝트로 설정합니다.
gcloud config set project PROJECT_ID다음을 바꿉니다.
PROJECT_ID를 MDE 배포 프로젝트 ID로 바꿉니다.
3. 서비스 계정 만들기
Google Cloud 프로젝트에 다음 두 가지 서비스 계정이 필요합니다.
mde-df-worker@PROJECT_ID.iam.gserviceaccount.commde-tf@PROJECT_ID.iam.gserviceaccount.com개
다음을 바꿉니다.
PROJECT_ID를 MDE 배포 프로젝트 ID로 바꿉니다.
roles/iam.serviceAccountCreator 역할이 있는 조직의 사용자는 다음 명령어를 사용하여 mde-df-worker 및 mde-tf 서비스 계정을 만들 수 있습니다.
gcloud iam service-accounts create mde-df-worker \
--description="Manufacturing Data Engine Dataflow Worker Service Account" \
--display-name="Manufacturing Data Engine Dataflow Worker Service Account"
gcloud iam service-accounts create mde-tf \
--description="Manufacturing Data Engine Terraform Service Account" \
--display-name="Manufacturing Data Engine Terraform Service Account"
4. mde-tf 서비스 계정에 역할 부여
배포를 위해 Terraform에서 사용하는 mde-tf 서비스 계정에 다음 역할을 부여합니다.
roles/bigquery.adminroles/bigtable.adminroles/cloudsql.adminroles/compute.instanceAdminroles/compute.loadBalancerAdminroles/compute.networkAdminroles/compute.securityAdminroles/container.adminroles/container.developerroles/dataflow.adminroles/dns.adminroles/iam.serviceAccountAdminroles/iam.serviceAccountUserroles/pubsub.adminroles/resourcemanager.projectIamAdminroles/secretmanager.adminroles/secretmanager.secretVersionManagerroles/serviceusage.serviceUsageAdminroles/storage.adminroles/monitoring.adminroles/redis.adminroles/file.editor
roles/iam.securityAdmin 역할 또는 이에 상응하는 권한이 있는 사용자는 다음 명령어를 사용하여 mde-tf 서비스 계정에 필요한 역할을 부여할 수 있습니다.
export PROJECT_ID=$(gcloud config get-value project)
export SA_TERRAFORM="mde-tf"
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/bigquery.admin'
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/dataflow.admin'
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/bigtable.admin'
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/cloudsql.admin'
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/compute.instanceAdmin'
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/compute.loadBalancerAdmin'
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/compute.networkAdmin'
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/compute.securityAdmin'
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/container.admin'
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/container.developer'
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/dns.admin'
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/iam.serviceAccountAdmin'
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/iam.serviceAccountUser'
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/pubsub.admin'
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/resourcemanager.projectIamAdmin'
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/secretmanager.admin'
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/secretmanager.secretVersionManager'
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/serviceusage.serviceUsageAdmin'
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/storage.admin'
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/monitoring.admin'
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/redis.admin'
gcloud projects add-iam-policy-binding ${PROJECT_ID} \
--member="serviceAccount:${SA_TERRAFORM}@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/file.editor'
5. mde-tf 서비스 계정 대리
roles/iam.serviceAccountTokenCreator 역할이 있는 경우 사용자 계정이 mde-tf 서비스 계정을 가장하도록 허용합니다.
roles/iam.serviceAccountAdmin 역할 또는 이에 상응하는 권한이 있는 사용자는 다음 명령어를 사용하여 mde-tf 서비스 계정의 역할을 사용자 계정에 부여할 수 있습니다.
export USER_EMAIL=$(gcloud auth list --filter=status:ACTIVE --format="value(account)")
export PROJECT_ID=$(gcloud config get-value project)
gcloud iam service-accounts add-iam-policy-binding \
--role roles/iam.serviceAccountTokenCreator \
--member "user:${USER_EMAIL}" \
"mde-tf"@"${PROJECT_ID}".iam.gserviceaccount.com
6. Google Cloud API 사용 설정
Google Cloud API가 사용 설정되어 있는지 확인합니다.
Terraform 스크립트를 실행하려면 다음 Google Cloud API를 사용 설정해야 합니다.
compute.googleapis.comiamcredentials.googleapis.comcloudresourcemanager.googleapis.com
roles/servicemanagement.serviceConsumer 역할 또는 이에 상응하는 권한이 있는 사용자는 다음 명령어를 사용하여 API를 사용 설정할 수 있습니다.
gcloud services enable \
compute.googleapis.com \
iamcredentials.googleapis.com \
cloudresourcemanager.googleapis.com
7. Cloud Storage 버킷 준비
Terraform 상태를 저장할 Cloud Storage 버킷을 준비합니다.
Terraform에는 Terraform 상태(PROJECT_ID-tf)를 저장할 Cloud Storage 버킷이 필요하며 mde-tf 서비스 계정에는 이 버킷에 대한 읽기 및 쓰기 권한이 있어야 합니다.
roles/storage.admin 역할 또는 이에 상응하는 권한이 있는 사용자는 다음 명령어를 사용하여 버킷을 만들고 mde-tf에 필요한 권한을 부여할 수 있습니다.
export PROJECT_ID=$(gcloud config get-value project)
gcloud storage buckets create "gs://${PROJECT_ID}-tf"
gcloud storage buckets add-iam-policy-binding gs://"${PROJECT_ID}-tf" \
--member="serviceAccount:mde-tf@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/storage.objectViewer'
gcloud storage buckets add-iam-policy-binding gs://"${PROJECT_ID}-tf" \
--member="serviceAccount:mde-tf@${PROJECT_ID}.iam.gserviceaccount.com" \
--role='roles/storage.objectCreator'