Amazon Aurora 1.8从S3加载数据 - 无法实例化S3客户端

时间:2016-10-25 18:17:15

标签: amazon-web-services amazon-s3 amazon-rds aws-rds amazon-rds-aurora

使用最新的Aurora更新(1.8),引入了命令LOAD DATA FROM S3。有没有人得到这个工作?升级到1.8后,我按照设置指南 Here 创建了角色,以允许从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运行吗?我没有在文件中的任何地方看到提到的内容

9 个答案:

答案 0 :(得分:26)

我有同样的问题。我尝试将AmazonS3FullAccess添加到我的RDS实例正在使用的IAM角色中......没有快乐。

在探索之后,我进入了RDS控制台,进入了Clusters。选中我的Aurora集群,然后单击Manage IAM Roles。它给了我一个下拉列表,我选择了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>/*"
        }
    ]
}

“Principal”将是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群集

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

希望有所帮助!

答案 1 :(得分:3)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

我联系了Amazon Aurora团队,他们确认有一些服务器遇到此问题的边缘情况。他们正在推出一个补丁来尽快修复问题,但同时手动将补丁应用到我的集群中。

答案 4 :(得分:0)

对我来说,我缺少将创建的RDS角色添加到S3存储桶的步骤。添加后,它可以立即工作。

答案 5 :(得分:0)

我曾多次遇到过此错误。

  1. 在运行“ LOAD” SQL一段时间(约220秒)后引发错误,这是一个可疑的超时情况。最终,我发现我的RDS的子网组只有一个出站,但S3除外。通过添加出站规则可以解决此问题。

  2. 立即引发错误(0.2s)。我之前曾经成功地从S3加载数据,但是突然在S3 url上进行了更改,再次发生了此错误。我使用了错误的S3 URL。因为我想使用S3前缀而不是文件。检查“加载”语法以使您的sql正确。

答案 6 :(得分:0)

如果唯一的错误是Internal error: Unable to initialize S3Stream,并且立即引发此错误,则可能的罪魁祸首是存储桶或对象名称中的错字,或者未根据the syntax for specifying a path to files stored on an Amazon S3 bucket指定存储桶或对象名称:s3- 区域:// 存储桶名称 / 文件名或前缀

  

该路径包含以下值:

     
      
  • region(可选)–包含要加载的Amazon S3存储桶的AWS区域。此值是可选的。如果您未指定区域值,则Aurora将从Amazon S3加载文件的区域与数据库集群相同。
  •   
  • 存储桶名称–包含要加载的数据的Amazon S3存储桶的名称。支持标识虚拟文件夹路径的对象前缀。
  •   
  • 文件名或前缀– Amazon S3文本文件或XML文件的名称,或标识一个或多个要加载的文本或XML文件的前缀。您还可以指定一个清单文件,该清单文件标识一个或多个要加载的文本文件。
  •   

答案 7 :(得分:0)

通过执行第2步到第5步并创建用于S3访问的VPC端点,它对我有用。

答案 8 :(得分:0)

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

我密切关注 Loading data into an Amazon Aurora MySQL DB cluster from text files in an Amazon S3 bucket 的所有 AWS 文档说明。

就我而言,我没有正确遵循说明步骤 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 命令,它起作用了!