Файл может быть загружен в S3 локально, но не может находиться внутри контейнера (невозможно найти учетные данные) - PullRequest
0 голосов
/ 16 апреля 2020

У меня есть скрипт Python для загрузки файла на S3, код такой же в этот вопрос .

У меня есть скрипт bash, который передает AWS учетные данные. Файл, который я хотел загрузить, сгенерирован из модели, которая работает на Fargate (в контейнере ina), поэтому я попытался запустить этот скрипт Python в контейнере для загрузки на S3, я создал образ, но когда я запускаю docker run containername это даст мне ошибку:

INFO:root:Uploading to S3 from test.csv to bucket_name test.csv

  File "/usr/local/lib/python3.6/dist-packages/botocore/auth.py", line 357, in add_auth
    raise NoCredentialsError
botocore.exceptions.NoCredentialsError: Unable to locate credentials

Может кто-то дал мне подсказку? Как я могу это исправить? Заранее спасибо.

1 Ответ

1 голос
/ 16 апреля 2020

Чтобы передать docker учетные данные, вам нужно либо смонтировать ~/.aws/credentials в своем контейнере

docker -v ~/.aws/credentials:/root/.aws/credentials:ro 

Или передать свои учетные данные как env vars

docker run -e -e AWS_ACCESS_KEY_ID=$(aws configure get aws_access_key_id --profile profilename) -e AWS_SECRET_ACCESS_KEY=$(aws configure get aws_secret_access_key --profile profilename)

На стороне Fargate вы необходимо создать роль IAM и добавить политику, которая имеет доступ к этому сегменту.

Это необходимо назначить для Task Role. Это отличается от Task Execution Role, который используется для вытягивания изображения docker. Task Role используется во время выполнения, и здесь вам нужно добавить политику для доступа к S3.

...