【问题标题】:How to run a glue crawler using the AWS javascript SDK?如何使用 AWS javascript SDK 运行胶水爬虫?
【发布时间】: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


    【解决方案1】:

    这是我部署的一个 sn-p。爬虫是根据 params1 创建的。然后一旦创建运行爬虫。希望有帮助。代码来源于

    https://aws.amazon.com/blogs/big-data/build-and-automate-a-serverless-data-lake-using-an-aws-glue-trigger-for-the-data-catalog-and-etl-jobs/

    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)
                        })
                    });
            });
    

    【讨论】:

    • 这不能回答问题。对于任何想要触发在 CloudFormation 中创建的胶水爬虫的人,请参阅我的帖子。
    【解决方案2】:

    也尝试这样做,从 lambda 触发爬虫(不是创建和触发)。我去翻阅了文档。

    1. Google“aws-sdk 胶水”,顶部结果看起来不错。

    1. 我们知道我们可以像上面显示的@pkarfs 那样使用createCrawler。查看方法摘要我可以看到`getCrawler

    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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-23
      • 2018-06-20
      • 1970-01-01
      • 2020-07-20
      • 2021-01-09
      • 1970-01-01
      • 1970-01-01
      • 2019-11-17
      相关资源
      最近更新 更多