如何使用 localstack 部署 SAM 堆栈?

2023-11-21

我已经编写了一个 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(使用前将#替换为@)

如何使用 localstack 部署 SAM 堆栈? 的相关文章

随机推荐

  • 什么是基数以及它如何影响性能 (SQL Server)?

    我们有一个巨大的表 我需要在其中对单行进行更新 我不知道该行的主键 但我有一个在该表中唯一的 varchar 值 我还有该表中其他一些列的值 运行更新需要三分钟以上 我假设它进行了全表扫描 查看表上的索引 列上的索引的基数为零 页数为零 还
  • 强制 TextView 多行,不带 \n

    知道如何在视图内空间耗尽后强制文本视图转到新行吗 我想要发生的行为是 在不以编程方式找出大小并强制换行的情况下 我希望它自行发生 在此代码中 它强制按钮离开屏幕
  • 方法签名中的 params 关键字的真正含义是什么

    我正在浏览 Troelsen 的 Pro C 2010 并发现了有关 params 关键字方法修饰符的讨论 阅读文本 MSDN 和其他 tubez 来源 在我看来 从 params 获得的唯一东西就是能够将逗号分隔的值列表传递给方法 我编写
  • Android Studio 错误:无法在模拟器中启动 AVD

    错误 调整分区 e2fsck 大小失败 退出代码为 1 我已确保在设置 AVD 时完全按照此视频进行操作 每当我使用 x86 64 系统映像运行 AVD 时 我都会收到以下消息 无法在模拟器中启动 AVD 输出 创建文件系统 参数 大小 6
  • 如何使用私有构造函数从类创建对象?

    我有一个类游戏 它是我的主类 还有一个二类卡牌 Card 类的属性和构造函数是私有的 只有函数 init 是公共的 函数 init 检查值的合理性 如果一切正常 则构造函数将获取值并创建一个对象 现在我想在 Game 类中从 Card 类创
  • 在计算中使用布尔值以避免分支

    这是我想出的一些微观优化的好奇心 struct Timer bool running false int ticks 0 void step versionOne int mStepSize if running ticks mStepSi
  • 在 TypeScript 中使用外部模块

    假设我们在 TypeScript 中有以下 2 个外部模块 export module My Services Common export class Helper and export module My Services export
  • 如何在 python ggplot 中创建条形图?

    我正在使用yhat的ggplot 库 我有以下熊猫数据框 degree observed percent observed expected percent expected 0 0 0 0 0 0 0 044551 1 1 1 0 1 1
  • 将 Firebase 用户迁移到 AWS Cognito

    我目前有一个使用 Firebase 进行用户身份验证和存储数据的移动应用程序 我想从 Firebase 迁移到 AWS 从 Firebase 导出数据库非常简单 下载 JSON 导出并填充 AWS 如何将用户身份验证迁移到 Cognito
  • 对 numpy 中的分区索引进行分组 argmax/argmin

    Numpy s ufuncs 有一个reduceat在数组中的连续分区上运行它们的方法 所以不要写 import numpy as np a np array 4 0 6 8 0 9 8 5 4 9 split at 4 5 maxima
  • pytest 可以在测试类中运行测试吗?

    我决定将一些测试放在一个类中 示例代码如下 class IntegrationTests pytest mark integrationtest pytest mark asyncio async def test job self ass
  • 将 Thymeleaf 变量处理为 HTML 代码而不是文本

    我正在使用 Thymeleaf 处理 html 模板 我了解如何从控制器附加内联字符串 但现在我想将 HTML 代码片段附加到页面中 例如 让我们在我的 Java 应用程序中保留以下内容 String n span i class i st
  • python 中的 Pickle 队列对象

    我有一个使用队列对象列表的类 我需要腌制此类 包括保存在队列对象中的信息 例如 import Queue import pickle class QueueTest object def init self self queueList d
  • 静态方法和单元测试

    我一直在读到 在使用 TDD 时往往会避免使用静态方法 因为它们往往很难模拟 但我发现 单元测试最简单的方法是具有简单功能的静态方法 不必实例化任何类 鼓励简单 只做一件事 独立 等的方法 有人可以解释 TDD 最佳实践和务实轻松之间的这种
  • 出现错误:Route 中的 Route() 无法应用于 String

    我正在设计一个基于 Java 的 MongoDB 应用程序 但在使用 Spark 时遇到了障碍 package com tengen import spark Request import spark Response import spa
  • 使用同一按钮播放/暂停 [AVAudioPlayer]

    我怎样才能播放声音IBAction通过按UIbutton一次并通过再次按下按钮暂停它AVAudioPlayer 我也想改变它的状态UIButton何时播放声音以及何时不播放声音 这是我的代码 IBAction Beat if Media2
  • 在SVG中定义圆/弧动画

    有谁知道如何在 SVG 中定义动画圆弧 圆 使得圆弧从 0 度开始并以 360 度结束 您可以使用路径的 lineto 手动 绘制它并计算弧的位置
  • 组合 ggplot 和基础图形时使面板具有相同的边距

    我生成了一个结合了 ggplot 和基本图形的图形 t lt c 1 24 14 P lt 24 A lt 10 y lt A sin 2 pi t P 20 par mfrow c 2 1 plot y type l xlab Time
  • Qt5 信号/槽语法,带重载信号和 lambda

    我正在使用新的信号 槽连接语法 它对我来说工作得很好 除非我尝试连接一个过载的信号 MyClass public QWidget Q OBJECT public void setup QComboBox myBox new QComboBo
  • 如何使用 localstack 部署 SAM 堆栈?

    我已经编写了一个 SAM 堆栈 并且可以在 AWS 上构建 打包和部署它 我还可以使用 start local 或 invoke 来测试 现在我需要测试其他 AWS 资源 我已将这些资源添加到我的 SAM 模板中 它在 AWS 上运行良好