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

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

使用创建 Step Functions 状态机Amazon SAM

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

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


            显示向 API 网关终端节点发送 GET 请求时调用的 Lambda 函数的图表

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

# Step 1 - Download a sample application. For this tutorial you # will follow the prompts to select an Amazon Quick Start Template # called 'Step Functions Sample App (Stock Trader)' sam init # Step 2 - Build your application cd project-directory sam build # Step 3 - Deploy your application sam deploy --guided

Prerequisites

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

  1. 已创建Amazonaccount.

  2. 已配置 IAM 权限。

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

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

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

要运行的命令:

sam init

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

  1. Template: Amazon 快速入门模板

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

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

  4. 快速入门应用程序: Step Functions 示例应用(股票交易员)

什么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:包含Amazon SAM定义应用程序的Amazon资源的费用。

  • statemachine/stockTrader.asl.json:包含在Amazon 状态语言中编写的应用程序的状态机定义。

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

Properties: DefinitionUri: statemachine/stock_trader.asl.json

有关示例应用程序的更多信息,请参阅项目目录中的 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 SAMCLI 提供多个 Lambda 运行时的抽象,以构建您的依赖项,并将所有构建构件复制到暂存文件夹中,以便所有内容都准备好打包和部署。sam build 命令将构建您的应用程序具有的任何依赖项,并将构建构件复制到 .aws-sam/build 下的文件夹中。

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

要运行的命令:

sam deploy --guided

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

什么Amazon SAM正在执行:

此命令将您的应用程序部署到Amazon云。它将获取您使用sam build命令,打包并将其上传到 Amazon S3 存储桶Amazon SAMCLI,并使用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 文件中找到的状态机定义相匹配。

Troubleshooting

SAM CLI 错误:“没有此类选项:--guided”

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

 
Error: no such option: --guided
            

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

SAM CLI 错误:“创建托管资源失败:找不到凭证”

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

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

这意味着您尚未设置Amazon凭据以启用Amazon SAMCLIAmazon服务调用。要解决此问题,您必须设置Amazon凭证。有关更多信息,请参阅 。设置Amazon凭证中的Amazon Serverless Application Model开发人员指南

清除

如果您不再需要Amazon资源,则可以通过删除Amazon CloudFormation堆栈。

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

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

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

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

  4. 选择 Delete (删除)

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

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

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

验证已删除堆栈

对于删除Amazon CloudFormation堆栈,您可以通过转到https://console.aws.amazon.com/cloudformation,选择堆栈,然后选择Deleted (已删除)在搜索文本框右侧的下拉菜单中。您应该在已删除堆栈的列表中看到您的堆栈名称 sam-app(或您创建的堆栈的名称)。