gsutil и Amazon S3
Jul 5, 2017Быть может кто-то не знает, но утилита gsutil
умеет работать как с GCS, так и с S3. Например, посмотреть список файлов в бакете можно так:
gsutil ls s3://bucket-name
Есть несколько способов указать, какие именно данные авторизации использовать при доступе к S3. По умолчанию, gsutil
читает access_key
и secret_key
из файла credentials
в директории ~/.aws
. Кроме того, можно использовать ~/.boto
для указания файла, откуда читать ключи.
У меня была ситуация, при которой потребовалось скопировать данные из бакета S3, который принадлежит другой организации и для доступа к нему были выданы необходимые ключи. При этом на сервере использовались ключи для доступа к нашим бакетам. Утилита s3cmd
, например, позволяет указать файл, откуда следует читать ключи, с помощью ключа -c FILE
или —config=FILE
.
Для gsutil
также можно указать файл, но это происходит слегка непрозрачно. В первую очередь следует учесть, что ~/.aws/credentials
и профиль [default]
очень часто имеет приоритет.
Итак, как же сделать так, что оно работало?
Если еще нет настроенного аккаунта AWS
Использовать ~/.boto
или создать отдельный файл boto
, например, ~/.boto-<profile-name>
. Указать там aws_access_key_id
и aws_secret_access_key
в разделе [Credentials]
. И можно запускать gsutil
:
BOTO_CONFIG=~/.boto-<profile-name> gsutil ls s3://bucket
Это сработает, если нет файла ~/.aws/credentials
и профиля [default]
в нем.
Или создать ~/.aws/credentials
и создать там профиль [default]
:
[default]
aws_access_key_id = <access-key>
aws_secret_access_key = <secret-key>
В другом случае
Если же уже существует настроенный аккаунт AWS и не хочется переписывать дефолтные настройки, то можно добавить в существующий файл ~/.boto
отдельный профиль в разделе [Credentials]
. Например:
[Credentials]
…
[profile profile-name]
aws_access_key_id = <access-key>
aws_secret_access_key = <secret-key>
…
[Boto]
…
И запустить gsutil
уже с указанием другой переменной окружения:
AWS_PROFILE=<profile-name> gsutil ls s3://bucket
Второй вариант работает при условии, что boto >= 2.24.0
.