我有一个在 AWS Glue 中创建的爬虫,它在成功完成后不会在数据目录中创建表。
爬虫运行大约需要 20 秒,日志显示它已成功完成。CloudWatch 日志显示:
- 基准测试:为 Crawler 运行 Start Crawl
- 基准测试:分类完成,将结果写入数据库
- 基准:完成写入目录
- Benchmark:爬虫已完成运行,处于就绪状态
我不知道为什么没有创建数据目录中的表。AWS Docs 对调试没有多大帮助。
我有一个在 AWS Glue 中创建的爬虫,它在成功完成后不会在数据目录中创建表。
爬虫运行大约需要 20 秒,日志显示它已成功完成。CloudWatch 日志显示:
我不知道为什么没有创建数据目录中的表。AWS Docs 对调试没有多大帮助。
检查与爬虫关联的 IAM 角色。很可能您没有正确的权限。
当您创建爬虫时,如果您选择创建一个 IAM 角色(默认设置),那么它将仅为您指定的 S3 对象创建一个策略。如果稍后您编辑爬虫并仅更改 S3 路径。与爬虫关联的角色将无权访问新的 S3 路径。
我遇到了同样的问题,正如其他人建议的那样,我尝试修改现有的 IAM 角色,将新的 S3 存储桶作为资源包含在内,但由于某种原因它不起作用。然后我从头开始创建了一个全新的角色……这次成功了。此外,我对 AWS 的一个大问题是“为什么由于附加的错误 IAM 策略而导致的访问被拒绝错误不会显示在 Cloud watch log 中??” 这使得调试变得困难。
如果您在目标数据库中有现有表,则爬网程序可能会将您的新文件与现有表相关联,而不是创建新表。
当 Glue 可能将其解释为分区的数据或文件夹结构中存在相似性时,就会发生这种情况。
此外,有时我需要刷新数据库的表列表以显示新的数据库。
您可以尝试排除 s3 存储桶中的一些文件,这些排除的文件应该会出现在日志中。我发现它有助于调试爬虫发生的事情。
这是我的示例角色 JSON,它允许胶水访问 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": "*"
}
]
}
我遇到了 Ray 提到的类似 IAM 问题。但是在我的情况下,我没有在存储桶名称后添加星号(*),这意味着爬虫没有进入子文件夹,也没有创建表。
错误的:
{
"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"
}