שלב 1: הכנת הפרויקט
בדף הזה מוסבר איך להכין את פרויקט Google Cloud לפני שמבצעים פריסה של Manufacturing Data Engine (MDE) באמצעות Terraform.
Google Cloudסקירה כללית
MDE מועבר כפתרון ארוז. סקריפט Terraform פורס את כל הרכיבים הנדרשים ואת קוד השילוב בפרויקט Google Cloud . כך אתם מקבלים גמישות מקסימלית לשנות את הארכיטקטורה ולהרחיב אותה בהתאם לצרכים שלכם.
סקריפט הפריסה מגדיר ומנהל את התצורה של הפתרון באופן אוטומטי, בהנחה שדרישות הסף כמו פרויקט והרשאות קיימות. Google Cloud יכול להיות שלחלק מהלקוחות יש הגבלות מותאמות אישית Google Cloud ומקיפות. במקרה כזה, יכול להיות שיהיה צורך בעבודה נוספת (באמצעות Google Cloud ייעוץ או שותף לשילוב מערכות) כדי לעקוף את ההגבלות האלה במהלך הפריסה.
1. הכנת סביבת הלקוח
בסביבת הלקוח צריכים להיות מותקנים הכלים הבאים של CLI בגרסה העדכנית ביותר:
Google Cloud CLI עם הרכיבים הנוספים הבאים:
- kubectl
- cbt
- Terraform CLI
(גרסה 1.9.x ואילך)
- חשוב גם לבדוק את הדרישות המינימליות ל-Terraform ולספקי Terraform.
- Helm CLI (גרסה 3.9.x ואילך)
אפשר להשתמש בכל סביבת לקוח כדי לפרוס את MDE, אבל כדי לחסוך זמן, מומלץ לפרוס אותו מ-Cloud Shell, כי רוב הכלים הנדרשים כבר מותקנים בו.
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.commde-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.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
משתמש עם התפקיד 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.comiamcredentials.googleapis.comcloudresourcemanager.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'