1. بررسی اجمالی
این آزمایشگاه به شما می آموزد که چگونه از Pulumi ، یک ابزار زیرساخت به عنوان کد برای تهیه و مدیریت منابع Google Cloud استفاده کنید.
آنچه خواهید آموخت
در این آزمایشگاه با نحوه انجام کارهای زیر آشنا می شوید:
- Pulumi را نصب و پیکربندی کنید
- برنامه YAML را بنویسید تا زیرساخت خود را در Google Cloud مدل کنید
- تهیه و مدیریت منابع ابری با استفاده از Pulumi
- از تبدیل pulumi برای تبدیل برنامه YAML به برنامه پایتون استفاده کنید
2. راه اندازی و الزامات
تنظیم محیط خود به خود
- به Google Cloud Console وارد شوید و یک پروژه جدید ایجاد کنید یا از یک موجود استفاده مجدد کنید. اگر قبلاً یک حساب Gmail یا Google Workspace ندارید، باید یک حساب ایجاد کنید .
- نام پروژه نام نمایشی برای شرکت کنندگان این پروژه است. این یک رشته کاراکتری است که توسط API های Google استفاده نمی شود. شما می توانید آن را در هر زمان به روز کنید.
- شناسه پروژه در تمام پروژههای Google Cloud منحصربهفرد است و تغییرناپذیر است (پس از تنظیم نمیتوان آن را تغییر داد). Cloud Console به طور خودکار یک رشته منحصر به فرد تولید می کند. معمولاً برای شما مهم نیست که چیست. در اکثر کدها، باید به شناسه پروژه ارجاع دهید (معمولاً به عنوان
PROJECT_ID
شناخته می شود). اگر شناسه تولید شده را دوست ندارید، ممکن است یک شناسه تصادفی دیگر ایجاد کنید. از طرف دیگر، میتوانید خودتان را امتحان کنید و ببینید آیا در دسترس است یا خیر. پس از این مرحله نمی توان آن را تغییر داد و در طول مدت پروژه باقی می ماند. - برای اطلاع شما، یک مقدار سوم وجود دارد، یک شماره پروژه که برخی از API ها از آن استفاده می کنند. در مورد هر سه این مقادیر در مستندات بیشتر بیاموزید.
- در مرحله بعد، برای استفاده از منابع Cloud/APIها باید صورتحساب را در کنسول Cloud فعال کنید . اجرا کردن از طریق این کد لبه نباید هزینه زیادی داشته باشد، اگر اصلاً باشد. برای اینکه منابع را خاموش کنید تا بیش از این آموزش متحمل صورتحساب نشوید، می توانید منابعی را که ایجاد کرده اید حذف کنید یا کل پروژه را حذف کنید. کاربران جدید Google Cloud واجد شرایط برنامه آزمایشی رایگان 300 دلاری هستند.
3. راه اندازی زیرساخت
Pulumi را نصب و پیکربندی کنید
در Cloud Shell دستور زیر را برای نصب Pulumi اجرا کنید
curl -fsSL https://get.pulumi.com | sh
Pulumi را به مسیر اضافه کنید و پیام راهنما از Pulumi را مشاهده کنید
export PATH=${PATH}:~/.pulumi/bin
# view the help message to verify pulumi runs
pulumi -h
دستورات زیر را برای تنظیم ID پروژه و مجوز دسترسی اجرا کنید. شما باید دستورالعمل های داده شده توسط دستورات را دنبال کنید
export PROJECT_ID=$(gcloud config get-value project)
gcloud auth application-default login
در Cloud Shell، یک سطل GCS ایجاد کنید و از آن به عنوان backend استفاده کنید
gsutil mb gs://pulumi-${PROJECT_ID}
pulumi login gs://pulumi-${PROJECT_ID}
یک پروژه جدید ایجاد کنید
در Cloud Shell، دایرکتوری ریشه پروژه را ایجاد کنید
mkdir pulumi-lab && cd pulumi-lab
تعریف فایل پروژه (نقطه ورود به پولومی)
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 Binding
- یک شی متن با رشته "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 را با ID پروژه خود به عنوان مقدار ببینید
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
4. YAML را به پایتون تبدیل کنید
بیایید مثال بالا را به یک برنامه Pulumi Python تبدیل کنیم
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
سعی کنید پشته را مجدداً مستقر کنید و yes را انتخاب کنید
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
5. منابع را حذف کنید
منابع ایجاد شده را حذف کنید
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
6. تبریک!
تبریک می گویم، شما آزمایشگاه را تمام کردید!