使用最新的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运行吗?我没有在文件中的任何地方看到提到的内容
答案 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)
我曾多次遇到过此错误。
在运行“ LOAD” SQL一段时间(约220秒)后引发错误,这是一个可疑的超时情况。最终,我发现我的RDS的子网组只有一个出站,但S3除外。通过添加出站规则可以解决此问题。
立即引发错误(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 DATABASE
和 CREATE TABLE
,所以我知道我的连接正在工作。
我密切关注 Loading data into an Amazon Aurora MySQL DB cluster from text files in an Amazon S3 bucket 的所有 AWS 文档说明。
就我而言,我没有正确遵循说明步骤 3 和 4(请参阅上面链接中小标题“授予 Aurora 访问 Amazon S3”下的说明列表。
为我修复了什么:
aurora_load_from_s3_role
然后在“值”输入框中,我
复制/粘贴我刚刚在第 2 步中创建的角色的 ARN
将说明放入此框中,然后单击“保存”(上述链接中的第 4 步)。我回到 MySQL Workbench 并重新运行我的 LOAD DATA FROM S3
命令,它起作用了!