YAML এর সাথে Google ক্লাউডে পুলুমি ব্যবহার করুন

1. ওভারভিউ

এই ল্যাবটি আপনাকে Google ক্লাউড সংস্থানগুলির বিধান এবং পরিচালনা করার জন্য কোড টুল হিসাবে একটি পরিকাঠামো পুলুমিকে কীভাবে ব্যবহার করতে হয় তা শেখায়৷

যা শিখবেন

এই ল্যাবে, আপনি নিম্নলিখিতগুলি কীভাবে করবেন তা শিখবেন:

  • পুলুমি ইনস্টল এবং কনফিগার করুন
  • Google ক্লাউডে আপনার পরিকাঠামো মডেল করতে YAML প্রোগ্রাম লিখুন
  • পুলুমি ব্যবহার করে ক্লাউড সংস্থান সরবরাহ এবং পরিচালনা করুন
  • YAML প্রোগ্রামকে পাইথন প্রোগ্রামে রূপান্তর করতে পুলুমি কনভার্ট ব্যবহার করুন

2. সেটআপ এবং প্রয়োজনীয়তা

স্ব-গতিসম্পন্ন পরিবেশ সেটআপ

  1. Google ক্লাউড কনসোলে সাইন-ইন করুন এবং একটি নতুন প্রকল্প তৈরি করুন বা বিদ্যমান একটি পুনরায় ব্যবহার করুন৷ আপনার যদি ইতিমধ্যেই একটি Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তাহলে আপনাকে অবশ্যই একটি তৈরি করতে হবে।

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

  • প্রকল্পের নাম এই প্রকল্পের অংশগ্রহণকারীদের জন্য প্রদর্শনের নাম। এটি একটি অক্ষর স্ট্রিং যা Google API দ্বারা ব্যবহৃত হয় না। আপনি যে কোনো সময় এটি আপডেট করতে পারেন.
  • প্রোজেক্ট আইডি সমস্ত Google ক্লাউড প্রোজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (সেট করার পরে পরিবর্তন করা যাবে না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত আপনি এটা কি যত্ন না. বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এটি সাধারণত PROJECT_ID হিসাবে চিহ্নিত করা হয়)। আপনি যদি জেনারেট করা আইডি পছন্দ না করেন, তাহলে আপনি অন্য এলোমেলো আইডি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের চেষ্টা করে দেখতে পারেন এবং এটি উপলব্ধ কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রকল্পের সময়কালের জন্য থাকবে।
  • আপনার তথ্যের জন্য, একটি তৃতীয় মান রয়েছে, একটি প্রকল্প নম্বর যা কিছু API ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি মান সম্পর্কে আরও জানুন।
  1. এরপরে, ক্লাউড রিসোর্স/এপিআই ব্যবহার করতে আপনাকে ক্লাউড কনসোলে বিলিং সক্ষম করতে হবে। এই কোডল্যাবের মাধ্যমে চালানোর জন্য খুব বেশি খরচ করা উচিত নয়, যদি কিছু থাকে। রিসোর্স বন্ধ করতে যাতে এই টিউটোরিয়ালের বাইরে আপনার বিলিং খরচ না হয়, আপনি আপনার তৈরি করা রিসোর্স মুছে ফেলতে পারেন বা পুরো প্রোজেক্ট মুছে ফেলতে পারেন। Google ক্লাউডের নতুন ব্যবহারকারীরা $300 USD বিনামূল্যের ট্রায়াল প্রোগ্রামের জন্য যোগ্য৷

3. অবকাঠামো সেটআপ

পুলুমি ইনস্টল এবং কনফিগার করুন

ক্লাউড শেলে, পুলুমি ইনস্টল করতে নিম্নলিখিত কমান্ডটি চালান

curl -fsSL https://get.pulumi.com | sh

পাথে পুলুমি যোগ করুন এবং পুলুমি থেকে সাহায্য বার্তা দেখুন

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

ক্লাউড শেলে, একটি GCS বালতি তৈরি করুন এবং এটি ব্যাকএন্ড হিসাবে ব্যবহার করুন

gsutil mb gs://pulumi-${PROJECT_ID}
pulumi login gs://pulumi-${PROJECT_ID}

একটি নতুন প্রকল্প তৈরি করুন

ক্লাউড শেলে, প্রোজেক্ট রুট ডিরেক্টরি তৈরি করুন

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 ফাইল তৈরি করুন

  1. বালতি
  2. আইএএম বাইন্ডিং
  3. স্ট্রিং সহ একটি পাঠ্য বস্তু "হ্যালো ওয়ার্ল্ড!"
  4. এবং কিছু আউটপুট
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 কে পাইথনে রূপান্তর করুন

উপরের উদাহরণটিকে একটি পুলুমি পাইথন প্রোগ্রামে রূপান্তর করা যাক

pulumi convert --language python --out ./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

স্ট্যাক পুনরায় স্থাপন করার চেষ্টা করুন এবং হ্যাঁ নির্বাচন করুন

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. অভিনন্দন!

অভিনন্দন, আপনি ল্যাব শেষ!