我最近开始使用 AWS 和 IaC,我正在使用 Cloudformation 来预置我的 AWS 资源,但我发现 AWS 同时提供了 SDK 和 CDK,使您能够以编程方式而不是普通的 json/yaml 来预置资源。
但是根据文档,我并不真正了解它们之间的区别,有人可以解释一下它们之间的区别以及您应该使用什么用例吗?
我最近开始使用 AWS 和 IaC,我正在使用 Cloudformation 来预置我的 AWS 资源,但我发现 AWS 同时提供了 SDK 和 CDK,使您能够以编程方式而不是普通的 json/yaml 来预置资源。
但是根据文档,我并不真正了解它们之间的区别,有人可以解释一下它们之间的区别以及您应该使用什么用例吗?
CDK:是一个为您的基础架构或堆栈建模和配置的框架。Stack 可以包含一个数据库,例如:DynamoDB、S3 Bucket、Lambda、API Gateway 等。它提供了编写代码以在 AWS 中创建基础设施的工具。也称为基础设施即代码。 在这里检查
SDK:这些是 Amazon 以各种语言提供的代码库,例如 Java、Python、PHP、Javascript、Typescript 等。这些库有助于与您通过 CDK 或控制台创建的 AWS 服务(例如在 DynamoDB 中创建数据)进行交互。开发工具包通过 API 简化了在您的应用程序中使用 AWS 服务的过程。 在这里检查
AWS SDK 是一个库,主要通过为您处理数据(反)序列化、凭证管理、故障处理等来简化对 AWS 服务的访问。也许,对于特定场景,您可以使用 AWS SDK 作为基础设施作为代码工具,但是它可能很麻烦,因为它不是库的预期用途。
基于https://docs.aws.amazon.com/whitepapers/latest/develop-deploy-dotnet-apps-on-aws/infrastructure-as-code.html,IaC 的专用工具是 AWS CloudFormation 和 AWS CDK .
AWS CDK 是 CloudFormation 之上的抽象。CDK 脚本实际上是在合成脚本时转换为 CloudFormation 定义的。
可以通过一个示例来最好地描述这种差异:想象一下,对于堆栈中的每个 lambda 函数,您想要创建一个错误 CloudWatch 警报并连接到 SNS 主题。
使用 CloudFormation,您将 a) 需要为每个 lambda 函数编写一组非常相似的 yaml/json 定义以确保监控,b) 使用嵌套堆栈模板,c) 使用 CloudFormation 模块。
使用 CDK,您可以编写通用代码构造 - 类或方法,它可以为给定的 lambda 函数创建警报并为给定主题创建 SNS 警报操作。
换句话说,CDK 可以帮助您以非常熟悉的方式概括和重用您的 IaC,以开发您的业务代码。该代码比 CF 定义更短、更易读。
当您需要在不同的 AWS 区域设置类似的资源并且每个环境有不同的 AWS 账户时,差异会更加显着。您可以使用单个 CDK 代码库管理所有 AWS 账户和区域。
我发现对我来说不同之处在于 CDK 编码了 CloudFormation JSON/YAML。第一个响应,代码很好,但代码方面的好处是您可以针对代码编写单元测试。因此,您可以针对 CDK 中提供的服务建立安全感或保险政策。
还有其他测试 CF 的方法,但是,如果有开发背景,这感觉更舒服。