ステップ 1: プロジェクトを準備する

このページでは、Terraform を使用して Manufacturing Data Engine(MDE)をデプロイする前に Google Cloud プロジェクトを準備する手順について説明します。

概要

MDE はパッケージ化されたソリューションとして提供されます。Terraform スクリプトは、必要なすべてのコンポーネントと統合コードを Google Cloud プロジェクトにデプロイします。これにより、ニーズに合わせてアーキテクチャを柔軟に変更し、拡張できます。

デプロイ スクリプトは、 Google Cloud プロジェクトや権限などの前提条件が満たされていることを前提として、ソリューションを自動的に設定して構成します。お客様によっては、広範囲にわたるカスタマイズされた制限が設定されている場合があります。 Google Cloudこの場合、これらの制限を回避するために、デプロイに追加の作業( Google Cloud コンサルティングまたはシステム統合パートナー経由)が必要になることがあります。

1. クライアント環境を準備する

クライアント環境には、次の CLI ツールが最新バージョンでインストールされている必要があります。

2. Google Cloud プロジェクトを準備する

Google Cloud プロジェクトに次の特性があることを確認します。

  • 有効な Cloud 請求先アカウント。
  • 有効な Cloud Identity アカウントまたは Workspace アカウントを持つ組織に属している。

  • 次のコマンドを使用して、デフォルト プロジェクトを MDE デプロイ プロジェクトに設定します。

    gcloud config set project PROJECT_ID
    

    次のように置き換えます。

    • PROJECT_ID: MDE デプロイ プロジェクト ID。

3. サービス アカウントを作成する

Google Cloud プロジェクトには、次の 2 つの異なるサービス アカウントが必要です。

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

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.com
  • iamcredentials.googleapis.com
  • cloudresourcemanager.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'