

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

# 启动 Step Functions 工作流以响应事件
从开始工作流程 EventBridge

您可以执行 Amazon Step Functions 状态机来响应由亚马逊 EventBridge 规则路由到 Step Functions 作为目标的事件。

以下教程向您展示如何将状态机配置为 Amazon EventBridge 规则的目标。每当向亚马逊简单存储服务 (Amazon S3) Simple Storage Service 存储桶中添加文件时， EventBridge 该规则都会启动状态机。

这种方法的实际应用示例是：创建一个状态机，对添加到存储桶中的图像文件运行 Amazon Rekognition 分析，以进行分类并分配关键字。

在本教程中，您通过将文件上传至 Amazon S3 存储桶来启动一个 `Helloworld` 状态机执行。然后，您可以查看该执行的示例输入，以确定发送到的 Amazon S3 事件通知的输入中包含的信息 EventBridge。

## 先决条件：创建状态机


在将状态机配置为 Amazon EventBridge 目标之前，必须先创建状态机。
+ 要创建基本状态机，请参阅[创建使用 Lambda 函数的状态机](tutorial-creating-lambda-state-machine.md)教程。
+ 如果您已有 `Helloworld` 状态机，请继续到下一个步骤。

## 第 1 步：在 Amazon S3 中创建一个存储桶


现在您已有 `Helloworld` 状态机，则需要创建一个用于存储文件的 Amazon S3 存储桶。在本教程的步骤 3 中，您设置了一条规则，以便在文件上传到此存储桶时， EventBridge 触发状态机的执行。

1. 导航到 [Amazon S3 控制台](https://console.amazonaws.cn/s3/)，然后选择**创建存储桶**，创建要在其中存储文件的存储桶并触发 Amazon S3 事件规则。

1. 输入**存储桶名称**，如 `username-sfn-tutorial`。
**注意**  
在 Amazon S3 中所有 Amazon 区域的所有现有存储桶名称中，存储桶名称必须是唯一的。使用你自己的名字*username*来使这个名字独一无二。您需要在同一个 Amazon 区域中创建所有资源。

1. 保留此页面上的所有默认选项，然后选择**创建存储桶**。

## 第 2 步：使用以下方式启用 Amazon S3 事件通知 EventBridge


创建 Amazon S3 存储桶后，将其配置为在您的 S3 存储桶中发生某些事件（例如文件上传） EventBridge 时向其发送事件。

1. 导航到 [Amazon S3 控制台](https://console.amazonaws.cn/s3/)。

1. 在**存储桶**列表中，请选择要为其启用事件的存储桶的名称。

1. 选择**属性**。

1. 向下滚动页面以查看 “**活动通知**” 部分，然后在 “**Amazon**” EventBridge 子部分中选择 **“编辑”**。

1. 在 “**向亚马逊 EventBridge 发送有关此存储桶中所有事件的通知**” 下，选择 “**开**”。

1. 选择**保存更改**。
**注意**  
启用后 EventBridge，更改大约需要五分钟才能生效。

## 第 3 步：创建 Amazon EventBridge 规则


在您拥有状态机并创建 Amazon S3 存储桶并将其配置为向其发送事件通知后 EventBridge，创建 EventBridge 规则。

**注意**  
您必须在与 Amazon S3 存储桶相同的 Amazon 区域中配置 EventBridge 规则。

### 创建规则


1. 导航至 [Amazon EventBridge 控制台](https://console.amazonaws.cn/events/)，选择**创建规则**。
**提示**  
或者，在 EventBridge 控制台的导航窗格中，选择 “**总线**” 下的 “**规则**”，然后选择 “**创建规则**”。

1. 输入规则的**名称**（例如 `S3Step Functions`），然后根据需要输入规则的**描述**。

1. 对于**事件总线**和**规则类型**，请保留默认选择。

1. 选择**下一步**。这将打开**构建事件模式**页面。

1. 向下滚动到**事件模式**部分，然后执行以下操作：

   1. 对于**事件源**，保留**Amazon 事件或 EventBridge 合作伙伴事件**的默认选择。

   1. 对于 **Amazon 服务**，选择 **Simple Storage Service (S3)**。

   1. 对于**事件类型**，选择 **Amazon S3 事件通知**。

   1. 选择**特定事件**，然后选择**已创建对象**。

   1. 选择**按名称的特定存储桶**，然后输入您在[第 1 步](#tutorial-cloudwatch-events-s3-bucket)中创建的存储桶名称 (`username-sfn-tutorial`)。

   1. 选择**下一步**。这将打开**选择目标**页面。

### 创建目标


1. 在**目标 1** 中，保留 **Amazon 服务**的默认选择。

1. 在**选择目标**下拉列表中，选择 **Step Functions 状态机**。

1. 在**状态机**列表中，选择您[之前创建](#tutorial-cloudwatch-events-s3-prereqs)的状态机（例如 `Helloworld`）。

1. 保留页面上的所有默认选项，然后选择**下一步**。这将打开**配置标签**页面。

1. 再次选择**下一步**。这将打开**查看并创建**页面。

1. 查看规则详细信息并选择**创建规则**。

   规则已创建并显示 “**规则**” 页面，其中列出了您的所有 Amazon EventBridge 规则。

## 第 4 步：测试规则


现在一切就绪，试验将文件添加到 Amazon S3 存储桶，然后查看生成的状态机执行的输入。

1. 将一个文件添加到 Amazon S3 存储桶中。

   导航到 [Amazon S3 控制台](https://console.amazonaws.cn/s3/)，选择您创建的存储文件的存储桶 (`username-sfn-tutorial`)，然后选择**上传**。

1. 添加文件，例如 `test.png`，然后选择**上传**。

   这将启动一个状态机执行，并以输入的形式传递来自 Amazon CloudTrail 的信息。

1. 检查您的状态机的执行情况。

   导航到 [Step Functions 控制台，然后选择您的亚马逊 EventBridge 规则中使用的状态机 (`Helloworld`)](https://console.amazonaws.cn/states/)。

1. 选择最近的状态机执行并展开**执行输入**部分。

   此输入包含诸如存储桶名称和对象名称之类的信息。在真实使用案例中，状态机可以使用此输入对该对象执行操作。

## 执行输入的示例


下面的示例展示了状态机执行的一个典型输入。

```
{
    "version": "0",
    "id": "6c540ad4-0671-9974-6511-756fbd7771c3",
    "detail-type": "Object Created",
    "source": "aws.s3",
    "account": "123456789012",
    "time": "2023-06-23T23:45:48Z",
    "region": "us-east-2",
    "resources": [
      "arn:aws:s3:::username-sfn-tutorial"
    ],
    "detail": {
      "version": "0",
      "bucket": {
        "name": "username-sfn-tutorial"
      },
      "object": {
        "key": "test.png",
        "size": 800704,
        "etag": "f31d8546bb67845b4d3048cde533b937",
        "sequencer": "00621049BA9A8C712B"
      },
      "request-id": "79104EXAMPLEB723",
      "requester": "123456789012",
      "source-ip-address": "200.0.100.11",
      "reason": "PutObject"
    }
  }
```