১. সংক্ষিপ্ত বিবরণ
এই ল্যাবটি আপনাকে শেখাবে কীভাবে পুলুমি (Pulumi) নামক একটি ইনফ্রাস্ট্রাকচার অ্যাজ কোড টুল ব্যবহার করে গুগল ক্লাউড রিসোর্স প্রোভিশন ও ম্যানেজ করতে হয়।
আপনি যা শিখবেন
এই ল্যাবে, আপনারা নিম্নলিখিত বিষয়গুলো করতে শিখবেন:
- Pulumi ইনস্টল এবং কনফিগার করুন
- গুগল ক্লাউডে আপনার পরিকাঠামো মডেল করার জন্য YAML প্রোগ্রাম লিখুন।
- Pulumi ব্যবহার করে ক্লাউড রিসোর্স সরবরাহ ও পরিচালনা করুন
- YAML প্রোগ্রামকে পাইথন প্রোগ্রামে রূপান্তর করতে pulumi convert ব্যবহার করুন।
২. সেটআপ এবং প্রয়োজনীয়তা
স্ব-গতিতে পরিবেশ সেটআপ
- Google Cloud Console- এ সাইন-ইন করুন এবং একটি নতুন প্রজেক্ট তৈরি করুন অথবা বিদ্যমান কোনো প্রজেক্ট পুনরায় ব্যবহার করুন। যদি আপনার আগে থেকে Gmail বা Google Workspace অ্যাকাউন্ট না থাকে, তবে আপনাকে অবশ্যই একটি তৈরি করতে হবে।



- প্রজেক্টের নামটি হলো এই প্রজেক্টের অংশগ্রহণকারীদের প্রদর্শিত নাম। এটি একটি ক্যারেক্টার স্ট্রিং যা গুগল এপিআই ব্যবহার করে না। আপনি যেকোনো সময় এটি আপডেট করতে পারেন।
- প্রজেক্ট আইডি সমস্ত গুগল ক্লাউড প্রজেক্ট জুড়ে অনন্য এবং অপরিবর্তনীয় (একবার সেট করার পর এটি পরিবর্তন করা যায় না)। ক্লাউড কনসোল স্বয়ংক্রিয়ভাবে একটি অনন্য স্ট্রিং তৈরি করে; সাধারণত এটি কী তা নিয়ে আপনার মাথা ঘামানোর প্রয়োজন হয় না। বেশিরভাগ কোডল্যাবে, আপনাকে প্রজেক্ট আইডি উল্লেখ করতে হবে (এটি সাধারণত
PROJECT_IDহিসাবে চিহ্নিত করা হয়)। তৈরি করা আইডিটি আপনার পছন্দ না হলে, আপনি এলোমেলোভাবে আরেকটি তৈরি করতে পারেন। বিকল্পভাবে, আপনি নিজের আইডি দিয়ে চেষ্টা করে দেখতে পারেন যে সেটি উপলব্ধ আছে কিনা। এই ধাপের পরে এটি পরিবর্তন করা যাবে না এবং প্রজেক্টের পুরো সময়কাল জুড়ে এটি অপরিবর্তিত থাকবে। - আপনার অবগতির জন্য জানাচ্ছি যে, তৃতীয় একটি ভ্যালু রয়েছে, যা হলো প্রজেক্ট নাম্বার এবং কিছু এপিআই এটি ব্যবহার করে। ডকুমেন্টেশনে এই তিনটি ভ্যালু সম্পর্কে আরও বিস্তারিত জানুন।
- এরপর, ক্লাউড রিসোর্স/এপিআই ব্যবহার করার জন্য আপনাকে ক্লাউড কনসোলে বিলিং চালু করতে হবে। এই কোডল্যাবটি সম্পন্ন করতে খুব বেশি খরচ হওয়ার কথা নয়, এমনকি আদৌ কোনো খরচ নাও হতে পারে। এই টিউটোরিয়ালের পর যাতে কোনো বিলিং না হয়, সেজন্য রিসোর্সগুলো বন্ধ করতে আপনি আপনার তৈরি করা রিসোর্সগুলো অথবা পুরো প্রজেক্টটিই ডিলিট করে দিতে পারেন। গুগল ক্লাউডের নতুন ব্যবহারকারীরা ৩০০ মার্কিন ডলারের ফ্রি ট্রায়াল প্রোগ্রামের জন্য যোগ্য।
৩. অবকাঠামো স্থাপন
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 ফাইলটি তৈরি করুন।
- বালতি
- আইএএম বাইন্ডিং
- "Hello 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
৪. 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
৬. অভিনন্দন!
অভিনন্দন, আপনি ল্যাবটি শেষ করেছেন!