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

১. সংক্ষিপ্ত বিবরণ

এই ল্যাবটি আপনাকে শেখাবে কীভাবে পুলুমি (Pulumi) নামক একটি ইনফ্রাস্ট্রাকচার অ্যাজ কোড টুল ব্যবহার করে গুগল ক্লাউড রিসোর্স প্রোভিশন ও ম্যানেজ করতে হয়।

আপনি যা শিখবেন

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

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

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

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

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

b35bf95b8bf3d5d8.png

a99b7ace416376c4.png

bd84a6d3004737c5.png

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

৩. অবকাঠামো স্থাপন

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

Cloud Shell-এ Pulumi ইনস্টল করতে নিম্নলিখিত কমান্ডটি চালান।

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

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

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

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

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

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

  1. বালতি
  2. আইএএম বাইন্ডিং
  3. "Hello World!" স্ট্রিং সহ একটি টেক্সট অবজেক্ট।
  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

৪. YAML কে 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)
.......

পাইথন ভার্চুয়াল এনভায়রনমেন্ট সক্রিয় করুন

source py-repo/bin/activate

পাইথন প্রোগ্রামটি নির্দেশ করার জন্য Pulumi.yaml প্রোজেক্ট ফাইলটি আপডেট করুন। লক্ষ্য করুন, runtime এবং main এন্ট্রি পরিবর্তন করা হয়েছে।

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

৫. রিসোর্সগুলো মুছে ফেলুন

তৈরি করা রিসোর্সগুলো মুছে ফেলুন

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

৬. অভিনন্দন!

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