首页 > 云计算 > 公有云实践 > 使用Terraform和验证模式加速无服务器部署
在本次会议中,探索使用Terraform构建无服务器应用程序的最佳实践和经验证的模式,以安全、可预测和可重复的方式进行。学习设计模块化、可重用架构的技术,以及本地测试应用程序的策略。了解如何在运营团队和开发团队之间管理所有权和关注点分离。获取有关高效将无服务器应用程序部署到云端的见解。熟悉开源框架,以加速您今天使用Terraform的无服务器之旅。离开时,您将掌握在组织的现代云架构中利用Terraform强大功能的实用技能。
以下是小编为您整理的本次演讲的精华。
本次会议由Anton主持,他是亚马逊云科技的无服务器架构师。他热情欢迎了满座的与会者,并介绍了另一位同名的Anton,他是Serverless Framework的作者。会议将重点介绍如何利用Terraform构建无服务器应用程序。Anton表示,他们将在会议中介绍大量内容,最后会分享一个二维码,其中包含所有幻灯片和内容。
Anton概述了会议议程,他们将深入探讨使用Terraform构建、测试、扩展和部署无服务器应用程序的过程。他向与会者保证,他们将分享可操作的内容,与会者可以在下周就将其应用于各自的环境中。Anton通过举手投票的方式了解了与会者对Terraform及其在无服务器环境中的应用的熟悉程度,后者的举手人数较少。
Anton随后强调了传统应用程序和无服务器应用程序之间的根本区别。在传统应用程序中,应用程序层和基础设施层是严格分离的,应用程序开发团队负责应用程序层,而基础设施层通常很厚。然而,在无服务器世界中,基础设施的概念,尤其是基础设施即代码的概念,被重新定义了。基础设施层变得更加精简,EC2实例和RDS数据库的数量减少。相反,Lambda函数和Step Functions等基础设施组件本质上就是应用程序本身的构建块。
Anton解释说,在无服务器世界中,基础设施即代码工具不再专属于基础设施或基础设施团队。应用程序开发团队越来越多地采用基础设施即代码,因为它可以让他们更高效地构建应用程序。此外,“基础设施即代码”(IaC)这个术语不再仅仅代表“基础设施即代码”,还代表“集成即代码”,因为构建块之间的连接也是使用Terraform等基础设施即代码工具来定义的。
这种转变导致了一种新的动态,应用程序开发团队使用基础设施代码,而基础设施团队仍在使用他们的基础设施即代码工具。两个团队需要共同努力,Terraform在促进这种协作方面取得了成功,因为两个团队都使用同一个工具,这在许多客户环境中都有体现。
对于会议的与会者,Anton假设他们对Terraform和无服务器概念(如Lambda函数和S3存储桶)有基本的了解。然后,他介绍了一个简单的无服务器应用程序,该应用程序从SQS队列接收消息,处理来自一个S3存储桶的图像,将其转换为HTML,并将其保存到另一个S3存储桶。Anton演示了如何使用Terraform定义所需的资源,从设置 sqs_managed_sse_enabled参数为 true的SQS队列资源开始,遵循亚马逊云科技推荐的静态加密最佳实践。
接下来,Anton展示了如何使用Terraform创建两个S3存储桶,强调了将所有权控制和访问控制等最佳实践编码到资源定义中的能力,这是亚马逊云科技针对S3存储桶的高度推荐做法。
然后,他继续创建一个Lambda函数执行角色,定义了两个语句,允许该函数从源S3存储桶读取并写入目标存储桶,遵循了最小特权访问的原则,这是安全审查中的常见要求,也是亚马逊云科技推荐的最佳实践。
Anton解释了使用基础设施即代码创建Lambda函数的三种不同方法。第一种方法是构建包含函数代码的zip包,并直接上传到Lambda服务。这种方法适用于压缩后不超过50MB、解压后不超过250MB的函数,非常适合原型设计和小型函数,符合亚马逊云科技的建议。
第二种方法是先将压缩的函数代码上传到S3,然后从那里创建Lambda函数,这样就可以克服大小限制,并在S3中留下已部署包的痕迹,这对于维护已部署包的历史记录很有用。
第三种方法是将函数代码构建为容器,推送到Amazon Elastic Container Registry (ECR),然后从容器镜像创建Lambda函数,适用于大小不超过10GB的函数,或者需要大型框架或依赖项的函数,符合亚马逊云科技对大型函数的建议。
接下来,Anton演示了如何在部署之前使用SAM CLI工具在本地测试无服务器应用程序。他运行了 sam local invoke命令,指定了Terraform配置中定义的Lambda函数的名称。该命令在本地模拟了Lambda环境,执行了函数并显示了日志,包括函数的响应,其中显示了生成的HTML正文。这种本地测试方法对于开发人员在部署到云端之前测试业务逻辑非常有用。
如果需要更全面的本地测试,涉及其他亚马逊云科技服务,Anton提到了LocalStack产品,它可以在本地模拟数十种亚马逊云科技服务,包括具有热交换功能的Lambda,允许开发人员在更接近实际亚马逊云科技环境的环境中测试他们的应用程序。
在讨论扩展无服务器应用程序的主题时,Anton强调了在团队和项目之间一致应用最佳实践的重要性。他介绍了Terraform中的模块化概念,即将可重用的组件和模式封装到模块中。然后,这些模块可以组合在一起创建无服务器架构,确保最佳实践的一致应用,并减少开发团队的认知负担,这是组织在扩展无服务器采用时面临的一个常见挑战。
Anton提供了一些常见模块的示例,如每天触发一次用于处理任务的周期性Lambda函数、具有重驱策略用于重试消息的SQS队列,以及基线Lambda函数。他演示了如何通过使用基础设施即代码定义在这些独立模块之间添加连接,从可重用的构建块创建复杂的架构。
Anton解释说,这些Terraform模块的生命周期通常会涉及一个平台团队或一群无服务器爱好者最初创建模块并将其存储在Git等存储库中。随着时间的推移,当应用程序开发团队使用这些模块并做出贡献时,这些模块就会变得更像应用程序组件,而不仅仅是基础设施资源。这种协作方式减少了开发团队在实现无服务器架构时的认知负担,这是拥有多个工程团队的组织面临的一个常见挑战。
Anton总结了使用Terraform扩展无服务器应用程序的过程,从普通的Terraform资源(初学者成熟度级别)开始,进而编写可重用的Terraform模块(高级级别),最终从自定义模块和开源社区模块中组合应用程序(专家级别)。他强调了serverless.tf项目作为一个开源的、由社区驱动的框架,提供了针对常见无服务器服务的Terraform 亚马逊云科技模块,组织可以利用这些模块来加速无服务器采用。
Serverless Framework的作者接手了演讲,详细讨论了serverless.tf项目。他解释说,serverless.tf是一个100%开源项目,旨在解决组织在采用Terraform进行无服务器开发时缺乏开发、构建、打包、部署和保护无服务器应用程序的工具的问题。
作者强调了serverless.tf中的Terraform Amazon Lambda模块是一个关键组件,旨在解决内置的 archive_file数据源在打包Lambda函数时的局限性。该模块支持各种打包场景,如为Node.js和Python运行时安装依赖项、为不同平台和架构构建包、使用Docker进行打包,以及与Poetry等工具集成,使组织能够更高效、更一致地打包Lambda函数。
作者还讨论了本地测试的重要性,并介绍了使用LocalStack模拟亚马逊云科技环境的做法,允许开发人员在部署到云端之前测试他们的业务逻辑,这在组织中是一种常见做法,可以在开发周期的早期发现问题。
在讨论跨服务集成时,作者解释了serverless.tf如何简化了集成API Gateway和Lambda等服务的过程。开发人员只需调用几个模块并指定所需的集成模式,而不必手动创建大量资源和IAM策略,这大大降低了复杂性和认知负担,这是组织在使用基础设施即代码集成多个亚马逊云科技服务时面临的一个常见挑战。
作者分享了项目结构的最佳实践,强调了将基础设施即代码和应用程序代码保持在近距离的monorepo方法的好处、模块化组织以获得更好的范围和理解,以及专用变量文件用于跨不同服务、区域和环境进行细粒度配置管理的重要性,这些都是拥有多个团队和环境的组织的常见需求。
为了管理团队和服务之间的依赖关系,演讲者演示了使用亚马逊云科技 Systems Manager Parameter Store、Terragrunt和Terramate的方法。这些工具允许团队在没有直接沟通的情况下共享和使用其他团队资源的输出,从而实现了依赖关系管理的自动化和可扩展方法,解决了组织中多个团队协作开发无服务器应用程序不同组件时面临的常见挑战。
Anton随后继续演讲,讨论了使用Terraform进行大规模部署。他强调了在使用普通Terraform时,管理跨多个团队、环境、账户和区域的依赖关系的挑战,这是大型组织中具有复杂部署需求的常见场景。
为了解决这些挑战,Anton介绍了HashiCorp新推出的Terraform Stacks功能。Terraform Stacks允许定义组件(模块)并跨不同环境、账户和区域多次部署这些组件。Anton进行了现场演示,展示了使用Terraform Stacks创建无服务器应用程序的过程,添加了API Gateway和Lambda函数等组件,并将它们部署到开发和生产环境的多个区域,演示了组织如何利用这一功能来管理复杂的部署场景。
在总结时,Anton和他的同事强调了在无服务器应用程序中使用Terraform的好处,例如利用现有的基础设施即代码知识、模块化配置以实现可重用性,以及利用活跃的Terraform社区。他们分享了各种资源的链接,包括指南、研讨会和与使用Terraform进行无服务器开发相关的其他会话,这些对于采用亚马逊云科技无服务器的组织来说是非常有价值的。
会议最后提供了一个二维码,可以访问演讲期间涵盖的所有内容以及继续亚马逊云科技无服务器学习之旅的其他资源,使与会者能够进一步探索和在各自的组织中实施所讨论的概念。
我们正处在 Agentic AI 爆发前夜。 2025 亚马逊云科技中国峰会提出,企业要从 " 成本优化 " 转向 " 创新驱动 " ,通过完善的数据战略和 AI 云服务,把握全球化机遇。亚马逊将投入 1000 亿美元在 AI 算力、云基础设施等领域,通过领先的技术实力和帮助“中国企业出海“和”服务中国客户创新“的丰富经验,助力企业在 AI 时代突破。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70038688/viewspace-3089601/ ,如需转载,请注明出处,否则将追究法律责任。