Необходимо загрузить содержимое каталога в корзину S3 - PullRequest
1 голос
/ 04 марта 2020

По моему сценарию я в настоящее время использую AWS CLI для загрузки содержимого моего каталога в корзину S3, используя следующую команду AWS CLI:

aws s3 sync results/foo s3://bucket/

Теперь мне нужно заменить это и иметь python код для этого. Я изучаю документацию boto3 , чтобы найти правильный способ сделать это. Я вижу некоторые варианты, такие как: https://boto3.amazonaws.com/v1/documentation/api/1.9.42/reference/services/s3.html#S3 .Client.upload_file https://boto3.amazonaws.com/v1/documentation/api/1.9.42/reference/services/s3.html#S3 .ServiceResource.Object

Может кто-нибудь подсказать, какой подход правильный.

Я знаю, что мне нужно будет получить учетные данные, позвонив по номеру boto3.client('sts').assume_role(role, session) и использовать их впоследствии.

1 Ответ

1 голос
/ 04 марта 2020

CLI AWS фактически написан на Python и использует те же вызовы API, которые вы можете использовать.

Важно понимать, что Amazon S3 имеет только вызов API для загрузки / загружать по одному объекту за раз .

Следовательно, для вашего кода Python потребуется:

  • Получить список файлов для копирования
  • L oop через каждый файл и загрузите его в Amazon S3

Конечно, если вам нужна функциональность sync (которая копирует только новые / измененные файлы), тогда вашей программе потребуется больше интеллекта для выяснить, какие файлы копировать.

В Boto3 есть два основных типа методов:

  • client методы, которые сопоставляют 1: 1 с вызовами API, и
  • resource методы, которые больше Pythoni c, но могут выполнять несколько вызовов API в фоновом режиме

Какой тип вы используете по своему выбору. Лично я нахожу методы client более простыми для загрузки / выгрузки объектов, а методы resource хороши, когда требуется l oop через ресурсы (например, «для каждого экземпляра EC2, для каждого тома EBS проверьте каждый тег» ).

...