

# 使用 EventBridge 实现 AWS Glue 的自动化
<a name="automating-awsglue-with-cloudwatch-events"></a>

您可以使用 Amazon EventBridge 自动执行自己的 AWS 服务并自动响应系统事件，例如应用程序可用性问题或资源更改。AWS 服务中的事件将近乎实时传输到 EventBridge。您可以编写简单规则来指示您关注的事件，并指示要在事件匹配规则时执行的自动化操作。可自动触发的操作包括：
+ 调用 AWS Lambda 函数
+ 调用 Amazon EC2 Run Command
+ 将事件中继到 Amazon Kinesis Data Streams
+ 激活 AWS Step Functions 状态机
+ 通知 Amazon SNS 主题或 Amazon SQS 队列

将 EventBridge 与 AWS Glue 结合使用的部分示例如下：
+ 当 ETL 任务成功时激活 Lambda 函数
+ 当 ETL 任务失败时通知 Amazon SNS 主题

以下 EventBridge 由 AWS Glue 生成。
+ 针对 `SUCCEEDED`、`FAILED`、`TIMEOUT` 和 `STOPPED` 生成的 `"detail-type":"Glue Job State Change"` 事件。
+ 当超过作业延迟通知阈值时，则会针对 `RUNNING`、`STARTING` 和 `STOPPING` 作业运行生成 `"detail-type":"Glue Job Run Status"` 事件。必须设置作业延迟通知阈值属性才能接收这些事件。

  当超过作业延迟通知阈值时，每个作业运行状态仅生成一个事件。
+ 针对 `Started`、`Succeeded` 和 `Failed` 生成 `"detail-type":"Glue Crawler State Change"` 事件。
+ 计划的爬网程序启动失败时，会生成 `“detail_type”:“Glue Scheduled Crawler Invocation Failure”` 事件。在通知的详细信息中：
  + `customerId` 包含客户的账户 ID。
  + `crawlerName` 包含启动失败的爬网程序的名称。
  + `errorMessage` 包含调用失败的异常消息。
+ 自动管理的列统计数据任务运行启动失败时，会生成 `“detail_type”:“Glue Auto Statistics Invocation Failure“` 事件。在通知的详细信息中：
  + `catalogId` 包含与目录关联的 ID。
  + `databaseName` 包含受影响数据库的名称。
  + `tableName` 包含受影响表的名称。
  + `errorMessage` 包含调用失败的异常消息。
+ (cron) 计划的列统计数据任务运行启动失败时，会生成 `“detail_type”:“Glue Scheduled Statistics Invocation Failure”` 事件。在通知的详细信息中：
  + `catalogId` 包含与目录关联的 ID。
  + `databaseName` 包含受影响数据库的名称。
  + `tableName` 包含受影响表的名称。
  + `errorMessage` 包含调用失败的异常消息。
+ 列统计数据任务运行开始时，会生成 `“detail_type”:“Glue Statistics Task Started”` 事件。
+ 列统计数据任务运行成功时，会生成 `“detail_type”:“Glue Statistics Task Succeeded”` 事件。
+ 列统计数据任务运行失败时，会生成 `“detail_type”:“Glue Statistics Task Failed”` 事件。
+ 针对 `CreateDatabase`、`DeleteDatabase`、`CreateTable`、`DeleteTable` 和 `BatchDeleteTable` 生成 `"detail-type":"Glue Data Catalog Database State Change"` 的事件。例如，如果创建或删除表，系统会向 EventBridge 发送一条通知。请注意，您不能编写取决于通知事件的顺序或存在的程序，因为它们可能是乱序或缺失的。尽最大努力发出事件。在通知的详细信息中：
  + `typeOfChange` 包含 API 操作的名称。
  + `databaseName` 包含受影响数据库的名称。
  + `changedTables` 对于每个通知最多包含 100 个受影响的表的名称。当表名称过长时，可创建多个通知。
+ 针对 `UpdateTable`、`CreatePartition`、`BatchCreatePartition`、`UpdatePartition`、`DeletePartition`、`BatchUpdatePartition` 和 `BatchDeletePartition` 生成的 `"detail-type":"Glue Data Catalog Table State Change"` 事件。例如，如果更新表或分区，系统会向 EventBridge 发送一条通知。请注意，您不能编写取决于通知事件的顺序或存在的程序，因为它们可能是乱序或缺失的。尽最大努力发出事件。在通知的详细信息中：
  + `typeOfChange` 包含 API 操作的名称。
  + `databaseName` 包含其中包含受影响资源的数据库的名称。
  + `tableName` 包含受影响的表的名称。
  + `changedPartitions` 在一条通知中最多指定 100 个受影响的分区。当分区名称过长时，可创建多个通知。

    例如，如果有两个分区键 `Year` 和 `Month`，则 `"2018,01", "2018,02"` 会修改分区（其中 `"Year=2018" and "Month=01"`）和分区（其中 `"Year=2018" and "Month=02"`）。

    ```
    {
        "version":"0",
        "id":"abcdef00-1234-5678-9abc-def012345678",
        "detail-type":"Glue Data Catalog Table State Change",
        "source":"aws.glue",
        "account":"123456789012",
        "time":"2017-09-07T18:57:21Z",
        "region":"us-west-2",
        "resources":["arn:aws:glue:us-west-2:123456789012:database/default/foo"],
        "detail":{
            "changedPartitions": [
                "2018,01",
                "2018,02"
            ],
            "databaseName": "default",
            "tableName": "foo",
            "typeOfChange": "BatchCreatePartition"
            }
    }
    ```

有关更多信息，请参阅 [Amazon CloudWatch Events 用户指南](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/)。有关特定于 AWS Glue 的事件，请参阅 [AWS Glue 事件](https://docs.aws.amazon.com/AmazonCloudWatch/latest/events/EventTypes.html#glue-event-types)。