AWS Glue 爬虫未创建 Table

AWS Glue Crawler Not Creating Table

我有一个在 AWS Glue 中创建的爬网程序,它在成功完成后不会在数据目录中创建 table。

爬虫大约需要 20 秒才能 运行,并且日志显示它已成功完成。 CloudWatch 日志显示:

我不知道为什么没有创建数据目录中的 table。 AWS Docs 对调试帮助不大。

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

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

如果您在目标数据库中已有 table,爬虫可能会将您的新文件与现有的 table 相关联,而不是创建一个新文件。

当 Glue 可能将数据或文件夹结构解释为分区时,会出现这种情况。

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

您可以尝试排除s3 bucket中的一些文件,那些被排除的文件应该会出现在日志中。我发现它有助于调试爬虫发生的情况。

这是我的示例角色 JSON,它允许 glue 访问 s3 并创建 table。

{
"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 的一个大问题是 "why this access denied error due to a wrong attached IAM policy does not show up in Cloud watch log??" 这使得调试变得困难。

我遇到了 Ray 提到的类似 IAM 问题。但就我而言,我没有在存储桶名称后添加星号 (*),这意味着爬虫没有进入子文件夹,也没有创建 table。

错误:

{
   "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"
}

就我而言,问题出在设置 Crawler source type > Repeat crawls of S3 data stores 中,我将其设置为 Crawl new folders only,因为我认为它会抓取第一个 运行 的所有内容,并且然后继续只发现新数据。

将其设置为 Crawl all folders 后,它发现了所有表。