1. खास जानकारी
इस लैब में, आपको Pulumi का इस्तेमाल करने का तरीका सिखाया जाएगा. यह एक इंफ़्रास्ट्रक्चर ऐज़ कोड टूल है. इसकी मदद से, Google Cloud के संसाधनों को प्रोविज़न और मैनेज किया जा सकता है.
आपको क्या सीखने को मिलेगा
इस लैब में, आपको ये काम करने का तरीका बताया जाएगा:
- Pulumi को इंस्टॉल और कॉन्फ़िगर करना
- Google Cloud पर अपने इन्फ़्रास्ट्रक्चर को मॉडल करने के लिए, YAML प्रोग्राम लिखें
- Pulumi का इस्तेमाल करके, क्लाउड संसाधनों को सेट अप और मैनेज करना
- YAML प्रोग्राम को Python प्रोग्राम में बदलने के लिए, pulumi convert का इस्तेमाल करें
2. सेटअप और ज़रूरी शर्तें
अपनी स्पीड से एनवायरमेंट सेट अप करना
- Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से कोई Gmail या Google Workspace खाता नहीं है, तो आपको एक खाता बनाना होगा.



- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों के लिए डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करते. इसे कभी भी अपडेट किया जा सकता है.
- प्रोजेक्ट आईडी, सभी Google Cloud प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. Cloud Console, यूनीक स्ट्रिंग अपने-आप जनरेट करता है. आम तौर पर, आपको इससे कोई फ़र्क़ नहीं पड़ता. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे
PROJECT_IDके तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो कोई दूसरा रैंडम आईडी जनरेट किया जा सकता है. इसके अलावा, आपके पास अपना नाम आज़माने का विकल्प भी है. इससे आपको पता चलेगा कि वह नाम उपलब्ध है या नहीं. इस चरण के बाद, इसे बदला नहीं जा सकता. यह प्रोजेक्ट की अवधि तक बना रहेगा. - आपकी जानकारी के लिए बता दें कि एक तीसरी वैल्यू भी होती है, जिसे प्रोजेक्ट नंबर कहते हैं. इसका इस्तेमाल कुछ एपीआई करते हैं. इन तीनों वैल्यू के बारे में ज़्यादा जानने के लिए, दस्तावेज़ देखें.
- इसके बाद, आपको Cloud Console में बिलिंग चालू करनी होगी, ताकि Cloud संसाधनों/एपीआई का इस्तेमाल किया जा सके. इस कोडलैब को पूरा करने में ज़्यादा खर्च नहीं आएगा. इस ट्यूटोरियल के बाद बिलिंग से बचने के लिए, बनाए गए संसाधनों को बंद किया जा सकता है. इसके लिए, बनाए गए संसाधनों को मिटाएं या पूरे प्रोजेक्ट को मिटाएं. Google Cloud के नए उपयोगकर्ताओं को, मुफ़्त में आज़माने के लिए 300 डॉलर का क्रेडिट मिलता है.
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 प्रोजेक्ट फ़ाइल को अपडेट करें, ताकि वह Python प्रोग्राम की ओर इशारा करे. ध्यान दें कि रनटाइम और मुख्य एंट्री बदल गई है
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. बधाई हो!
बधाई हो, आपने यह लैब पूरी कर ली है!