使用 Amazon SAM创建 Step Functions 状态机 - Amazon Step Functions
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

使用 Amazon SAM创建 Step Functions 状态机

在本指南中,您将下载、构建和部署包含 Amazon Step Functions 状态机的示例 Amazon SAM 应用程序。此应用程序创建一个模拟股票交易工作流程,该工作流程按预定义的时间表运行(请注意,该时间表默认情况下处于禁用状态以免产生费用)。

下图显示此应用程序的组件:

该图显示了本教程的工作流程。

以下是为创建示例应用程序而运行的命令的预览。有关其中每个命令的更多详细信息,请参阅本页后面的各个部分

# Step 1 - Download a sample application. For this tutorial you # will follow the prompts to select an Amazon Quick Start Template # called 'Multi-step workflow' sam init # Step 2 - Build your application cd project-directory sam build # Step 3 - Deploy your application sam deploy --guided

先决条件

本指南假设您已经完成了 Amazon SAM CLI为操作系统安装中的步骤。它假定您已经完成了以下操作:

  1. 已创建 Amazon 账户。

  2. 已配置的IAM权限。

  3. 已安装 Homebrew。注意:Homebrew 只是 Linux 和 macOS 的先决条件。

  4. 已安装 Amazon SAM CLI。注意:请确保您具有版本 0.52.0 或更高版本。您可以通过执行命令 sam --version 来检查您具有的版本。

第 1 步:下载示例 Amazon SAM 应用程序

要运行的命令:

sam init

按照屏幕上的提示选择以下内容:

  1. 模板: Amazon 快速入门模板

  2. 语言:Python、Ruby、NodeJS、Go、Java 或。 NET

  3. 项目名称:(您选择的名称 - 默认为 sam-app

  4. 快速入门应用程序:多步骤工作流

Amazon SAM 正在做什么:

此命令使用您为“项目名称”提示符提供的名称创建一个目录(默认为 sam-app)。目录的具体内容将取决于您选择的语言。

以下是选择其中一个 Python 运行时时的目录内容:

├── README.md
├── functions
│   ├── __init__.py
│   ├── stock_buyer
│   │   ├── __init__.py
│   │   ├── app.py
│   │   └── requirements.txt
│   ├── stock_checker
│   │   ├── __init__.py
│   │   ├── app.py
│   │   └── requirements.txt
│   └── stock_seller
│       ├── __init__.py
│       ├── app.py
│       └── requirements.txt
├── statemachine
│   └── stock_trader.asl.json
├── template.yaml
└── tests
    └── unit
        ├── __init__.py
        ├── test_buyer.py
        ├── test_checker.py
        └── test_seller.py

您可以看到两个特别有趣的文件,:

您可以在 template.yaml 文件中看到以下条目,该条目指向状态机定义文件:

Properties: DefinitionUri: statemachine/stock_trader.asl.json

将状态机定义保留为一个单独的文件而不是将其嵌入到 Amazon SAM 模板中会很有帮助。例如,如果您不将状态机定义嵌入到模板中,跟踪状态机定义的更改会更容易。您可以使用 Workflow Studio 创建和维护状态机定义,并将定义直接从控制台导出到 Amazon States Language 规范文件中,无需将其合并到模板中。

有关示例应用程序的更多信息,请参阅项目目录中的 README.md 文件。

第 2 步:构建应用程序

要运行的命令:

首先转到项目目录(也即,示例应用程序的 template.yaml 文件所在的目录;默认情况下是 sam-app),然后运行以下命令:

sam build

输出示例:

  
 Build Succeeded

 Built Artifacts  : .aws-sam/build
 Built Template   : .aws-sam/build/template.yaml

 Commands you can use next
 =========================
 [*] Invoke Function: sam local invoke
 [*] Deploy: sam deploy --guided
       

Amazon SAM 正在做什么:

Amazon SAM CLI附带了许多 Lambda 运行时的抽象来构建您的依赖项,并将所有构建工件复制到暂存文件夹中,以便所有内容都可以打包和部署。sam build 命令将构建您的应用程序具有的任何依赖项,并将构建构件复制到 .aws-sam/build 下的文件夹中。

步骤 3:将应用程序部署到 Amazon 云端

要运行的命令:

sam deploy --guided

按照屏幕上的提示操作。您只需通过 Enter 进行响应,即可接受交互式体验中提供的默认选项。

Amazon SAM 正在做什么:

此命令将您的应用程序部署到 Amazon 云端。它使用您使用sam build命令构建的部署项目,将其打包并上传到由创建的 Amazon S3 存储桶 Amazon SAM CLI,然后使用部署应用程序。 Amazon CloudFormation在部署命令的输出中,您可以看到正在对 Amazon CloudFormation 堆栈进行的更改。

您可以通过以下步骤验证示例 Step Functions 状态机是否已成功部署:

  1. 登录 Amazon Web Services Management Console 并打开 Step Functions 控制台,网址为https://console.aws.amazon.com/states/

  2. 在左侧导航中,选择 State machines (状态机)

  3. 在列表中查找并选择您的新状态机。它将被命名为 StockTradingStateMachine-<unique-hash>.

  4. 选择 Definition (定义) 选项卡。

您现在应该看到状态机的可视化表示。您可以验证可视化表示是否与在项目目录的 statemachine/stockTrader.asl.json 文件中找到的状态机定义相匹配。

故障排除

SAMCLI错误:“没有这样的选项:--guided”

执行 sam deploy 时,您会看到以下错误:

 
Error: no such option: --guided
            

这意味着您使用的是不支持 Amazon SAM CLI该--guided参数的旧版本。要修复此问题,您可以将版本更新 Amazon SAM CLI到 0.33.0 或更高版本,也可以省略命令中的--guided参数。sam deploy

SAMCLI错误:“无法创建托管资源:找不到凭据”

执行 sam deploy 时,您会看到以下错误:

 
Error: Failed to create managed resources: Unable to locate credentials
            

这意味着您尚未设置允许进行 Amazon 服务呼叫 Amazon SAM CLI的 Amazon 凭据。要解决此问题,您必须设置 Amazon 凭据。有关更多信息,请参阅《Amazon Serverless Application Model 开发人员指南》中的设置 Amazon 凭证

清除

如果您不再需要通过运行本教程创建的 Amazon 资源,则可以通过删除已部署的 Amazon CloudFormation 堆栈来移除这些资源。

要使用删除在本教程中创建的 Amazon CloudFormation 堆栈 Amazon Web Services Management Console,请执行以下步骤:

  1. 登录 Amazon Web Services Management Console 并打开 Amazon CloudFormation 控制台,网址为 https://console.aws.amazon.com/cloudformation

  2. 在左侧导航窗格中,选择堆栈

  3. 在堆栈列表中,选择 sam-app(或您创建的堆栈的名称)。

  4. 选择删除

完成后,堆栈的状态将更改为 DELETE_ COMPLETE

或者,您可以通过执行以下 Amazon CLI 命令来删除 Amazon CloudFormation 堆栈:

aws cloudformation delete-stack --stack-name sam-app --region region

验证已删除堆栈

对于删除 Amazon CloudFormation 堆栈的两种方法,您可以转到 https://console.aws.amazon.com/cloudformation,在左侧导航窗格中选择 Stacks,然后在搜索文本框右侧的下拉列表中选择 “已删除”,来验证堆栈已删除。您应该在已删除堆栈的列表中看到您的堆栈名称 sam-app(或您创建的堆栈的名称)。