使用 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 应用程序。此应用程序创建一个模拟股票交易工作流程,该工作流程按预定义的时间表运行(请注意,该时间表默认情况下处于禁用状态以免产生费用)。

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


            显示向 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 '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:包含定义应用程序的 Amazon 资源的 Amazon SAM 模板。

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

您可以在 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 SAM CLI 创建的 Amazon S3 存储桶,然后使用 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 文件中找到的状态机定义相匹配。

故障排除

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 SAM CLI 能够进行 Amazon 服务调用。要解决此问题,您必须设置 Amazon 凭证。有关更多信息,请参阅《Amazon Serverless Application Model 开发人员指南》中的设置 Amazon 凭证

清除

如果您不再需要通过运行本教程创建的 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_COMPLETE

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

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

验证已删除堆栈

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