node.js - 无法在 Lambda 中创建 AWS 胶水爬虫,Lambda 由 Step 函数触发
问题描述
这是我的场景:
API 网关/Lambda 触发 Step 函数。step 函数的有效负载是在现有 Athena 表上运行的 SQL 查询
Step 函数的 Task-1 调用 Athena 上的 StartQueryExecution API。查询成功运行并在给定的 S 存储桶中生成结果
Task-2 调用 Lambda,它根据 Task-2 的结果创建 AWS 爬虫(Task-2 获取 S3 文件位置作为 Task-1 的输入)
任务 3 调用运行在任务 2 中创建的爬虫的 Lambda
要在 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 函数中组合createCrawler
和startCrawler
,但这也不起作用。
我错过了什么吗?是否无法在由 Step 函数触发的 Lambda 函数中创建 AWS Glue 爬虫?
解决方案
Glue 爬虫应使用 Infra 管理的 Step Functions 的状态机作为代码创建,如 CloudFormation、Terraform 和 AWS CDK。
然后 lambda func 启动爬虫并检索爬虫运行的结果。
请参阅类似的示例代码,
推荐阅读
- git - 具有相同历史记录的 git 和 mercurial 存储库中的提交是否具有相同的哈希?
- c# - c# GetResponse() 超时,但适用于浏览器
- c - C根据带有指针的字符串的输入打印特定的字符
- mapbox - 地图框标记/点的交互性取决于所选的渲染方法
- python - 系列到数据框的列表
- python - 在 Python 中运行 oracle 查询时如何访问 pandas 数据框?
- ios - 我想在 tableView 中显示来自 firebase 的数据
- javascript - 查找和替换单元格范围 [示例脚本]
- java - 在powershell中使用Get-Content作为java输入获取额外字符
- hyperledger-fabric - 如何使用资产 ID 在超级账本作曲家中获取资产历史记录?