Etapa 1: preparar o projeto
Nesta página, descrevemos as etapas para preparar seu projeto Google Cloud antes de implantar o Manufacturing Data Engine (MDE) usando o Terraform.
Google CloudVisão geral
O MDE é entregue como uma solução em pacote. Um script do Terraform implanta todos os componentes necessários e o código de integração no seu projeto Google Cloud . Isso oferece máxima flexibilidade para você modificar e estender a arquitetura com base nas suas necessidades.
O script de implantação configura automaticamente a solução, supondo que os pré-requisitos, como um projeto do Google Cloud e permissões, estejam em vigor. Alguns clientes podem ter restrições Google Cloud extensas e personalizadas. Nesse caso, talvez seja necessário um trabalho extra (via Google Cloud Consulting ou um parceiro de integração de sistemas) para que a implantação contorne essas restrições.
1. Preparar o ambiente do cliente
O ambiente do cliente precisa ter as seguintes ferramentas de CLI instaladas na versão mais atualizada:
Google Cloud CLI com os seguintes componentes adicionais instalados:
- kubectl
- cbt
- CLI do Terraform
(v1.9.x ou mais recente)
- Confira também os requisitos mínimos do Terraform e dos provedores do Terraform.
- CLI do Helm (v3.9.x ou mais recente)
É possível usar qualquer ambiente de cliente para implantar o MDE, mas você pode economizar tempo implantando-o do Cloud Shell, já que ele tem a maioria das ferramentas necessárias já instaladas.
2. Preparar seu projeto do Google Cloud
Verifique se o projeto Google Cloud tem as seguintes características:
- Uma conta do Cloud Billing ativa.
Ela faz parte de uma organização com uma conta ativa do Cloud Identity ou do Workspace.
Defina o projeto padrão como o projeto de implantação do MDE usando o seguinte comando:
gcloud config set project PROJECT_IDSubstitua:
PROJECT_IDcom o ID do projeto de implantação do MDE.
3. Criar contas de serviço
Você vai precisar de duas contas de serviço diferentes no projeto Google Cloud :
mde-df-worker@PROJECT_ID.iam.gserviceaccount.commde-tf@PROJECT_ID.iam.gserviceaccount.com.
Substitua:
PROJECT_IDcom o ID do projeto de implantação do MDE.
Um usuário na sua organização com a função roles/iam.serviceAccountCreator pode criar as contas de serviço mde-df-worker e mde-tf com os seguintes comandos:
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. Conceder papéis à conta de serviço mde-tf
Conceda à conta de serviço mde-tf, usada pelo Terraform para implantações, os seguintes papéis:
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
Um usuário com o papel roles/iam.securityAdmin ou permissões equivalentes pode
conceder os papéis necessários à conta de serviço mde-tf com os
seguintes comandos:
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. Representar a conta de serviço mde-tf
Permita que sua conta de usuário represente a conta de serviço mde-tf
se você tiver o papel roles/iam.serviceAccountTokenCreator.
Um usuário com o papel roles/iam.serviceAccountAdmin ou permissões equivalentes
pode conceder à sua conta de usuário o papel na conta de serviço mde-tf
usando o seguinte comando:
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. Ative as APIs Google Cloud
Verifique se as APIs Google Cloud estão ativadas.
As seguintes APIs Google Cloud precisam ser ativadas para executar scripts do Terraform:
compute.googleapis.comiamcredentials.googleapis.comcloudresourcemanager.googleapis.com
Um usuário com a função roles/servicemanagement.serviceConsumer ou permissões equivalentes
pode ativar as APIs usando o seguinte comando:
gcloud services enable \
compute.googleapis.com \
iamcredentials.googleapis.com \
cloudresourcemanager.googleapis.com
7. Preparar um bucket do Cloud Storage
Prepare um bucket do Cloud Storage para armazenar o estado do Terraform:
O Terraform exige um bucket do Cloud Storage para salvar o estado do Terraform (PROJECT_ID-tf), e a conta de serviço mde-tf precisa ter permissões de leitura e gravação nesse bucket.
Um usuário com a função roles/storage.admin ou permissões equivalentes pode
criar o bucket e conceder ao mde-tf as permissões necessárias com
o seguinte comando:
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'