AWS CLI - EC2
Mundarija
- Asosiy Tushunchalar
- EC2 Instances Boshqaruvi
- Instance Attributes
- Elastic IP
- Filters va Query
- Amaliy Misollar
- Best Practices
1. Asosiy Tushunchalar
AWS CLI Konfiguratsiya
# Credentials sozlash
aws configure set aws_access_key_id "YOUR_ACCESS_KEY"
aws configure set aws_secret_access_key "YOUR_SECRET_KEY"
aws configure set default.region "us-east-1"
aws configure set default.output "json"
# Tekshirish
aws configure list
Buyruq Tuzilishi
aws <service> <command> <subcommand> [options]
# Misol:
aws ec2 describe-instances --filters "Name=tag:Name,Values=myserver"
2. EC2 Instances Boshqaruvi
Instancelarni Ko'rish
# Barcha instancelarni ko'rish
aws ec2 describe-instances
# Jadval formatda
aws ec2 describe-instances --output table
# Faqat kerakli ma'lumotlar
aws ec2 describe-instances \
--query 'Reservations[*].Instances[*].[InstanceId,InstanceType,State.Name,Tags[?Key==`Name`].Value|[0]]' \
--output table
# Running instancelarni ko'rish
aws ec2 describe-instances \
--filters "Name=instance-state-name,Values=running" \
--output table
Instance ID ni Topish
# Nom bo'yicha Instance ID topish
INSTANCE_ID=$(aws ec2 describe-instances \
--filters "Name=tag:Name,Values=web-server" \
--query 'Reservations[0].Instances[0].InstanceId' \
--output text)
echo "Instance ID: $INSTANCE_ID"
# Ko'p instancelarning ID'larini olish
aws ec2 describe-instances \
--filters "Name=instance-state-name,Values=running" \
--query 'Reservations[*].Instances[*].InstanceId' \
--output text
Instance Stop/Start/Restart
# To'xtatish
aws ec2 stop-instances --instance-ids $INSTANCE_ID
# To'xtaguncha kutish
aws ec2 wait instance-stopped --instance-ids $INSTANCE_ID
echo "Instance to'xtatildi"
# Ishga tushirish
aws ec2 start-instances --instance-ids $INSTANCE_ID
# Ishga tushguncha kutish
aws ec2 wait instance-running --instance-ids $INSTANCE_ID
echo "Instance ishga tushdi"
# Restart
aws ec2 reboot-instances --instance-ids $INSTANCE_ID
# O'chirish (terminate)
aws ec2 terminate-instances --instance-ids $INSTANCE_ID
Instance Ma'lumotlarini Olish
# Public IP
aws ec2 describe-instances \
--instance-ids $INSTANCE_ID \
--query 'Reservations[0].Instances[0].PublicIpAddress' \
--output text
# Private IP
aws ec2 describe-instances \
--instance-ids $INSTANCE_ID \
--query 'Reservations[0].Instances[0].PrivateIpAddress' \
--output text
# Instance Type
aws ec2 describe-instances \
--instance-ids $INSTANCE_ID \
--query 'Reservations[0].Instances[0].InstanceType' \
--output text
# State
aws ec2 describe-instances \
--instance-ids $INSTANCE_ID \
--query 'Reservations[0].Instances[0].State.Name' \
--output text
# Availability Zone
aws ec2 describe-instances \
--instance-ids $INSTANCE_ID \
--query 'Reservations[0].Instances[0].Placement.AvailabilityZone' \
--output text
3. Instance Attributes
Termination Protection
# Yoqish
aws ec2 modify-instance-attribute \
--instance-id $INSTANCE_ID \
--disable-api-termination
# Tekshirish
aws ec2 describe-instance-attribute \
--instance-id $INSTANCE_ID \
--attribute disableApiTermination
# O'chirish
aws ec2 modify-instance-attribute \
--instance-id $INSTANCE_ID \
--no-disable-api-termination
Stop Protection
# Yoqish
aws ec2 modify-instance-attribute \
--instance-id $INSTANCE_ID \
--disable-api-stop
# Tekshirish
aws ec2 describe-instance-attribute \
--instance-id $INSTANCE_ID \
--attribute disableApiStop
# O'chirish
aws ec2 modify-instance-attribute \
--instance-id $INSTANCE_ID \
--no-disable-api-stop
Instance Type O'zgartirish
# 1. Instance'ni to'xtatish
aws ec2 stop-instances --instance-ids $INSTANCE_ID
aws ec2 wait instance-stopped --instance-ids $INSTANCE_ID
# 2. Type o'zgartirish
aws ec2 modify-instance-attribute \
--instance-id $INSTANCE_ID \
--instance-type t2.nano
# 3. Qayta ishga tushirish
aws ec2 start-instances --instance-ids $INSTANCE_ID
aws ec2 wait instance-running --instance-ids $INSTANCE_ID
# 4. Tekshirish
aws ec2 describe-instances \
--instance-ids $INSTANCE_ID \
--query 'Reservations[0].Instances[0].[InstanceId,InstanceType,State.Name]' \
--output table
To'liq Script - Instance Type O'zgartirish
#!/bin/bash
# Instance type o'zgartirish scripti
INSTANCE_NAME="web-server"
NEW_TYPE="t2.nano"
# Instance ID topish
INSTANCE_ID=$(aws ec2 describe-instances \
--filters "Name=tag:Name,Values=$INSTANCE_NAME" \
--query 'Reservations[0].Instances[0].InstanceId' \
--output text)
echo "Instance ID: $INSTANCE_ID"
echo "Yangi type: $NEW_TYPE"
# To'xtatish
echo "Instance to'xtatilmoqda..."
aws ec2 stop-instances --instance-ids $INSTANCE_ID
aws ec2 wait instance-stopped --instance-ids $INSTANCE_ID
echo "To'xtatildi"
# Type o'zgartirish
echo "Type o'zgartirilmoqda..."
aws ec2 modify-instance-attribute \
--instance-id $INSTANCE_ID \
--instance-type $NEW_TYPE
echo "O'zgartirildi"
# Ishga tushirish
echo "Ishga tushirilmoqda..."
aws ec2 start-instances --instance-ids $INSTANCE_ID
aws ec2 wait instance-running --instance-ids $INSTANCE_ID
echo "Ishga tushdi"
# Natija
echo "Natija:"
aws ec2 describe-instances \
--instance-ids $INSTANCE_ID \
--query 'Reservations[0].Instances[0].[InstanceId,InstanceType,State.Name]' \
--output table
4. Elastic IP
Elastic IP Ko'rish
# Barcha Elastic IP'lar
aws ec2 describe-addresses
# Jadval formatda
aws ec2 describe-addresses --output table
# Faqat allocation ID'lar
aws ec2 describe-addresses \
--query 'Addresses[*].AllocationId' \
--output text
Elastic IP Yaratish
# Oddiy yaratish
aws ec2 allocate-address
# Tag bilan yaratish
aws ec2 allocate-address \
--tag-specifications 'ResourceType=elastic-ip,Tags=[{Key=Name,Value=prod-eip}]'
# Allocation ID ni saqlash
ALLOCATION_ID=$(aws ec2 allocate-address \
--tag-specifications 'ResourceType=elastic-ip,Tags=[{Key=Name,Value=prod-eip}]' \
--query 'AllocationId' \
--output text)
echo "Allocation ID: $ALLOCATION_ID"
# Public IP ni ko'rish
PUBLIC_IP=$(aws ec2 describe-addresses \
--allocation-ids $ALLOCATION_ID \
--query 'Addresses[0].PublicIp' \
--output text)
echo "Public IP: $PUBLIC_IP"
Elastic IP ni Instance'ga Ulash
# Instance ID va Allocation ID olish
INSTANCE_ID=$(aws ec2 describe-instances \
--filters "Name=tag:Name,Values=web-server" \
--query 'Reservations[0].Instances[0].InstanceId' \
--output text)
ALLOCATION_ID=$(aws ec2 describe-addresses \
--filters "Name=tag:Name,Values=prod-eip" \
--query 'Addresses[0].AllocationId' \
--output text)
# Ulash
aws ec2 associate-address \
--instance-id $INSTANCE_ID \
--allocation-id $ALLOCATION_ID
# Tekshirish
aws ec2 describe-addresses \
--allocation-ids $ALLOCATION_ID \
--query 'Addresses[0].[AllocationId,PublicIp,InstanceId]' \
--output table
Elastic IP Uzish va O'chirish
# Association ID topish
ASSOCIATION_ID=$(aws ec2 describe-addresses \
--allocation-ids $ALLOCATION_ID \
--query 'Addresses[0].AssociationId' \
--output text)
# Uzish
aws ec2 disassociate-address --association-id $ASSOCIATION_ID
# O'chirish
aws ec2 release-address --allocation-id $ALLOCATION_ID
To'liq Script - EIP Yaratish va Ulash
#!/bin/bash
# Elastic IP yaratish va ulash scripti
INSTANCE_NAME="web-server"
EIP_NAME="prod-eip"
# Instance ID topish
INSTANCE_ID=$(aws ec2 describe-instances \
--filters "Name=tag:Name,Values=$INSTANCE_NAME" \
--query 'Reservations[0].Instances[0].InstanceId' \
--output text)
echo "Instance ID: $INSTANCE_ID"
# Elastic IP yaratish
echo "Elastic IP yaratilmoqda..."
ALLOCATION_ID=$(aws ec2 allocate-address \
--tag-specifications "ResourceType=elastic-ip,Tags=[{Key=Name,Value=$EIP_NAME}]" \
--query 'AllocationId' \
--output text)
PUBLIC_IP=$(aws ec2 describe-addresses \
--allocation-ids $ALLOCATION_ID \
--query 'Addresses[0].PublicIp' \
--output text)
echo "Allocation ID: $ALLOCATION_ID"
echo "Public IP: $PUBLIC_IP"
# Instance'ga ulash
echo "Instance'ga ulanmoqda..."
aws ec2 associate-address \
--instance-id $INSTANCE_ID \
--allocation-id $ALLOCATION_ID
echo "Ulandi!"
# Natija
echo "Natija:"
aws ec2 describe-addresses \
--allocation-ids $ALLOCATION_ID \
--output table
5. Filters va Query
Filters - Filterlash
# Tag bo'yicha
--filters "Name=tag:Name,Values=web-server"
# State bo'yicha
--filters "Name=instance-state-name,Values=running"
# Instance type bo'yicha
--filters "Name=instance-type,Values=t2.micro"
# Ko'p filterlar
--filters \
"Name=tag:Name,Values=web-server" \
"Name=instance-state-name,Values=running"
# Tag bilan state
aws ec2 describe-instances \
--filters \
"Name=tag:Environment,Values=production" \
"Name=instance-state-name,Values=running" \
--query 'Reservations[*].Instances[*].[InstanceId,Tags[?Key==`Name`].Value|[0]]' \
--output table
Query - Ma'lumot Olish
# Birinchi element
--query 'Reservations[0].Instances[0].InstanceId'
# Barcha elementlar
--query 'Reservations[*].Instances[*].InstanceId'
# Ko'p maydonlar
--query 'Reservations[*].Instances[*].[InstanceId,InstanceType,State.Name]'
# Tag qiymati
--query 'Reservations[*].Instances[*].Tags[?Key==`Name`].Value|[0]'
# Shartli query
--query 'Reservations[*].Instances[?State.Name==`running`].InstanceId'
# Murakkab query
aws ec2 describe-instances \
--query 'Reservations[*].Instances[*].{
ID:InstanceId,
Type:InstanceType,
State:State.Name,
Name:Tags[?Key==`Name`].Value|[0],
IP:PublicIpAddress
}' \
--output table
Output Formatlar
# JSON (default)
--output json
# Jadval
--output table
# Text (faqat qiymatlar)
--output text
# YAML
--output yaml
6. Amaliy Misollar
Misol 1: Barcha Running Instancelarni To'xtatish
#!/bin/bash
# Running instancelarni topish
INSTANCE_IDS=$(aws ec2 describe-instances \
--filters "Name=instance-state-name,Values=running" \
--query 'Reservations[*].Instances[*].InstanceId' \
--output text)
# Agar instance bo'lsa
if [ ! -z "$INSTANCE_IDS" ]; then
echo "To'xtatilayotgan instancelar: $INSTANCE_IDS"
# Har birini to'xtatish
for id in $INSTANCE_IDS; do
echo "To'xtatilmoqda: $id"
aws ec2 stop-instances --instance-ids $id
done
echo "Barcha instancelar to'xtatildi"
else
echo "Running instancelar topilmadi"
fi
Misol 2: Instance Status Hisoboti
#!/bin/bash
echo "EC2 Instance Status Hisoboti"
echo "=============================="
echo ""
# Running
RUNNING=$(aws ec2 describe-instances \
--filters "Name=instance-state-name,Values=running" \
--query 'Reservations[*].Instances[*].InstanceId' \
--output text | wc -w)
# Stopped
STOPPED=$(aws ec2 describe-instances \
--filters "Name=instance-state-name,Values=stopped" \
--query 'Reservations[*].Instances[*].InstanceId' \
--output text | wc -w)
# Terminated
TERMINATED=$(aws ec2 describe-instances \
--filters "Name=instance-state-name,Values=terminated" \
--query 'Reservations[*].Instances[*].InstanceId' \
--output text | wc -w)
echo "Running: $RUNNING"
echo "Stopped: $STOPPED"
echo "Terminated: $TERMINATED"
echo ""
# Batafsil
echo "Running Instances:"
aws ec2 describe-instances \
--filters "Name=instance-state-name,Values=running" \
--query 'Reservations[*].Instances[*].[InstanceId,InstanceType,Tags[?Key==`Name`].Value|[0]]' \
--output table
Misol 3: Instance Backup (AMI Yaratish)
#!/bin/bash
INSTANCE_NAME="web-server"
DATE=$(date +%Y-%m-%d-%H-%M)
# Instance ID topish
INSTANCE_ID=$(aws ec2 describe-instances \
--filters "Name=tag:Name,Values=$INSTANCE_NAME" \
--query 'Reservations[0].Instances[0].InstanceId' \
--output text)
echo "Instance ID: $INSTANCE_ID"
echo "AMI yaratilmoqda..."
# AMI yaratish
AMI_ID=$(aws ec2 create-image \
--instance-id $INSTANCE_ID \
--name "$INSTANCE_NAME-backup-$DATE" \
--description "Backup of $INSTANCE_NAME on $DATE" \
--no-reboot \
--query 'ImageId' \
--output text)
echo "AMI ID: $AMI_ID"
echo "AMI yaratildi"
# Tag qo'shish
aws ec2 create-tags \
--resources $AMI_ID \
--tags Key=Name,Value="$INSTANCE_NAME-backup" Key=Date,Value="$DATE"
echo "Backup tugadi"
Misol 4: Instance Ma'lumotlarini Export
#!/bin/bash
# CSV faylga export
aws ec2 describe-instances \
--query 'Reservations[*].Instances[*].[
InstanceId,
InstanceType,
State.Name,
PublicIpAddress,
PrivateIpAddress,
Tags[?Key==`Name`].Value|[0]
]' \
--output text | \
awk 'BEGIN {print "InstanceID,Type,State,PublicIP,PrivateIP,Name"}
{print $1","$2","$3","$4","$5","$6}' > instances.csv
echo "Ma'lumotlar instances.csv fayliga saqlandi"
cat instances.csv
7. Best Practices
O'zgaruvchilardan Foydalanish
# Yaxshi usul
INSTANCE_ID=$(aws ec2 describe-instances \
--filters "Name=tag:Name,Values=web-server" \
--query 'Reservations[0].Instances[0].InstanceId' \
--output text)
aws ec2 stop-instances --instance-ids $INSTANCE_ID
aws ec2 wait instance-stopped --instance-ids $INSTANCE_ID
aws ec2 start-instances --instance-ids $INSTANCE_ID
# Yomon usul (har safar query)
aws ec2 stop-instances --instance-ids $(aws ec2 describe-instances ...)
Error Handling
#!/bin/bash
INSTANCE_ID=$(aws ec2 describe-instances \
--filters "Name=tag:Name,Values=web-server" \
--query 'Reservations[0].Instances[0].InstanceId' \
--output text 2>/dev/null)
if [ -z "$INSTANCE_ID" ] || [ "$INSTANCE_ID" == "None" ]; then
echo "ERROR: Instance topilmadi"
exit 1
fi
echo "Instance topildi: $INSTANCE_ID"
# Amaliyotni bajarish
if aws ec2 stop-instances --instance-ids $INSTANCE_ID 2>/dev/null; then
echo "Instance to'xtatildi"
else
echo "ERROR: Instance to'xtatilmadi"
exit 1
fi
Wait Commandlaridan Foydalanish
# Yaxshi - kutish bilan
aws ec2 stop-instances --instance-ids $INSTANCE_ID
aws ec2 wait instance-stopped --instance-ids $INSTANCE_ID
aws ec2 modify-instance-attribute --instance-id $INSTANCE_ID --instance-type t2.nano
aws ec2 start-instances --instance-ids $INSTANCE_ID
aws ec2 wait instance-running --instance-ids $INSTANCE_ID
# Yomon - kutsiz
aws ec2 stop-instances --instance-ids $INSTANCE_ID
aws ec2 modify-instance-attribute --instance-id $INSTANCE_ID --instance-type t2.nano
aws ec2 start-instances --instance-ids $INSTANCE_ID
Dry Run
# Avval dry-run bilan sinab ko'ring
aws ec2 stop-instances --instance-ids $INSTANCE_ID --dry-run
# Agar muammo bo'lmasa, asl buyruqni bajaring
aws ec2 stop-instances --instance-ids $INSTANCE_ID
Logging
#!/bin/bash
LOG_FILE="/var/log/ec2-operations.log"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a $LOG_FILE
}
log "Instance to'xtatish boshlandi"
aws ec2 stop-instances --instance-ids $INSTANCE_ID
log "Instance to'xtatildi"
Tez-tez Ishlatiladigan Buyruqlar
# Instance ID topish
aws ec2 describe-instances --filters "Name=tag:Name,Values=NAME" --query 'Reservations[0].Instances[0].InstanceId' --output text
# Running instancelar
aws ec2 describe-instances --filters "Name=instance-state-name,Values=running" --output table
# Instance to'xtatish
aws ec2 stop-instances --instance-ids INSTANCE_ID && aws ec2 wait instance-stopped --instance-ids INSTANCE_ID
# Instance ishga tushirish
aws ec2 start-instances --instance-ids INSTANCE_ID && aws ec2 wait instance-running --instance-ids INSTANCE_ID
# Termination protection yoqish
aws ec2 modify-instance-attribute --instance-id INSTANCE_ID --disable-api-termination
# Stop protection yoqish
aws ec2 modify-instance-attribute --instance-id INSTANCE_ID --disable-api-stop
# Instance type o'zgartirish
aws ec2 stop-instances --instance-ids ID && aws ec2 wait instance-stopped --instance-ids ID && aws ec2 modify-instance-attribute --instance-id ID --instance-type t2.nano && aws ec2 start-instances --instance-ids ID
# Elastic IP yaratish va ulash
ALLOC=$(aws ec2 allocate-address --query 'AllocationId' --output text) && aws ec2 associate-address --instance-id INSTANCE_ID --allocation-id $ALLOC
# Barcha Elastic IP'lar
aws ec2 describe-addresses --output table