14

在最新的 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 运行它吗?我在文件中的任何地方都没有看到

4

10 回答 10

36

我遇到过同样的问题。我尝试将 AmazonS3FullAccess 添加到我的 RDS 实例正在使用的 IAM 角色中……不高兴。

闲逛之后,我进入 RDS 控制台,进入集群。选择我的 Aurora 集群并单击管理 IAM 角色。它给了我一个下拉菜单,我选择了 IAM 角色(与各个实例使用的角色相同)。

一旦我这样做了,一切都很好,数据加载又快又好。

因此,(对我们而言)有 5 个步骤/组件:

1) 允许用户上传对象的 S3 存储桶和存储桶策略

{
    "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 值设置为上述 #3 中角色的 ARN。

5) 通过转到集群、选择您的集群、选择管理 IAM 角色并为您的数据库集群设置 IAM 角色来配置 Aurora 集群

至少对我来说,这些步骤就像一个魅力。

希望有帮助!

于 2017-02-17T16:35:44.747 回答
5

如果唯一的错误是Internal error: Unable to initialize S3Stream并且它立即抛出此错误,则可能的罪魁祸首是:

该路径包括以下值:

  • region(可选)– 包含要从中加载的 Amazon S3 存储桶的 AWS 区域。该值是可选的。如果您未指定区域值,则 Aurora 从与您的数据库集群相同的区域中的 Amazon S3 加载您的文件。
  • bucket-name – 包含要加载的数据的 Amazon S3 存储桶的名称。支持标识虚拟文件夹路径的对象前缀。
  • file-name-or-prefix – Amazon S3 文本文件或 XML 文件的名称,或标识要加载的一个或多个文本或 XML 文件的前缀。您还可以指定一个清单文件来标识要加载的一个或多个文本文件。
于 2019-06-05T23:00:39.647 回答
3

2019 年 3 月:

RDS 控制台不再具有更改角色的选项。对我有用的是通过 CLI 添加角色,然后重新启动编写器实例。

aws rds add-role-to-db-cluster --db-cluster-identifier my-cluster --role-arn arn:aws:iam::123456789012:role/AllowAuroraS3Role
于 2019-03-11T09:52:11.880 回答
3

在上述所有建议之后,作为最后一步,我必须向 S3 添加一个 VPC 端点。在那之后,一切都开始工作了。

于 2017-03-24T16:06:11.397 回答
1

对我来说,我错过了将创建的 RDS 角色添加到我的 S3 存储桶的步骤。一旦我添加它,它立即起作用。

于 2018-06-26T23:05:24.860 回答
0

我经历过多次可能发生此错误的情况。

  1. 运行 'LOAD' sql 一段时间(大约 220 秒)后抛出错误,这是一个可疑的超时情况。最后我发现我的 RDS 的子网组只有一个出站,不包括到 S3 的一个。通过添加出站规则可以解决这个问题。

  2. 立即抛出错误(0.2s)。我之前是成功从 S3 加载数据的,但是突然随着 S3 url 的改变,这个错误又出现了。我使用了错误的 S3 URL。因为我想使用 S3 前缀而不是文件。检查“加载”语法以使您的 sql 正确。

于 2018-11-15T04:03:29.390 回答
0

您需要将 AmazonS3ReadOnlyAccess 或 AmazonS3FullAccess 策略附加到您在 IAM 中设置的角色。此步骤未包含在设置指南中。

转到 AWS 控制台中的 IAM -> 角色,选择您正在使用的角色,单击“附加策略”,然后向下滚动到 S3 策略并选择一个。

于 2016-10-28T18:16:03.253 回答
0

我联系了 Amazon Aurora 团队,他们确认某些服务器存在此问题的边缘案例。他们正在推出一个补丁来很快解决这个问题,但同时手动将补丁应用到我的集群。

于 2016-11-02T14:41:58.903 回答
0

我在尝试LOAD DATA FROM S3使用 MySQL Workbench 时遇到了同样的错误。我已经能够成功CREATE DATABASECREATE TABLE所以我知道我的连接正在工作。

我严格按照 AWS 文档说明将数据从 Amazon S3 存储桶中的文本文件加载到 Amazon Aurora MySQL 数据库集群中

就我而言,我没有正确遵循说明步骤 3 和 4(请参阅上面链接中“授予 Aurora 对 Amazon S3 的访问权限”子标题下的说明列表。

什么为我解决了它:

  1. 在 Amazon RDS 中,我在左侧的导航窗格中选择了“参数组”。
  2. 然后我单击了我新创建的自定义数据库集群参数组(上面链接中的第 3 步)。
  3. 在我的自定义组中,我搜索 aurora_load_from_s3_role然后在“值”输入框中,将刚刚在说明的步骤 2 中创建的角色的 ARN 复制/粘贴到此框中,然后单击保存(步骤 4 来自上面的链接)。

我回到 MySQL Workbench 并重新运行我的LOAD DATA FROM S3命令,它成功了!

于 2021-01-01T21:43:53.523 回答
0

按照步骤 2 到 5 并为 S3 访问创建 VPC 端点,它对我有用。

于 2020-04-01T08:32:57.160 回答