AWS Glue 爬虫未创建 Table
AWS Glue Crawler Not Creating Table
我有一个在 AWS Glue 中创建的爬网程序,它在成功完成后不会在数据目录中创建 table。
爬虫大约需要 20 秒才能 运行,并且日志显示它已成功完成。 CloudWatch 日志显示:
- 基准:运行 开始为抓取工具抓取
- 基准测试:分类完成,正在将结果写入 DB
- 基准测试:已完成写入目录
- 基准测试:爬虫已完成 运行ning 并处于就绪状态
我不知道为什么没有创建数据目录中的 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
后,它发现了所有表。
我有一个在 AWS Glue 中创建的爬网程序,它在成功完成后不会在数据目录中创建 table。
爬虫大约需要 20 秒才能 运行,并且日志显示它已成功完成。 CloudWatch 日志显示:
- 基准:运行 开始为抓取工具抓取
- 基准测试:分类完成,正在将结果写入 DB
- 基准测试:已完成写入目录
- 基准测试:爬虫已完成 运行ning 并处于就绪状态
我不知道为什么没有创建数据目录中的 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
后,它发现了所有表。