1. ภาพรวม
ห้องทดลองนี้จะสอนวิธีใช้ Pulumi ซึ่งเป็นเครื่องมือโครงสร้างพื้นฐานเป็นโค้ดในการจัดสรรและจัดการทรัพยากร Google Cloud
สิ่งที่คุณจะได้เรียนรู้
ในห้องทดลองนี้ คุณจะได้ศึกษาวิธีทำสิ่งต่อไปนี้
- ติดตั้งและกำหนดค่า Pulumi
- เขียนโปรแกรม YAML เพื่อสร้างโมเดลโครงสร้างพื้นฐานบน Google Cloud
- จัดสรรและจัดการทรัพยากรระบบคลาวด์โดยใช้ Pulumi
- ใช้ pulumi conversion เพื่อแปลงโปรแกรม YAML เป็นโปรแกรม Python
2. การตั้งค่าและข้อกำหนด
การตั้งค่าสภาพแวดล้อมตามเวลาที่สะดวก
- ลงชื่อเข้าใช้ Google Cloud Console และสร้างโปรเจ็กต์ใหม่หรือใช้โปรเจ็กต์ที่มีอยู่ซ้ำ หากยังไม่มีบัญชี Gmail หรือ Google Workspace คุณต้องสร้างบัญชี



- ชื่อโครงการคือชื่อที่แสดงของผู้เข้าร่วมโปรเจ็กต์นี้ เป็นสตริงอักขระที่ Google APIs ไม่ได้ใช้ โดยคุณจะอัปเดตได้ทุกเมื่อ
- รหัสโปรเจ็กต์จะไม่ซ้ำกันในทุกโปรเจ็กต์ของ Google Cloud และจะเปลี่ยนแปลงไม่ได้ (เปลี่ยนแปลงไม่ได้หลังจากตั้งค่าแล้ว) Cloud Console จะสร้างสตริงที่ไม่ซ้ำกันโดยอัตโนมัติ ปกติแล้วคุณไม่สนว่าอะไรเป็นอะไร ใน Codelab ส่วนใหญ่ คุณจะต้องอ้างอิงรหัสโปรเจ็กต์ (โดยปกติจะระบุเป็น
PROJECT_ID) หากคุณไม่ชอบรหัสที่สร้างขึ้น คุณสามารถสร้างรหัสแบบสุ่มอื่นได้ หรือคุณจะลองดำเนินการเองแล้วดูว่าพร้อมให้บริการหรือไม่ และไม่สามารถเปลี่ยนแปลงได้หลังจากขั้นตอนนี้และจะยังคงอยู่ตลอดระยะเวลาของโปรเจ็กต์ - สำหรับข้อมูลของคุณ ค่าที่ 3 คือหมายเลขโปรเจ็กต์ที่ API บางตัวใช้ ดูข้อมูลเพิ่มเติมเกี่ยวกับค่าทั้ง 3 ค่าได้ในเอกสารประกอบ
- ถัดไป คุณจะต้องเปิดใช้การเรียกเก็บเงินใน Cloud Console เพื่อใช้ทรัพยากร/API ของระบบคลาวด์ การใช้งาน Codelab นี้น่าจะไม่มีค่าใช้จ่ายใดๆ หากมี หากต้องการปิดทรัพยากรเพื่อไม่ให้มีการเรียกเก็บเงินนอกเหนือจากบทแนะนำนี้ คุณสามารถลบทรัพยากรที่คุณสร้างหรือลบทั้งโปรเจ็กต์ได้ ผู้ใช้ใหม่ของ Google Cloud จะมีสิทธิ์เข้าร่วมโปรแกรมทดลองใช้ฟรี$300 USD
3. การตั้งค่าโครงสร้างพื้นฐาน
ติดตั้งและกำหนดค่า Pulumi
เรียกใช้คำสั่งต่อไปนี้เพื่อติดตั้ง Pulumi ใน Cloud Shell
curl -fsSL https://get.pulumi.com | sh
เพิ่ม Pulumi ในเส้นทางและดูข้อความช่วยเหลือจาก Pulumi
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 และใช้เป็นแบ็กเอนด์
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
- ออบเจ็กต์ข้อความที่มีสตริง "สวัสดีทุกคน"
- และเอาต์พุตบางอย่าง
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
4. แปลง YAML เป็น Python
มาแปลงตัวอย่างด้านบนเป็นโปรแกรม 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)
.......
เปิดใช้งานสภาพแวดล้อมเสมือนของ Python
source py-repo/bin/activate
อัปเดตไฟล์โปรเจ็กต์ Pulumi.yaml ให้ชี้ไปที่โปรแกรม Pulumi. โปรดทราบว่ารันไทม์และรายการหลักมีการเปลี่ยนแปลง
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
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. ยินดีด้วย
ยินดีด้วย คุณใช้งานห้องทดลองเสร็จแล้ว