高级 Amazon CDK:从 4 年使用体验学习的经验教训

演讲者马修·邦尼分享了使用AmazonCDK构建复杂云架构的实践经验,包括最佳实践、多区域部署、测试策略和组织结构建议。他强调了测试、版本控制和安全实践的重要性。

关键字: [Amazon Web Services re:Invent 2023, Cdk Code, Cloudformation Resources, Stack Synthesizer, Integration Tests, Fine Grained Assertions]

本文字数: 1600, 阅读完需: 8 分钟

视频

如视频不能正常播放,请前往bilibili观看本视频。>> https://www.bilibili.com/video/BV1dC4y197aY

导读

Amazon CDK 于 2019 年 7 月发布,现已成为帮助企业在亚马逊云科技上构建复杂系统的强大的基础架构即代码工具。它的最大优势是使用通用语言定义基础架构,但这也可能是它的弱点,因为有许多不同的方法编写代码。您应该使用单一堆栈还是多种堆栈?如何使用外部数据定义基础架构?如何测试代码?在本讲座中,您将了解到在过去 4 年中使用 Amazon CDK 所开发的最佳实践、模式和工作流程。

演讲精华

以下是小编为您整理的本次演讲的精华,共1300字,阅读时间大约是6分钟。如果您想进一步了解演讲内容或者观看演讲全文,请观看演讲完整视频或者下面的演讲原文。

马修·邦尼,位于北卡罗来纳州夏洛特的IT管理服务提供商Defiance Digital的首席云架构师,在亚马逊云科技re:Invent上发表了一场演讲,分享了他过去四年使用亚马逊云科技云开发工具包(CDK)的经验和见解。他的公司致力于帮助刚刚开始亚马逊云科技之旅的中小企业和初创公司,为他们提供账户管理和架构方面的支持。

邦尼演讲的主要目标是总结使用CDK构建健壮应用程序的所有最佳实践和经验教训。他承认这是一个广泛的议题,但在幻灯片的右下角放置了一个相机图标,以提醒观众关注这些有价值的幻灯片。然而,他也提醒观众,幻灯片切换速度会非常快。

邦尼通过一个示例应用程序来说明这个概念。这是一个基本的网站,托管在亚马逊弹性容器服务(ECS)上,部署在美国东部(us-east-1)和美国西部(us-west-2)两个区域。此外,该应用还包含其他组件,如一个S3存储桶、DynamoDB表、使用亚马逊云科技Lambda和MediaConvert的无服务器媒体转码器,以及一个基于延迟的Route 53记录,用于将访问者路由到最近的部署位置。

作为一个实际的客户案例,邦尼解释了他的公司是如何通过管理亚马逊云科技新手客户的账户,并为他们构建跨区域的云架构,从而帮助这些中小企业的。这个示例应用程序展示了Defiance Digital如何利用亚马逊云科技的服务,如ECS、S3、Lambda和Route 53,为客户构建具有弹性的跨区域云架构。

他还简要介绍了CDK的一些核心概念。应用程序表示整个部署的过程,而阶段则表示区域内的部署——在这个例子中,us-east-1和us-west-2包含相同的冗余阶段。堆栈将相关的资源组合在一起——例如,网站堆栈、负载均衡器堆栈、S3堆栈等。构造函数封装了业务逻辑,将架构分解成较小的离散组件。整个CDK应用程序综合成CloudFormation模板进行部署。

Bonne倡导使用名为Projen的工具来加速设置CDK项目的脚手架过程。该工具能够处理样板代码生成、创建Git仓库、配置GitHub动作、生成示例代码和测试等功能。他认为Projen带来了许多与将基础设施作为代码的CDK本身相同的优势。尽管目前使用该工具的人还不多,但Bonne坚信它仍能带来巨大的价值。

在创建新项目时,Bonne建议首先使用亚马逊云科技的CodePipeline实现部署的CI/CD流水线。对于任何应用程序的第一个栈,他会在主要区域的一个专用管理帐户中编写管道栈。通过使用CodePipeline构造配置管道,尽管名称相似,但它实际上与CodePipeline服务是不同的。

他提供了一个如何配置源代码、构建步骤以及针对dev和prod环境的部署波的例子,这些环境位于us-east-1和us-west-2地区。具体来说,他定义了一个针对us-east-1和us-west-2 dev帐户的dev波,以及一个针对这些地区的prod帐户的prod波。每个波都包含定义参数(如每个部署的帐户和区域)的应用程序阶段构造。

在使用GitHub动作而非CodePipeline时,一个重要提示是利用OIDC提供者和角色而不是访问键。像访问键这样的长期凭证如果在泄露后可能会构成安全风险。对于像IAM政策这样的不经常变化的资源,他建议在主CDK应用程序之外的其他应用程序中实施它们。这样,您可以在每次主要应用程序代码发生更改时避免重新部署支持资源。

在结构新的CDK应用程序时,Bonne建议在源代码目录中保持一个常量文件,其中包含共享值,如帐户号和区域。构造、栈和阶段各自放在自己的目录中。随着应用程序复杂性增长,一旦它们达到大约5-7个文件,就需要将目录拆分为子目录。只要它适合您的团队需求,具体的组织方式并不重要。

在一个栈中构建所有资源可以避免跨栈依赖,但Bonne认为有多个栈的好处,比如避免达到CloudFormation限制并实现原子更新。他建议在重构到更多栈之前,每个栈的构造数量不要超过7个。

鲍恩强调在区域和账户间多次部署相同资产时,构建像Docker镜像等资产的重要性。若在CDK应用程序中直接硬编码资产创建,会导致每个环境中略有不同的资产。他建议在上层CDK应用程序中一次性构建资产,并将其向下传递至阶段和栈中的引用。尽管可以将外部数据源和API直接集成到CDK代码中,但鲍恩认为这会引发不确定性,导致相同输入产生不同结果。因此,他建议在单独的文件中实现外部数据获取,将结果写入JSON文件。这样,CDK代码可以消费静态JSON以确保一致的输出。这种模式反映了CDK上下文API的工作方式。

在结构方面,鲍恩认为应封装应用程序的独特业务逻辑,而不仅仅是使用现有的CDK库构造。从小型、专注的结构开始,并在应用程序增长时进行激进的重构。避免构造内的跨栈导入,因为它会将它们绑定得过于紧密。他强调应避免使用Secret构造,因为暗示你可以在CDK应用程序中管理秘密值是错误的。实际上,这些值需要手动填充,而在行内构造秘密并填充它可能会在未来引起混淆。

鲍恩认为测试是CDK的最佳部分之一。他强调了几个关键测试策略:

  • 进行单元测试和快照测试,以加速对栈和构造的迭代。快照测试捕捉CloudFormation输出并与以前的运行情况进行比较。

  • 实际部署CDK应用程序以验证所有资源能否协同工作的集成测试。默认情况下,CDK集成测试框架会部署到3个地区。

  • 通过避免重建镜像来加速测试执行时间,可以通过模拟像Docker镜像这样的资产来实现。

  • 使用触发器模块或CDK内在验证器在允许部署之前验证应用程序的有效性。

此外,他还展示了如何实现自己的自定义CDK合成器,如从CDK栈生成文档或图表。虽然承认这并不是总是有用的,但这突出了CDK的可扩展性。

在总结中,Bonne再次强调了CDK在高级语言中实现基础设施即代码的能力。通过运用组织、测试、构建和其他演讲中涉及领域的推荐最佳实践,开发者可以利用CDK构建健壮且可维护的云应用程序。

通过对示例应用程序的深入分析,有助于理解如何在实践中应用所讨论的概念。Bonne的建议源于实际经验而非单纯的理论,因此它们具有更高的可信度。他特别强调的广泛测试被认为是提高基础设施即代码使用的稳定性和可靠性的一项重要实践。这次演讲成功地实现了将所学经验提炼成现代CDK开发技巧的可访问概述的目标。

下面是一些演讲现场的精彩瞬间:

演讲者在使用了CDK四年后,分享了他关于构建高质量CDK应用程序的最佳实践和经验教训。

他详细解释了这个新系统如何将基础设施输入纳入代码仓库以便进行代码审查。

他还提供了一个发人深省的例子,说明了一个简单的拼写错误如何在整个项目中引发一系列问题。

为了减少错误和不一致,演讲者推荐在基础设施代码和运行时代码之间使用常量共享值。

此外,亚马逊云科技CDK的集成测试功能有助于发现潜在的错误或破坏性更改。

领导者们通过验证预期的输出来展示了使用状态机测试亚马逊云科技服务的效果。

最后,他们特别感谢了CDK社区的贡献,使得其他人能够从中学习,并对一位关键成员无法参加活动表示遗憾。

总结

本次演讲分享了关于使用亚马逊云科技的CDK的四年的专业经验与教训。内容涵盖了如何利用无服务器媒体转换器构建一个具有多区域功能的示例网站。主要观点包括:

  1. CDK的核心优势在于实现基础设施即代码。通过使用构造来描述业务逻辑,从而实现早期重构。

  2. 在处理依赖关系时要谨慎。防止出现可能导致“致命拥抱”问题的跨栈引用。将固定不变的资源放置在单独的栈中。

  3. 使用CodePipeline对CDK应用程序进行管道部署。为关键栈设置审批流程。

  4. 确认部署资源的准确性。通过监控和使用CDK工具进行安全扫描来实现这一目标。同时,检查HTTP端点并进行状态机测试以评估复杂工作流程的性能。

  5. 实施广泛的单元测试。使用快照测试进行概括性评估,并通过详细的断言进行精细度测试。为了提高速度与一致性,对资产进行模拟操作。

  6. CDK有助于在IaC(基础设施即代码)与运行时代码之间实现共享。避免因不匹配而产生的错误。

  7. 利用自定义合成器优化CDK的使用体验。生成相关文档、图表以及动画效果。

演讲原文

https://blog.youkuaiyun.com/just2gooo/article/details/134805931

想了解更多精彩完整内容吗?立即访问re:Invent 官网中文网站!

2023亚马逊云科技re:Invent全球大会 - 官方网站

点击此处,一键获取亚马逊云科技全球最新产品/服务资讯!

点击此处,一键获取亚马逊云科技中国区最新产品/服务资讯!

即刻注册亚马逊云科技账户,开启云端之旅!

【免费】亚马逊云科技“100 余种核心云服务产品免费试用”

【免费】亚马逊云科技中国区“40 余种核心云服务产品免费试用”

亚马逊云科技是谁?

亚马逊云科技(Amazon Web Services)是全球云计算的开创者和引领者,自 2006 年以来一直以不断创新、技术领先、服务丰富、应用广泛而享誉业界。亚马逊云科技可以支持几乎云上任意工作负载。亚马逊云科技目前提供超过 200 项全功能的服务,涵盖计算、存储、网络、数据库、数据分析、机器人、机器学习与人工智能、物联网、移动、安全、混合云、虚拟现实与增强现实、媒体,以及应用开发、部署与管理等方面;基础设施遍及 31 个地理区域的 99 个可用区,并计划新建 4 个区域和 12 个可用区。全球数百万客户,从初创公司、中小企业,到大型企业和政府机构都信赖亚马逊云科技,通过亚马逊云科技的服务强化其基础设施,提高敏捷性,降低成本,加快创新,提升竞争力,实现业务成长和成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值