

# 使用触发器启动作业和爬网程序
<a name="trigger-job"></a>

在 AWS Glue 中，您可以创建称为触发器的数据目录对象，用于手动或自动启动一个或多个爬网程序或提取、转换、加载（ETL）任务。使用触发器，您可以设计一个相互依赖的作业和爬网程序链条。

**注意**  
您也可以通过定义 *工作流程*来实现相同的目的。工作流程是创建复杂的多作业 ETL 操作的首选方式。有关更多信息，请参阅 [使用 AWS Glue 中的蓝图和工作流执行复杂的 ETL 活动](orchestrate-using-workflows.md)。

**Topics**
+ [AWS Glue 触发器](about-triggers.md)
+ [添加触发器](console-triggers.md)
+ [激活和停用触发器](activate-triggers.md)

# AWS Glue 触发器
<a name="about-triggers"></a>

触发器在*触发*时可以启动指定的作业和爬网程序。触发器可以根据需要、基于计划或基于事件组合触发。

**注意**  
一个触发器只能激活两个爬网程序。如果要爬取多个数据存储，请为每个爬网程序使用多个源，而不是同时运行多个爬网程序。

触发器可以处于几种状态之一。触发器可以处于 `CREATED`、`ACTIVATED` 或 `DEACTIVATED` 状态。此外，还有一些过渡状态，例如 `ACTIVATING`。要暂停触发器的触发，您可以将其停用。之后您可以重新激活它。

有三种类型的触发器：

**已安排**  
基于 `cron` 的定时触发器。  
您可以为一组作业或爬网程序创建基于计划的触发器。您可以指定约束条件，例如作业或爬网程序的运行频率、它们在一周中的哪几天运行，以及具体在什么时间运行。这些约束基于 `cron`。当您为触发器设置计划时，需要考虑 cron 的功能和限制。例如，如果您选择在每月第 31 天运行您的爬网程序，请记住，有些月份没有 31 天。有关 cron 的更多信息，请参阅[用于作业和爬网程序的基于时间的计划](monitor-data-warehouse-schedule.md)。

**条件**  
在上一个作业或爬网程序或多个作业或爬网程序满足条件列表中的条件时触发的触发器。  
 创建条件触发器时，您可以指定要监控的作业列表和爬网程序列表。对于每个受监控的作业或爬网程序，您可以指定要监控的状态，例如成功、失败、超时等。当受监控的作业或爬网程序进入指定的状态时，触发器就会触发。您可以将触发器配置为在任何或所有受监控的事件发生时触发。  
例如，您可以将触发器 T1 配置为在作业 J1 和作业 J2 都成功完成时启动作业 J3，并将另一个触发器 T2 配置为在作业 J1 或作业 J2 失败时启动作业 J4。  
下表列出了触发器监控的作业和爬网程序完成状态（事件）。      
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/glue/latest/dg/about-triggers.html)

**按需**  
在激活时触发的触发器。按需触发器永远不会进入 `ACTIVATED` 或 `DEACTIVATED` 状态。它们始终处于 `CREATED` 状态。

因此，它们一旦存在就可以立即触发。而对于计划触发器和条件触发器，则可以设置一个标记，用于在创建时激活它们。

**重要**  
作为其他作业或爬网程序完成的结果而运行的作业或爬网程序称为*依赖项*。仅当完成的作业或爬网程序由触发器启动时，才会启动依赖作业或爬网程序。依赖链中的所有作业或爬网程序都必须是单个**计划**或**按需**触发器的子代。

**通过触发器传递作业参数**  
触发器可以将参数传递给它所启动的作业。参数包括作业参数、超时值、安全配置等。如果触发器启动多个作业，则参数会传递给每个作业。

以下是触发器传递作业参数的规则：
+ 如果键值对中的键与默认作业参数匹配，则传递的参数将覆盖默认参数。如果键与默认参数不匹配，则该参数将作为附加参数传递给作业。
+ 如果键值对中的键与不可覆盖的参数匹配，则会忽略传递的参数。

有关更多信息，请参阅 AWS Glue API 中的[触发](aws-glue-api-jobs-trigger.md)。

# 添加触发器
<a name="console-triggers"></a>

您可以使用 AWS Glue 控制台、 AWS Command Line Interface (AWS CLI) 或 AWS Glue API 添加触发器。

**添加触发器（控制台）**

1. 登录 AWS 管理控制台，然后打开 AWS Glue 控制台，网址为：[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)。

1. 在导航窗格中，于 **ETL** 下，选择 **Triggers (触发器)**。选择 **Add trigger (添加触发器)**。

1. 提供以下属性：  
**名称**  
赋予您的触发器一个唯一的名称。  
**触发器类型**  
指定下列项之一：  
   + **Schedule (计划)**：触发器按特定的频率和时间触发。
   + **Job events (作业事件)**：条件触发器。当列表中的任何或所有作业进入其指定状态时，触发器就会触发。要让触发器触发，受监控的作业必须由触发器启动。对于您选择的任何作业，您只能监控一个作业事件（完成状态）。
   + **On-demand (按需)**：触发器会在激活时触发。

1. 完成触发器向导。在 **Review (审查)** 页面上，您可以选择 **Enable trigger on creation (在创建时启用触发器)**，立即激活 **Schedule (计划)** 和 **Job events (任务事件)**（条件）触发。

**添加触发器 (AWS CLI)**
+ 输入类似以下的命令。

  ```
  aws glue create-trigger --name MyTrigger --type SCHEDULED --schedule  "cron(0 12 * * ? *)" --actions CrawlerName=MyCrawler --start-on-creation  
  ```

  此命令会创建一个名为 `MyTrigger` 的计划触发器 ，该触发器每天在 UTC 时间中午 12:00 运行，并启动一个名为 `MyCrawler` 的爬网程序。该触发器在创建时处于激活状态。

有关更多信息，请参阅 [AWS Glue 触发器](about-triggers.md)。

# 用于作业和爬网程序的基于时间的计划
<a name="monitor-data-warehouse-schedule"></a>

您可以在 AWS Glue 中定义用于作业和爬网程序的基于时间的计划。这些计划的定义使用类似于 Unix 的 [cron](http://en.wikipedia.org/wiki/Cron) 语法。您可以按 [协调世界时 (UTC)](http://en.wikipedia.org/wiki/Coordinated_Universal_Time) 指定时间，计划的最小精度是 5 分钟。

要了解有关配置任务和爬网程序以使用计划运行的详细信息，请参阅[使用触发器启动作业和爬网程序](trigger-job.md)。

## Cron 表达式
<a name="CronExpressions"></a>

Cron 表达式有六个必填字段，之间以空格分隔。

**语法**

```
cron(Minutes Hours Day-of-month Month Day-of-week Year)
```


| **字段** | **值** | **通配符** | 
| --- | --- | --- | 
|  分钟  |  0-59  |  , - \$1 /  | 
|  小时  |  0-23  |  , - \$1 /  | 
|  Day-of-month  |  1-31  |  , - \$1 ? / L W  | 
|  Month  |  1-12 或 JAN-DEC  |  , - \$1 /  | 
|  星期几  |  1-7 或 SUN-SAT  |  , - \$1 ? / L  | 
|  Year  |  1970-2199  |  , - \$1 /  | 

**通配符**
+ **,**（逗号）通配符包含其他值。在 `Month` 字段中，`JAN,FEB,MAR` 将包含 January、February 和 March。
+ **-**（破折号）通配符用于指定范围。在 `Day` 字段中，1-15 将包含指定月份的 1-15 日。
+ **\$1**（星号）通配符包含该字段中的所有值。在 `Hours` 字段中，**\$1** 将包含每个小时。
+ **/**（正斜杠）通配符用于指定增量。在 `Minutes` 字段中，您可以输入 **1/10** 以指定从一个小时的第一分钟开始的每个第十分钟（例如，第 11 分钟、第 21 分钟和第 31 分钟）。
+ **?**（问号）通配符用于指定一个或另一个。在 `Day-of-month` 字段中，您可以输入 **7**，如果您不介意 7 日是星期几，则可以在“星期几”字段中输入 **?**。
+ ** 或 ** 字段中的 `Day-of-month`L`Day-of-week` 通配符用于指定月或周的最后一天。
+ `Day-of-month` 字段中的 **W** 通配符用于指定工作日。在 `Day-of-month` 字段中，`3W` 用于指定最靠近当月的第三周的日。

**限制**
+ 您无法在同一 cron 表达式中为 `Day-of-month` 和 `Day-of-week` 字段同时指定值。如果您在其中一个字段中指定了值，则必须在另一个字段中使用 **?**（问号）。
+ 不支持产生的速率快于 5 分钟的 Cron 表达式。

**示例**  
在创建计划时，您可以使用以下示例 cron 字符串。


| 分钟 | 小时 | 日期 | 月份 | 星期几 | 年 | 含义 | 
| --- | --- | --- | --- | --- | --- | --- | 
|  0  |  10  |  \$1  |  \$1  |  ?  |  \$1  |  每天上午的 10:00 (UTC) 运行  | 
|  15  |  12  |  \$1  |  \$1  |  ?  |  \$1  |  每天在下午 12:15 (UTC) 运行  | 
|  0  |  18  |  ?  |  \$1  |  MON-FRI  |  \$1  |  每星期一到星期五的下午 6:00 (UTC) 运行  | 
|  0  |  8  |  1  |  \$1  |  ?  |  \$1  |  每月第 1 天上午 8:00 (UTC) 运行  | 
|  0/15  |  \$1  |  \$1  |  \$1  |  ?  |  \$1  |  每 15 分钟运行一次  | 
|  0/10  |  \$1  |  ?  |  \$1  |  MON-FRI  |  \$1  |  从星期一到星期五，每 10 分钟运行一次  | 
|  0/5  |  8-17  |  ?  |  \$1  |  MON-FRI  |  \$1  |  每星期一到星期五的上午 8:00 和下午 5:55 (UTC) 之间，每 5 分钟运行一次  | 

例如，要按计划在每天 12:15 UTC 运行，请指定：

```
cron(15 12 * * ? *)   
```

# 激活和停用触发器
<a name="activate-triggers"></a>

您可以使用 AWS Glue 控制台、 AWS Command Line Interface (AWS CLI) 或 AWS Glue API 激活或停用触发器。

**激活或停用触发器（控制台）**

1. 登录 AWS 管理控制台，然后打开 AWS Glue 控制台，网址为：[https://console.aws.amazon.com/glue/](https://console.aws.amazon.com/glue/)。

1. 在导航窗格中，于 **ETL** 下，选择 **Triggers (触发器)**。

1. 选中所需触发器旁边的复选框，然后在 **Action (操作)** 菜单上选择 **Enable trigger (启用触发器)** 以激活触发器，或选择 **Disable trigger (禁用触发器)** 以停用触发器。

**激活或停用触发器 (AWS CLI)**
+ 输入以下命令之一。

  ```
  aws glue start-trigger --name MyTrigger  
  
  aws glue stop-trigger --name MyTrigger
  ```

  启动触发器会激活触发器，停止触发器会停用触发器。当您激活按需触发器时，它会立即触发。

有关更多信息，请参阅 [AWS Glue 触发器](about-triggers.md)。