

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

# 使用 AWS 软件开发工具包服务集成收集 Amazon S3 存储桶信息
<a name="tutorial-gather-s3-info"></a>

本教程向您展示了如何使用 Amazon Simple Storage Service 执行 [AWS 开发工具包集成](supported-services-awssdk.md)。您在本教程中创建的状态机可以收集有关您的 Amazon S3 存储桶的信息，然后列出存储桶以及当前区域中每个存储桶的版本信息。

## 第 1 步：创建状态机
<a name="aws-sdk-create-state-machine"></a>

使用 Step Functions 控制台，您将创建一个包含 `Task` 状态的状态机，用于列出当前账户和区域中的所有 Amazon S3 存储桶。然后，您将添加另一个调用 `[HeadBucket](https://docs.aws.amazon.com/AmazonS3/latest/API/API_HeadBucket.html)` API 的 `Task` 状态，用于验证返回的存储桶是否可在当前区域访问。如果无法访问存储桶，`HeadBucket` API 调用将返回 `S3.S3Exception` 错误。您将包括一个用于捕获此异常的 `Catch` 块和一个作为后备状态的 `Pass` 状态。

1. 打开 [Step Functions 控制台](https://console.aws.amazon.com/states/home)，从菜单中选择**状态机**，然后选择**创建状态机**。

1. 选择**从空白创建**。

1. 为状态机命名，然后选择**继续**，在 Workflow Studio 中编辑状态机。

1. 在本教程中，您将在[代码编辑器](workflow-studio.md#wfs-interface-code-editor)中编写状态机的 [Amazon States Language](concepts-amazon-states-language.md) (ASL) 定义。要执行此操作，请选择**代码**。

1. 删除现有的样板代码并粘贴以下状态机定义。

   ```
   {
     "Comment": "A description of my state machine",
     "StartAt": "ListBuckets",
     "States": {
       "ListBuckets": {
         "Type": "Task",
         "Parameters": {},
         "Resource": "arn:aws:states:::aws-sdk:s3:listBuckets",
         "Next": "Map"
       },
       "Map": {
         "Type": "Map",
         "ItemsPath": "$.Buckets",
         "ItemProcessor": {
           "ProcessorConfig": {
             "Mode": "INLINE"
           },
           "StartAt": "HeadBucket",
           "States": {
             "HeadBucket": {
               "Type": "Task",
               "ResultPath": null,
               "Parameters": {
                 "Bucket.$": "$.Name"
               },
               "Resource": "arn:aws:states:::aws-sdk:s3:headBucket",
               "Catch": [
                 {
                   "ErrorEquals": [
                     "S3.S3Exception"
                   ],
                   "ResultPath": null,
                   "Next": "Pass"
                 }
               ],
               "Next": "GetBucketVersioning"
             },
             "GetBucketVersioning": {
               "Type": "Task",
               "End": true,
               "Parameters": {
                 "Bucket.$": "$.Name"
               },
               "ResultPath": "$.BucketVersioningInfo",
               "Resource": "arn:aws:states:::aws-sdk:s3:getBucketVersioning"
             },
             "Pass": {
               "Type": "Pass",
               "End": true,
               "Result": {
                 "Status": "Unknown"
               },
               "ResultPath": "$.BucketVersioningInfo"
             }
           }
         },
         "End": true
       }
     }
   }
   ```

1. 为状态机指定一个名称。为此，请选择默认状态机名称旁边的编辑图标**MyStateMachine**。然后，找到**状态机配置**，在**状态机名称**框中指定一个名称。

   对于本教程，请输入名称 **Gather-S3-Bucket-Info-Standard**。

1. （可选）在**状态机配置**中，指定其他工作流设置，例如状态机类型及其执行角色。

   保留**状态机设置**中的所有默认选项。

   如果您之前为状态机[创建了具有正确权限的 IAM 角色](procedure-create-iam-role.md)并想使用该角色，请在**权限**中选择**选择现有角色**，然后从列表中选择一个角色。或者选择**输入角色 ARN**，然后为该 IAM 角色的 ARN 获取该角色。

1. 在**确认角色创建**对话框中，选择**确认**继续。

   您也可以选择**查看角色设置**，返回至**状态机配置**。
**注意**  
如果您删除了 Step Functions 创建的 IAM 角色，Step Functions 在以后无法重新创建该角色。同样，如果您修改了该角色（例如，通过在 IAM 策略中从主体中删除 Step Functions），Step Functions 在以后也无法还原其原始设置。

   在[第 2 步](#aws-sdk-add-iam-permissions) 中，您将向状态机角色添加缺少的权限。

## 第 2 步：添加必要的 IAM 角色权限
<a name="aws-sdk-add-iam-permissions"></a>

要收集有关您当前区域的 Amazon S3 存储桶的信息，您必须向状态机提供访问 Amazon S3 存储桶所需的权限。

1. 在状态机页面上，选择 **IAM 角色 ARN**，打开状态机角色的**角色**页面。

1. 选择**添加权限**，然后选择**创建内联策略**。

1. 选择 **JSON** 选项卡，然后将以下权限粘贴到 JSON 编辑器中。  
****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Sid": "VisualEditor0",
               "Effect": "Allow",
               "Action": [
                   "s3:ListAllMyBuckets",
                   "s3:ListBucket",
                   "s3:GetBucketVersioning"
               ],
               "Resource": "*"
           }
       ]
   }
   ```

1. 选择**查看策略**。

1. 在**查看策略**下，为策略**名称**输入 **s3-bucket-permissions**。

1. 选择**创建策略**。

## 第 3 步：启动一个标准状态机执行
<a name="aws-sdk-run-standard"></a>

1. 在 **Gather-S3-Bucket-Info-Standard** 页面上，选择**启动执行**。

1. 在**启动执行**对话框中，执行以下操作：

   1. （可选）输入自定义执行名称，以便覆盖生成的默认执行名称。
**非 ASCII 名称和日志记录**  
Step Functions 对于状态机、执行、活动和标签接受包含非 ASCII 字符的名称。由于此类字符会 CloudWatch 阻止亚马逊记录数据，因此我们建议您仅使用 ASCII 字符，这样您就可以跟踪 Step Functions 的指标。

   1. 选择**启动执行**。

   1. Step Functions 控制台会将您引导到一个以您的执行 ID 为标题的页面。该页面被称为*执行详细信息*页面。在此页面上，您可以随着执行的进展或者在执行完成后查看执行结果。

      要查看执行结果，请在**图表视图**上选择各个状态，然后在[步骤详细信息](concepts-view-execution-details.md#exec-details-intf-step-details)窗格中选择各个选项卡，分别查看每个状态的详细信息，包括输入、输出和定义。有关可在*执行详细信息*页面上查看的执行信息的详细信息，请参阅[执行详细信息概览](concepts-view-execution-details.md#exec-details-interface-overview)。

## 第 4 步：运行一个快速状态机执行
<a name="aws-sdk-run-express"></a>

1. 使用[第 1 步](#aws-sdk-create-state-machine)中提供的状态机定义创建一个快速状态机。请确保您还包括[第 2 步](#aws-sdk-add-iam-permissions) 中所述的必要的 IAM 角色权限。
**提示**  
要与之前创建的标准状态机区分开来，请将快速状态机命名为 **Gather-S3-Bucket-Info-Express**。

1. 在 **Gather-S3-Bucket-Info-Standard** 页面上，选择**启动执行**。

1. 在**启动执行**对话框中，执行以下操作：

   1. （可选）输入自定义执行名称，以便覆盖生成的默认执行名称。
**非 ASCII 名称和日志记录**  
Step Functions 对于状态机、执行、活动和标签接受包含非 ASCII 字符的名称。由于此类字符会 CloudWatch 阻止亚马逊记录数据，因此我们建议您仅使用 ASCII 字符，这样您就可以跟踪 Step Functions 的指标。

   1. 选择**启动执行**。

   1. Step Functions 控制台会将您引导到一个以您的执行 ID 为标题的页面。该页面被称为*执行详细信息*页面。在此页面上，您可以随着执行的进展或者在执行完成后查看执行结果。

      要查看执行结果，请在**图表视图**上选择各个状态，然后在[步骤详细信息](concepts-view-execution-details.md#exec-details-intf-step-details)窗格中选择各个选项卡，分别查看每个状态的详细信息，包括输入、输出和定义。有关可在*执行详细信息*页面上查看的执行信息的详细信息，请参阅[执行详细信息概览](concepts-view-execution-details.md#exec-details-interface-overview)。