本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
使用 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 applicationcd
project-directory
sam build
# Step 3 - Deploy your applicationsam deploy --guided
先决条件
本指南假设您已经完成了 Amazon SAM CLI为操作系统安装中的步骤。它假定您已经完成了以下操作:
-
已创建 Amazon 账户。
-
已配置的IAM权限。
-
已安装 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 资源的 Amazon SAM 模板。 -
statemachine/stockTrader.asl.json
:包含在使用 Amazon States 语言定义 Step Functions 工作流程中编写的应用程序的状态机定义。
您可以在 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 状态机是否已成功部署:
登录 Amazon Web Services Management Console 并打开 Step Functions 控制台,网址为https://console.aws.amazon.com/states/
。 -
在左侧导航中,选择 State machines (状态机)。
-
在列表中查找并选择您的新状态机。它将被命名为 StockTradingStateMachine-
<unique-hash>
. -
选择 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,请执行以下步骤:
登录 Amazon Web Services Management Console 并打开 Amazon CloudFormation 控制台,网址为 https://console.aws.amazon.com/cloudformation
。 -
在左侧导航窗格中,选择堆栈。
-
在堆栈列表中,选择 sam-app(或您创建的堆栈的名称)。
-
选择删除。
完成后,堆栈的状态将更改为 DELETE_ COMPLETE。
或者,您可以通过执行以下 Amazon CLI 命令来删除 Amazon CloudFormation 堆栈:
aws cloudformation delete-stack --stack-name
sam-app
--regionregion
验证已删除堆栈
对于删除 Amazon CloudFormation 堆栈的两种方法,您可以转到 https://console.aws.amazon.com/cloudformation