۱. مرور کلی
این آزمایشگاه به شما آموزش میدهد که چگونه از Pulumi ، ابزاری برای زیرساخت به عنوان کد، برای تأمین و مدیریت منابع Google Cloud استفاده کنید.
آنچه یاد خواهید گرفت
در این آزمایشگاه، شما یاد خواهید گرفت که چگونه موارد زیر را انجام دهید:
- نصب و پیکربندی پولومی
- نوشتن برنامه YAML برای مدلسازی زیرساخت خود در Google Cloud
- تأمین و مدیریت منابع ابری با استفاده از Pulumi
- از pulumi convert برای تبدیل برنامه YAML به برنامه پایتون استفاده کنید
۲. تنظیمات و الزامات
تنظیم محیط خودتنظیم
- وارد کنسول گوگل کلود شوید و یک پروژه جدید ایجاد کنید یا از یک پروژه موجود دوباره استفاده کنید. اگر از قبل حساب جیمیل یا گوگل ورک اسپیس ندارید، باید یکی ایجاد کنید .



- نام پروژه ، نام نمایشی برای شرکتکنندگان این پروژه است. این یک رشته کاراکتری است که توسط APIهای گوگل استفاده نمیشود. میتوانید آن را در هر زمانی بهروزرسانی کنید.
- شناسه پروژه در تمام پروژههای گوگل کلود منحصر به فرد است و تغییرناپذیر است (پس از تنظیم، قابل تغییر نیست). کنسول کلود به طور خودکار یک رشته منحصر به فرد تولید میکند؛ معمولاً برای شما مهم نیست که چه باشد. در اکثر آزمایشگاههای کد، باید به شناسه پروژه ارجاع دهید (که معمولاً با عنوان
PROJECT_IDشناخته میشود). اگر شناسه تولید شده را دوست ندارید، میتوانید یک شناسه تصادفی دیگر ایجاد کنید. به عنوان یک جایگزین، میتوانید شناسه خودتان را امتحان کنید و ببینید که آیا در دسترس است یا خیر. پس از این مرحله قابل تغییر نیست و در طول پروژه باقی خواهد ماند. - برای اطلاع شما، یک مقدار سوم، شماره پروژه ، وجود دارد که برخی از APIها از آن استفاده میکنند. برای کسب اطلاعات بیشتر در مورد هر سه این مقادیر، به مستندات مراجعه کنید.
- در مرحله بعد، برای استفاده از منابع/API های ابری، باید پرداخت صورتحساب را در کنسول ابری فعال کنید . اجرای این آزمایشگاه کد، اگر اصلاً هزینهای نداشته باشد، هزینه زیادی نخواهد داشت. برای خاموش کردن منابع به طوری که پس از این آموزش متحمل پرداخت صورتحساب نشوید، میتوانید منابعی را که ایجاد کردهاید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان ۳۰۰ دلاری هستند.
۳. راهاندازی زیرساخت
نصب و پیکربندی Pulumi
در Cloud Shell، دستور زیر را برای نصب Pulumi اجرا کنید.
curl -fsSL https://get.pulumi.com | sh
پولومی را به مسیر اضافه کنید و پیام کمک از پولومی را مشاهده کنید
export PATH=${PATH}:~/.pulumi/bin
# view the help message to verify pulumi runs
pulumi -h
دستورات زیر را برای تنظیم شناسه پروژه و تأیید دسترسی اجرا کنید. شما باید دستورالعملهای ارائه شده توسط دستورات را دنبال کنید.
export PROJECT_ID=$(gcloud config get-value project)
gcloud auth application-default login
در Cloud Shell، یک GCS bucket ایجاد کنید و از آن به عنوان backend استفاده کنید.
gsutil mb gs://pulumi-${PROJECT_ID}
pulumi login gs://pulumi-${PROJECT_ID}
ایجاد یک پروژه جدید
در Cloud Shell، دایرکتوری ریشه پروژه را ایجاد کنید
mkdir pulumi-lab && cd pulumi-lab
تعریف فایل پروژه (نقطه ورود به Pulumi)
cat <<EOT > Pulumi.yaml
name: pulumi-lab
description: Try Pulumi
runtime: yaml
main: yaml-repo/
EOT
منابع YAML را تعریف کنید
ایجاد دایرکتوری برای نگهداری تعاریف منابع ابری با فرمت yaml
mkdir yaml-repo
فایل yaml-repo/Pulumi.yaml را با تعاریف منابع زیر ایجاد کنید.
- سطل
- اتصال IAM
- یک شیء متنی با رشته "Hello World!"
- و برخی خروجیها
resources:
# Create a GCP resource (Storage Bucket)
my-bucket:
type: gcp:storage:Bucket
properties:
location: US
website:
mainPageSuffix: index.html
uniformBucketLevelAccess: true
my-bucket-binding:
type: gcp:storage:BucketIAMBinding
properties:
bucket: ${my-bucket.name}
role: "roles/storage.objectViewer"
members: ["allUsers"]
index-object:
type: gcp:storage:BucketObject
properties:
bucket: ${my-bucket}
source:
fn::stringAsset: Hello World!
outputs:
bucketName: ${my-bucket.url}
منابع را مستقر کنید
مقداردهی اولیه و پیکربندی پشته
export PULUMI_CONFIG_PASSPHRASE=pulumi-lab
pulumi stack init dev
pulumi config set gcp:project $PROJECT_ID
پیکربندی پشته را بررسی کنید، باید کلید gcp:project را با شناسه پروژه خود به عنوان مقدار ببینید.
pulumi config
در این مرحله ساختار دایرکتوری باید به شکل زیر باشد
├── Pulumi.dev.yaml
├── Pulumi.yaml
└── yaml-repo
└── Pulumi.yaml
استقرار پشته
pulumi up
این دستور برنامه شما را ارزیابی میکند و بهروزرسانیهای منابع را تعیین میکند. ابتدا، پیشنمایشی نشان داده میشود که تغییراتی را که هنگام اجرای دستور ایجاد میشوند، شرح میدهد.
(خروجی)
Previewing update (dev):
Downloading plugin gcp v6.44.0: 45.69 MiB / 45.69 MiB [=============] 100.00% 1s
Type Name Plan
+ pulumi:pulumi:Stack pulumi-lab-dev create
+ ├─ gcp:storage:Bucket my-bucket create
+ ├─ gcp:storage:BucketObject index-object create
+ └─ gcp:storage:BucketIAMBinding my-bucket-binding create
Outputs:
bucketName: output<string>
Resources:
+ 4 to create
Do you want to perform this update? [Use arrows to move, type to filter]
yes
> no
details
بله را انتخاب کنید و منابع تأمین خواهند شد. خروجی شما باید به این شکل باشد.
Do you want to perform this update? yes
Updating (dev):
Type Name Status
+ pulumi:pulumi:Stack pulumi-lab-dev created (3s)
+ ├─ gcp:storage:Bucket my-bucket created (1s)
+ ├─ gcp:storage:BucketObject index-object created (0.78s)
+ └─ gcp:storage:BucketIAMBinding my-bucket-binding created (5s)
Outputs:
bucketName: "gs://my-bucket-874aa08"
Resources:
+ 4 created
Duration: 11s
اجرای دستور زیر خروجیهایی را که تعریف شدهاند چاپ میکند.
pulumi stack output
برای تأیید تغییر، دستور زیر را اجرا کنید
gsutil ls $(pulumi stack output bucketName)
خروجی شما به این شکل خواهد بود
(خروجی)
gs://my-bucket-11a9046/index-object-77a5d80
۴. تبدیل YAML به پایتون
بیایید مثال بالا را به یک برنامه پایتون Pulumi تبدیل کنیم.
pulumi convert --language python --out ./py-repo
کدی که در py-repo تولید شده است را بررسی کنید
cat py-repo/__main__.py
(خروجی)
import pulumi
import pulumi_gcp as gcp
my_bucket = gcp.storage.Bucket("my-bucket",
location="US",
website=gcp.storage.BucketWebsiteArgs(
main_page_suffix="index.html",
),
uniform_bucket_level_access=True)
my_bucket_binding = gcp.storage.BucketIAMBinding("my-bucket-binding",
bucket=my_bucket.name,
role="roles/storage.objectViewer",
members=["allUsers"])
index_object = gcp.storage.BucketObject("index-object",
bucket=my_bucket.id,
source=pulumi.StringAsset("Hello World!"))
pulumi.export("bucketName", my_bucket.url)
.......
فعال کردن محیط مجازی پایتون
source py-repo/bin/activate
فایل پروژه Pulumi.yaml را بهروزرسانی کنید تا به برنامه پایتون اشاره کند. توجه داشته باشید که زمان اجرا و ورودی اصلی تغییر کردهاند.
cat <<EOT > Pulumi.yaml
name: pulumi-lab
description: Try Pulumi
runtime: python
main: py-repo/
EOT
سعی کنید پشته را دوباره مستقر کنید و بله را انتخاب کنید
pulumi up
نباید هیچ تغییری ایجاد شود و خروجی شما باید شبیه به این باشد.
(خروجی)
Previewing update (dev):
Type Name Plan
pulumi:pulumi:Stack pulumi-lab-dev
Resources:
4 unchanged
Do you want to perform this update? yes
Updating (dev):
Type Name Status
pulumi:pulumi:Stack pulumi-lab-dev
Outputs:
bucketName: "gs://my-bucket-c2b49ad"
Resources:
4 unchanged
Duration: 6s
۵. منابع را حذف کنید
منابع ایجاد شده را حذف کنید
pulumi destroy
تایید شما به این شکل خواهد بود
Previewing update (dev):
Type Name Plan
pulumi:pulumi:Stack pulumi-lab-dev
Resources:
4 unchanged
Do you want to perform this update? [Use arrows to move, type to filter]
yes
> no
details
Do you want to perform this destroy? yes
Destroying (dev):
Type Name Status
- pulumi:pulumi:Stack pulumi-lab-dev deleted
- ├─ gcp:storage:BucketIAMBinding my-bucket-binding deleted (5s)
- ├─ gcp:storage:BucketObject index-object deleted (1s)
- └─ gcp:storage:Bucket my-bucket deleted (0.73s)
Outputs:
- bucketName: "gs://my-bucket-874aa08"
Resources:
- 4 deleted
Duration: 10s
۶. تبریک میگویم!
تبریک میگویم، آزمایشگاه را تمام کردید!