Skip to main content

AWS CLI - EC2

Mundarija

  1. Asosiy Tushunchalar
  2. EC2 Instances Boshqaruvi
  3. Instance Attributes
  4. Elastic IP
  5. Filters va Query
  6. Amaliy Misollar
  7. 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