Amazon web services AWS胶水爬虫程序未创建表

Amazon web services AWS胶水爬虫程序未创建表,amazon-web-services,aws-glue,Amazon Web Services,Aws Glue,我在AWS Glue中创建了一个爬虫程序,它在成功完成后不会在数据目录中创建表 爬虫程序运行大约需要20秒,日志显示它已成功完成。CloudWatch日志显示: 基准:运行爬虫程序的开始爬网 基准:分类完成,将结果写入数据库 基准测试:已完成对目录的写入 基准测试:爬虫程序已完成运行并处于就绪状态 我不明白为什么不创建数据目录中的表。AWS文档对调试没有多大帮助。检查与爬虫程序关联的IAM角色。很可能您没有正确的权限 创建爬虫程序时,如果选择创建IAM角色(默认设置),则它将仅为您指定的S3

我在AWS Glue中创建了一个爬虫程序,它在成功完成后不会在数据目录中创建表

爬虫程序运行大约需要20秒,日志显示它已成功完成。CloudWatch日志显示:

  • 基准:运行爬虫程序的开始爬网
  • 基准:分类完成,将结果写入数据库
  • 基准测试:已完成对目录的写入
  • 基准测试:爬虫程序已完成运行并处于就绪状态

我不明白为什么不创建数据目录中的表。AWS文档对调试没有多大帮助。

检查与爬虫程序关联的IAM角色。很可能您没有正确的权限


创建爬虫程序时,如果选择创建IAM角色(默认设置),则它将仅为您指定的S3对象创建策略。如果以后您编辑爬虫程序并仅更改S3路径。与爬虫程序关联的角色无权访问新的S3路径。

如果目标数据库中存在表,爬虫程序可能会将新文件与现有表关联,而不是创建新的表

当数据或文件夹结构中存在相似性时,就会发生这种情况,而Glue可能会将其解释为分区


有时我还需要刷新数据库的表列表,以显示新的数据库。

您可以尝试排除s3存储桶中的一些文件,这些排除的文件应该显示在日志中。我发现它有助于调试爬虫程序的运行情况。

下面是我的示例角色JSON,它允许glue访问s3并创建一个表

{
"Version": "2012-10-17",
"Statement": [
    {
        "Sid": "VisualEditor0",
        "Effect": "Allow",
        "Action": [
            "ec2:DeleteTags",
            "ec2:CreateTags"
        ],
        "Resource": [
            "arn:aws:ec2:*:*:instance/*",
            "arn:aws:ec2:*:*:security-group/*",
            "arn:aws:ec2:*:*:network-interface/*"
        ],
        "Condition": {
            "ForAllValues:StringEquals": {
                "aws:TagKeys": "aws-glue-service-resource"
            }
        }
    },
    {
        "Sid": "VisualEditor1",
        "Effect": "Allow",
        "Action": [
            "iam:GetRole",
            "cloudwatch:PutMetricData",
            "ec2:DeleteNetworkInterface",
            "s3:ListBucket",
            "s3:GetBucketAcl",
            "logs:PutLogEvents",
            "ec2:DescribeVpcAttribute",
            "glue:*",
            "ec2:DescribeSecurityGroups",
            "ec2:CreateNetworkInterface",
            "s3:GetObject",
            "s3:PutObject",
            "logs:CreateLogStream",
            "s3:ListAllMyBuckets",
            "ec2:DescribeNetworkInterfaces",
            "logs:AssociateKmsKey",
            "ec2:DescribeVpcEndpoints",
            "iam:ListRolePolicies",
            "s3:DeleteObject",
            "ec2:DescribeSubnets",
            "iam:GetRolePolicy",
            "s3:GetBucketLocation",
            "ec2:DescribeRouteTables"
        ],
        "Resource": "*"
    },
    {
        "Sid": "VisualEditor2",
        "Effect": "Allow",
        "Action": "s3:CreateBucket",
        "Resource": "arn:aws:s3:::aws-glue-*"
    },
    {
        "Sid": "VisualEditor3",
        "Effect": "Allow",
        "Action": "logs:CreateLogGroup",
        "Resource": "*"
    }
]

}

我也遇到了同样的问题,解决方案是指定表的架构


我也遇到了同样的问题,正如其他人建议的那样,我试图修改现有的IAM角色,将新的S3存储桶作为资源,但由于某种原因,它不起作用。然后我从头开始创造了一个全新的角色。。。这次成功了。另外,我对AWS的一个大问题是“为什么由于错误的附加IAM策略而导致的拒绝访问错误没有显示在云监视日志中?”,这使得调试变得困难。

我遇到了Ray提到的类似IAM问题。但在我的例子中,我没有在bucket名称后添加星号(*),这意味着爬虫程序没有进入子文件夹,也没有创建表

错:

{
   "Statement": [
    {
        "Action": [
            "s3:GetObject",
            "s3:PutObject"
        ],
        "Effect": "Allow",
        "Resource": [
            "arn:aws:s3:::bucket-name"
        ]
    }
   ],
   "Version": "2012-10-17"
}
正确:

{
   "Statement": [
    {
        "Action": [
            "s3:GetObject",
            "s3:PutObject"
        ],
        "Effect": "Allow",
        "Resource": [
            "arn:aws:s3:::bucket-name*"
        ]
    }
   ],
   "Version": "2012-10-17"
}

你找到答案了吗?默认的glue service角色只包含S3前缀,如
glue public
,我需要将其更改为包含我想要爬网的bucket。你知道为什么这个不正确的权限不会作为异常出现在日志中吗?这对我来说很有效,我删除了旧角色,编辑了爬网程序并创建了一个新的爬网程序,然后在目录中创建表格,感谢提示!谢谢你的这个。我花了30分钟检查日志,未能理解发生了什么。这是重点。。。哇!原因953为什么AWS与易用相反。这有多困难?