繁体   English   中英

无法在 Lambda 中创建 AWS 胶水爬虫,Lambda 由步骤 function 触发

[英]Cannot create AWS glue crawler in a Lambda, Lambda is triggered by a Step function

这是我的场景:

  1. API 网关/Lambda 触发步骤 function。步骤 function 的有效负载是一个 SQL 查询以在现有 Athena 表上运行

  2. 步骤 function 的任务 1 在 Athena 上调用 StartQueryExecution API。 查询成功运行并在给定的 S 桶中生成结果

  3. Task-2 调用 Lambda,它根据 Task-2 的结果创建一个 AWS 爬虫(Task-2 从 Task-1 获取 S3 文件位置作为输入)

  4. Task-3 调用 Lambda 运行在 Task-2 中创建的爬虫

在此处输入图像描述

要在 Lambda 中创建 AWS 爬虫,以下是我在 Lambda (NodeJS) 中的代码:

  exports.handler = async(event) => {
    const awsglue = new aws.Glue();

    const uuid = event.QueryExecutionID
    var path = event.OutputPath

    var params = {
        Name: uuid,
        Role: <Role ARN>,
        DatabaseName: <Database name>,
        Targets: {
            S3Targets: [{
                Path: path
            }]
        }
    }

   var request = await awsglue.createCrawler(params, (err, data) => {
   if (err) console.log(err, err.stack);
   else console.log(data);
    })
  
    const response = {
        statusCode: 200,
        body: JSON.stringify(uuid),
    };
    return response;
};

问题createCrawler是一个异步调用,Lambda 返回 SUCCESS,甚至在创建爬虫之前。 因此,应该运行爬虫的 Task-3 失败了。

为了解决这个问题,我尝试在同一个 Lambda function 中组合createCrawlerstartCrawler但这也不起作用。

我错过了什么吗? 难道不能在 Lambda function 中创建由步骤 function 触发的 AWS Glue 爬虫吗?

Glue 爬虫应该使用由 Infra 管理的 Step Functions 的 state 机器作为代码创建,例如 CloudFormation、Terraform 和 AWS CDK。

然后 lambda 函数启动爬虫并检索爬虫运行的结果。

查看类似的示例代码,

Lambda 启动爬虫的功能, https://github.com/awslabs/realtime-fraud-detection-with-gnn-on-dgl/blob/61b341eb1fed1b1b471c9fdccce0c348ff7f343f/src/lambda.d/crawl-data-catalog/index.ts L24-L37

通过CDK创建爬虫, https://github.com/awslabs/realtime-fraud-detection-with-gnn-on-dgl/blob/61b341eb1fed1b1b471c9fdccce0c348ff7f343f/src/lib/etl-glue.ts#L78-L95

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM