使用收集 Amazon S3 存储桶信息 AWS SDK服务集成 - AWS Step Functions

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

使用收集 Amazon S3 存储桶信息 AWS SDK服务集成

本教程向您展示了如何执行 AWS SDK与 Amazon 简单存储服务集成。您在本教程中创建的状态机可以收集有关您的 Amazon S3 存储桶的信息,然后列出存储桶以及当前区域中每个存储桶的版本信息。

第 1 步:创建状态机

使用 Step Functions 控制台,您将创建一个包含 Task 状态的状态机,用于列出当前账户和区域中的所有 Amazon S3 存储桶。然后,您将添加另一个Task状态来调用HeadBucketAPI以验证返回的存储桶是否可在当前区域访问。如果无法访问存储桶,则HeadBucketAPI调用将返回S3.S3Exception错误。您将包括一个用于捕获此异常的 Catch 块和一个作为后备状态的 Pass 状态。

  1. 打开 Step Functions 控制台,然后选择创建状态机

  2. 选择模板对话框中,选择空白

  3. 选择 “选择” 以在中打开 “工作流工作室” 设计模式

  4. 在本教程中,你将在中编写状态机的 Amazon States Language (ASL) 定义代码编辑器。要执行此操作,请选择代码

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

    { "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 } } }
  6. 为状态机指定一个名称。为此,请选择默认状态机名称旁边的编辑图标MyStateMachine。然后,找到状态机配置,在状态机名称框中指定一个名称。

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

  7. (可选)在状态机配置中,指定其他工作流设置,例如状态机类型及其执行角色。

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

    如果您之前为状态机创建了一个具有正确权限的IAM角色并想使用该角色,请在权限选择 “选择现有角色”,然后从列表中选择一个角色。或者选择 “输入角色”,ARN然后ARN为该IAM角色提供。

  8. 确认角色创建对话框中,选择确认继续。

    您也可以选择查看角色设置,返回至状态机配置

    注意

    如果你删除 Step Functions 创建的IAM角色,Step Functions 以后将无法重新创建它。同样,如果您修改角色(例如,通过从IAM策略的主体中删除 Step Functions),Step Functions 以后将无法恢复其原始设置。

    第 2 步 中,您将向状态机角色添加缺少的权限。

步骤 2:添加必要的IAM角色权限

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

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

  2. 选择添加权限,然后选择创建内联策略

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

    { "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "s3:ListAllMyBuckets", "s3:ListBucket", "s3:GetBucketVersioning" ], "Resource": "*" } ] }
  4. 选择查看策略

  5. 查看策略下,为策略名称输入 s3-bucket-permissions

  6. 选择创建策略

第 3 步:启动一个标准状态机执行

  1. Gather-S3-Bucket-Info-Standard 页面上,选择启动执行

  2. 启动执行对话框中,执行以下操作:

    1. (可选)输入自定义执行名称以覆盖生成的默认值。

      非ASCII姓名和日志

      Step Functions 接受状态机、执行、活动和包含非ASCII字符的标签的名称。由于此类字符不适用于亚马逊 CloudWatch,因此我们建议您仅使用ASCII字符,以便您可以跟踪中的指标 CloudWatch。

    2. 选择启动执行

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

      要查看执行结果,请在图表视图上选择各个状态,然后在步骤详细信息窗格中选择各个选项卡,分别查看每个状态的详细信息,包括输入、输出和定义。有关可在执行详细信息页面上查看的执行信息的详细信息,请参阅执行详情概述

第 4 步:运行一个快速状态机执行

  1. 使用第 1 步中提供的状态机定义创建一个快速状态机。确保您还包括步骤 2 中所述的必需IAM角色权限。

    提示

    要与之前创建的标准状态机区分开来,请将快速状态机命名为 Gather-S3-Bucket-Info-Express

  2. Gather-S3-Bucket-Info-Standard 页面上,选择启动执行

  3. 启动执行对话框中,执行以下操作:

    1. (可选)输入自定义执行名称以覆盖生成的默认值。

      非ASCII姓名和日志

      Step Functions 接受状态机、执行、活动和包含非ASCII字符的标签的名称。由于此类字符不适用于亚马逊 CloudWatch,因此我们建议您仅使用ASCII字符,以便您可以跟踪中的指标 CloudWatch。

    2. 选择启动执行

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

      要查看执行结果,请在图表视图上选择各个状态,然后在步骤详细信息窗格中选择各个选项卡,分别查看每个状态的详细信息,包括输入、输出和定义。有关可在执行详细信息页面上查看的执行信息的详细信息,请参阅执行详情概述