amazon-web-services - 如何使用 localstack 部署 SAM 堆栈?
问题描述
我编写了一个 SAM 堆栈,我可以在 AWS 上构建、打包和部署它。我也可以使用 start-local 或调用来测试。现在我需要测试其他 AWS 资源。我已将这些资源添加到我的 SAM 模板中。它在 AWS 上运行良好,但我正在寻找一种在 localstack 中部署我的 SAM 堆栈的方法(例如本地 dynamodb)。现在我必须使用 CLI 创建资源,然后我可以部署我的 SAM 堆栈(在这种情况下只有 lambda,API GW)。我怎样才能做到这一点?
解决方案
我刚刚经历了这个。我认为以下是正确的。
AWS SAM 是 Cloudformation 的包装器。所以你的 SAM 模板实际上是一个 Cloudformation 模板。您的 Cloudformation 模板定义了您的 lambda 和 dynamodb 等。当您部署到 AWS 时,您的所有 lambda 和 dynamodb 都会进入 AWS,您可以在云中进行测试。
当您在本地运行 AWS SAM 时,您会在本地(在 docker 容器中)运行 lambda,但它仍会访问 AWS 云中的资源。
LocalStack 确实有一个 CloudFormation 接口,因此应该可以部署您的 CloudFormation 模板文件。但是我遇到了一些问题并放弃了。
无服务器框架类似于 AWS SAM,因为它是一个用于开发无服务 (lambda) 代码并将其部署到 AWS 的框架。Serverless 有自己的 yaml 规范来定义堆栈。从 Cloudformation 转换为无服务器 yaml 需要一些工作。
localstack 有一个无服务器插件。然后可以将您的代码部署到 localstack。如果您的 lambdas 前面有 API Gateway,那么您可以点击一个本地 url,它会触发您的 lambdas。这完全在 localstack 中,不使用 AWS SAM。
此时您可能会发现您的代码仍然适用于真正的 AWS 服务。因此,正如 Andrew A. 所提到的,您需要将端点 url 更改为指向本地。为此,为了让您的代码在测试和生产中保持相同,您可以为每个服务端点使用环境变量。
正如 Andrew A. 提到的,应该可以使用 SAM local 运行代码,该代码访问 localstack 提供的资源。但是,如果这是在测试管道中完成的,那么最好保留一个工具。
推荐阅读
- html - 使用引导程序在 vue js 中的 json 中恢复它们
- java - CAS apereo 5.3:创建定制的 MFA
- apache-camel - JsonPath 语言中的骆驼简单表达式?
- python - Flask Deploy to Heroku Error 2019-04-16T09:17:52.610857+00:00 heroku[router]: at:error code:H10 desc:App crashed
- sql - 选择不同的(col a) max(colb)
- mysql - Where 子句在(插入前)触发器中不起作用,该触发器将值设置为来自不同表的列
- ios - 如何在不验证收据的情况下访问 iOS 收据字段/属性?
- python - 在精神病实验中操纵呈现的计时器
- python - 无法将 Deeplab 模型导出到冻结图
- python - 如何在没有 AWS Vault 的情况下使用 boto3?