我有一个由CloudFormation创建的Glue ETL作业。该作业从RDS Aurora中提取数据并写入S3。
运行此作业时,出现以下错误。
该作业具有IAM服务角色。
此服务角色允许
无论S3存储桶是使用AES256还是aws:kms加密的,我都有同样的错误。
无论作业是否具有安全配置,我都会遇到相同的错误。
我从事的工作与手动创建的完全相同,并且可以在没有安全配置的情况下成功运行。
我想念什么?这是完整的错误日志
“ / mnt / yarn / usercache / root / appcache / application_1 ... 5_0002 / container_15 ... 45_0002_01_000001 / py4j-0.10.4-src.zip / py4j / protocol.py”,第319行,位于get_return_value中 py4j.protocol.Py4JJavaError:调用o145.pyWriteDynamicFrame时发生错误。 :org.apache.spark.SparkException:由于阶段失败而导致作业中止:阶段2.0中的任务3失败4次,最近一次失败:阶段2.0中的任务3.3丢失(TID 30,ip-10 -.... us-west -2.compute.internal,执行程序1):com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.services.s3.model.AmazonS3Exception:拒绝访问(服务:Amazon S3;状态代码:403;错误代码:AccessDenied;请求ID:F ... 49),S3扩展请求ID:eo ... wXZw = 在com.amazon.ws.emr.hadoop.fs.shaded.com.amazonaws.http.AmazonHttpClient $ RequestExecutor.handleErrorResponse(AmazonHttpClient.java:1588
答案 0 :(得分:0)
不幸的是,该错误并没有告诉我们太多,除了在写入DynamicFrame期间失败之外。
403仅有少数几种可能的原因,您可以检查是否满足所有条件:
如果以上方法均无效,则可以进一步了解您的设置。也许是写操作的代码。
答案 1 :(得分:0)
除了Lydon的回答外,如果您的数据源位置与数据目标位置相同,还会收到错误403。在胶水中创建作业时定义。如果它们相同,请更改其中任何一个,问题将得到解决。
答案 2 :(得分:0)
您如何为PassRole
提供粘合角色的权限?
{
"Sid": "AllowAccessToRoleOnly",
"Effect": "Allow",
"Action": [
"iam:PassRole",
"iam:GetRole",
"iam:GetRolePolicy",
"iam:ListRolePolicies",
"iam:ListAttachedRolePolicies"
],
"Resource": "arn:aws:iam::*:role/<role>"
}
通常,我们使用<project>-<role>-<env>
创建角色,例如xyz-glue-dev,其中项目名称为xyz,env为dev。在这种情况下,我们使用"Resource": "arn:aws:iam::*:role/xyz-*-dev"
答案 3 :(得分:0)
对我来说是两件事。
完成这两个设置后,我的胶水作业成功运行。希望这会有所帮助。
答案 4 :(得分:0)
确保您给出了正确的策略。 我面临同样的问题,以为我的角色配置正确。 但是在我删除角色并遵循this步骤之后,它开始起作用了;]
答案 5 :(得分:-1)
您已完成所需的RDS参数组配置,在您的问题中没有看到对此的任何引用?我很高兴您错过了RDS参数组中的某些配置,无法从S3和RDS进行读取/写入。如果没有完成,请refer to this link并进行所需的配置。这应该起作用。