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

上次更新时间:2020 年 3 月 13 日

我想要使用 AWS Lambda 函数在爬网程序运行完成时自动启动 AWS Glue 作业。该如何操作?

简短描述

要在爬网程序运行完成时启动作业,请创建 AWS Lambda 函数和 Amazon CloudWatch Events 规则。您可以修改此方法以自动化其他 AWS Glue 函数。

注意:您也可以使用 AWS Glue 工作流在爬网程序运行完成时自动启动作业。此方法需要您从 AWS Glue 控制台上的工作流页面启动爬网程序。有关更多信息,请参阅我如何使用 AWS Glue 工作流在爬网程序运行完成时自动启动作业?

解决方法

在完成以下步骤之前,请确保您拥有:

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

创建 Lambda 函数

1.    打开 Lambda 控制台

2.    选择创建函数
注意:如果您没有 Lambda 函数,则会出现开始使用页面。选择创建函数,然后继续下一步。

3.    确保选择了从头开始创作,然后配置以下选项:
对于名称,输入函数名称。
对于运行时,选择其中一个 Python 选项。
对于角色,选择选择现有角色
对于现有角色,请选择有权运行 AWS Glue 作业的 IAM 角色。

4.    选择创建函数

5.    在函数代码部分中,粘贴类似以下内容的代码。请务必将 MyTestJob 替换为 AWS Glue ETL 作业的名称。

# Set up logging
import 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('## TRIGGERED 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

6.    在页面的右上角,选择保存,然后选择测试

7.    打开 AWS Glue 控制台并确认作业已启动。

创建 CloudWatch Events 规则

1.    打开 CloudWatch 控制台

2.    在导航窗格中,选择规则,然后选择创建规则

3.    在事件源部分中,选择事件模式,然后选择名为生成事件模式以按服务匹配事件的元素。从结果下拉列表中,选择自定义事件模式

4.    在生成自定义事件模式框中,使用以下代码替换已有代码。请务必将 MyTestCrawl 替换为您的 AWS Glue 爬网程序的名称。

{
    "detail-type": [
        "Glue Crawler State Change"
    ],
    "source": [
        "aws.glue"
    ],
    "detail": {
        "crawlerName": [
            "MyTestCrawl"
        ],
        "state": [
            "Succeeded"
        ]
    }
}

5.    在页面右侧的目标部分,选择添加目标

6.    在下拉列表中,选择 Lambda 函数(如果尚未选中)。

7.    在函数下拉列表中,选择 Lambda 函数的名称。

8.    在页面的右下角,选择配置详细信息

9.    为您的 CloudWatch Events 规则输入名称描述,然后选择创建规则

要测试 Lambda 函数和 CloudWatch Events 规则,请运行 AWS Glue 爬网程序。然后,检查 AWS Glue ETL 作业的历史记录选项卡运行状态应显示为正在启动正在运行

注意:CloudWatch Events 将尽最大努力发出。在极少数情况下,事件可能会次序混乱或缺失,Lambda 函数可能无法运行。


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?