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 Cloud

Visã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:

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_ID
    

    Substitua:

    • PROJECT_ID com 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.com
  • mde-tf@PROJECT_ID.iam.gserviceaccount.com.

Substitua:

  • PROJECT_ID com 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.admin
  • roles/bigtable.admin
  • roles/cloudsql.admin
  • roles/compute.instanceAdmin
  • roles/compute.loadBalancerAdmin
  • roles/compute.networkAdmin
  • roles/compute.securityAdmin
  • roles/container.admin
  • roles/container.developer
  • roles/dataflow.admin
  • roles/dns.admin
  • roles/iam.serviceAccountAdmin
  • roles/iam.serviceAccountUser
  • roles/pubsub.admin
  • roles/resourcemanager.projectIamAdmin
  • roles/secretmanager.admin
  • roles/secretmanager.secretVersionManager
  • roles/serviceusage.serviceUsageAdmin
  • roles/storage.admin
  • roles/monitoring.admin
  • roles/redis.admin
  • roles/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.com
  • iamcredentials.googleapis.com
  • cloudresourcemanager.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'