1. खास जानकारी
यह लैब आपको Pulumi को इस्तेमाल करने का तरीका सिखाता है. यह कोड टूल के तौर पर एक इन्फ़्रास्ट्रक्चर है, जिसकी मदद से Google Cloud के संसाधनों का प्रावधान और उन्हें मैनेज किया जा सकता है.
आपको क्या सीखने को मिलेगा
इस लैब में, आपको इन कामों को करने का तरीका पता चलेगा:
- Pulumi को इंस्टॉल और कॉन्फ़िगर करना
- Google Cloud पर अपने इन्फ़्रास्ट्रक्चर को मॉडल करने के लिए YAML प्रोग्राम लिखें
- Pulumi का इस्तेमाल करके, क्लाउड के संसाधन मैनेज करें और उन्हें मैनेज करें
- YAML प्रोग्राम को Python प्रोग्राम में बदलने के लिए, pulumi बदलें का इस्तेमाल करें
2. सेटअप और ज़रूरी शर्तें
अपने हिसाब से एनवायरमेंट सेटअप करें
- Google Cloud Console में साइन इन करें और नया प्रोजेक्ट बनाएं या किसी मौजूदा प्रोजेक्ट का फिर से इस्तेमाल करें. अगर आपके पास पहले से Gmail या Google Workspace खाता नहीं है, तो आपको नया खाता बनाना होगा.
- प्रोजेक्ट का नाम, इस प्रोजेक्ट में हिस्सा लेने वाले लोगों का डिसप्ले नेम होता है. यह एक वर्ण स्ट्रिंग है, जिसका इस्तेमाल Google API नहीं करता. इसे कभी भी अपडेट किया जा सकता है.
- प्रोजेक्ट आईडी, Google Cloud के सभी प्रोजेक्ट के लिए यूनीक होता है. साथ ही, इसे बदला नहीं जा सकता. इसे सेट करने के बाद बदला नहीं जा सकता. Cloud Console, एक यूनीक स्ट्रिंग अपने-आप जनरेट करता है; आम तौर पर, आपको उसके होने की कोई परवाह नहीं होती. ज़्यादातर कोडलैब में, आपको प्रोजेक्ट आईडी का रेफ़रंस देना होगा. आम तौर पर, इसे
PROJECT_ID
के तौर पर पहचाना जाता है. अगर आपको जनरेट किया गया आईडी पसंद नहीं है, तो किसी भी क्रम में एक और आईडी जनरेट किया जा सकता है. इसके अलावा, खुद भी आज़माया जा सकता है और देखें कि वह उपलब्ध है या नहीं. इस चरण के बाद इसे बदला नहीं जा सकता और प्रोजेक्ट के कुल समय तक बना रहेगा. - आपकी जानकारी के लिए, एक तीसरी वैल्यू यानी प्रोजेक्ट नंबर है. इसका इस्तेमाल कुछ एपीआई करते हैं. दस्तावेज़ में इन तीनों वैल्यू के बारे में ज़्यादा जानें.
- इसके बाद, आपको क्लाउड संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग चालू करनी होगी. इस कोडलैब का इस्तेमाल करने पर, आपको ज़्यादा पैसे नहीं चुकाने होंगे. इस ट्यूटोरियल के अलावा, संसाधनों को बंद करने के लिए कि आपको बिलिंग न करनी पड़े. इसके लिए, अपने बनाए गए संसाधनों को मिटाएं या पूरा प्रोजेक्ट मिटाएं. Google Cloud के नए उपयोगकर्ता, 300 डॉलर के मुफ़्त ट्रायल वाले प्रोग्राम में हिस्सा ले सकते हैं.
3. इंफ़्रास्ट्रक्चर सेटअप
Pulumi को इंस्टॉल और कॉन्फ़िगर करना
Cloud Shell में, Pulumi को इंस्टॉल करने के लिए नीचे दिया गया कमांड चलाएं
curl -fsSL https://get.pulumi.com | sh
पुलुमी को पाथ में जोड़ें और 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
प्रोजेक्ट फ़ाइल तय करें(Plumi का एंट्री पॉइंट)
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
बनाएं
- बकेट
- आईएएम बाइंडिंग
- "Hey 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
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
Python प्रोग्राम पर ले जाने के लिए, 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
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. बधाई हो!
बधाई हो, आपने लैब पूरा कर लिया है!