跳至内容

如何使用 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 官方已更新 5 个月前