Экспорт из Aurora Serverless в S3

В настоящее время я пытаюсь экспортировать файл.csv из AWS Aurora Serverless с MySQL Engine в AWS S3. Это отлично работает при использовании Aurora с поддержкой экземпляра, но не с бессерверным. Я настроил политики IAM для S3, как написано в документации, и сделал пользователя IAM с полным доступом к S3 и RDS. Группа параметров, которую использует Serverless, имеет ARN пользователя IAM в полях LOAD DATA FROM S3 и SELECT INTO OUTFILE S3.

Код, который я использую для экспорта в S3:

SELECT * FROM TABLE WHERE ID = '6838' INTO OUTFILE S3 's3://bucketname/file.csv';

Я прочитал документацию здесь:https://docs.aws.amazon.com/de_de/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Integrating.SaveIntoS3.html

Сообщение об ошибке: Access denied; you need (at least one of) the SELECT INTO S3 privilege(s) for this operation

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

РЕДАКТИРОВАТЬ:похоже, что AWS Aurora Serverless не поддерживает ни ИМПОРТ, ни ЭКСПОРТ из и в S3. (https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/aurora-serverless.html)

3 ответа

На самом деле вы можете загружать свои данные только в кластер Aurora, а не в бессерверный, у меня была такая же проблема, возможно, вы можете рассмотреть возможность интеграции своих данных в базу данных Amazon RDS MySQL, а затем позволить lambda выполнять инъекцию данных из S3 в RDS MySQL.

Вы выполнили этот шаг (при условии, что вы выполняете этот оператор из учетной записи, отличной от основной):

Пользователь базы данных, который выполняет оператор SELECT INTO OUTFILE S3, должен иметь привилегию SELECT INTO S3 для выполнения этого оператора. Имя главного пользователя для кластера БД по умолчанию имеет привилегию SELECT INTO S3. Вы можете предоставить привилегию другому пользователю, используя следующую инструкцию.

GRANT SELECT INTO S3 ON *.* TO 'user'@'domain-or-ip-address'

Если вы согласны с временным размещением данных в локальном экземпляре или экземпляре EC2, вы можете сделать это в два этапа:

  1. Вытащите данные из базы данных: mysql --defaults-file=/path/to/.my.cnf -e "SELECT * FROM TABLE WHERE ID = '6838'" | tr '\t' ',' > /local/path/to/file.csv Если вас устраивает вывод, разделенный табуляцией, вам не нужно включать tr в стадии разработки.

  2. Скопируйте файл на S3: aws s3 cp /local/path/to/file.csv s3://bucketname/file.csv

Ссылки

Копирование в s3

Использование файлов опций MySQL

Другие вопросы по тегам