Paso 1: Prepara tu proyecto

En esta página, se describen los pasos para preparar tu proyecto Google Cloud antes de implementar Manufacturing Data Engine (MDE) con Terraform.

Descripción general

MDE se entrega como una solución empaquetada. Una secuencia de comandos de Terraform implementa todos los componentes requeridos y el código de integración en tu proyecto de Google Cloud . Esto te brinda la máxima flexibilidad para modificar y extender la arquitectura según tus necesidades.

La secuencia de comandos de implementación configura automáticamente la solución, suponiendo que se cumplen los requisitos previos, como un proyecto Google Cloud y permisos. Es posible que algunos clientes tengan restricciones Google Cloudextensas y personalizadas. Si este es el caso, es posible que se requiera trabajo adicional (a través de Google Cloud Consulting o un socio de integración de sistemas) para que la implementación sortee estas restricciones.

1. Prepara tu entorno de cliente

Tu entorno de cliente debe tener instaladas las siguientes herramientas de la CLI en su versión más actualizada:

2. Prepara tu proyecto de Google Cloud

Asegúrate de que tu proyecto Google Cloud tenga las siguientes características:

  • Una cuenta de Facturación de Cloud activa
  • Forma parte de una organización con una cuenta activa de Cloud Identity o Workspace.

  • Configura el proyecto predeterminado en el proyecto de implementación del MDE con el siguiente comando:

    gcloud config set project PROJECT_ID
    

    Reemplaza lo siguiente:

    • PROJECT_ID con el ID del proyecto de implementación del MDE.

3. Crea cuentas de servicio

Necesitarás dos cuentas de servicio diferentes en tu proyecto de Google Cloud :

  • mde-df-worker@PROJECT_ID.iam.gserviceaccount.com
  • mde-tf@PROJECT_ID.iam.gserviceaccount.com

Reemplaza lo siguiente:

  • PROJECT_ID con el ID del proyecto de implementación del MDE.

Un usuario de tu organización con el rol roles/iam.serviceAccountCreator puede crear las cuentas de servicio mde-df-worker y mde-tf con los siguientes 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. Otorga roles para la cuenta de servicio mde-tf

Otorga a la cuenta de servicio mde-tf, que usa Terraform para las implementaciones, los siguientes roles:

  • 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

Un usuario con el rol roles/iam.securityAdmin o permisos equivalentes puede otorgar los roles requeridos a la cuenta de servicio mde-tf con los siguientes 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. Suplantar la identidad de la cuenta de servicio mde-tf

Permite que tu cuenta de usuario actúe en nombre de la cuenta de servicio mde-tf si tienes el rol roles/iam.serviceAccountTokenCreator.

Un usuario con el rol roles/iam.serviceAccountAdmin o permisos equivalentes puede otorgar a tu cuenta de usuario el rol en la cuenta de servicio mde-tf con el siguiente 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. Habilita las APIs de Google Cloud

Asegúrate de que las Google Cloud APIs estén habilitadas.

Se deben habilitar las siguientes APIs Google Cloud para ejecutar secuencias de comandos de Terraform:

  • compute.googleapis.com
  • iamcredentials.googleapis.com
  • cloudresourcemanager.googleapis.com

Un usuario con el rol de roles/servicemanagement.serviceConsumer o permisos equivalentes puede habilitar las APIs con el siguiente comando:

gcloud services enable \
compute.googleapis.com \
iamcredentials.googleapis.com \
cloudresourcemanager.googleapis.com

7. Prepara un bucket de Cloud Storage

Prepara un bucket de Cloud Storage para almacenar el estado de Terraform:

Terraform requiere un bucket de Cloud Storage para guardar el estado de Terraform (PROJECT_ID-tf), y la cuenta de servicio mde-tf debe tener permisos de lectura y escritura en este bucket.

Un usuario con el rol roles/storage.admin o permisos equivalentes puede crear el bucket y otorgar al mde-tf los permisos necesarios con el siguiente 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'