Пример 1: Настройка AWS CLI и проверка
Полный сценарий первой настройки AWS CLI на рабочей машине.
# Терминал — проверяем установку
aws --version
# aws-cli/2.x.x Python/3.x.x Windows/10 botocore/1.x.x
# Запускаем настройку
aws configure
Интерактивный ввод при aws configure:
# Терминал — интерактивный вывод aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: eu-central-1
Default output format [None]: json
Проверяем, что конфигурация сохранилась:
# Терминал
aws configure list
# Ожидаемый вывод:
# Name Value Type Location
# ---- ----- ---- --------
# profile <not set> None None
# access_key ****************XAMP shared-credentials-file
# secret_key ****************EKEY shared-credentials-file
# region eu-central-1 config-file ~/.aws/config
Первичная проверка доступа:
# Терминал
# Список S3 бакетов (OK если пустой список или ваши бакеты)
aws s3 ls
# Список EC2 инстансов (OK если JSON без ошибок Access Denied)
aws ec2 describe-instances --output table
Пример 2: Работа с S3 через AWS CLI
# Терминал — создать бакет
# Имя бакета должно быть глобально уникальным!
aws s3 mb s3://your-unique-bucket-name-2024 --region eu-central-1
# Загрузить файл
aws s3 cp README.md s3://your-unique-bucket-name-2024/
# Просмотреть содержимое бакета
aws s3 ls s3://your-unique-bucket-name-2024/
# Скачать файл
aws s3 cp s3://your-unique-bucket-name-2024/README.md ./downloaded_README.md
# Синхронизировать папку (загрузить только изменённые файлы)
aws s3 sync ./my-project s3://your-unique-bucket-name-2024/my-project/
# Удалить файл
aws s3 rm s3://your-unique-bucket-name-2024/README.md
# Удалить бакет (должен быть пустым)
aws s3 rb s3://your-unique-bucket-name-2024
Пример 3: Запуск EC2 через AWS CLI
Создаём файл с User Data скриптом и запускаем инстанс:
# user-data.sh — сохранить в текущей папке
#!/bin/bash
# Amazon Linux 2023: docker и плагин compose ставятся через dnf
dnf update -y
dnf install -y docker docker-compose-plugin git
systemctl start docker
systemctl enable docker
usermod -aG docker ec2-user
cd /opt/
git clone https://github.com/it-career-hub/example-voting-app.git
cd example-voting-app
# Compose v2 — подкоманда docker (без дефиса)
docker compose up -d
# Терминал — запуск инстанса
# Замените GROUP_NAME на вашу группу и имя
aws ec2 run-instances \
--image-id ami-0de02246788e4a354 \
--count 1 \
--instance-type t2.micro \
--key-name ich \
--associate-public-ip-address \
--security-group-ids sg-07a67fb5015140a49 \
--tag-specifications 'ResourceType=instance,Tags=[{Key=Name,Value=voting_app_GROUP_NAME}]' \
--region eu-central-1 \
--user-data file://user-data.sh
# Терминал — проверяем, что инстанс запущен
aws ec2 describe-instances \
--filters "Name=tag:Name,Values=voting_app_GROUP_NAME" \
--query 'Reservations[*].Instances[*].[InstanceId,State.Name,PublicIpAddress]' \
--output table
Пример 4: Boto3 — создание S3 бакета и загрузка файла
# s3_demo.py
import boto3
# Клиент использует ~/.aws/credentials автоматически
s3 = boto3.client('s3')
BUCKET_NAME = 'ich-student-aws-lab-test'
REGION = 'eu-central-1'
# --- Создать бакет ---
s3.create_bucket(
Bucket=BUCKET_NAME,
CreateBucketConfiguration={
'LocationConstraint': REGION
}
)
print(f'Бакет {BUCKET_NAME} создан')
# --- Список всех бакетов ---
response = s3.list_buckets()
print('Мои бакеты:')
for bucket in response['Buckets']:
print(f' {bucket["Name"]}')
# --- Загрузить файл ---
with open('test.txt', 'w') as f:
f.write('Hello from boto3!')
s3.upload_file('test.txt', BUCKET_NAME, 'hello/test.txt')
print('Файл загружен')
# --- Список объектов в бакете ---
objects = s3.list_objects_v2(Bucket=BUCKET_NAME)
for obj in objects.get('Contents', []):
print(f' {obj["Key"]} ({obj["Size"]} bytes)')
# Терминал — запуск
python s3_demo.py
Пример 5: Boto3 — список EC2 инстансов
# ec2_list.py
import boto3
ec2 = boto3.client('ec2', region_name='eu-central-1')
# Получаем список всех инстансов
response = ec2.describe_instances()
print(f"{'ID':<22} {'Тип':<12} {'Состояние':<12} {'IP':<16} {'Имя'}")
print('-' * 80)
for reservation in response['Reservations']:
for instance in reservation['Instances']:
instance_id = instance['InstanceId']
instance_type = instance['InstanceType']
state = instance['State']['Name']
public_ip = instance.get('PublicIpAddress', 'нет IP')
# Извлекаем тег Name
name = 'без имени'
for tag in instance.get('Tags', []):
if tag['Key'] == 'Name':
name = tag['Value']
break
print(f'{instance_id:<22} {instance_type:<12} {state:<12} {public_ip:<16} {name}')
# Терминал — запуск
python ec2_list.py
Пример 6: Boto3 — именованный профиль и Session
# boto3_profiles.py
import boto3
# Вариант 1: профиль по умолчанию (default)
s3_default = boto3.client('s3')
# Вариант 2: именованный профиль через Session
session_dev = boto3.Session(profile_name='my-dev-account')
s3_dev = session_dev.client('s3')
# Вариант 3: явный регион без смены профиля
ec2_frankfurt = boto3.client('ec2', region_name='eu-central-1')
ec2_ireland = boto3.client('ec2', region_name='eu-west-1')
# Сравнить количество инстансов в разных регионах
for client, region_name in [(ec2_frankfurt, 'eu-central-1'), (ec2_ireland, 'eu-west-1')]:
response = client.describe_instances()
count = sum(len(r['Instances']) for r in response['Reservations'])
print(f'{region_name}: {count} инстансов')
⚠️ Проверить по документации: порядок поиска credentials в Boto3 может измениться в будущих версиях. Актуальный порядок: boto3 Credentials Configuration.