Рубрики
Без рубрики

Объясняя BOTO3: Как использовать любой сервис AWS с Python

Глубокое погружение в BOTO3 и как AWS построил его. AWS определяет BOTO3 как комплект разработки программного обеспечения Python … Помечено Python, AWS, программирование, безвероведно.

Глубокое погружение в BOTO3 и как AWS построил это Отказ

AWS определяет BOTO3 в качестве комплекта разработки программного обеспечения Python для создания, настройки и управления службами AWS. В этой статье мы посмотрим, как работает BOTO3 и как он может помочь нам взаимодействовать с различными услугами AWS.

Фото Zere Media от Пэтэльс

Boto3 под капотом

Оба, AWS CLI и BOTO3 построены сверху ботокор — Низкоуровневая библиотека Python, которая заботится обо всем, что необходимо для отправки запроса API AWS и получить ответ на ответ.

Ботокор:

  • Ручки сессия учетные данные и конфигурация,
  • дает мелкозернистый Доступ Для всех операций ( ex. ListObjects, deleteobject ) в рамках определенного сервиса ( ex. S3 ),
  • заботится о сериализация Входные параметры, Подписание запросов и десериализация Данные ответа в словари Python,
  • Обеспечивает низкий уровень * Клиенты и высокий уровень Ресурс * Абстракции для взаимодействия с услугами AWS от Python.

Вы можете подумать о ботокоре как Пакет, который позволяет нам забыть о леспе. Джосон Характеристики и использовать Python (BOTO3) при взаимодействии с AWS API Отказ

Клиенты против ресурсов

В большинстве случаев мы должны использовать BOTO3, а не ботокор. Используя BOTO3, мы можем выбрать либо взаимодействовать с более низким уровнем Клиенты или более высокий объектно-ориентированный Ресурс абстракции. Изображение ниже показывает связь между этими абстракциями.

Уровень абстракции в Boto3, AWS-CLI и Botocore на основе S3 в качестве примера – – изображение по автору

Чтобы понять разницу между этими компонентами, давайте посмотрим на простой пример, который будет продемонстрировать разницу между S3 клиент и S3 ресурс . Мы хотим перечислить все объекты из каталога изображений, то есть все объекты с префикс изображений/.

Уже смотрим на этот простой пример, вы, вероятно, можете обнаружить разницу:

  • с клиент Вы напрямую взаимодействуете с Словарь ответа из десериализованного ответа API,
  • Напротив, с Ресурс , вы взаимодействуете со стандартом Классы Python и объекты, а не сырые словари реагирования.

Вы можете исследовать функциональные возможности Ресурс Объекты, использующие Помощь () и dir ( ) :

В целом, Ресурс Абстракция приводит к более читаемому коду ( взаимодействуя с объектами Python, а не на разборных словарях отклика ). Он также обрабатывает много низкоуровневых деталей, таких как пагинация. Ресурс Методы обычно возвращают генератор, чтобы вы могли не беспокоиться о большом количестве возвращенных объектов, не беспокоясь о пагинации или не хватает памяти.

Забавный факт: Оба клиента и код ресурса, динамически генерируются на основе моделей JSON, описывающие различные AWS API. Для клиентов AWS использует JSON SERVICE Описание и для ресурса A Описание ресурса в качестве основы для автоматического сгенерированного кода. Это облегчает более быструю обновления и предоставляет последовательный интерфейс по всему способу взаимодействия с AWS (* CLI, BOTO3, консоль управления ). Единственная реальная разница между описанием службы JSON и окончательным кодом BOTO3 состоит в том, что операции PASCALCASE преобразуются в более записи на Pythonic Snake_Case. *

Почему ресурс часто намного проще в использовании, чем клиент?

Представьте, что вам нужно перечислить тысячи объектов из ведра S3. Мы могли бы попробовать тот же подход, который мы использовали в исходном примере кода. Единственная проблема в том, что s3_client.list_objects_v2 () Метод позволит нам только перечислить A максимум тысяча объектов . Чтобы решить эту проблему, мы могли бы использовать Пагинация :

В то время как код Paginator достаточно прост, Ресурс абстракция Получает работу всего в двух строках кода:

Почему вы все равно будете использовать клиентов для некоторых ваших работ?

Несмотря на преимущества абстракций ресурсов, Клиенты Обеспечить больше функциональности, поскольку они отображают почти 1: 1 с AWS AWS Service. Таким образом, вы, скорее всего, получите оба, клиент и Ресурс в зависимости от конкретного случая использования.

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

Примечание: Существует способ получить доступ к клиентам методы непосредственно из объекта ресурса: s3_resource.meta.client.some_client_method () Отказ

Официанты

Официанты опросают статус определенного ресурса, пока не достигнет государства, в котором вы заинтересованы. Например, когда вы создаете экземпляр EC2 с помощью BOTO3, вы можете подождать, пока он не достигнет «запущенного» состояния, пока вы не сможете сделать что-то с помощью этого экземпляра EC2. Вот пример код, который показывает этот конкретный пример:

BOTO3: Использование официанта, чтобы опросить новый экземпляр EC2 для бегового состояния – – изображение автором

Обратите внимание, что IGID из приведенного выше примера отличается для каждой области AWS. Вы можете найти идентификатор AMI, следуя мастеру «Экзем о запуске» в консоли AWS:

Нахождение ID AMI – – изображение автором

Более распространенный пример официанта — ждать до тех пор, пока не приходит определенный объект S3 S3 в S3

Будем честны. Как часто вы запускаете новые экземпляры? Вероятно, не так часто. Итак, давайте построим более реалистичный пример официанта. Представьте, что ваш Процесс ETL ждет до определенного файла прибывает в ведро S3 Отказ В приведенном ниже примере мы ждем, пока кто-то из отдела маркетинга не загрузит файл с текущей стоимостью кампании. Хотя вы могли бы реализовать то же самое с AWS Lambda, используя триггер события S3, логика ниже не связана с лямбдами и может работать где угодно.

Использование официанта в ресурсе S3 – – изображение по автору

Или то же самое, используя более настраиваемый клиент Метод:

Использование официанта в клиенте S3 – – изображение по автору

Как вы можете видеть из фрагмента кода выше, используя абстракцию официанта клиента, мы можем указать:

  • Макстушки : Сколько раз мы должны проверить, прибыл ли конкретный объект — это предотвратит процессы зомби и потерпят неудачу, если объект не прибыл в то время, мы ожидаем, что это ожидают
  • Задержка : количество секунд, чтобы ждать между каждой попыткой.

Как только файл прибудет в S3, скрипт останавливает ожидание, что позволяет сделать что-то с помощью этих вновь прибывших данных.

Коллекции

Коллекции указывают на группу ресурсов, таких как группа объектов S3 в ведре или в группе очередей SQS. Они позволяют нам выполнять различные действия по группе ресурсов AWS в одном вызове API. Коллекции могут быть использованы для:

  • Получить Все S3 Объекты С конкретным префиксом объекта:
  • Получите все объекты S3 с конкретным типом содержимого, например, для Найти все файлы CSV :
  • Получите все версии объекта S3:
  • Укажите A Размер кусочка Объектов для итерации, например, когда размер страницы по умолчанию 1000 объектов слишком велик для вашего приложения:
  • Удалить все объекты В одном вызове API ( Будьте осторожны!):

Более распространенной операцией является удаление всех объектов с определенным префиксом:

Сессии: Как пройти учетные данные IAM к вашему коду BOTO3?

Есть много способов проходить ключи доступа при взаимодействии с BOTO3. Вот порядок мест, где Boto3 пытается найти учетные данные:

1 – явно проехал к boto3.client () , Boto3.Resource () или boto3.session () :

2 – Набор в качестве переменных среды:

3 – Установить как учетные данные в ~/.aws/учетные данные файл ( Этот файл генерируется автоматически с помощью AWS Configure в AWS CLI ):

4 – если вы прикрепите * IAM роли * С надлежащим разрешениями на ваши ресурсы AWS вам не нужно пропускать учетные данные вообще, а скорее назначить политику с требуемыми областями разрешений. Вот как это выглядит в AWS Lambda:

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

Если вы хотите использовать AWS LAMBDA с Python и BOTO3 Для конкретного случая использования посмотрите на ссылки ниже:

Полезная особенность AWS Lambda заключается в том, что BOTO3 уже предустановлена во всех средах выполнения Python. Таким образом, вы можете запустить любой из примеров из этой статьи непосредственно в вашей функции лямбда. Просто обязательно добавьте правильную политику, соответствующую услуге, которую вы хотите использовать в роли IAM Lambda:

Создание функции в aws lambda – изображение по автору

Тестирование BOTO3 от AWS Lambda — Изображение по автору

Если вы планируете запустить ряд lambda функций в производстве, вы можете исследовать Dashbird — Объявленность платформы, которая поможет вам Монитор и отладки ваших рабочих нагрузок Отказ Это особенно ценно для строительства Автоматические оповещения о неудаче , Группировка связанных ресурсов на основе Проект или домен, предоставляя Обзор всех безмерных ресурсов , интерактивно просматривать журналы и Визуализация рабочих узких мест Отказ

Инструмент полностью свободен и использовать только 2 минуты, чтобы настроить – И вы можете начать изучать ваши данные немедленно.

Обзор всех бессмертных ресурсов, предоставленных Dashbird – изображение вежливости Dashbird.io

Как изменить сеанс BOTO3 по умолчанию?

BOTO3 позволяет легко изменить сеанс по умолчанию. Например, если у вас есть несколько профилей ( такие как один для dev и один для AWS AWS AWS ), вы можете переключаться между теми, использующими одну строку кода:

Кроме того, вы можете прикрепить учетные данные непосредственно на сеанс по умолчанию, чтобы вам не нужно определить их отдельно для каждого нового клиента или ресурса.

Вывод

В этой статье мы смотрели, как использовать BOTO3 и как это построен внутренне Отказ Мы рассмотрели различия между Клиенты и Ресурсы и исследовал, как каждый из них обрабатывает пагинация . Мы исследовали, как официанты Может помочь нам опрос на определенный статус ресурсов AWS, прежде чем пройтись с другими частями нашего кода. Мы также посмотрели на то, как Коллекции Позвольте нам выполнять действия на множественных объектах AWS. Наконец, мы изучили различные способы предоставления учетных данных до BOTO3 и о том, как они обрабатываются с использованием ролей IAM и ключей доступа к пользователю.

Спасибо за чтение!

Ссылки и дальнейшее чтение:

AWS Re: ud upd 2014 | (Dev307) Введение в версию 3 AWS SDK для Python (Boto)

BOTO3 Документация

Как мне управлять учетными данными в Python с использованием менеджера Saw Secrets?

Мониторинг производительности для AWS Lambda

Оригинал: “https://dev.to/dashbird/explaining-boto3-how-to-use-any-aws-service-with-python-4jnc”