[英]Cannot create AWS glue crawler in a Lambda, Lambda is triggered by a Step function
这是我的场景:
API 网关/Lambda 触发步骤 function。步骤 function 的有效负载是一个 SQL 查询以在现有 Athena 表上运行
步骤 function 的任务 1 在 Athena 上调用 StartQueryExecution API。 查询成功运行并在给定的 S 桶中生成结果
Task-2 调用 Lambda,它根据 Task-2 的结果创建一个 AWS 爬虫(Task-2 从 Task-1 获取 S3 文件位置作为输入)
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 中组合createCrawler
和startCrawler
但这也不起作用。
我错过了什么吗? 难道不能在 Lambda function 中创建由步骤 function 触发的 AWS Glue 爬虫吗?
Glue 爬虫应该使用由 Infra 管理的 Step Functions 的 state 机器作为代码创建,例如 CloudFormation、Terraform 和 AWS CDK。
然后 lambda 函数启动爬虫并检索爬虫运行的结果。
查看类似的示例代码,
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.