我想使用 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. 确保选择从头开始创作,然后配置以下选项:
在名称中,为函数输入名称。
为运行时选择 Python 选项之一。
对于架构,使用默认选项 x86_64。
为角色选择更改默认执行角色的下拉列表,然后选择使用现有角色。
为现有角色选择有权运行 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 顶部,选择部署,然后选择测试。
7. 打开 AWS Glue 控制台,确认任务已启动。
创建 EventBridge 规则
1. 打开 Amazon EventBridge 控制台。
2. 在导航窗格中,选择规则,然后选择创建规则。
3. 为规则输入名称和描述,选择下一步。
4. 为事件源和示例事件****使用默认值。在事件模式部分,选择自定义模式(JSON 编辑器)。
5. 将以下代码复制并粘贴到事件模式框中。确保将 MyTestCrawl 替换为您的 AWS Glue 爬网程序的名称。
{
"detail-type": [
"Glue Crawler State Change"
],
"source": [
"aws.glue"
],
"detail": {
"crawlerName": [
"MyTestCrawl"
],
"state": [
"Succeeded"
]
}
}
6. 在选择目标部分,执行以下操作:
为目标,选择 Lambda 函数。
为函数选择您的 Lambda 函数的名称。
7. 选择创建。
要测试 Lambda 函数和 EventBridge 规则,运行 AWS Glue 爬网程序。然后,查看 AWS Glue ETL 任务的历史记录选项卡。运行状态应显示正在启动或正在运行。
相关信息
Creating Amazon EventBridge rules that react to events