it-swarm.com.ru

Amazon Aurora 1.8 - загрузка данных из S3 - невозможно создать клиент S3

В последнем обновлении Aurora (1.8) была введена команда LOAD DATA FROM S3. Кто-нибудь получил это на работу? После обновления до 1.8, я следовал руководству по установке Здесь, чтобы создать роль, чтобы разрешить доступ из RDS в S3. 

После перезагрузки сервера и попытки запустить команду 

LOAD DATA FROM S3 PREFIX 's3://<bucket_name>/prefix' INTO TABLE table_name

в SQL Workbench/J я получаю ошибки:

Warnings:
S3 API returned error: Missing Credentials: Cannot instantiate S3 Client
S3 API returned error: Failed to instantiate S3 Client
Internal error: Unable to initialize S3Stream

Есть ли какие-либо дополнительные шаги, необходимые? Могу ли я запустить это только из SDK? Я не вижу упоминания в документах

7
aarbor

Я была такая же проблема. Я попытался добавить AmazonS3FullAccess к роли IAM, которую использовали мои экземпляры RDS ... без радости.

Покопавшись, я вошел в консоль RDS, в кластеры. Выбрал мой кластер Аврора и нажал кнопку Управление ролями IAM. Это дало мне выпадающий список, я выбрал роль IAM (ту же, которую использовали отдельные экземпляры).

Как только я это сделал, все было хорошо, и загрузка данных была хорошей и быстрой.

Итак, есть (для нас) 5 шагов/компонентов:

1) Политика S3 Bucket и Bucket, позволяющая пользователю загружать объект

{
    "Version": "2012-10-17",
    "Id": "Policy1453918146601",
    "Statement": [
        {
            "Sid": "Stmt1453917898368",
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::<account id>:<user/group/role>/<IAM User/Group/Role>"
            },
            "Action": [
                "s3:DeleteObject",
                "s3:GetObject",
                "s3:PutObject"
            ],
            "Resource": "arn:aws:s3:::<bucket name>/*"
        }
    ]
}

«Принципал» - это любой пользователь, группа или роль IAM, которые будут загружать файлы данных в корзину, чтобы экземпляр RDS мог импортировать данные.

2) Политика IAM:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "Stmt1486490368000",
            "Effect": "Allow",
            "Action": [
                "s3:GetObject",
                "s3:GetObjectVersion",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::<bucket name>/*"
            ]
        }
    ]
}

Это довольно просто с Генератором Политики.

3) Создайте роль IAM:

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

4) Сконфигурируйте группу параметров, которую ваш кластер/экземпляры будут использовать для установки значения aws_default_s3_role в ARN роли из # 3 выше.

5) Настройте кластер Aurora, перейдя в «Кластеры», выбрав кластер, выбрав «Управление ролями IAM» и установив роль IAM для своего кластера БД.

По крайней мере, для меня эти шаги работали как шарм.

Надеюсь, это поможет!

24
Dan Carrington

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

3
utdrmac

Я неоднократно сталкивался с такой ошибкой.

  1. Ошибка возникла после запуска sql 'LOAD' некоторое время (около 220 с), что является подозрительным случаем тайм-аута. Наконец, я обнаружил, что в моей группе подсетей RDS есть только один исходящий, исключая S3. Путем добавления исходящего правила можно решить эту проблему.

  2. Ошибка была сброшена немедленно (0,2 с). Ранее я успешно загружал данные из S3, но внезапно с изменением URL-адреса S3 эта ошибка возникла снова. Я использовал неправильный S3 URL. Потому что я хотел использовать префикс S3 вместо файла. проверьте синтаксис «Загрузить», чтобы сделать ваш SQL правильно.

0
Willie Z

Я связался с командой Amazon Aurora, и они подтвердили, что на некоторых серверах возникла эта проблема. Они выпускают патч, чтобы исправить проблему в ближайшее время, но в то же время вручную применили патч к моему кластеру.

0
aarbor

Вам необходимо присоединить политику AmazonS3ReadOnlyAccess или AmazonS3FullAccess к роли, которую вы настроили в IAM. Этот шаг не был включен в руководство по установке. 

Перейдите в IAM -> Роли в консоли AWS, выберите используемую роль, нажмите «присоединить политику», затем прокрутите путь до политик S3 и выберите одну.

0
Ray

Для меня я пропустил шаг, чтобы добавить созданную роль RDS в мою корзину S3. Как только я добавляю это, это работает немедленно.

0
Rajesh Goel