Вы когда-нибудь задумывались об использовании Python для создания инфраструктуры AWS? Потому что ты можешь! Boto3 — это мощный комплект средств разработки программного обеспечения (SDK) AWS для Python. Изучение того, как использовать SDK, должно быть в вашем списке приоритетов.

Перво-наперво: AWS — это отраслевой стандарт и самый мощный выбор, когда речь идет об облачных решениях на сегодняшний день. Согласно отчету Cloud Security Alliance (CSA) (бесплатную копию отчета можно скачать здесь), AWS обрабатывает 41,5% рабочих нагрузок на общедоступных облачных платформах.

Python — популярный и простой в изучении язык. Эта статья покажет вам, почему использование Python с Boto3 — это простой способ автоматизировать задачи и построить инфраструктуру.

Прежде чем начать, в этой статье делается несколько предположений, поэтому перед продолжением проверьте следующее:

  1. У вас есть учетная запись AWS и установлен интерфейс командной строки AWS.
  2. У вас установлен Python и вы имеете базовые знания Python.
  3. Ваши учетные данные AWS правильно настроены на ~/.aws/credentials
  4. Вы понимаете такие концепции AWS, как EC2, IAM, пары ключей, образы AMI и т. д.

Давайте идти

Для начала установите Boto3 с помощью pip:

pip install boto3

Теперь, когда у вас есть Boto3, вы можете создать файл и импортировать его, чтобы он мог использоваться вашим скриптом:

#!/usr/bin/env python3
import boto3

Теперь давайте сделаем что-нибудь интересное с этим файлом. В большинстве туториалов нас учат писать hello world, давайте вместо этого поиграем с инстансами EC2. Прежде чем мы напишем какой-либо код, важно принять следующие решения:

  1. Выберите регион, который мы будем использовать — я собираюсь использовать us-east-1. Чтобы просмотреть список доступных регионов для вашей учетной записи, введите в консоли следующее:
aws ec2 describe-regions -all-regions

2. Выберите размер инстанса — я буду использовать бесплатный уровень t2.micro. Чтобы просмотреть список доступных типов инстансов, посетите Документацию AWS. Убедитесь, что вы имеете право на бесплатный уровень, прежде чем начать, если вы не хотите нести расходы.

3. Выберите образ — я выбрал Amazon Linux 2 AMI. Список общедоступных изображений можно найти на AMI Marketplace.

Имея эту информацию на руках, добавьте в файл следующее:

#!/usr/bin/env python3
import boto3
ec2 = boto3.resource('ec2',region_name="us-east-1")
keyfile = open('awskey.pem','w')
keypair = ec2.create_key_pair(KeyName='awskey')
KeyPairOut = str(keypair.key_material)
keyfile.write(KeyPairOut)
instance = ec2.create_instances(
    ImageId = 'ami-00dc79254d0461090',
    MinCount = 1,
    MaxCount = 1,
    InstanceType = 't2.micro',
    KeyName = 'awskey'
)
print (instance[0].id)

Сохраните файл как createinstance.py

Перейдите в командную строку и запустите файл из того же каталога, что и файл, используя команду python:

python createinstance.py

После запуска скрипт выведет на консоль идентификатор экземпляра. Если вы войдете в свою консоль AWS, вы увидите экземпляр с этим идентификатором, и спецификации из вашего файла были созданы.

Итак, как работает этот файл? Разберем каждую часть:

ec2 = boto3.resource('ec2',region_name="us-east-1")

Здесь мы создаем ресурс, который подключается через Boto3 к выбранному нами региону AWS — в данном случае us-east-1 (Северная Вирджиния).

Чтобы иметь возможность подключаться к экземплярам, ​​нам нужны пары ключей. Итак, следующая часть кода создает пару ключей и сохраняет ее на нашем локальном компьютере. Эта строка создает файл с именем awskey.pem и сохраняет его в переменной keyfile:

keyfile = open('awskey.pem','w')

Затем мы используем функцию Boto3 create_key_pair для создания ключа с именем «awskey» и сохранения его в переменной keypair:

keypair = ec2.create_key_pair(KeyName='awskey')

Проблема в том, что нам нужно хранить этот ключ локально, иначе мы не сможем подключиться к экземпляру. Для этого мы захватываем ключ и сохраняем его в файле.

KeyPairOut = str(keypair.key_material) # captures the keypair
keyfile.write(KeyPairOut) # stores it into the file defined as keyfile

Если мы прекратим выполнение сценария на этом этапе, в консоли AWS будет указана пара ключей с именем «awskey» и соответствующий файл с именем awskey.pem на нашем локальном компьютере.

Следующая строка создает сам экземпляр. Функция create_instances Boto3 поддерживает множество аргументов, которые выходят за рамки этого руководства, поэтому мы сосредоточимся на основах. Сначала мы вызываем функцию:

instance = ec2.create_instances(

Затем мы определяем AMI, который мы выбрали заранее:

ImageId = 'ami-00dc79254d0461090',

Затем мы устанавливаем минимальное и максимальное количество экземпляров, которые мы хотим:

MinCount = 1,
MaxCount = 1,

Определите тип экземпляра:

InstanceType = 't2.micro',

И скажите ему использовать ключ, который мы только что создали:

KeyName = 'awskey'
) # Don't forget to close the parenthesis! 

Это сработает. Чтобы убедиться, что мы знаем идентификатор созданного экземпляра, мы заканчиваем печатью идентификатора только что созданного экземпляра EC2:

print (instance[0].id)

Чтобы проверить соединение с вашим вновь созданным экземпляром, сделайте то же, что и с любым другим экземпляром:

  1. Установите разрешения вашего ключа на 400.
  2. Перейдите в консоль AWS и получите общедоступный IP-адрес вашего экземпляра.
  3. SSH к вашему экземпляру с помощью ключа.

Для этого потребовалось всего несколько строк кода. Теперь представьте, что вы инженер и вам нужно запустить 20 инстансов с определенным AMI. Все, что вам нужно сделать, это изменить этот фрагмент кода:

MinCount = 20,
MaxCount = 20,

Теперь скрипт создаст 20 экземпляров.

Инструменты инфраструктуры как кода, такие как Terraform и CloudFormation, являются отраслевыми стандартами и используют декларативный синтаксис для предоставления инфраструктуры. Boto3, с другой стороны, может быть очень полезен в сценариях для проверки и инвентаризации сред AWS и необходим для создания динамических инвентаризаций за кулисами в Ansible.

Полные возможности Boto3 дают инженерам множество возможностей для автоматизации работы. Продолжайте практиковаться, за день всему не научитесь, но Boto3 точно будет полезен долгие годы. Хорошо, что с ним легко начать и интересно учиться, поэтому я надеюсь, что эта статья поможет вам начать свое путешествие.