创建蓝图布局脚本 - AWS Glue
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建蓝图布局脚本

蓝图布局脚本必须包含用于在工作流中生成实体的函数。您可以随意命名此函数。AWS Glue 使用配置文件确定函数的完全限定名称。

您的布局函数执行以下操作:

  • (可选)实例化Job类来创建Job对象,并传递诸如CommandRole。如果您使用 AWS Glue 控制台或 API 创建任务,则需要指定这些任务属性。

  • (可选)实例化Crawler类来创建Crawler对象,并传递名称、角色和目标参数。

  • 要指示对象(工作流实体)之间的依赖关系,请将DependsOnWaitForDependencies其他参数Job()Crawler()。此部分的后文中将介绍这些参数。

  • 实例化Workflow类创建返回到 AWS Glue 的工作流对象,并传递Name参数,一个Entities参数和一个可选OnSchedule参数。这些区域有:Entities参数指定要包含在工作流中的所有作业和爬虫程序。要了解如何构建Entities对象,请参阅此部分后面的示例项目。

  • 返回Workflow对象。

有关JobCrawler, 和Workflow类,请参阅AWS Glue 蓝图类参考

布局函数必须接受以下输入参数。

参数 描述
user_params 蓝图参数名称和值的 Python 字典。有关更多信息,请参阅指定蓝图参数
system_params Python 字典包含两个属性:regionaccountId

这里是一个名为Layout.py

import argparse import sys import os import json from awsglue.blueprint.workflow import * from awsglue.blueprint.job import * from awsglue.blueprint.crawler import * def generate_layout(user_params, system_params): etl_job = Job(Name="{}_etl_job".format(user_params['WorkflowName']), Command={ "Name": "glueetl", "ScriptLocation": user_params['ScriptLocation'], "PythonVersion": "2" }, Role=user_params['PassRole']) post_process_job = Job(Name="{}_post_process".format(user_params['WorkflowName']), Command={ "Name": "pythonshell", "ScriptLocation": user_params['ScriptLocation'], "PythonVersion": "2" }, Role=user_params['PassRole'], DependsOn={ etl_job: "SUCCEEDED" }, WaitForDependencies="AND") sample_workflow = Workflow(Name=user_params['WorkflowName'], Entities=Entities(Jobs=[etl_job, post_process_job])) return sample_workflow

示例脚本导入所需的蓝图库,并包含generate_layout函数,用于生成包含两个作业的工作流。这是一个非常简单的脚本。更复杂的脚本可以使用额外的逻辑和参数来生成具有许多作业和爬虫程序的工作流,甚至可变数量的作业和爬虫程序。

使用 DependsOn 参数

这些区域有:DependsOn参数是此实体对工作流中其他实体的依赖关系的字典表示。它具有以下形式。

DependsOn = {dependency1 : state, dependency2 : state, ...}

此字典中的键表示实体的对象引用,而不是名称,而值是对应于要监视的状态的字符串。AWS Glue 推断正确的触发器。有关有效状态,请参阅Condition 结构

例如,作业可能取决于 Crawler 的成功完成。如果您定义了名为crawler2详情如下所示:

crawler2 = Crawler(Name="my_crawler", ...)

然后一个对象取决于crawler2将包含一个构造函数参数,例如:

DependsOn = {crawler2 : "SUCCEEDED"}

例如:

job1 = Job(Name="Job1", ..., DependsOn = {crawler2 : "SUCCEEDED", ...})

如果DependsOn,则该实体取决于工作流启动触发器。

使用等待依赖关系参数

这些区域有:WaitForDependencies参数定义作业或爬虫实体是否应该等到全部实体,它依赖于完成或直到任何完成。

允许的值为”AND“或”ANY“。

使用时间表参数

这些区域有:OnSchedule参数的参数Workflow类构造函数是cron表达式,用于定义工作流的起始触发器定义。

如果指定了此参数,AWS Glue 会创建一个带有相应调度的计划触发器。如果未指定,则工作流程的启动触发器为按需触发器。