在本期节目中,我与 LocalStack 的创始人兼 CTO Waldemar Hummer 进行了交谈。我们讨论了 LocalStack 最新版本中的新功能,并重点介绍了一些最有趣的补充。对我来说,一个特别的亮点是可以端到端地可视化和排查事件驱动架构,并快速识别诸如缺少 IAM 权限等问题。LocalStack v4 中有很多令人兴奋的新功能!节目链接:我和 Waldemar 在 LocalStack v3 之后的对话LocalStack v4 发布公告我关于何时使用 Step Functions 与在 Lambda 中运行所有内容的博客文章主题曲:凯文·麦克劳德的《快乐星期一》链接:https://incompetech.filmmusic.io/song/3495-cheery-monday许可证:http://creativecommons.org/licenses/by/4.0</context> <raw_text>0 嗨,欢迎回到《真实世界无服务器》节目的结尾。今天我们再次欢迎 Waldemar Hammer,他是 LocalStack 的 CTO。伙计,又一年,又一个 LocalStack 的主要版本。是的,非常感谢你的邀请。很高兴再次来到这里。我知道我们大约一年前在 2024 年初发布 3.0 版本时有过一次谈话。而且
现在我们有一堆新的酷炫的东西要和 Locust Lake 4.0 一起展示。所以非常高兴来到这里,分享一些今天的更新。是的,我看到你们几个月前发布了公告,还看到你们在 re:Invent 上也很忙。我想有很多有趣的对话。但作为 4.0 版本的一部分,我看到了 Event Studio。这对我来说非常有趣。我还看到你们宣布了多云支持。所以你们不仅仅是……
模拟 AWS 了。现在你们正在扩展到其他云,还有 Snowflake。所以是的,非常想听听这个。但首先,你好吗?最近怎么样?
是的,非常棒。希望你和所有观众在新的一年里也有一个美好的开始。是的,正如你提到的,去年对我们来说非常忙碌,而且相当成功。我们一直在推出许多令人兴奋的新功能。正如你提到的,转向多云,除此之外,我们还完成了 CSA 融资轮,还有很多
非常令人兴奋的发展。我很高兴分享一些更新,包括事件处理和一些很酷的功能。我会尝试进行一些现场演示,你知道的,有点刺激,看看一切是否正常工作。但我希望这对每个人来说都很有趣。
是的,听起来不错。是的,我认为去年的演示非常有趣。我认为我们从评论和观众那里得到了一些非常好的反馈。人们事后告诉我,哦,是的,几年前我就听说过 LocalStack 了。它看起来与你向我们展示的完全不同,因为我认为很多人像我一样对此很感兴趣。
也许是之前的客户,当时它只是开源的,可以追溯到 LocalStack 1.0 版甚至更早的版本,那是一个与今天完全不同的产品。所以,是的,我们开始吧,多告诉我们一些关于 4.0 版本的信息?
当然。让我直接进入主题。我很快就会分享我的屏幕。对于那些没有看过我们去年录制的节目的人,我也会在下面的描述中添加一个链接,以便你们可以查看并观看 Waldemar 向我们展示的关于 LocalStack 3.0 版本的演示。但是是的,今天我们将学习更多关于 4.0 版本的信息。
太棒了。太棒了。是的。所以在深入演示之前,让我们先看一两张幻灯片,概述一下事情是如何发生的。
所以这确实是我们在旅程中的一个新的里程碑,我认为我去年也展示过类似的幻灯片,在那里我们几乎每年都会发布 LocalStack 的主要版本。所以 4.0 为我们在 2024 年 11 月的成就列表中增加了一个新的重要里程碑。
我们现在倾向于将主要版本的发布与 re:Invent 的时间框架对齐。通常总会有来自外部的巨大压力来推出新功能,还会创建我们在展位上可以展示的精彩演示和材料。所以今年对整个团队来说再次是一次非常令人兴奋的经历。
我们还在采用率和使用率方面继续看到非常好的数字,无论是在 GitHub star 数还是 Docker 拉取数方面,我们的贡献者名单也在不断增长。所以我们对我们拥有的庞大社区感到非常兴奋和感激,他们每天都在支持我们。
这是对一年回顾的总结。所以,再次强调,这对于我们来说非常忙碌。我们去年开始时进行了团队休假,我们让 LocalStack 团队聚在一起。这总是一个很好的方式,尤其是在远程公司中,可以聚在一起讨论正在发生的事情、今年的计划和愿景。
然后,正如你简要提到的那样,我们在 3 月份推出了第一个 Snowflake 模拟器版本。我们正在真正扩展我们产品的范围,超越 AWS,尽管 AWS 仍然是我们的核心业务和主要重点。
但实际上我们一直在幕后努力开发 Snowflake 和其他一些功能,例如临时实例,这是一种启动 LocalStack 托管环境以及 Azure 的方法。这还不是完全公开的内容。所以请继续关注未来几周的更多更新。
然后我们取得了一些巨大的成功。我们被评为 Infrared 100。我们实际上今年两次登上纳斯达克大厦,一次是在 6 月份,当时我们作为 Redpoint Ventures Infrared 的一部分被添加,另一次是在 9 月份完成 A 轮融资之后。然后是 11 月份的 4.0 版本,然后是 re:Invent,再次强调,能够参加这个大型活动,在那里我们看到所有社区和客户聚集在我们的展位上,这让我们充满活力。
是的,这只是展示了展位上的团队。再次强调,我喜欢提到这一点,因为它非常……对 AWS 表示衷心的感谢,他们将这一切整合在一起,并给了我们一个机会,即使像我们这样的小型创业公司也能在那里拥有一个展位,并与 AWS 英雄、社区建设者进行所有这些精彩的对话。这确实是今年最令人振奋和兴奋的活动之一,每个人都聚集在一起,讨论所有关于无服务器和 AWS 的事情。
我们还计划参加一些峰会。例如,几个月后将在伦敦举行峰会,以及在欧洲的其他一些峰会。希望在那里见到你和你们中的一些人。是的,我认为我会参加伦敦峰会,也许还会参加 4 月份在阿姆斯特丹举行的峰会。是的,是的,没错。太棒了。非常期待。从欧洲境内的旅行来看,这相当容易。所以我们肯定想参加其中的一些。
好的,让我们直接进入一些新闻和更新,LocalStack 4.0 及以后的新功能是什么。这只是试图总结团队在几乎整整一年时间里所构建的所有令人惊叹的东西。这真的很难指出,但例如,我们有一个全新的 Step Functions 提供程序。我们采用了一些服务,并从头开始完全重新实现了它们,并且
包括 Step Functions 以及 API Gateway,因为我们发现我们现有的实现并不完全面向未来,我们真的利用了这个主动性和机会从头开始重新实现它。
我们继续在 IAM 方面进行大量改进和创新。我也会在演示中简要介绍一下。我们正朝着几乎像安全顾问工具的方向发展,该工具允许你深入检查你的策略,并进行强制执行、软强制执行、IAM 流和其他操作。
我们正在增强 Kubernetes 支持,这尤其受到企业的喜爱,真正地在 Cube 环境中本地运行 LocalStack,例如为 Lambda 启动 Pod。所以在 Docker 中本地无缝实现的所有内容现在也正在本地移植到 Kubernetes,以使其在那里真正无缝且易于使用。
我们在 Web 应用程序中有很多新功能。我们的 Web 应用程序(你也会在演示中看到)确实是许多功能从可视化 UI 角度来看的入口门户。我们添加了许多新的资源浏览器、新的概述以及围绕 CloudPods 和遥测的功能。
有一些新的服务,例如 Apache Flink,这是 Iblis 不久前推出的服务,我认为它是 Kinesis Analytics 的继任者。所以,再次强调,这是经常被请求的服务之一,我们添加了它。一般来说,所有服务的奇偶校验增强都太多了,当然无法计算,但正如你提到的,如果你几年前查看 Locust Lake,现在它已经是一个完全不同的产品了。它已经完全改变了。
我们也越来越关注高级开发人员体验功能。在我这里列出的左侧是我们的新的 LocalStack SDK。我稍后也会谈到这一点,以及 Event Studio,正如你提到的,这是我们的新调试工具,它允许对无服务器应用程序进行详细的跟踪和洞察。
有一些即将推出的功能。AWS Replicator,我会简要介绍一下。这基本上是一种启用混合场景的方法,其中你的堆栈的一部分可能在本地运行,然后将你的本地环境连接到远程 AWS 资源。我们继续在这个领域进行创新。
CloudFormation,我们计划进行一些改进,包括全面支持更新。所以目前,有时进行更新可能会有点痛苦。我们已经支持了主要资源类型,但我们真的想确保所有资源的 CloudFormation 更新都能提供无缝的体验。
以及 Cloud Pods,这是我们的持久性机制,正如你以及一些听众所记得的那样。这基本上是一种持久化 LocalStack 实例状态的方法,然后稍后将状态注入回来。我们正在努力改进版本兼容性支持。所以基本上,如果你使用一个 LocalStack 版本存储 Cloud Pod,它也应该与未来的版本兼容,这目前仍然存在一些粗糙的边缘。
关于 80% Replicator 的一个快速问题。想法是,如果我有一个 API Gateway,它连接到例如 DynamoDB 表,所以我正在请求 API Gateway 并使用服务代理来执行获取和放置项目。那么想法是,你将在 LocalStack 上托管 API Gateway,但随后让它与真实的 DynamoDB 表进行通信吗?
没错。这就是我们支持的模式之一。我认为我们稍后会有一张关于此的幻灯片。基本上有不同的模式。你描述的是我们所说的代理模式,基本上,你知道,你获得了本地外观和感觉,本地交互。但在幕后,我们实际上是在调用真实的 AWS 资源。这就是代理模式。
我们还有复制模式或复制模式,你可以在提前说,例如,我想从某些参数存储区、S3 存储桶或 DynamoDB 表中复制内容。我想先将它复制到我的本地环境中,然后在我的本地机器上使用它。
好的。基本上有这些不同的方法。我认为这些方法的强大组合确实可以创造一种无缝的体验,你可以轻松地模糊本地和远程环境之间的界限。是的,这非常有趣,因为我最近与 V-State 的一些人以及 HookDeck 的一些人进行了交谈。
他们都内置了让你的应用程序的一部分在本地运行,而另一部分仍在托管的功能,以便你可以轻松地更改工作流程的一部分。例如,如果你使用 restate,你可以更改工作流程中的一个步骤,
并且可以在本地进行调试,但其他所有内容仍然将在云中、在托管平台上运行。所以看起来这是每个人都在做的事情,这很酷。是的,绝对的。所以我认为这确实是……你知道的,如果你结合了本地仿真、本地执行的全部功能,当然还有云的可扩展性和强大功能,我认为这确实是我们可以为 LocalStack 释放更多价值的地方。而且,是的。
当然,随着我们探索越来越复杂的企业场景,我们看到……你知道的,当然,本地机器的运行能力存在物理限制。这就是为什么提供这些易于连接到远程系统的连接点对于在那里取得成功至关重要。是的。
是的,尤其是在人们做越来越多 AI 方面的事情时,你知道,可能不希望在本地模拟的一项服务是 Bedrock 之类的东西,我认为这对你作为本地模拟器来说会带来很多有趣的挑战。
没错。你不会相信我之后会做一个简短的 Bedrock 会话,但这当然非常……当然不是云中可用模型的全部功能。是的。酷。但是是的,绝对有一些伟大的方向,我们正在与我们的客户群一起探索许多这些新功能,这就是为什么获得你对 LocalStack 的工作方式以及我们需要扩展的界限的反馈对我们如此重要和关键。
是的,有了这些,让我们也许可以深入研究几个演示。再次强调,我喜欢让这些事情保持互动性。然后,当然,我知道你通常也会问所有很棒的问题,所以我们可以从这里开始。所以我想展示的一件事是,我们也为 re:Invent 准备了这个,这是一个我们一起制作的小型应用程序,这是一个无服务器测验应用程序。所以基本上,它由一些后端组件和前端组件组成。
它基本上允许你使用多项选择题来创建一个测验应用程序。然后所有数据都将使用 DynamoDB 表存储。其中涉及一些使用 SQS 通知以及在后台进行的一些评分 Step Functions 等。所以这是一个相当大的无服务器应用程序,它展示了 LocalStack。
所以我现在可以继续部署整个应用程序。首先让我在这里将其导出为环境变量,然后我会继续说 LocalStack start。
启用调试模式,一旦它运行起来,我就可以在这里执行 docker ps,我们实际上可以看到它正在我们的容器中运行。典型的端口 456H 是规范的入口点,现在它已经运行起来,我们可以开始使用它了。
只需导航到正确的目录,我认为是 serverless quiz app。好的,让我们快速了解一下这个测验应用程序是如何定义的。所以如果我转到我的 IDE,我们会看到这是一个 CDK 应用程序。所以整个东西都被定义为一个名为 quiz app stack 的 CDK 应用程序。
它有几个不同的组件。这里有一个前端堆栈,它基本上作为 S3 网站、Web 应用程序存储桶进行部署,上面有一个 CloudFront 分发,以及其他一些组件。
所以在我们查看它之前,我会继续说 make deploy CDK。这现在基本上会继续使用我们的包装器脚本 CDK local,你们中的一些人可能熟悉它。它首先运行 CDK local bootstrap,它初始化堆栈,然后它基本上执行 CDK local deploy 并现在在本地部署此应用程序堆栈。
这可能需要大约半分钟或一分钟左右的时间。所以 CDK local,这就像你的 CLI 与 AWS local 类似吗?
没错,是的。我们有许多这些本地化客户端工具,正如你提到的那样,AWS local、CDK local、TF local,这是一个 Terraform 包装器。我们通常会保持这些 CLI 的接口相同。它基本上是真实事物的直接替代品,只是针对本地机器进行部署。
是的,我们现在可以看到,由于我启用了详细的调试日志,你可以看到现在正在进行的所有不同的部署,不同的 Lambda 函数、Step Function 状态机等等。当它在这里启动时,一旦它部署完毕,我们应该会获得一个 CloudFront 分发端点,然后你可以使用它来打开前端应用程序,这使我们能够使用此应用程序。
我只是快速查看一下是否有任何特别有趣的东西。我认为前端只是一个 node.js,我相信是 React.js 应用程序。然后我们在这里有我们的 lambda,用于获取测验、获取提交、进行评分、提交测验等等。所以这些基本上只是使用标准 Python 实现的 Python lambda。
所有这些都是由 Step Functions 触发的,还是由 API Gateway 触发的?它们是由不同类型的事件触发的。很多内容都通过 API Gateway 进行,这是来自前端应用程序的。还有一些通过队列(提交队列)进行。然后还有一些由 Step Function 状态机触发的,它发送 SES 电子邮件等等。
好的。顺便说一下,对于你的 Step Functions 提供程序,你是否支持他们几个月前引入的全局变量?不。
是的,我们支持。我还有一张关于这方面的幻灯片,因为与 AWS Step Functions 团队的合作非常成功。我们实际上一起发布了一个联合发布公告。这对我们来说是一个非常令人兴奋的合作关系。我稍后还有一些单独的幻灯片。酷。这是否意味着我们可以期待更多关于 LocalStack 上支持的第零天发布?绝对的。
- 绝对的,所以我们非常兴奋,所以这是与 AWS 更紧密合作的起点之一。已经有几个团队表达了兴趣,包括 Lambda 团队、EventBridge 团队等等。所以是的,希望这些第一天发布将在未来越来越频繁地发生。- 酷。
酷,所以现在这个应用程序已经部署了。所以再次强调,所有这些现在都在我的 LocalStack 实例中本地运行。我们现在可以在这里做的是,基本上我们可以在这里创建一个新的测验。我只是在这里进行一些测试。
你可以创建测试选项,三、四,你可以选择正确的答案,然后添加问题。最后,你可以说提交测验,对吧?这只是为了说明目的。然后你可以转到主页,它实际上现在在这里可用,我们可以开始运行这个特定的测验。
这只是为了说明目的。你可以在这里做的是转到我们的 Web 应用程序,也就是 app.localstack.cloud。正如我之前提到的,这确实是许多功能从可视化 UI 角度来看的入口门户。我们可以转到这里的资源浏览器,例如,转到 DynamoDB,例如,
并查看表。在这里,我们有我们的测验表。如果我们转到项目,我们可以例如在这里看到我们的测试已经添加了,它有一些随机生成的测验 ID,并且它是公开的。所以这基本上只是现在都存储在我们的本地 DynamoDB 表中了。
好的,这很好。我们当然也可以浏览它并开始播放,但我猜这更多是为了演示目的,所以没那么有趣。所以提交测验并完成。
现在,也许更有趣的部分是,让我们在这个示例上进行一些迭代,并查看它的不同方面,对吧?我想展示的第一件事是我们之前简要提到的 Event Studio,对吧?所以 Event Studio 确实是我们目前正在开发的新产品。它现在处于早期预览阶段,所以正在与早期采用者合作以获得反馈。
它基本上允许你以非常详细的方式调试和跟踪无服务器应用程序,直到单个组件的级别,它们是如何连接的,以及真正跟踪无服务器应用程序中的执行过程。对于那些熟悉 X-Ray 的人来说,它肯定与 X-Ray 有一些相似之处。
我们倾向于认为我们可以更进一步,例如在 LocalStack 中,我们有很多可能性真正展示所有有效负载和价格,并真正展示详细信息,包括诸如 IAM 策略警告或策略违规等内容,这可以真正帮助用户查明堆栈中发生的问题。
所以我们现在可以继续使用此应用程序试用 Event Studio。所以 Event Studio 目前作为扩展程序,LocalStack 扩展程序提供。所以如果我回到我的浏览器,转到我们之前所在的 app.localstack.cloud,在左侧你会找到我们的扩展程序。
Event Studio 这里是可以安装到实例中的扩展程序之一。只是为了提醒那些不熟悉扩展程序的人。扩展程序基本上是我们一段时间前开发的一种插件机制,它基本上可以通过附加功能来扩展 LocalStack 中的功能。例如,我们有这些 Terraform init 挂钩,它允许你为
Terraform 文件创建处理程序,然后你可以使用 init 挂钩、LocalStack init 挂钩,或者我们有这个名为资源图的东西以及其他一些东西。Event Studio 就在这里。我现在可以继续说,我想将其安装到实例实例中。
它实际上已经安装了,我现在可以使用我们之前部署的应用程序使用它。所以 Event Studio 的端点是这个。所以这只是我们在这里查看的本地端点。它与云系统没有交互。我们已经可以看到来自我们之前交互的已部署应用程序(我们的测验应用程序)的事件列表。
我现在可以转到其中一个事件,例如,我们可以看到从 API Gateway 开始的详细跟踪。我们可以看到请求类型、请求有效负载、API 类型是 AWS 代理,所有相关的这里的信息。然后我们可以一路跟踪调用到 Lambda,从那里开始,它连接到任何其他第三方或任何其他组件。
所以这再次强调,对我们来说还处于相对早期的阶段,但我认为我们在调试不同类型的场景时已经获得了一些非常好的反馈。通常情况下,在 AWS 中这有点像碰运气,你会考虑,好的,有效负载实际上是什么样的?我如何从这些传入的字段中提取正确的有效负载信息?例如,在 API Gateway 中,你可以看到这些数据。
详细的标头一起传递。所以你可以直接从这里获得非常详细的一键式信息。让我,所以这是调用。让我们看看 put 项目。这是一个稍微长一点的跟踪。所以这是我们实际放置或提交测验的一个,它也涉及一些 DynamoDB 交互。所以这里有 API Gateway、调用,然后我们实际上正在调用提交测验的 Lambda 函数,然后它实际上发送它。这是,
也有一些异步处理发挥作用的地方,对吧?所以 Lambda 将一个项目放入 SQS 队列,然后在这个时候,这个 Lambda 已经返回了,对吧?所以我们不再处于同步调用链中,但它也检测到这现在通过事件源映射异步触发另一个 Lambda 函数,该函数触发评分,然后将用户提交存储到动态表中,对吧?
这就是它几乎超越同步调用链,然后还将异步事件跟踪到数据库中的各自目标的地方,在这种情况下。你是否也跟踪流?这是 X-Ray 不支持的一件事。例如,我认为 X-Ray 和 Datadog 不支持……
当它通过例如 DynamoDB 或 Kinesis 流时发生的事件。这是 Lumigo 在实现端到端可追溯性方面所做的事情之一。Event Studio 怎么样?如果我有一个订阅 DynamoDB 流的 Lambda 函数,我是否会在之后看到另一个函数?
是的,这是一个很好的观点。顺便说一下,当我展示这个时,Lumigio 也浮现在脑海中,当然。简短的答案是肯定的。在当前的实现状态下,这仍在构建中。但当然,异步跟踪是 Event Studio 绝对提供的功能。正如你在这里看到的,SQS,我们基本上将每个项目跟踪到其目的地。
所以它就像跟踪 ID 附加到消息本身一样,然后由某些下游系统使用。在这种情况下,它是 Lambda。下一步将是,正如你提到的那样,例如 DynamoDB 流,如果你有一个流。是的。
X-Ray 仍然有一些不支持的东西。我认为 S3 也可能不支持,如果你转到例如 Lambda 到 S3,然后让 S3 通知触发,然后是 Lambda 函数,你也会在 X-Ray 跟踪中丢失它。有一些这样的情况,在 X-Ray 上仍然没有完全支持端到端。
这是可以理解的。我可以看出在整个过程中实现这一点并不容易。当然,你需要所有服务的支持才能确保你实际上正在传递此跟踪信息。但对我们来说,这真的是一种方式,我们看待 Event Studio 的方式是打开黑匣子,对吧?所以我们真的想尽可能多地了解在处理过程中内部真正发生的事情。
这在这里只是一个起点,但我们已经收到了一些关于如何使用它的非常令人兴奋的反馈。最终,正如你所看到的,这也构成了一种动态资源图。我的意思是,在这里,我们只是看到这个线性调用。但如果你考虑将所有这些跟踪组合在一起,我们实际上得到的是系统中所有交互的图形。这是我们对 Event Studio 的下一个发展方向。是的。
当然。另一个反馈是添加一个日志记录部分,以便你可以轻松地查看函数调用在此事务中的日志。
这也是Lumigo的一些不错的UI功能,我很喜欢,我一直都在用。是的,不,这是一个很好的反馈。当然,我们会把它反馈给团队。是的,正如你提到的,我认为这种力量也来自于拥有一个中心入口点,然后从中扩展,对吧?所以把它连接到日志,或者甚至能够直接点击这里的函数,然后它会把你带到资源浏览器,你可以检查状态。所以这里肯定还有很多导航需要添加。
但是,是的,对我们来说,这是一个非常激动人心的时刻,再次打开黑匣子,使这些交互更加可见,更容易访问。是的,所以所有这些使用Lambda的无服务器应用程序都是一个主要的用例,因为它们本身就非常适合事件源映射等等。所以这真的很令人兴奋。
更深入地了解正在发生的事情。我的意思是,你肯定已经使用了很多基于事件的应用程序、基于事件的逻辑,有时调试它并理解它的来源可能非常困难。我们正在实现的另一个特性是
老实说,这现在有点冒险,如果它能工作的话,我们有一个事件重放功能。让我看看它是否在这里工作,为此。我可能不应该选择这个特定的,
是的,好的,所以这是目前仍在开发中的东西,但基本的想法是你可以重放事件,对吧?所以不仅仅是这个东西,然后在这里,甚至像有一个副作用的方式,就像重复一个事件并查看它如何再次流过系统。对,是的。
对。而且,我想如果你说,哦,你运行了一个测试,失败了,你到这里,查看事务,找出,哦,错误是X、Y和Z。你回到你的代码,改变它,我想你启用了热重载。然后,在那之后,你可以修复你的问题,再次运行测试,重放失败的事件,然后你可以看到,哦,对了,现在它可以工作了。太好了,是的。
完全正确,百分之百正确。你刚才说的。很酷的一点是,你可以在执行链的任何点重新触发这个重放。所以你不必总是回到链的开头,而你可以直接在这里说,我现在很好奇,再试一次。
好的,这实际上成功了。这是一个不同的UI功能。所以你实际上可以真正地进入处理链中的每个步骤,并从那里重放事件。哦,这非常好。这是一个非常强大的功能。
太棒了。是的,绝对期待希望对此有更多很好的反馈。请大家检查一下,给我们反馈。这是一个你可以非常积极地影响开发的地方,因为我们在事件工作室中添加了更多功能。酷。好的,我们看过了。基本上,这只是我们刚才看到的屏幕截图。
值得一提的是,整个应用程序也可以作为CloudPod注入。作为对所有可能没有听说过CloudPods的人的复习,CloudPods是我们对LocalStack中状态的特定时间点快照的术语。
我们有时解释的术语是,它与Kubernetes pod无关,所以没有容器。它确实是持久性。把它想象成一个zip文件,它基本上是从LocalStack实例中提取出来的,你可以稍后将其注入回去。
我们已经提前为我刚才展示的应用程序准备了Cloud Pods,它实际上由两部分组成。一个是我们在看到的应用程序的基础设施和应用程序部分,以及一个包含一些预定义测验应用程序的数据层,我们可以将其注入到DynamoDB表中。所以让我快速重新启动LogoStack,因为我们正在调出它。
好的,LogoStack启动。然后我在这里,我可以复制粘贴。我们做的第一步是加载测验应用程序。这基本上是应用程序和基础设施。你会注意到的一件事是,之前的CDK部署可能需要一分钟,甚至更长时间。而CloudPod在几秒钟内就注入了,对吧?所以这非常快。一旦你创建了你的堆栈一次,重新创建它就非常快。
现在,作为第二步,Cloud Pods也可以相互组合。我们正在加载此应用程序的数据。所以我们在这里加载第二个Cloud Pod,它包含或包含我们现在可以在这里打开的测验的DynamoDB定义。让我看看我是否拥有正确的端点。这是一个不同的端点。分发。
正在执行另一个CloudFront分发列表,现在是这个端点。现在我们看到我们实际上预定义了三个测验,它们是这个CloudPod的一部分。我们可以选择,例如,这个AWS测验。让我们快速浏览一下。Jan,我相信你能够回答所有问题。哪个AWS服务主要用于托管应用程序和网站?
好吧,你可以做所有这些,但让我们选择S3。S3,好的。Amazon S3中的S3代表什么?简单存储服务是A。A,好的。哪个AWS数据库是完全托管的关系数据库?RDS。RDS,好的。酷。AWS响应事件运行代码,无需服务器管理。所以应该是Lambda,所以是B。是的。IAM,IAM代表什么?身份和访问管理,所以是B。好的。完美。提交。
让我们看看我们的分数是多少。应该相当不错。不错。我认为这是100%。我不确定我们是如何计算分数的,但我认为这是100%。无论如何,这只是为了展示,我们在这里准备的整个测验只是这个CloudPod定义的一部分,并且再次在几秒钟内加载到这个本地实例中。
这里的想法是,你得到了这个静态的数据快照,然后你可以很容易地将其加载到你的测试中,这样你就不需要某种脚本来查看数据,你可以只捕获这些数据,创建它们一次,创建一个快照,然后在你下次想要运行相同的测试用例时使用该快照。
没错。没错。所以我们现在经常看到的是,也许有一种CI管道,每当你将一些更改合并到你的主分支时,它就会运行,例如,它会启动你的应用程序的基础设施,进行所有部署,然后创建一个云pod,并将其作为最新的黄金pod推送,这是一个我们经常听到的术语。事实上,我们也对我们自己的云做了这个。
平台后端。所以基本上,我们用我们的应用程序看到的后端,比如这个应用程序使用的所有后端API,也用云pod进行测试和定义,对吧?在我们自己的云后端基础设施中。我们使用这个最新的黄金pod的概念来始终拥有最新的版本,然后可以在本地机器上快速启动。这是越来越被使用的东西。
在这种情况下,你将如何选择哪些资源是这个pod的一部分,哪些数据是这个pod的一部分?这是一个很好的问题。所以有一个pod save命令,它有点像pod load的反向命令。如果你看看……
这里的帮助文本,基本上我们可以指定应该包含在这个部分的服务。目前,这就是我们按服务进行细化的级别。我不确定的一件事是,你可能目前不能说,我只想要我DynamoDB中的一个表在该部分中,所以它真的是在服务的级别上。但是,是的,这就是你如何组合它们的基本方法。-好的,好的,明白了。
所以它是按服务,而不是按单个资源。是的。我不知道你们是否正在考虑这个问题。也许最好有一些——我想也许在控制台中有一些UI支持会很好,这样你就可以访问你创建的所有本地堆栈实例。你可以也许只选择你想要创建或包含到pod中的那些,然后也许这样做。是的。
是的,这实际上是一个很好的反馈。是的,也许某种复选框,你可以通过它来说,我想包含这个和这个,然后,你知道,创建Cloudflare。是的,也许这样的东西比完全通过CLI更容易做到。是的,是的。
这是真的。我想我们经常看到的是,我们,我想也许,你知道,为开发人员构建一个工具。我认为我们经常非常依赖CLI。首先从CLI开始。但是我认为我们有时应该更多地承认,一些UI优先的功能有时也会对用户有益。
酷。是的。所以我想简要介绍一下这个应用程序的另一个方面,那就是IAM。我认为我们在上次会议上也谈到了IAM。但这是我们正在进行增强和创新的地方。所以我想在这里简要地做一个快速的复习。
所以我们首先直接在Web UI中,我们现在可以非常轻松地控制IAM强制执行状态。默认情况下,IAM基本上是禁用的。所以,你知道,默认情况下,本地堆栈将允许所有系统,你可以运行所有操作。但是我们可以直接从这里的UI,我们实际上已经看到了一些内部轮询消息通过。我们也可以在这里禁用它们或
或过滤掉它们。直接从这里的UI,我现在可以说我们想要强制执行IAM策略,对吧?我们在这里部署的堆栈已经具备了所有IAM权限。所以在这里,当我刷新页面时,它会在后台调用Lambda函数,并且能够从DiamondDB获取项目,因为所有正确的权限都已经到位,因为我们也可以将相同的东西部署到AWS。
现在,我在为这次研讨会做准备时所做的是创建一个小的脚本,它基本上会禁用Lambda访问DynamoDB的测验表所需的一些策略。所以基本上我们接下来要做的是在我们这里的架构图中,
我们将切断这些Lambda函数中的一些到DynamoDB的测验表的访问。我们将删除Lambda的执行角色所需的基于角色的策略,然后看看本地堆栈如何对此做出反应。我这里有一个小脚本,我相信它被称为“bind updatePolicy”
所以这只是一个我之前写的小脚本,它基本上是,不要介意这里的Python,它基本上只是遍历这里的一些角色,并且它正在运行一个更新语句,放置角色策略,并且基本上从Lambda中删除DynamoDB佣金,对吧?我现在就运行它。Python,我认为我们将调用它,我认为它是disable。
好的?所以这很快,但我认为这应该已经切断了Lambda和DynamoDB表之间的轴线。现在让我们看看会发生什么。对,如果我在这里刷新页面,那可能不是真的。所以让我看看它是否真的有效。所以首先,让我们回到这里。所以IAM仍然强制执行,所以应该没问题。让我看看我是否做对了。更新策略。
所以让我们在这里做一个快速的打印语句,看看它是否真的到达这里。就是这样。让我们称之为enable和disable。让我们再试一次。好的,它没有到达那一点,这是不好的。所以我的脚本中有一些错误。是的,我在进入这个电话之前才把它放在一起,所以这显然是一个坏主意。所以有些东西不对劲。所以我们正在查看所有测验应用程序堆栈。如果它们不在范围内,我们将继续。
然后让我快速看看我们是否至少收到这个。让我们把它放在监视器中,如果我无法修复它,那么我们可以继续。但我正在获取角色。我正在获取角色,好的。但是它们可能不在范围内。角色角色名称。
-啊,当然,对不起,因为我之前用CDK堆栈测试过,但这实际上是我们部署的CloudPod。所以我们这里有不同的资源名称。它们没有前缀。好的,所以让我们对基本上所有角色都这样做。我只是在这里注释掉这部分。所以我们只是做一个硬的for策略名称,等等,在范围内。它现在抱怨什么?策略名称。好的,让我们看看。
好的,我认为这有效了。让我们再试一次。所以现在我们基本上删除了访问权限。不,它没有工作。是的,这就是当你当你做假设你更新了CDK应用程序本身并重新部署CDK应用程序时会发生的事情?是的,没错。这就是我打算做的。所以让我们快速做一个CDK,不应该花那么长时间。它会让它运行。等到我们开始。酷。只是
只需要一分钟左右,然后我们可以再运行一次。所以这实际上提出了一个潜在的有趣的用例,用于pod,pod的使用。所以潜在地,你是否能够说,你刚才在那里,问题是你有一个pod,所以事情略有不同。但是你是否可以,比如说,创建一个CDK版本,一个没有必要IAM权限的CDK应用程序版本?
一旦你创建了它,然后你创建一个pod,以便你下次可以使用pod来进行这样的演示,以便你可以说测试失败的情况。因为这对于一些更混乱的实验类型的情况非常有用,在这种情况下,你不需要,比如说,通过编写不同的脚本来撤消某些权限并必须在不同的测试之间重新执行它们来测试不同的场景,你可以创建一个pod,
代表你想要运行的不同情况,这样对于每种情况,这种情况将是,比如说,没有DynamoDB的IAM权限。然后一个可能是……
你没有其他权限,或者Lambda函数没有正确连接到事件桥,例如,然后你可以有不同的pod来代表不同的失败场景。一个是为了测试如果我们没有权限会发生什么,以测试我们的回退。另一个可能是测试我们的
小队列是否正常工作,例如。这将是一个用例,我将有不同的pod来代表不同的失败情况。所以你捕获了所有的设置,而不是让我的测试用例以这种方式编写所有这些设置步骤,我将有不同的pod预先创建来代表不同的失败条件。是的。
是的,这实际上是一个非常有趣的观点。是的,所以你可以真正拥有你的应用程序的基本定义,对吧?然后你……我的意思是,我们可以通过几种方法来实现这一点。或者在CDK堆栈本身中,我们可以……
我们可以只删除Lambda访问dynoed_b表的一些定义,例如。这将是更粗略的方法。或者另一种方法是说,也许我们只是没有快照所有IAM。-对,对,没错,是的。-是的,没错。然后基本上忽略它。然后你就有不同的失败条件来查看它,这是一个很好的用例。我将,
我将深入研究它,并可能为下次准备一个演示。太棒了。好的,听起来不错。好的,让我们回到看看我的小脚本现在是否有效。好的,我至少得到了一些更新。所以让我们看看这是否有效。再次仔细检查一次我们是否启用了IAM。我需要在这里刷新。启用流。我将强制执行……
禁用内部调用。现在让我们看看如果我刷新我们的应用程序会发生什么。好的,这当然是一个新的分发ID。所以我需要回去,CDK总是生成一个新的CloudFront分发。所以我在这里。
而且酷,是的,所以现在它告诉我没有可用的公共测验,这实际上来自于Lambda在后台出错的事实。如果我转到我们的列表这里,刷新它,
我认为最好从另一个方面来看。是的,所以我们可以看到我们已经有了一个错误状态。所以它试图做一个扫描,但是在这里我们看到这是实际进行该调用所需的策略,但它实际上被拒绝了,因为我们之前删除了该策略,对吧?
所以这就是你如何看到它是如何工作的。我们现在拥有的新创新之一是拥有软节点。我实际上可以现在禁用强制执行。我现在可以再次刷新应用程序。这现在应该给我一个……它只是一个警告信号,对吧?所以这次,如果我在这里刷新……
是的,它给了我一个警告。它应该实际上在后台进行了调用,所以我实际上很惊讶我没有在这里看到结果。但它通常只是做了一个软强制执行,对吧?所以它并没有完全阻止它,而只是通知你有一个警告,这里有一个策略冲突正在发生,但并没有完全阻止访问。所以这些是一些事情。是因为你的表是空的?
当然,对。是的,因为表和因为我们我们没有。我们删除了你拥有的两个部分。没错,百分之百正确。是的,没错。好吧,好吧,你完全正确。但是这些是我们在这里拥有的两个选项。对。所以是强制模式或软模式,它基本上只向你发出警告,某些东西是不可访问的。酷。太棒了。所以回到我们的流程这里,并且
所以我们看了一下——哎呀,那是我们的——我将再次转到我的幻灯片这里。
所以我们看了一下Cloud Pods。我们谈到了IAM,对吧?所以这个新的软模式,它再次只向我们显示策略冲突,而不会直接阻止请求。如果你有像大型Terraform脚本这样的东西,这将非常有帮助和有用,例如,我们不知道先验需要哪些确切的权限才能运行所有API请求,例如,对吧?所以它实际上会显示这将是必需的,这将是必需的等等。
是的,所以只是继续讨论其他几个主题。所以我们之前已经简要地谈到了Step Functions协作。这对我们来说是非常令人兴奋的事情。在re:Invent时间段,AWS的Step Functions团队发布了两个新的公告,JSONata转换和变量。
所以JSONata基本上是一种方法,可以更灵活地转换步骤和步骤函数之间的数据。所以我相信以前它主要是基于XPath的,这有一些限制。所以你基本上必须添加额外的步骤来进行连接,例如。现在你可以很容易地只做一个字符串的&连接和许多其他不错的操作。
另一个选项是变量,它实际上是,你现在可以在步骤函数定义中有一个赋值块,并轻松使用这些JSONata表达式将值直接赋值给变量。同样,这大大减少了步骤函数的定义,并使它们更容易编写。
是的,所以AWS博客这里有一个令人兴奋的公告,我已经在这里链接了,它实际上提到了本地堆栈,这让我们感到自豪。我认为这是一个强有力的例子,我们可以真正与AWS同步前进,因为这是他们的客户非常需要的,我们能够在相同的发布日期推出实现。所以……
我对此非常兴奋,并希望看到更多与他们一起的零日发布日公告。
是的,另一个是Apache只是在谈论AWS中的一些新服务,在LocalStack 4.0中。所以Apache Flink,它正式被称为Kinesis Data Analytics服务,基本上是一种用于实时进行大规模数据处理的服务。Apache Flink作为一个开源项目已经存在相当长一段时间了,它也是LocalStack最需要的功能之一。
我不确定你是否会有时间,因为我知道我们已经快到时间了,但是这里还有一个不错的文档。它实际上是一个循序渐进的步骤。所以我们现在提供的许多文档实际上是
复制粘贴,你可以在这里真正地执行三个步骤,克隆一个示例存储库,运行Maven包,创建一些存储桶,部署一个应用程序,然后最终,你实际上会看到整个数据处理框架如何处理事件并将它们存储到S3存储桶中。所以现在可能不会逐步介绍这个,但是再次,请查看我们的文档。有很多好的示例,你可以直接复制粘贴,并在本地堆栈中快速尝试。
对,所以我想在其他新闻中,可能还有一些值得一提的要点,关于4.0周围的开发,但也展望未来。第一个是,如果你看看我们如何看待本地堆栈及其包含的不同层。
简而言之,我们使用本地堆栈提供的是这个在你的本地机器上运行的核心模拟器。首先,它启用了许多这些云服务API,对吧?像Lambda、Step Functions这样的东西。我们现在已经拥有100多种服务,它们可以通过一些云工具访问,比如Terraform或CDK,我们之前看到的。这确实是本地堆栈API公共消费的主要入口点之一。
除此之外,我们还提供位于本地堆栈之上的功能,真正扩展了基本功能,包括混沌API。我们今天没有看它,但这是一个将错误和延迟注入API的方法。我认为我们上次也看过这个。-是的,我们上次也谈到了。-是的,然后我们也有调试功能以及我们今天看到的事件,它们实际上位于模拟器功能之上,并添加了开发人员体验功能。
然后第三部分是我们认为的内部本地堆栈API。所以这些是
允许你以某些不同方式控制本地堆栈行为的内部API。到目前为止,我们实际上更多地是在内部使用它们,但我们现在实际上正在更多地开放它们,并且我们正在为不同的语言创建Swagger文档和SDK,以允许你以编程方式进行某些本地堆栈自动化。
例如,如果我们只是在我的浏览器中快速打开这个Swagger文档,你会看到,这实际上是从这里运行的容器中的内部本地堆栈REST API,你会看到我们多年来创建的许多便利端点。所以那些以_AWS作为前缀的,
是特定于服务的端点,例如,某些Cognito令牌端点或IEM,你可以在其中控制配置等等。然后所有带有_localstack的都是内部API,对吧?所以这里有混沌API,例如,我们有Cloud Pods API,你可以在其中进行,你知道,以各种方式配置状态。我们有
这实际上是另一个额外的AWS API。所以你可以看到这是一个不断增长的端点列表,我们现在在这里提供。我们正在使这些端点越来越容易访问,并围绕它创建SDK,以便你可以从你的测试场景和UCI管道等等开始控制本地堆栈。
嗯,肯定还有更多内容也会在接下来的几周和几个月内发布,因为我们正在构建这里的SDK和API。我们还将分享更多关于为什么这有用的例子,对吧?所以你可能会问自己,为什么我要使用它?我们有一堆,嗯,
高级测试场景,我们可以展示为什么,例如,在你的测试用例中注入混沌可能非常有益,并且我们为你提供了更轻松地做到这一点的工具。对,好的。是的,这正是我要问你的。所以为什么我要使用这个?是的。
没错,是的。我的意思是,在很大程度上,你在这里看到的大部分内容实际上是在后台透明地被我们的仪表板使用的,对吧?我们的Web应用程序,包括事件工具和所有内容,比如你在这里看到的许多功能都透明地调用这些内部端点,但我们也希望更多地开放它,因为我们相信有一些用例可以从中受益,但它必须,正如你提到的,它必须
更明确地暴露出来,并明确说明为什么使用它。-好的。
-对,是的,可能只有一两个要点。所以AWS Replicate是我们之前简要谈到的内容,所以它启用了这些混合场景。我只想在这里说明一点,那就是启用混合场景有不同的模式。我们有复制模式,它实际上允许你基本上从现有的AWS帐户开始,然后从那里获取详细信息。比如说一个SQS视图,或者其他什么。
然后基本上将这些资源复制到你的本地堆栈实例中,对吧?所以这是复制模式。第二个……当你复制资源时,你的意思是复制这些资源的配置?目标实际上是复制两者。所以,如果它是一个数据库,那么它将是模式加数据,或者对于SQS,它将是……对,好的。是的。好的,我明白了。但是……
是的,我认为主要还是配置,但也包括内容,对吧?因为我们也发现,能够拥有完整的SKS队列消息内容(可以本地复制)确实有一些好处。很酷的是,我们实际上可以创建克隆,甚至包括相同的ID,对吧?相同的messageId和handle,然后基本上会成为本地队列的一部分,对吧?
然后是第三种模式,我们称之为自动创建,这也是我们目前正在构建的内容,其理念是向API发出请求。如果它已经存在,则获取结果;如果不存在,则获取详细信息并延迟创建该内容的本地表示。从某种意义上说,它结合了这两种模式。是的,我认为我看到的关于复制模式的问题是,在复制数据方面,A,它可能相当慢,这取决于例如下载数据库表的大小。你还会导致,
例如,如果你从具有重试策略的SQS队列中提取数据,则可能会出现问题,突然之间,你可以强制实际队列中的数据进入死信队列。还有一些情况是你根本无法提取数据。例如EventBridge,事件是短暂的。还有一些其他事情可能需要……
你知道,我不知道,私有VPN、连接、访问RDS、Elasticache等数据库所需的正确网络设置,而且我认为有很多边缘情况。感觉有点,好吧,有时有点危险。是的,绝对的。特别是那些具有副作用的情况,对吧?例如,使用SQS消息可能会产生副作用,例如可见性时间。是的,完全正确。
以及EventBridge的短暂性,你可能更感兴趣的是复制规则,对吧?转发规则。是的。但是当然,再说一次,我想说这也在我们目前正在探索的领域中,对吧?因此,我们正在提供此工具。顺便说一句,这在CLI中也很容易访问。因此,我们现在有了这个LocalStack复制器CLI,其中
你可以基本上启动这些复制作业,并且有不同的配置来执行此操作。对。同样,为了节省时间,不详细介绍所有内容,但同样,我们非常希望从社区获得积极反馈以进一步构建它。因为我们确实看到了这些混合场景中的许多机会,但细节中存在魔鬼,对吧?因此,你真的需要弄清楚如何准确地配置它们以及所有内容。
酷。是的,也许最后一点只是快速指出的是,正如我在我们去年的时间表中所提到的那样,在2024年初,我们发布了Snowflake Logstack的第一个预览版本。正如我们所说,我们正在超越AWS。我们正在成为一个多云产品。我们正在与许多此新产品的早期采用者积极合作。如果您有兴趣,请联系我们
已经有很多功能可用。你可以创建数据库、表、模式、阶段、UDF和其他一些东西。因此,这绝对是一件随着我们前进而加快步伐的事情。这非常有趣。由于Snowflake和AWS正在扩展他们自己的合作伙伴关系并构建集成,因此我们已经可以开始展示一些非常酷的创新。例如,
例如,连接Kinesis流并将数据流式传输到Snowflake表中。或者,当然,S3存储桶可用于存储所谓的冰山表,这是一种可互操作的存储格式。因此,我们正在探索一些非常有趣的跨云用例。如果您对Snowflake感兴趣,我们很乐意收到您的反馈。
那么在这种情况下,您是否也支持新的S3表,这是一种S3托管冰山表?
还没有。非常在我们路线图中,非常积极。如果我们在几个月前就知道这一点,那么它可能已经存在了。但是是的,这确实是一个杀手级功能。感谢AWS开发了这个功能。我认为它真的很棒,就像扩展存储桶的概念,使它们真正具有模式感知,甚至能够进行查询一样。这是我们目前正在努力的事情。有……
实际上与Snowflake的工作方式有一些相似之处。是的。我们对此非常兴奋,但尚未可用。好的,酷。是的,太棒了。是的,酷。所以我想也许只是用简短的向社区致敬来结束,这将是令人兴奋的一年,2025年。所以我们有一个巨大的,我们充满活力,在我们面前有一个巨大的路线图。
今天我展示的许多预览版功能将在今年全年正式发布,包括Event Studio、AWS Replicator和新的网络体验。我今天在我们的网络UI中展示的内容,我们希望拥有完全更新的体验,因为它已经超出了它自身的大小。因此,我们正在重新设计
以及与AWS的更多令人兴奋的合作关系即将到来,对吧?因此,从Step Functions复制这种成功,并与Lambda和EventBridge团队合作,我猜,这里提到了这一点,目前还没有官方消息,但有一些非常早期的信号。
我们很乐意收到您的反馈。请在Slack社区、GitHub存储库中与我们联系,还有其他多种方式与我们联系。当然,始终关注Jan的网络研讨会以及他创建的所有好东西。因此,也要感谢您创建了许多非常相关的社区内容。很高兴来到这里。谢谢。
所以是的,我想非常感谢您向我们展示了你们LocalStack团队正在发生的事情。祝2025年好运。并期待你们将要做的工作,特别是围绕多云方面的工作,我认为这将非常有趣。
当然,对我来说,我已经使用AWS很长时间了,但我听说有人想使用Azure函数,他们过去在Lambda中遇到过与我们类似的问题。我很想知道你如何看待这两个云,当你尝试实现API时它们有何不同。
是的,100%。非常、非常、非常感兴趣的是,我们将从不同云堆栈的相似之处和差异中获得哪些经验教训。因此,我非常高兴能在今年分享更多信息,请大家继续关注。听起来不错。很高兴再次和你交谈。非常感谢您再次加入我们,告诉我们LocalStack E4发生了什么。是的,祝一切顺利。
非常感谢您的邀请。保重。我想我会在峰会上见到你。是的,期待着。酷。再见大家。下次见。好的,再见。再见。这就是另一集《真实世界无服务器》的全部内容。要访问节目笔记,请访问realworldserverless.com。如果您想学习如何构建可用于生产环境的无服务器应用程序,请查看我在productionreadyserverless.com上即将推出的课程。下次见。