我已经编写了一个 SAM 堆栈,并且可以在 AWS 上构建、打包和部署它。我还可以使用 start-local 或 invoke 来测试。现在我需要测试其他 AWS 资源。我已将这些资源添加到我的 SAM 模板中。它在 AWS 上运行良好,但我正在寻找一种在 localstack(例如本地 dynamodb)中部署 SAM 堆栈的方法。现在我必须使用 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 转换到 Serverless yaml 需要一些工作。
localstack 有一个无服务器插件。然后就可以将代码部署到 localstack 了。如果您的 lambda 前面有 API Gateway,那么您可以点击一个本地 url 来触发您的 lambda。这完全在 localstack 内,不使用 AWS SAM。
此时您可能会发现您的代码仍然命中了真正的AWS服务。因此,您需要将端点 URL 更改为指向本地,正如 Andrew A. 提到的。为此,为了使测试和生产的代码保持相同,您可以为每个服务端点使用环境变量。
正如 Andrew A. 提到的,应该可以使用 SAM local 来运行代码,该代码访问 localstack 提供的资源。然而,如果这是在测试管道中完成的,那么最好保留一种工具。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)