🔖 Справочник: AWS CLI и Boto3

⚡ Самые нужные команды

  • aws --version — проверка установки
  • aws configure — настройка ключей и региона
  • aws s3 ls — список S3 бакетов
  • aws ec2 describe-instances — список EC2 инстансов
  • pip install boto3 — установка Python SDK
  • boto3.client('s3') — клиент S3 (низкоуровневый)
  • boto3.resource('ec2') — ресурс EC2 (объектный)

Установка и настройка AWS CLI

Проверка и версия

# Терминал
aws --version
# aws-cli/2.x.x Python/3.x.x ...

# Встроенная справка
aws help
aws ec2 help
aws s3 help

Конфигурация

# Терминал — настройка профиля по умолчанию
aws configure

# Настройка именованного профиля
aws configure --profile my-profile

# Просмотр текущей конфигурации
aws configure list
aws configure list --profile my-profile

Файлы конфигурации:

# ~/.aws/credentials
[default]
aws_access_key_id = AKIAIOSFODNN7EXAMPLE
aws_secret_access_key = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY

[my-profile]
aws_access_key_id = AKIA...OTHER...
aws_secret_access_key = ...OTHER...
# ~/.aws/config
[default]
region = eu-central-1
output = json

[profile my-profile]
region = us-east-1
output = text

S3 — Simple Storage Service

# Терминал — основные операции с S3

# Список всех бакетов в аккаунте
aws s3 ls

# Содержимое конкретного бакета
aws s3 ls s3://my-bucket-name

# Содержимое папки внутри бакета
aws s3 ls s3://my-bucket-name/folder/

# Загрузить файл в бакет
aws s3 cp local-file.txt s3://my-bucket-name/

# Скачать файл из бакета
aws s3 cp s3://my-bucket-name/file.txt ./

# Синхронизация папки с бакетом
aws s3 sync ./local-folder s3://my-bucket-name/remote-folder

# Удалить файл из бакета
aws s3 rm s3://my-bucket-name/file.txt

# Создать бакет
aws s3 mb s3://my-new-bucket --region eu-central-1

# Удалить пустой бакет
aws s3 rb s3://my-bucket-name

EC2 — Elastic Compute Cloud

# Терминал — операции с EC2

# Список инстансов (все состояния)
aws ec2 describe-instances

# Список инстансов с фильтрацией и форматированием
aws ec2 describe-instances \
  --query 'Reservations[*].Instances[*].[InstanceId,State.Name,PublicIpAddress,Tags[?Key==`Name`].Value|[0]]' \
  --output table

# Список только running инстансов
aws ec2 describe-instances \
  --filters "Name=instance-state-name,Values=running"

# Запустить инстанс
aws ec2 run-instances \
  --image-id ami-0de02246788e4a354 \
  --count 1 \
  --instance-type t2.micro \
  --key-name my-key \
  --associate-public-ip-address \
  --security-group-ids sg-xxxxxxxxx \
  --region eu-central-1

# Остановить инстанс
aws ec2 stop-instances --instance-ids i-xxxxxxxxxxxxxxxxx

# Запустить остановленный инстанс
aws ec2 start-instances --instance-ids i-xxxxxxxxxxxxxxxxx

# Терминировать (удалить) инстанс
aws ec2 terminate-instances --instance-ids i-xxxxxxxxxxxxxxxxx

Security Groups

# Терминал — операции с Security Groups

# Список всех Security Groups
aws ec2 describe-security-groups

# Информация о конкретной SG
aws ec2 describe-security-groups --group-ids sg-xxxxxxxxx

# Правила входящего трафика конкретной SG (JSON)
aws ec2 describe-security-groups \
  --group-ids sg-xxxxxxxxx \
  --query 'SecurityGroups[*].IpPermissions' \
  --output json

# Создать Security Group
aws ec2 create-security-group \
  --group-name my-sg-name \
  --description "My Security Group description"

# Добавить правило SSH (порт 22) для конкретного IP
aws ec2 authorize-security-group-ingress \
  --group-id sg-xxxxxxxxx \
  --protocol tcp \
  --port 22 \
  --cidr YOUR.IP.ADDRESS/32

# Добавить правило для MySQL (3306) для всех адресов
aws ec2 authorize-security-group-ingress \
  --group-id sg-xxxxxxxxx \
  --ip-permissions \
  '[{"IpProtocol":"tcp","FromPort":3306,"ToPort":3306,"IpRanges":[{"CidrIp":"0.0.0.0/0","Description":"mysql"}]}]'

# Удалить Security Group
aws ec2 delete-security-group --group-id sg-xxxxxxxxx

Boto3 — Python SDK

Установка

# Терминал
pip install boto3

# Проверка установки
python -c "import boto3; print(boto3.__version__)"

Создание клиентов и ресурсов

# boto3_basics.py
import boto3

# --- client (низкоуровневый, все сервисы) ---

# Клиент S3 (регион из ~/.aws/config)
s3_client = boto3.client('s3')

# Клиент EC2 с явным регионом
ec2_client = boto3.client('ec2', region_name='eu-central-1')

# Клиент с именованным профилем
session = boto3.Session(profile_name='my-profile')
s3_client_dev = session.client('s3')

# --- resource (высокоуровневый, не все сервисы) ---

# Ресурс S3
s3_resource = boto3.resource('s3')

# Ресурс EC2
ec2_resource = boto3.resource('ec2', region_name='eu-central-1')

S3 через client

# s3_client_demo.py
import boto3

s3 = boto3.client('s3')

# Создать бакет (для eu-central-1 нужен LocationConstraint)
s3.create_bucket(
    Bucket='my-unique-bucket-2024',
    CreateBucketConfiguration={'LocationConstraint': 'eu-central-1'}
)

# Список бакетов
response = s3.list_buckets()
for bucket in response['Buckets']:
    print(bucket['Name'])

# Загрузить файл
s3.upload_file('local_file.txt', 'my-unique-bucket-2024', 'remote_file.txt')

# Скачать файл
s3.download_file('my-unique-bucket-2024', 'remote_file.txt', 'downloaded.txt')

# Список объектов в бакете
objects = s3.list_objects_v2(Bucket='my-unique-bucket-2024')
for obj in objects.get('Contents', []):
    print(obj['Key'], obj['Size'])

EC2 через client

# ec2_client_demo.py
import boto3

ec2 = boto3.client('ec2', region_name='eu-central-1')

# Список инстансов
response = ec2.describe_instances()
for reservation in response['Reservations']:
    for instance in reservation['Instances']:
        print(instance['InstanceId'], instance['State']['Name'])

# Запустить инстанс
ec2.run_instances(
    ImageId='ami-0de02246788e4a354',
    MinCount=1,
    MaxCount=1,
    InstanceType='t2.micro',
    KeyName='my-key'
)

# Остановить инстанс
ec2.stop_instances(InstanceIds=['i-xxxxxxxxxxxxxxxxx'])

Переменные окружения для аутентификации

# Терминал (PowerShell — Windows)
$env:AWS_ACCESS_KEY_ID = "AKIAIOSFODNN7EXAMPLE"
$env:AWS_SECRET_ACCESS_KEY = "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
$env:AWS_DEFAULT_REGION = "eu-central-1"

# Терминал (bash — macOS/Linux)
export AWS_ACCESS_KEY_ID="AKIAIOSFODNN7EXAMPLE"
export AWS_SECRET_ACCESS_KEY="wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY"
export AWS_DEFAULT_REGION="eu-central-1"