跳至内容

如何使用 AWS Lambda 函数在爬网程序运行完后自动启动 AWS Glue 作业?

2 分钟阅读
0

我想使用 AWS Lambda 函数在爬网程序运行完后自动启动 AWS Glue 作业。

简短描述

要在爬网程序运行完后启动作业,请创建 AWS Lambda 函数和 Amazon EventBridge 规则。

**注意:**您还可以使用 AWS Glue 工作流在爬网程序运行完后自动启动作业。有关详细信息,请参阅如何使用 AWS Glue 工作流在爬网程序运行完成后自动启动作业?

解决方法

先决条件:

必须具备以下条件:

  • AWS Glue 提取、转换、加载 (ETL) 作业
  • AWS Glue 爬网程序
  • 有权运行 AWS Glue 作业的 Lambda AWS Identity and Access Management (IAM) 角色。例如,为 Lambda 设置一个附加了 AWSGlueServiceRole 策略的服务关联角色。

创建 Lambda 函数

完成以下步骤:

  1. 打开 Lambda 控制台。
  2. 选择 Create function(创建函数)。
  3. 在 Create function(创建函数)页面上,输入以下信息:
    选择 Author from scratch(从头开始创建)。
    对于 Function name(函数名称),输入您的函数的名称。
    对于 Runtime(运行时),选择一个 Python 选项。
    对于架构,使用默认选项 x86_64。
    在 Change default execution role(更改默认执行角色)下,对于 Execution role(执行角色),选择 Use an existing role(使用现有角色)。
    对于 Existing role(现有角色),选择有权运行 AWS Glue 作业的 IAM 角色。
  4. 选择 Create function(创建函数)。
  5. 在函数详细信息页面的 Code source(代码源)下,输入以下代码:
    # Set up loggingimport json
    import os
    import logging
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)
    
    # Import Boto 3 for AWS Glue
    import boto3
    client = boto3.client('glue')
    
    # Variables for the job:
    glueJobName = "MyTestJob"
    
    # Define Lambda function
    def lambda_handler(event, context):
        logger.info('## INITIATED BY EVENT: ')
        logger.info(event['detail'])
        response = client.start_job_run(JobName = glueJobName)
        logger.info('## STARTED GLUE JOB: ' + glueJobName)
        logger.info('## GLUE JOB RUN ID: ' + response['JobRunId'])
        return response
    **注意:**请将 MyTestJob 替换为您的 AWS Glue ETL 作业的名称。
  6. 在 Code source(代码源)下,选择 Test(测试)。
  7. 打开 AWS Glue 控制台,然后确认作业是否已启动。

要测试 Lambda 函数,请运行您的 AWS Glue 爬网程序。然后,检查您的 AWS Glue ETL 作业的 Jobs run(作业运行)资源列表。Run status(运行状态)将显示为 Starting(正在启动)或 Running(正在运行)。

创建 EventBridge 规则

完成以下步骤:

  1. 打开 EventBridge 控制台。
  2. 在导航窗格中,选择 Rules(规则),然后选择 Create rule(创建规则)。
  3. 输入规则的名称和描述,然后选择 Next(下一步)。
  4. 对于 Event source(事件源)和 Sample event(示例事件),使用默认值。
  5. 在 Event pattern(事件模式)部分下,选择 Custom Patterns(自定义模式)(JSON 编辑器)。
  6. 在 Event pattern(事件模式)字段中输入以下代码:
    {
        "detail-type": [
            "Glue Crawler State Change"
        ],
        "source": [
            "aws.glue"
        ],
        "detail": {
            "crawlerName": [
                "MyTestCrawl"
            ],
            "state": [
                "Succeeded"
            ]
        }
    }
    **注意:**请将 MyTestCrawl 替换为您的 AWS Glue 爬网程序的名称。
  7. 对于 Select targets(选择目标),输入以下信息:
    对于 Target(目标),选择 Lambda function(Lambda 函数)。
    对于 Function(函数),选择您的 Lambda 函数。
  8. 选择 Create(创建)。

要测试 Lambda 函数和 EventBridge 规则,请运行您的 AWS Glue 爬网程序。然后,检查您的 AWS Glue ETL 作业的 Jobs run(作业运行)资源列表。Run status(运行状态)将显示为 Starting(正在启动)或 Running(正在运行)。

相关信息

在 Amazon EventBridge 中创建对事件做出响应的规则

AWS 官方已更新 1 年前