Elastic Compute Cloud
EC2 এর পূর্ণরূপ হলো Elastic Compute Cloud। সহজ বাংলায় এটি একটি Virtual Computer।
আপনার ল্যাপটপে যেমন CPU, RAM, এবং Hard Disk আছে, AWS-এর বিশাল ডাটা সেন্টারে থাকা হাজার হাজার শক্তিশালী সার্ভার থেকে আপনি আপনার প্রয়োজনমতো অংশ ভাড়া নিচ্ছেন।
- Elastic: এর মানে হলো আপনি চাইলে এক ক্লিকে ১টি সার্ভার থেকে ১০টি করতে পারেন, আবার দরকার না হলে কমিয়ে ফেলতে পারেন।
- Compute: মানে হলো প্রসেসিং পাওয়ার বা প্রসেসর।
EC2 এর ‘Under-the-hood’ মেকানিক্স (৫টি পিলার)
একটি সার্ভার লঞ্চ করার সময় আপনাকে এই ৫টি জিনিস সিলেক্ট করতে হয়। এগুলো বুঝলে আপনি যেকোনো ক্লাউড ইন্টারভিউ ক্র্যাক করতে পারবেন:
- AMI (Amazon Machine Image):
এটি হলো সার্ভারের Operating System (OS)। আপনি কি Windows চালাবেন নাকি Linux? AMI হলো সেই ওএস-এর একটি ব্লুপ্রিন্ট বা টেম্পলেট।
- Operating System (OS): যেমন লিনাক্স বা উইন্ডোজ।
- Root Volume Template: আপনার সার্ভারের হার্ডড্রাইভটি শুরুতে দেখতে কেমন হবে তার একটি ম্যাপ।
- Permissions: কে এই ইমেজটি ব্যবহার করতে পারবে।
- Instance Type (Family):
এটি ঠিক করে আপনার সার্ভারের শক্তি কত হবে।
T3.micro/T2.micro: এগুলো ছোট কাজ বা শেখার জন্য (ফ্রি টিয়ারে পাওয়া যায়)।
C-Series (Compute): যদি অনেক বেশি ক্যালকুলেশন লাগে।
R-Series (RAM): যদি ডাটাবেসের মতো ভারি মেমোরি লাগে।
-
Storage (EBS - Elastic Block Store):
এটি হলো আপনার সার্ভারের Hard Drive। সার্ভার ডিলিট করে দিলেও আপনি চাইলে এই হার্ড ড্রাইভের ডাটা সেভ করে রাখতে পারেন।
-
Security Groups (The Firewall):
এটি ইন্টারভিউয়ের জন্য খুব ইম্পর্ট্যান্ট। এটি একটি Virtual Firewall।
- Key Pair:
এটি হলো আপনার ডিজিটাল পাসওয়ার্ড। সার্ভারে সিকিউরভাবে লগইন করার জন্য একটি .pem বা .ppk ফাইল ডাউনলোড করতে হয়। এটি ছাড়া আপনি সার্ভারে ঢুকতে পারবেন না।
আপনার সার্ভারে ওয়েবসাইট চলছে না, ট্রাবলশুট করার প্রথম ধাপ কী?
- আমি প্রথমে Security Group চেক করব যে Port 80 বা 443 ওপেন আছে কি না। কারণ অধিকাংশ সময় ফায়ারওয়ালে পোর্ট ব্লক থাকলেই ওয়েবসাইট লোড হয় না।
AWS EC2 Learning Note - Day 01
Topic: Basics of EC2 Instance Launching
☁️ Core Concepts
- EC2 (Elastic Compute Cloud): এটি একটি ভার্চুয়াল সার্ভার যা AWS ডাটা সেন্টারে চলে।
- AMI (Amazon Machine Image): এটি সার্ভারের ওএস (OS) টেমপ্লেট (যেমন: Ubuntu 24.04)।
- Instance Type: সার্ভারের শক্তি (CPU/RAM)। ফ্রি টিয়ারে আমরা
t2.micro ব্যবহার করি।
🛠️ Key Components during Launch
| Component | Purpose |
| :— | :— |
| Tags | সার্ভার চেনার লেবেল। (Key: Name, Value: My-Server) |
| Key Pair | সার্ভারে ঢোকার ডিজিটাল চাবি (.pem ফাইল)। এটি ছাড়া লগইন করা অসম্ভব। |
| Security Group | ভার্চুয়াল ফায়ারওয়াল। কোন পোর্ট (SSH-22, HTTP-80) খোলা থাকবে তা ঠিক করে। |
| User Data | অটোমেশন স্ক্রিপ্ট। সার্ভার প্রথমবার চালু হওয়ার সময় এটি রান হয়। |
🚀 Important Linux Commands (Ubuntu)
সার্ভারে লগইন করার পর প্রাথমিক কাজ:
sudo apt update -y : সিস্টেম প্যাকেজ লিস্ট আপডেট করা।
sudo apt install apache2 -y : ওয়েব সার্ভার ইনস্টল করা।
sudo systemctl status apache2 : সার্ভার চলছে কি না চেক করা।
uptime : সার্ভার কতক্ষণ ধরে চলছে তা দেখা।
⚠️ Safety Warning (Cost Saving)
- Always Stop/Terminate: কাজ শেষ হয়ে গেলে ইনস্ট্যান্স ‘Stop’ করুন (স্টোরেজ বিল আসবে) অথবা ‘Terminate’ করুন (সব ডিলিট হয়ে যাবে, কোনো বিল আসবে না)।
- Free Tier Limit: মাসে ৭৫০ ঘণ্টা ফ্রি। একাধিক সার্ভার চালালে এই লিমিট দ্রুত শেষ হতে পারে।
AWS Security Group: Inbound vs Outbound
📥 Inbound Rules (Traffic coming IN)
- Default Status: Everything is Denied (Deny All).
- Common Ports to Open:
22 (SSH): For Remote Login.
80 (HTTP): For Web Traffic.
443 (HTTPS): For Secure Web Traffic.
- Analogy: Who can enter your house?
📤 Outbound Rules (Traffic going OUT)
- Default Status: Everything is Allowed (Allow All).
- Purpose: - To download software updates.
- To connect to external APIs or Databases.
- Analogy: Can you leave your house to go to the market?
💡 Pro-Tip: Stateful Nature
- If you allow a request to come In, the response can go Out automatically, regardless of outbound rules.
- This is why Security Groups are called Stateful.
🚀 Nginx vs Apache
- Nginx: লাইটওয়েট এবং হাই-পারফরম্যান্স। এটি স্ট্যাটিক ফাইল খুব দ্রুত লোড করতে পারে।
- Config Path:
/etc/nginx/nginx.conf
- Default Web Root:
/var/www/html/
- Restart Command:
sudo systemctl restart nginx
🤖 Infrastructure Automation (User Data)
- Bootstrap Script: সার্ভার লঞ্চের সময় অটোমেটিক কনফিগারেশন করার প্রক্রিয়া।
- Dynamic Content:
$(hostname -i) ব্যবহার করে প্রতিটা আলাদা সার্ভারের আইপি অটোমেটিক পপুলেট করা।
- Standard Path: Nginx-এর ডিফল্ট পাথ
/var/www/html/index.html তে রাইট করা।
📋 Snapshot vs Image vs Template
- Instance Terminate: পিসি ডিলিট হয়ে যায়, কিন্তু ইমেজ (AMI) থেকে যায়।
- AMI (Image): পিসির ব্লু-প্রিন্ট। এটি থাকলে পিসি ডিলিট করলেও সমস্যা নেই।
- Reusability: একবার একটি ভালো AMI বানিয়ে ফেললে, সেটা থেকে সারা জীবন একই কনফিগারের পিসি বানানো যায়।
#!/bin/bash
# সিস্টেম আপডেট করা
sudo apt update -y
# Nginx ইনস্টল করা
sudo apt install nginx -y
# index.html ফাইলে আপনার কাস্টম মেসেজটি লিখে দেওয়া
# এখানে 'tee' কমান্ড ব্যবহার করা হয়েছে যাতে রুট পারমিশন নিয়ে ফাইল রাইট করা যায়
sudo echo "Hello from awolad template pc, IP is $(hostname -i)" | sudo tee /var/www/html/index.html
Auto Scaling (অটো স্কেলিং)
অটো স্কেলিং হলো একটি মেকানিজম বা ব্যবস্থা যা আপনার ওয়েবসাইটের ট্রাফিক বা লোড অনুযায়ী সার্ভারের সংখ্যা অটোমেটিক বাড়ায় বা কমায়।
উদাহরণ: ধরুন, আপনি AWS-এ একটি “Auto Scaling Group” তৈরি করলেন এবং বলে দিলেন যে আপনার সবসময় অন্তত ২টো সার্ভার রানিং থাকতে হবে। এখন যদি কোনো কারণে ১টা সার্ভার ক্রাশ করে বা আপনি ডিলিট করে দেন, অটো স্কেলিং সাথে সাথে সেটা বুঝতে পারবে এবং নিজে থেকেই নতুন আরেকটি সার্ভার লঞ্চ করে দেবে (যাকে বলে Self-healing)।
২. Dynamic Scaling (ডাইনামিক স্কেলিং)
ডাইনামিক স্কেলিং হলো অটো স্কেলিংয়ের একটি উন্নত নিয়ম (Policy)। এটি রিয়েল-টাইম ডিমান্ডের ওপর ভিত্তি করে কাজ করে। অর্থাৎ, আপনি কিছু কন্ডিশন বা শর্ত সেট করে দেবেন।
শর্তগুলো হতে পারে এমন:
-
“যদি আমার সার্ভারের CPU ব্যবহার ৭০% এর উপরে চলে যায়, তবে নতুন ১টি সার্ভার অ্যাড করো।”
-
“যদি CPU ব্যবহার ৩০% এর নিচে নেমে আসে, তবে বাড়তি সার্ভারটি বন্ধ করে দাও।”
📈 Auto Scaling vs Dynamic Scaling
- Auto Scaling Group (ASG): সার্ভারের সংখ্যা ঠিক রাখার মেইন ফ্রেমওয়ার্ক।
- Dynamic Scaling: ট্রাফিকের ওপর ভিত্তি করে সার্ভার বাড়ানো/কমানোর নিয়ম (CPU, RAM বা Request count অনুযায়ী)।
- Benefit: খরচ বাঁচানো (Cost Optimization) এবং হাই অ্যাভেলেবিলিটি (High Availability) নিশ্চিত করা।
অটো স্কেলিং (Auto Scaling) সেটআপ করার প্রসেসটি অনেকটা একটি চেইন রিঅ্যাকশনের মতো।
1. ১. ধাপ: AMI (Amazon Machine Image) তৈরি করা
সবার আগে আপনাকে একটি “মাস্টার কপি” বা ইমেজ তৈরি করতে হবে।
- আপনার যে পিসিতে Nginx এবং আপনার কাস্টম index.html ফাইলটি আছে, সেটি সিলেক্ট করে Actions > Image and templates > Create Image দিন।
- কেন? অটো স্কেলিং যখন নতুন পিসি বানাবে, তখন সে এই ইমেজ থেকেই সব ফাইল কপি করবে।
2. ২. ধাপ: Launch Template তৈরি করা
এটি হলো আপনার সার্ভারের “রেসিপি”।
- EC2 Dashboard থেকে Launch Templates-এ যান।
- Create Launch Template বাটনে ক্লিক করুন।
- এখানে আপনার তৈরি করা AMI টি সিলেক্ট করুন।
- Instance Type দিন (যেমন: t2.micro)।
- Key Pair এবং Security Group (যেখানে Port 80 ওপেন আছে) সিলেক্ট করুন।
- User Data: আপনি যে স্ক্রিপ্টটি আগে লিখেছিলেন, সেটি এখানে দিয়ে দিন যাতে প্রতিটা নতুন পিসি আলাদা আইপি দেখাতে পারে।
3. ৩. ধাপ: Auto Scaling Group (ASG) তৈরি করা
এখন আমরা সেই সিস্টেম বানাবো যা পিসি সংখ্যা কন্ট্রোল করবে।
- বাম পাশের মেনু থেকে Auto Scaling Groups-এ গিয়ে Create Auto Scaling Group দিন।
- আপনার তৈরি করা Launch Template টি সিলেক্ট করুন।
- Network: আপনার ডিফল্ট VPC এবং সাবনেটগুলো (সবগুলো সিলেক্ট করা ভালো) দিয়ে দিন।
- Group Size: এখানে ৩টি অপশন পাবেন:
Desired Capacity: আপনি এই মুহূর্তে কয়টি পিসি চান (ধরুন ২)।
Minimum Capacity: সবচেয়ে কম কয়টি থাকবে (ধরুন ১)।
Maximum Capacity: ট্রাফিক বাড়লে সর্বোচ্চ কয়টি হবে (ধরুন ৫)।
*4. ৪. ধাপ: Dynamic Scaling Policy সেটআপ করা (The “Brain”)
ASG তৈরি করার সময় বা পরে আপনি Scaling Policies সেট করতে পারবেন।
- Target Tracking Policy সিলেক্ট করুন।
- Metric Type: “Average CPU Utilization” দিন।
- Target Value: ধরুন ৫০ দিন।
- মানে কী? যদি আপনার সার্ভারগুলোর গড় CPU ব্যবহার ৫০% এর বেশি হয়, তবে ASG অটোমেটিক নতুন সার্ভার যোগ করবে। আবার ৫০% এর নিচে নেমে আসলে বাড়তি সার্ভার ডিলিট করে দেবে।
5. ৫. ধাপ: টেস্টিং (The “Fire” Test)
সব সেট হয়ে গেলে এখন পরীক্ষা করার পালা:
- Self-healing টেস্ট: আপনার রানিং ইনস্ট্যান্সগুলো থেকে ১টি ম্যানুয়ালি Terminate করে দিন। দেখবেন কয়েক মিনিটের মধ্যে ASG নিজে থেকেই আরেকটি নতুন পিসি তৈরি করে দিয়েছে।
- Load টেস্ট: আপনি যদি কমান্ড লাইন দিয়ে সার্ভারে কৃত্রিম লোড তৈরি করেন (যেমন stress টুল দিয়ে), তবে দেখবেন CPU ৫০% পার হওয়ার সাথে সাথে আপনার পিসির সংখ্যা ২ থেকে ৩ বা ৪ হয়ে যাচ্ছে।
আপনি যখন Horizontal Scaling করে অনেকগুলো সার্ভার (EC2) তৈরি করবেন, তখন আপনার সামনে একটি বড় সমস্যা আসবে: “ইউজার কোন আইপি-তে রিকোয়েস্ট পাঠাবে?”
ইউজার তো আর ৫টা আইপি মনে রাখবে না। এখানেই আসে Load Balancer। এটি একটি ট্রাফিক পুলিশের মতো কাজ করে যে আগত ইউজারদের বিভিন্ন সার্ভারে ভাগ করে দেয়।AWS-এ এই Load Balancer-কে সাধারণভাবে বলা হয় ELB (Elastic Load Balancing)। এর ভেতরেই মূলত ALB এবং NLB থাকে। সহজভাবে বুঝে নিন:
১. ELB (Elastic Load Balancing)
এটি হলো মেইন আমব্রেলা বা ক্যাটাগরি। AWS-এর যেকোনো লোড ব্যালেন্সিং সার্ভিসকে একত্রে ELB বলা হয়। এর তিনটি প্রধান প্রকারভেদ আছে:
২. ALB (Application Load Balancer) — স্মার্ট পুলিশ
এটি সবচেয়ে বেশি ব্যবহৃত হয় (আপনার ChatApp বা পোরফোলিওর জন্য এটি সেরা)। এটি Layer 7 (HTTP/HTTPS) এ কাজ করে।
- কাজ: এটি রিকোয়েস্টের ভেতরের তথ্য দেখতে পারে (যেমন URL)।
- উদাহরণ: আপনি রুল সেট করতে পারেন যে, awolad.com/api তে রিকোয়েস্ট আসলে সে যাবে একদল সার্ভারে, আর awolad.com/images এ আসলে সে যাবে অন্য সার্ভারে।
- আপনার জন্য: যেহেতু আপনি Node.js/REST API নিয়ে কাজ করেন, ALB আপনার জন্য পারফেক্ট। (Web App, REST API, Microservices)
৩. NLB (Network Load Balancer) — সুপার ফাস্ট পুলিশ
এটি Layer 4 (TCP/UDP) এ কাজ করে। এটি রিকোয়েস্টের ভেতর কী আছে তা দেখে না, শুধু আইপি আর পোর্ট দেখে।
- কাজ: এটি অত্যন্ত দ্রুত (Ultra-low latency) এবং প্রতি সেকেন্ডে কোটি কোটি রিকোয়েস্ট হ্যান্ডেল করতে পারে।
- উদাহরণ: কোনো গেমিং সার্ভার বা ভিডিও স্ট্রিমিং যেখানে স্পিডই সব। (Gaming, Live Streaming, Static IP দরকার হলে)
- আপনার জন্য: যদি আপনার অ্যাপে সরাসরি TCP কানেকশন লাগে, তখন এটি দরকার।
⚖️ Load Balancing (ELB)
- ALB (Layer 7): স্মার্ট রাউটিং (URL/Path based)। ওয়েব অ্যাপের জন্য সেরা।
- NLB (Layer 4): হাই-স্পিড এবং স্ট্যাটিক আইপি সাপোর্ট। বড় নেটওয়ার্ক লোডের জন্য।
- Purpose: কোনো সার্ভার ডাউন হলে ইউজারকে অটোমেটিক অন্য সার্ভারে পাঠিয়ে দেওয়া।