本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用创建Step Functions 状态机Amazon SAM
在本指南中,您将下载、构建和部署包含 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 applicationcd
project-directory
sam build
# Step 3 - Deploy your applicationsam deploy --guided
先决条件
本指南假定您已完成为操作系统安装 Amazon SAM CLI 中的步骤。它假定您已经完成了以下操作:
-
创建了一个Amazonaccount.
-
已配置 IM 权限。
-
已安装 Homebrew。注意:Homebrew 只是 Linux 和 macOS 的先决条件。
-
已安装 Amazon SAM CLI。注意:请确保您具有版本 0.52.0 或更高版本。您可以通过执行命令
sam --version
来检查您具有的版本。
第 1 步:下载示例Amazon SAM应用程序
要运行的命令:
sam init
按照屏幕上的提示选择以下内容:
-
模板: Amazon快速入门模板
-
语言:Python、Ruby、NodeJS、Go、Java 或 .NET
-
项目名称:(您选择的名称 - 默认为
sam-app
) -
快速入门应用程序:多步骤工作流程
什么是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 States Language中编写的应用程序的状态机定义。
您可以在 template.yaml
文件中看到以下条目,该条目指向状态机定义文件:
Properties: DefinitionUri: statemachine/stock_trader.asl.json
将状态机定义保留为单独的文件,而不是将其嵌入到Amazon SAM模板。例如,如果不在模板中包含状态机定义,则跟踪状态机定义的更改会更容易。您可以使用 Workflow Studio 创建和维护状态机定义,并将定义从控制台直接导出到 Amazon States 语言规范文件中,而无需将其合并到模板中。
有关示例应用程序的更多信息,请参阅项目目录中的 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 状态机是否已成功部署:
登录到Amazon Web Services Management Console然后打开 Step Functions 控制台https://console.aws.amazon.com/states/
. -
在左侧导航中,选择 State machines (状态机)。
-
在列表中查找并选择您的新状态机。它将被命名为 StockTradingStateMachine-
<unique-hash>
. -
选择 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要制作的 CLIAmazon服务调用。要解决此问题,您必须设置Amazon凭证。有关更多信息,请参阅 。设置Amazon凭证中的Amazon Serverless Application Model开发人员指南.
清除
如果您不再需要了Amazon您通过运行本教程创建的资源,则可以通过删除Amazon CloudFormation你部署的堆栈。
要使用 Amazon Web Services Management Console删除使用本教程创建的 Amazon CloudFormation 堆栈,请执行以下步骤:
登录到 Amazon Web Services Management Console 并打开 Amazon CloudFormation 控制台 https://console.aws.amazon.com/cloudformation
。 -
在左侧导航窗格中,选择 Stacks (堆栈)。
-
在堆栈列表中,选择 sam-app(或您创建的堆栈的名称)。
-
选择 Delete(删除)。
完成后,堆栈的状态将更改为 DELETE_COMPLETE。
或者,您可以通过执行以下 Amazon CLI 命令删除 Amazon CloudFormation 堆栈:
aws cloudformation delete-stack --stack-name
sam-app
--regionregion
验证已删除堆栈
对于两种删除方法Amazon CloudFormationstack,你可以通过转到https://console.aws.amazon.com/cloudformation