Загрузка файлов в S3 с помощью AWS CLI: Подробное руководство

При работе с Amazon S3 (Simple Storage Service) вы, вероятно, используете веб-консоль S3 для загрузки, копирования или выгрузки файлов в бакеты S3. Использование консоли вполне допустимо, ведь именно для этого она и предназначена.

Особенно для администраторов, которые привыкли к большему количеству мышиных кликов, чем клавиатурных команд, веб-консоль, вероятно, является самым простым способом. Однако рано или поздно администраторы столкнутся с необходимостью выполнения массовых операций с файлами в Amazon S3, например, неуправляемой загрузки файлов. Графический интерфейс не является лучшим инструментом для этого.

Для автоматизации таких требований с Amazon Web Services, включая Amazon S3, инструмент AWS CLI предоставляет администраторам возможность управления бакетами и объектами Amazon S3 с помощью командной строки.

В этой статье вы узнаете, как использовать инструмент командной строки AWS CLI для загрузки, копирования, загрузки и синхронизации файлов с Amazon S3. Вы также узнаете основы предоставления доступа к вашему бакету S3 и настройки профиля доступа для работы с инструментом AWS CLI.

Предварительные требования

Поскольку это статья-инструкция, в последующих разделах будут приведены примеры и демонстрации. Чтобы успешно следовать инструкции, вам необходимо выполнить несколько требований.

  • Учетная запись AWS. Если у вас нет активной подписки AWS, вы можете зарегистрироваться для получения AWS Free Tier.
  • Ведро AWS S3. Вы можете использовать существующее ведро, если хотите. Однако рекомендуется создать пустое ведро вместо этого. Пожалуйста, обратитесь к Создание ведра.
  • A Windows 10 computer with at least Windows PowerShell 5.1. In this article, PowerShell 7.0.2 will be used.
  • На вашем компьютере должен быть установлен инструмент AWS CLI версии 2.
  • Локальные папки и файлы, которые вы будете загружать или синхронизировать с Amazon S3

Подготовка доступа к AWS S3

Предположим, что у вас уже есть все необходимые требования. Вы думаете, что теперь уже можете переходить к использованию AWS CLI с вашим ведром S3. Ведь было бы здорово, если бы все было так просто, не так ли?

Для тех, кто только начинает работать с Amazon S3 или AWS в целом, эта секция поможет вам настроить доступ к S3 и настроить профиль AWS CLI.

Полная документация по созданию IAM-пользователя в AWS может быть найдена по ссылке ниже. Создание IAM-пользователя в вашей учетной записи AWS

Создание IAM-пользователя с разрешением доступа к S3

При доступе к AWS с помощью CLI вам потребуется создать одного или нескольких IAM-пользователей с достаточным доступом к ресурсам, с которыми вы собираетесь работать. В этой секции вы создадите IAM-пользователя с доступом к Amazon S3.

Для создания IAM-пользователя с доступом к Amazon S3 сначала вам необходимо войти в консоль AWS IAM. Под группой Управление доступом нажмите на Пользователи. Затем нажмите Добавить пользователя.

IAM Users Menu

Введите имя IAM-пользователя, которого вы создаете, в поле Имя пользователя*, например, s3Admin. В разделе Тип доступа* отметьте флажок Программный доступ. Затем нажмите кнопку Далее: Разрешения.

Set IAM user details

Затем нажмите на Присоединить существующие политики непосредственно. Затем найдите политику с именем AmazonS3FullAccess и поставьте галочку. По завершении нажмите Далее: Теги.

Assign IAM user permissions

Создание тегов является необязательным на странице Добавить теги, и вы можете пропустить этот шаг и нажать кнопку Далее: Ознакомление.

IAM user tags

На странице Ознакомление вы увидите сводку о созданной новой учетной записи. Нажмите Создать пользователя.

IAM user summary

Наконец, после создания пользователя вам необходимо скопировать значения Идентификатор ключа доступа и Секретный ключ доступа и сохранить их для дальнейшего использования. Обратите внимание, что это единственный момент, когда вы можете увидеть эти значения.

IAM user key credentials

Настройка профиля AWS CLI на вашем компьютере

Теперь, когда вы создали IAM-пользователя с соответствующим доступом к Amazon S3, следующим шагом будет настройка профиля AWS CLI на вашем компьютере.

Этот раздел предполагает, что вы уже установили инструмент AWS CLI версии 2, как требуется. Для создания профиля вам понадобится следующая информация:

  • Идентификатор ключа доступа IAM-пользователя.
  • Секретный ключ доступа, связанный с IAM-пользователем.
  • Имя региона по умолчанию, соответствующее местоположению вашего бакета AWS S3. Вы можете ознакомиться со списком точек доступа, используя эту ссылку. В данной статье бакет AWS S3 находится в регионе Азиатско-Тихоокеанский регион (Сидней), и соответствующей точкой доступа является ap-southeast-2.
  • Формат вывода по умолчанию. Используйте JSON для этого.

Для создания профиля откройте PowerShell и введите следующую команду, следуя инструкциям.

aws configure

Введите идентификатор ключа доступа, секретный ключ доступа, имя региона по умолчанию и имя вывода по умолчанию. См. демонстрацию ниже.

Configure an AWS CLI profile

Проверка доступа к AWS CLI

После настройки профиля AWS CLI вы можете подтвердить, что профиль работает, запустив следующую команду в PowerShell.

aws s3 ls

Выполнение указанной выше команды должно отобразить список бакетов Amazon S3 в вашей учетной записи. Ниже приведена демонстрация этой команды. Результат показывает, что список доступных бакетов S3 указывает на успешную конфигурацию профиля.

List S3 buckets

Чтобы узнать о командах AWS CLI, специфичных для Amazon S3, вы можете посетить страницу Справочник команд AWS CLI S3.

Управление файлами в S3

С помощью AWS CLI можно выполнять типичные операции по управлению файлами, такие как загрузка файлов в S3, загрузка файлов из S3, удаление объектов в S3 и копирование объектов S3 в другое место в S3. Всё это сводится к знанию правильной команды, синтаксиса, параметров и опций.

В следующих разделах используется следующая среда.

  • Два бакета S3, а именно atasync1и atasync2. Скриншот ниже показывает существующие бакеты S3 в консоли Amazon S3.
List of available S3 bucket names in the Amazon S3 console
  • Локальный каталог и файлы, расположенные в c:\sync.
Local Directory

Загрузка отдельных файлов в S3

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

Чтобы загрузить файл в S3, вам нужно указать два аргумента (исходное и целевое местоположение) в команде aws s3 cp.

Например, чтобы загрузить файл c:\sync\logs\log1.xml в корень бакета atasync1, вы можете использовать следующую команду.

aws s3 cp c:\sync\logs\log1.xml s3://atasync1/

Примечание: имена бакетов S3 всегда имеют префикс S3:// при использовании AWS CLI

Запустите вышеуказанную команду в PowerShell, но сначала измените источник и назначение в соответствии с вашим окружением. Выходные данные должны выглядеть примерно так:

Upload file to S3

Вышеуказанная демонстрация показывает, что файл с именем c:\sync\logs\log1.xml был успешно загружен на S3-назначение s3://atasync1/ без ошибок.

Используйте следующую команду для перечисления объектов в корне ведра S3.

aws s3 ls s3://atasync1/

Запуск вышеуказанной команды в PowerShell приведет к аналогичному результату, как показано в демонстрации ниже. Как видно из вывода ниже, файл log1.xml присутствует в корне места нахождения S3.

List the uploaded file in S3

Загрузка нескольких файлов и папок в S3 рекурсивно

Предыдущий раздел показал вам, как скопировать один файл в место нахождения S3. Что, если вам нужно загрузить несколько файлов из папки и подпапок? Наверняка вы не захотите запускать одну и ту же команду несколько раз для разных имен файлов, верно?

Команда aws s3 cp имеет опцию для обработки файлов и папок рекурсивно, и это опция --recursive.

В качестве примера, директория c:\sync содержит 166 объектов (файлов и подпапок).

The folder containing multiple files and sub-folders

Используя опцию --recursive, все содержимое папки c:\sync будет загружено на S3 с сохранением структуры папок. Чтобы протестировать, используйте приведенный ниже пример кода, но убедитесь, что измените источник и назначение в соответствии с вашим окружением.

Вы заметите из приведенного ниже кода, что источник находится в c:\sync, а назначение – s3://atasync1/sync. Ключ /sync, следующий за именем ведра S3, указывает AWS CLI загрузить файлы из папки /sync в S3. Если папка /sync не существует в S3, она будет автоматически создана.

aws s3 cp c:\sync s3://atasync1/sync --recursive

Приведенный выше код приведет к следующему выводу, как показано в демонстрации ниже.

Upload multiple files and folders to S3

Загрузка нескольких файлов и папок в S3 выборочно

В некоторых случаях загрузка ВСЕХ типов файлов не является лучшим вариантом. Например, когда вам нужно загрузить только файлы с определенными расширениями (например, *.ps1). Еще два варианта, доступных для команды cp, это --include и --exclude.

При использовании команды из предыдущего раздела будут включены все файлы при рекурсивной загрузке, но команда ниже будет включать только файлы, соответствующие расширению файла *.ps1 и исключать все остальные файлы из загрузки.

aws s3 cp c:\sync s3://atasync1/sync --recursive --exclude * --include *.ps1

Ниже показано, как работает приведенный выше код при выполнении.

Upload files that matched a specific file extension

Другой пример – если вы хотите включить несколько разных расширений файлов, вам нужно будет указать опцию --include несколько раз.

Приведенная ниже команда будет включать только файлы *.csv и *.png в команду копирования.

aws s3 cp c:\sync s3://atasync1/sync --recursive --exclude * --include *.csv --include *.png

Если вы запустите приведенный выше код в PowerShell, вы получите аналогичный результат, как показано ниже.

Upload files with multiple include options

Загрузка объектов из S3

Исходя из приведенных в этом разделе примеров, вы также можете выполнять операции копирования в обратном порядке. Это означает, что вы можете загружать объекты из местоположения ведра S3 на локальную машину.

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

aws s3 cp s3://atasync1/sync c:\sync

Обратите внимание, что те же параметры, используемые при загрузке файлов в S3, также применимы при загрузке объектов из S3 на локальную машину. Например, загрузка всех объектов с использованием следующей команды с параметром --recursive.

aws s3 cp s3://atasync1/sync c:\sync --recursive

Копирование объектов между местоположениями S3

Помимо загрузки и загрузки файлов и папок с использованием AWS CLI, вы также можете копировать или перемещать файлы между двумя расположениями ведра S3.

Обратите внимание, что команда ниже использует одно местоположение S3 в качестве источника и другое местоположение S3 в качестве места назначения.

aws s3 cp s3://atasync1/Log1.xml s3://atasync2/

В приведенном ниже примере демонстрируется копирование исходного файла в другое местоположение S3 с использованием указанной команды.

Copy objects from one S3 location to another S3 location

Синхронизация файлов и папок с S3

Вы уже узнали, как загружать, скачивать и копировать файлы в S3 с помощью команд AWS CLI. В этом разделе вы узнаете о еще одной команде для работы с файлами, доступной в AWS CLI для S3, это команда sync. Команда sync обрабатывает только обновленные, новые и удаленные файлы.

Есть случаи, когда вам нужно поддерживать актуальность и синхронизацию содержимого хранилища S3 с локальным каталогом на сервере. Например, вам может потребоваться поддерживать синхронизацию журналов транзакций на сервере с хранилищем S3 с определенной периодичностью.

С помощью следующей команды, файлы журналов с расширением *.XML, расположенные в папке c:\sync на локальном сервере, будут синхронизированы с расположением S3 s3://atasync1.

aws s3 sync C:\sync\ s3://atasync1/ --exclude * --include *.xml

Приведенная ниже демонстрация показывает, что после выполнения вышеуказанной команды в PowerShell все файлы с расширением *.XML были загружены в S3-назначение s3://atasync1/.

Synchronizing local files to S3

Синхронизация новых и обновленных файлов с S3

В следующем примере предполагается, что содержимое файла журнала Log1.xml было изменено. Команда sync должна обнаружить это изменение и загрузить изменения, внесенные в локальный файл, в S3, как показано на демонстрации ниже.

Команда для использования остается такой же, как и в предыдущем примере.

Synchronizing changes to S3

Как видно из вывода выше, так как локально был изменен только файл Log1.xml, он является единственным файлом, синхронизированным с S3.

Синхронизация удалений с S3

По умолчанию команда sync не обрабатывает удаления. Любой файл, удаленный из исходного расположения, не удаляется в пункте назначения. Но это можно изменить с помощью опции --delete.

В следующем примере файл с именем Log5.xml был удален из исходного расположения. Команда для синхронизации файлов будет дополнена опцией --delete, как показано в коде ниже.

aws s3 sync C:\sync\ s3://atasync1/ --exclude * --include *.xml --delete

При выполнении вышеуказанной команды в PowerShell также должен быть удален файл с именем Log5.xml в месте назначения S3. Пример результата показан ниже.

Synchronize file deletions to S3

Резюме

Amazon S3 – отличный ресурс для хранения файлов в облаке. С помощью инструмента AWS CLI расширяются возможности использования Amazon S3 и открывается возможность автоматизации процессов.

В этой статье вы узнали, как использовать инструмент AWS CLI для загрузки, загрузки и синхронизации файлов и папок между локальными местоположениями и корзинами S3. Вы также узнали, что содержимое корзин S3 также можно копировать или перемещать в другие местоположения S3.

Существует множество других сценариев использования инструмента AWS CLI для автоматизации управления файлами с помощью Amazon S3. Вы даже можете попробовать объединить его с сценариями PowerShell и создать свои собственные инструменты или модули, которые можно повторно использовать. Вам предоставляется возможность найти такие возможности и продемонстрировать свои навыки.

Дополнительное чтение

Source:
https://adamtheautomator.com/upload-file-to-s3/