如何触发胶水爬行器?

问题描述 投票:0回答:1

设置一个glue爬虫作业以从s3存储桶中读取数据并创建一个glue目录数据库。创建资源后,我如何触发它。我可以将它与 s3 对象创建挂钩吗?另外,爬虫是否可以检测数据之间的关系并相应地创建表,类似于关系数据库中的表,使用外键来链接表之间?例如,一个文件包含产品名称,其他文件包含产品详细信息。

[{ "id"   : 1, 
   "product" : "Tablet", 
   }, 
   { "id" : 2, 
     "product" : "headphones"
}]

文件2。 [{“名称”:“平板电脑”,“价格”:350 ...},{}]

resource "aws_glue_crawler" "example" {
  database_name = aws_glue_catalog_database.example.name
  name          = "example"
  role          = aws_iam_role.example.arn

  s3_target {
    path = "s3://${aws_s3_bucket.example.bucket}"
  }
}
amazon-web-services aws-glue
1个回答
0
投票

您无法在创建 S3 对象时直接触发 Glue Crawler。 您可以通过多种不同的方法来实现这一目标,总结如下:

1- 使用 Lambda(或 Step Functions):创建一个由 s3 触发的 Lambda 函数(您可以指定您的首选路径),并且在 Lambda 函数内部您可以添加如下代码来触发您的爬虫(您可以按照与 Step Functions 的方法相同):

glue = boto3.client(service_name='glue',region_name='your-region-name',endpoint_url='your-endpoint-url')

try:
   glue.start_crawler(Name='your-crawler-name')
except Exception as error:
    print(error)
    print('Failed to start crawler')
    raise error

2- 使用 EventBridge(CloudWatch 或 CloudTrail):创建侦听 S3 对象上传事件的规则。将规则目标设置为您的爬网程序。一般来说,您的规则配置将如下所示:

  {
  "source": ["aws.s3"],
  "detail-type": ["Object Access:PutObject"],
  "detail": {
      "eventSource": ["s3.amazonaws.com"],
      "eventName": ["PutObject"],
      "requestParameters": {
          "bucketName": ["<your-bucket-name>"]
      }
  }}

最后,您需要设置一个触发器:

{
  "Name": "<your-trigger-name>",
  "WorkflowName": "<your-workflow-name>",
  "Type": "event",
  "EventBatchingCondition": {
    "BatchSize": 1
  },
  "Actions": [
    {
      "CrawlerName": "<your-crawler-name>"
    }
  ]
}

您可以根据需要更改配置,例如上面的配置

"BatchSize": 1
意味着它将在1个文件上传到s3后触发,您可以根据您的需要增加此配置。

© www.soinside.com 2019 - 2024. All rights reserved.