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

上次更新日期:2022 年 8 月 5 日

我想要使用 AWS Lambda 函数在爬网程序运行完成时自动启动 AWS Glue 任务。

简短描述

要在爬网程序运行完成时启动任务,请创建 AWS Lambda 函数和 Amazon EventBridge 规则。您可以修改此方法以自动化其他 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.    确保选择了从头开始创作,然后配置以下选项:
对于名称,输入函数名称。
对于 Runtime(运行时),选择其中一个 Python 选项。
对于 Architecture(架构),请使用默认选项 x86_64
对于 Role(角色),选择 Change default execution role(更改默认执行角色)下拉菜单,然后选择 Use an existing role(使用现有角色)。
对于 Existing role(现有角色),请选择有权运行 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('## 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

6.    在代码编辑 UI 的顶部,选择 Deploy(部署),然后选择 Test(测试)。

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

创建 EventBridge 规则

1.    打开 Amazon EventBridge 控制台

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

3.    输入规则的名称和描述,然后选择Next(下一步)。

4.    使用 Event source(事件源)和 Sample event(采样事件)的默认值。 在 Event pattern(事件模式)部分中,选择 Custom Patterns (自定义模式)(JSON 编辑器)。

5.    将以下代码复制并粘贴到 Event pattern(事件模式)框中。请务必将 MyTestCrawl 替换为您的 AWS Glue 爬网程序的名称。

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

6.    在 Select Targets(选择目标)部分中,执行以下操作:

对于目标,请选择 Lambda 函数

对于函数,选择您的 Lambda 函数的名称。

7.    选择 Create(创建)。

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


这篇文章对您有帮助吗?


您是否需要账单或技术支持?