שלב 1: הכנת הפרויקט

בדף הזה מוסבר איך להכין את פרויקט Google Cloud לפני שמבצעים פריסה של Manufacturing Data Engine ‏ (MDE) באמצעות Terraform.

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.

3. יצירת חשבונות שירות

תצטרכו שני חשבונות שירות שונים בפרויקט Google Cloud :

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

מחליפים את מה שכתוב בשדות הבאים:

  • PROJECT_ID במזהה פרויקט הפריסה של MDE.

משתמש בארגון עם תפקיד 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

מקצים לחשבון השירות mde-tf, שמשמש את Terraform לפריסות, את התפקידים הבאים:

  • 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. הפעלת ממשקי ה-API Google Cloud

מוודאים שממשקי ה-API של Google Cloud מופעלים.

כדי להריץ סקריפטים של Terraform, צריך להפעיל את ממשקי ה-API הבאים: Google Cloud

  • 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

מכינים קטגוריה של Cloud Storage לאחסון מצב Terraform:

‫Terraform דורש קטגוריה של Cloud Storage כדי לשמור את המצב של Terraform ‏(PROJECT_ID-tf), ולחשבון השירות 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'