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 के संसाधनों/एपीआई का इस्तेमाल करने के लिए, Cloud Console में बिलिंग की सुविधा चालू करनी होगी. इस कोडलैब को चलाने में ज़्यादा खर्च नहीं आता. इस ट्यूटोरियल के बाद, आपसे बिलिंग न की जाए, इसके लिए संसाधनों को बंद किया जा सकता है. इसके लिए, आपने जो संसाधन बनाए हैं उन्हें मिटाएं या पूरा प्रोजेक्ट मिटाएं. 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
बनाएं
- बकेट
- आईएएम बाइंडिंग
- "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. बधाई हो!
बधाई हो, आपने लैब पूरा कर लिया है!