使用收集 Amazon S3 存储桶信息AmazonSDK 服务集成 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 Amazon Web Services 服务入门

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

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

本教程介绍如何在Amazon开发工具包集成项目,该项目将创建一个标准状态机和一个 Express 状态机,每个状态机都具有相同的定义。它们将收集有关您的 Amazon S3 存储桶的信息,然后列出您的存储桶以及当前区域中每个存储桶的版本信息。

部署本教程中包含的 Amazon CloudFormation 堆栈将创建所有必需的资源,包括:

  • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon Step Functions标准状态机

  • 网络 ACL 和安全组都允许 (因此可到达您的实例) 的发起 ping 的Amazon Step Functions快速状态机

  • 相关 Amazon Identity and Access Management 角色和权限

有关更多信息,请参阅 。使用 CloudFormation 模板AWS::StepFunctions::StateMachine资源Amazon CloudFormation用户指南.

第 1 步:创建Amazon CloudFormation模板

  1. Amazon CloudFormation 模板源代码 部分复制示例代码。

  2. 将 Amazon CloudFormation 模板的源粘贴到本地计算机的文件中。

    在此示例中,文件名为 aws-sdk.yaml

第 2 步:创建堆栈

  1. 登录 Amazon CloudFormation 控制台

  2. 选择 Create Stack

  3. Choose a template (选择模板) 中,选择 Upload a template to Amazon S3 (将模板上传到 Amazon S3),然后选择 Choose File (选择文件)

  4. 浏览到aws-sdk.yaml文件,其中包含模板源代码.

  5. 选择 Open (打开),然后选择 Next (下一步)

  6. Specify Details (指定详细信息) 下,输入 Stack name (堆栈名称)

  7. Options (选项) 页面上,向下滚动并选择 Next (下一步)

  8. 在存储库的审核页面上,选择:

    我承认Amazon CloudFormation可能会创建 IAM 资源。

    我承认Amazon CloudFormation可使用自定义名称创建 IAM 资源。

    我承认Amazon CloudFormation可能需要以下功能:能力自动展开

  9. 选择Create.Amazon CloudFormation开始创建您的堆栈,并显示创建正在进行状态。在此过程完成后,Amazon CloudFormation 将显示 CREATE_COMPLETE 状态。

  10. (可选) 要显示您的堆栈中的资源,请选择堆栈,然后选择 Resources 选项卡。

    
            显示资源

第 3 步:在工作流工作室中查看状态机

  1. 登录到Step Functions 控制台.

  2. 选择您的新状态机之一,聚会-S3 桶-信息-标准或者聚会-S3 桶-信息-快递.

    
            选择状态机
  3. 选择 Edit

    状态机的定义。

  4. 选择工作流程. 您可以在 Step Functions 工作流工作室中查看和编辑状态机。

    
            显示工作流程

第 4 步:运行标准状态机的一次执行

  1. 如果您尚未登录,请登录Step Functions 控制台.

  2. 在存储库的状态机页面上,选择聚会-S3 桶-信息-标准.

  3. 选择 Start execution (开始执行)

  4. (可选)为执行输入一些内容。

    { "Comment": "Testing the Amazon SDK tutorial." }
  5. 选择 Start execution (开始执行)

    这些区域有:聚会-S3 桶-信息-标准启动执行。

  6. 在执行完成后,您可以在执行输出选项卡。

    
            执行等待回调

第 5 步:运行快速状态机的一次执行

  1. 如果您尚未登录,请登录Step Functions 控制台.

  2. 在存储库的状态机页面上,选择聚会-S3 桶-信息-快递.

  3. 选择 Start execution (开始执行)

  4. (可选)为执行输入一些内容。

    { "Comment": "Testing the Amazon SDK Express tutorial." }
  5. 选择 Start execution (开始执行)

    这些区域有:聚会-S3 桶-信息-快递启动执行。

  6. 在执行完成后,您可以在执行输出的 部分详细信息.

    
            执行结果

Amazon CloudFormation 模板源代码

使用此功能Amazon CloudFormation模板部署一个Amazon软件开发工具包集成Amazon Step Functions.

# Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: MIT-0 AWSTemplateFormatVersion: "2010-09-09" Transform: AWS::Serverless-2016-10-31 Description: "An example of using Aws-SDK service integrations to gather info on S3 buckets" Resources: ApplicationRole: Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Version: "2012-10-17" Statement: - Effect: "Allow" Principal: Service: - states.amazonaws.com Action: - "sts:AssumeRole" Policies: - PolicyName: AppPolicy PolicyDocument: Version: 2012-10-17 Statement: - Effect: Allow Action: - xray:PutTraceSegments - xray:PutTelemetryRecords - xray:GetSamplingRules - xray:GetSamplingTargets - s3:ListAllMyBuckets - s3:ListBucket - s3:GetBucketVersioning - s3:GetBucketLocation Resource: '*' StateMachineGetS3BucketInfoStandard: Type: AWS::Serverless::StateMachine Properties: Type: "STANDARD" Name: "Gather-S3-Bucket-Info-Standard" Role: !GetAtt ApplicationRole.Arn Definition: Comment: An example of using Aws-SDK service integrations to gather info on S3 buckets StartAt: ListBuckets States: ListBuckets: Type: Task Parameters: {} Resource: arn:aws:states:::aws-sdk:s3:listBuckets Next: Map Retry: - ErrorEquals: - States.ALL BackoffRate: 1 IntervalSeconds: 1 MaxAttempts: 3 Map: Type: Map Iterator: StartAt: GetBucketLocation States: GetBucketLocation: Type: Task Parameters: Bucket.$: "$.Name" Resource: arn:aws:states:::aws-sdk:s3:getBucketLocation ResultPath: "$.BucketLocationInfo" Next: Is In Current Region? Retry: - ErrorEquals: - States.ALL BackoffRate: 1 IntervalSeconds: 1 MaxAttempts: 3 Is In Current Region?: Type: Choice Choices: - And: - Variable: "$.BucketLocationInfo.LocationConstraint " IsPresent: true - Variable: "$.BucketLocationInfo.LocationConstraint " StringEquals: ca-central-1 Next: GetBucketVersioning Default: Add Unknown Version Info Add Unknown Version Info: Type: Pass End: true ResultPath: "$.BucketVersioningInfo" Result: Status: Unknown GetBucketVersioning: Type: Task End: true Parameters: Bucket.$: "$.Name" Resource: arn:aws:states:::aws-sdk:s3:getBucketVersioning ResultPath: "$.BucketVersioningInfo" Retry: - ErrorEquals: - States.ALL BackoffRate: 1 IntervalSeconds: 1 MaxAttempts: 3 End: true ItemsPath: "$.Buckets" StateMachineGetS3BucketInfoExpress: Type: AWS::Serverless::StateMachine Properties: Type: "EXPRESS" Name: "Gather-S3-Bucket-Info-Express" Role: !GetAtt ApplicationRole.Arn Definition: Comment: An example of using Aws-SDK service integrations to gather info on S3 buckets StartAt: ListBuckets States: ListBuckets: Type: Task Parameters: {} Resource: arn:aws:states:::aws-sdk:s3:listBuckets Next: Map Retry: - ErrorEquals: - States.ALL BackoffRate: 1 IntervalSeconds: 1 MaxAttempts: 3 Map: Type: Map Iterator: StartAt: GetBucketLocation States: GetBucketLocation: Type: Task Parameters: Bucket.$: "$.Name" Resource: arn:aws:states:::aws-sdk:s3:getBucketLocation ResultPath: "$.BucketLocationInfo" Next: Is In Current Region? Retry: - ErrorEquals: - States.ALL BackoffRate: 1 IntervalSeconds: 1 MaxAttempts: 3 Is In Current Region?: Type: Choice Choices: - And: - Variable: "$.BucketLocationInfo.LocationConstraint " IsPresent: true - Variable: "$.BucketLocationInfo.LocationConstraint " StringEquals: ca-central-1 Next: GetBucketVersioning Default: Add Unknown Version Info Add Unknown Version Info: Type: Pass End: true ResultPath: "$.BucketVersioningInfo" Result: Status: Unknown GetBucketVersioning: Type: Task End: true Parameters: Bucket.$: "$.Name" Resource: arn:aws:states:::aws-sdk:s3:getBucketVersioning ResultPath: "$.BucketVersioningInfo" Retry: - ErrorEquals: - States.ALL BackoffRate: 1 IntervalSeconds: 1 MaxAttempts: 3 End: true ItemsPath: "$.Buckets"