Установка и настройка 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"