AWS CLI setup
AWS CLI কী এবং কেন এটা একজন CloudOps Engineer-এর প্রাণ?
AWS Console সুন্দর, কিন্তু production-এ কেউ হাতে হাতে 50টা EC2 instance manage করে না। CLI দিয়েই automation করতে হয়, script লেখা হয়, pipeline চলে। যদি কেউ CLI ভালো না জানেন তিনি প্রতিদিন console-এ ক্লিক করতে করতে ক্লান্ত হয়ে যান এবং অন্যরা তার কাজ script করে এগিয়ে যায়।
মনে করেন আপনার কোম্পানির dev, staging, production তিনটা আলাদা AWS account। প্রতিদিন সবগুলোতে কাজ করতে হয়। Named profiles ছাড়া এটা nightmare। Profiles দিয়ে এটা এক লাইনের ব্যাপার।
Config File থেকে API Call পর্যন্ত – ভেতরে কী হয়?

AWS CLI যখন কোনো command run করে, সে উপরের ক্রমে credential খোঁজে। প্রথমে পেলে সেটাই ব্যবহার করে, নইলে পরেরটায় যায়। EC2-তে থাকলে instance profile কাজ করে, local machine-এ ~/.aws/ ফাইল কাজ করে।
AWS CLI Install ও Initial Setup
# Linux/macOS - latest v2 install
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
# Version check
aws --version
# Output: aws-cli/2.x.x Python/3.x.x Linux/...
# Basic configure (default profile)
aws configure
# AWS Access Key ID: AKIA...
# AWS Secret Access Key: ...
# Default region name: ap-southeast-1
# Default output format: json
এটা দুটো ফাইল তৈরি করে:
# ~/.aws/credentials
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
# ~/.aws/config
[default]
region = ap-southeast-1
output = json
Named Profiles – Multi-Account এর আসল হাতিয়ার
Real production setup-এ dev, staging, prod আলাদা accounts। Named profiles দিয়ে প্রতিটা account আলাদাভাবে manage করুন।
Named profile মানে হলো এই তিনটা account-এর credential আলাদা নামে ~/.aws/credentials ফাইলে সেভ করে রাখা। তারপর command-এ –profile flag দিয়ে বলে দেওয়া “এই কাজটা কোন account-এ করতে হবে।”
# Dev account configure করুন
aws configure --profile dev
# Staging account configure করুন
aws configure --profile staging
# Production account configure করুন
aws configure --profile prod
ফলে ~/.aws/credentials হবে এরকম:
[default]
aws_access_key_id = AKIA_DEFAULT
aws_secret_access_key = SECRET_DEFAULT
[dev]
aws_access_key_id = AKIA_DEV
aws_secret_access_key = SECRET_DEV
[staging]
aws_access_key_id = AKIA_STAGING
aws_secret_access_key = SECRET_STAGING
[prod]
aws_access_key_id = AKIA_PROD
aws_secret_access_key = SECRET_PROD
এবং ~/.aws/config:
[default]
region = ap-southeast-1
output = json
[profile dev]
region = ap-southeast-1
output = json
[profile staging]
region = us-east-1
output = json
[profile prod]
region = ap-southeast-1
output = table
লক্ষ্য করুন: credentials ফাইলে [dev] কিন্তু config ফাইলে [profile dev] এই পার্থক্যটা না বুঝলে error আসবে।
# dev account-এ S3 দেখুন
aws s3 ls --profile dev
# prod account-এ S3 দেখুন
aws s3 ls --profile prod
পুরো session-এর জন্য একটা profile active করতে চাইলে:
export AWS_PROFILE=dev
aws s3 ls # এখন --profile লাগবে না, dev-ই ব্যবহার হবে
Assume-Role Profile – Cross-Account Access
Production-এ সরাসরি long-term key রাখা unsafe। বরং একটা role assume করা হয়। এটা SOA-C03-এ বারবার আসে।
# ~/.aws/config
[profile prod-admin]
role_arn = arn:aws:iam::PROD_ACCOUNT_ID:role/AdminRole
source_profile = dev # এই profile-এর credential দিয়ে role assume করবে
region = ap-southeast-1
mfa_serial = arn:aws:iam::DEV_ACCOUNT_ID:mfa/your-username # optional MFA
# এখন এই command prod account-এ AdminRole হিসেবে run হবে
aws s3 ls --profile prod-admin
AWS Console Walkthrough
IAM User তৈরি ও access key নেওয়া (যদি না থাকে):
- AWS Console → IAM → Users → Create user
- User name দিন → Next
- “Attach policies directly” →
AdministratorAccess(lab-এর জন্য) → Next → Create user - User-এ click করুন → Security credentials tab → Create access key
- “Command Line Interface (CLI)” select করুন → Next → Create access key
- এই পেজ থেকেই Access key ও Secret key copy করুন – পরে Secret আর দেখা যাবে না
Named profile verify করুন:
- Terminal-এ
aws sts get-caller-identity --profile devrun করুন - Output-এ
Account,UserId,Arnদেখাবে – এটাই confirm করে profile কাজ করছে
CLI দিয়ে Profile Manage করুন
# কোন profile এখন active সেটা দেখুন
aws configure list
# Specific profile-এর configuration দেখুন
aws configure list --profile prod
# Current identity verify করুন (সবচেয়ে useful command)
aws sts get-caller-identity
aws sts get-caller-identity --profile prod
# সব configured profiles দেখুন
aws configure list-profiles
# একটি profile-এর single value update করুন
aws configure set region us-east-1 --profile staging
# Environment variable দিয়ে profile set করুন (current shell session-এ)
export AWS_PROFILE=dev
aws s3 ls # এখন dev profile use করবে
# Region override করুন temporarily
export AWS_DEFAULT_REGION=us-east-1
# Environment variable unset করুন
unset AWS_PROFILE
Helpful Aliases – Production Speed
এগুলো ~/.bashrc বা ~/.zshrc-এ যোগ করুন। Daily productivity বহুগুণে বাড়বে।
# ─── AWS Profile Shortcuts ───────────────────────────────────────────────────
# Quick profile switcher
alias awsdev='export AWS_PROFILE=dev && echo "Switched to: dev ($(aws sts get-caller-identity --query Account --output text))"'
alias awsstg='export AWS_PROFILE=staging && echo "Switched to: staging ($(aws sts get-caller-identity --query Account --output text))"'
alias awsprod='export AWS_PROFILE=prod && echo "Switched to: prod ($(aws sts get-caller-identity --query Account --output text))"'
# Who am I? (most-used debug command)
alias whoami-aws='aws sts get-caller-identity'
# Current profile দেখুন
alias awsp='echo "Current profile: ${AWS_PROFILE:-default}"'
# ─── EC2 Shortcuts ───────────────────────────────────────────────────────────
# সব running instances দেখুন (name + ID + state)
alias ec2ls='aws ec2 describe-instances \
--query "Reservations[*].Instances[*].{Name:Tags[?Key==\`Name\`]|[0].Value,ID:InstanceId,State:State.Name,Type:InstanceType,IP:PrivateIpAddress}" \
--output table'
# ─── S3 Shortcuts ────────────────────────────────────────────────────────────
# S3 bucket list
alias s3ls='aws s3 ls'
# ─── CloudFormation ──────────────────────────────────────────────────────────
# সব stacks দেখুন
alias cfls='aws cloudformation list-stacks --stack-status-filter CREATE_COMPLETE UPDATE_COMPLETE --output table'
# ─── Logs ────────────────────────────────────────────────────────────────────
# CloudWatch log groups list
alias cwlogs='aws logs describe-log-groups --query "logGroups[*].logGroupName" --output text'
# Apply করতে হলে:
source ~/.bashrc
Production-এ যে ভুলগুলো সবাই করে
1. prod profile ভুলে default হিসেবে ব্যবহার। export AWS_PROFILE=prod করে terminal খোলা রেখে পরের দিন aws ec2 terminate-instances চালালে prod-এ instance terminate হবে। সবসময় aws sts get-caller-identity দিয়ে confirm করুন।
2. Access key সরাসরি code বা .env-তে রাখা। GitHub-এ push হলে AWS নিজেই কয়েক মিনিটের মধ্যে detect করে key disable করে কিন্তু ততক্ষণে অন্যরা use করে ফেলতে পারে। ~/.aws/credentials-এ রাখুন, environment variable পরিহার করুন।
3. Long-term access key production-এ না রাখা। Production-এ EC2 instance profile বা assume-role ব্যবহার করুন। Long-term key rotate না করলে risk বাড়ে।
4. credentials vs config ফাইলে ভুল prefix। credentials-এ [dev], কিন্তু config-এ অবশ্যই [profile dev] – [dev] লিখলে ignore হবে।
5. Region mismatch। Resource একটা region-এ, command অন্য region-এ রান করালে An error occurred (NoSuchBucket) এই error দেখলে প্রথমে region check করুন: aws configure get region --profile dev
SOA-C03-এ AWS CLI Credential কীভাবে আসে?
Exam-এ credential precedence সরাসরি scenario আকারে আসে। নিচে কিছু স্যাম্পল প্রশ্ন দেয়া হলো:
Sample Question 1:
একজন Developer-এর EC2 instance-এ একটি script চলছে। Script-এ AWS_ACCESS_KEY_ID environment variable set আছে এবং instance-এ একটি IAM role attach করা আছে। Script টি কোন credential ব্যবহার করবে?
A) IAM instance profile-এর credential, কারণ instance role সবসময় priority পায় B) Environment variable-এর credential, কারণ এটা credential chain-এ উপরে C) দুটো মিলিয়ে ব্যবহার করবে D) Error দেবে কারণ conflict আছে
সঠিক উত্তর: B। Environment variable সবসময় instance metadata-এর আগে check হয়। Distractor হলো A – অনেকে মনে করে instance role সবচেয়ে শক্তিশালী, কিন্তু precedence order-এ সে সবার শেষে।
Sample Question 2:
একটি DevOps team তিনটি AWS account (dev/staging/prod) manage করে। সবচেয়ে নিরাপদ এবং scalable পদ্ধতি কোনটি?
A) তিনটি account-এর জন্য তিনটি আলাদা IAM user ও long-term access key B) Named profiles + assume-role with MFA for prod C) একটাই access key, region flag দিয়ে account আলাদা করা D) AWS_ACCESS_KEY_ID environment variable বারবার export করা
সঠিক উত্তর: B। “Least privilege + temporary credentials + MFA for sensitive accounts” – এটাই AWS-এর recommended pattern।
আজকের সারাংশ ও আগামীকালের প্রস্তুতি
আজকে শিখলেন: CLI credential precedence chain, named profiles দিয়ে multi-account management, assume-role setup, এবং daily productivity-র জন্য aliases। এই জ্ঞান ছাড়া পরের কোনো automation বা project সম্ভব না।
Next Lesson: AWS Well-Architected Framework (6 pillars)। এটা পড়বেন কারণ SOA-C03-এর প্রায় প্রতিটা scenario question Well-Architected Framework-এর কোনো না কোনো pillar-এর উপর ভিত্তি করে তৈরি। Reliability, Security, Cost Optimization এই তিনটা pillar আপনার exam-এ সবচেয়ে বেশি কাজে লাগবে।