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:
Google Cloud CLI con los siguientes componentes adicionales instalados:
- kubectl
- cbt
- CLI de Terraform
(v1.9.x o posterior)
- Asegúrate de consultar también los requisitos mínimos para Terraform y los proveedores de Terraform.
- CLI de Helm (v3.9.x o posterior)
Puedes usar cualquier entorno de cliente para implementar MDE, pero puedes ahorrar tiempo si lo implementas desde Cloud Shell, ya que tiene la mayoría de las herramientas requeridas ya instaladas.
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_IDReemplaza lo siguiente:
PROJECT_IDcon 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.commde-tf@PROJECT_ID.iam.gserviceaccount.com
Reemplaza lo siguiente:
PROJECT_IDcon 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.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
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.comiamcredentials.googleapis.comcloudresourcemanager.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'