【发布时间】:2019-10-31 05:37:26
【问题描述】:
我正在尝试创建一个 Lambda,一旦将文件添加到特定的 s3 存储桶就会触发该 Lambda。
不幸的是,我找不到任何关于如何使用 aws javascript sdk 运行 Glue Crawler 的资源/文档。
谁能分享一些可能有用的提示/文档/代码?
非常感谢,
【问题讨论】:
标签: node.js amazon-web-services aws-lambda aws-sdk aws-glue
我正在尝试创建一个 Lambda,一旦将文件添加到特定的 s3 存储桶就会触发该 Lambda。
不幸的是,我找不到任何关于如何使用 aws javascript sdk 运行 Glue Crawler 的资源/文档。
谁能分享一些可能有用的提示/文档/代码?
非常感谢,
【问题讨论】:
标签: node.js amazon-web-services aws-lambda aws-sdk aws-glue
这是我部署的一个 sn-p。爬虫是根据 params1 创建的。然后一旦创建运行爬虫。希望有帮助。代码来源于
var params = {
DatabaseInput: {
Name: dbName,
Description: dbDecription,
}
};
glue.createDatabase(params, function(err, data) {
var params1 = {
DatabaseName: "database",
Name: "crawler",
Description: 'crawler test',
Role: crawlerRoleArn,
Targets: {
S3Targets: [{ Path: bucket }]
},
};
glue.createCrawler(params1, function(err1, data1) {
startCrawler(crawlerName, function(err2,data2){
if(err2) callback(err2)
else callback(null,data2)
})
});
});
【讨论】:
也尝试这样做,从 lambda 触发爬虫(不是创建和触发)。我去翻阅了文档。
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/Glue.html#getCrawler-property
页面上有一个示例,但这就是我所使用的。我通过使用 F12 检查 startCrawler 函数上的类型来构建它。
/**
* Starts a crawl using the specified crawler, regardless of what is scheduled. If the crawler is already running, returns a CrawlerRunningException.
*/
startCrawler(params: Glue.Types.StartCrawlerRequest, callback?: (err: AWSError, data: Glue.Types.StartCrawlerResponse) => void): Request<Glue.Types.StartCrawlerResponse, AWSError>;
如您所见,参数是StartCrawlerRequest 类型的接口。这只需要一个名字。如果您在 CloudFormation 中创建爬虫,则可以将爬虫名称作为环境变量传递给 lambda 函数。
您还需要授予 lambda 函数权限以启动爬虫。我在 Google 上搜索了“glue api 权限参考”,还猜测它会类似于 resource:ActionName 原来它是 glue:StartCrawler,可以看到 here。
import { Handler } from "aws-lambda";
import { Glue } from "aws-sdk";
import "source-map-support/register";
export const handler: Handler = async () => {
const glue = new Glue();
const params: Glue.GetCrawlerRequest = {
Name: "CRAWLER_NAME"
};
try {
const data = await glue.startCrawler(params).promise();
// eslint-disable-next-line no-console
console.log({ data });
} catch (err) {
console.error(`Error getting crawler instance: ${err}`);
}
console.log({ helloWorld: "yo" });
};
我正在使用无服务器。
myCrawlerTrigger:
handler: ./src/lambdas/myfunction.handler
events:
- s3:
bucket: MY_BUCKET
event: s3:ObjectCreated:Put
rules:
# TODO switch to json.gz after compressing the content
- prefix: bucket_folder_name/
- suffix: .json
existing: true # my bucket already exists
https://www.serverless.com/framework/docs/providers/aws/events/s3/
但是你是如何创建粘合爬虫和数据库的呢?
见this
【讨论】: