【问题标题】:AWS CDK VS SDK for IaC适用于 IaC 的 AWS CDK VS 开发工具包
【发布时间】:2020-07-30 17:52:35
【问题描述】:

我最近开始使用 AWS 和 IaC,我正在使用 Cloudformation 来预置我的 AWS 资源,但我发现 AWS 同时提供了一个 SDK 和一个 CDK,使您能够以编程方式而不是普通的 json/yaml 来预置资源。

但是根据文档,我并没有真正理解它们之间的区别,有人可以解释一下它们之间的区别以及您应该使用什么用例吗?

【问题讨论】:

  • 这里有一些很好的答案,但我也觉得 SDK 和 CDK 之间的部分区别在于品牌:“云开发套件”听起来更现代、更花哨。

标签: amazon-web-services amazon-cloudformation infrastructure-as-code


【解决方案1】:

CDK: 是一个用于建模和配置您的基础架构或堆栈的框架。 Stack 可以包含一个数据库,例如:DynamoDB、S3 Bucket、Lambda、API Gateway 等。它提供了编写代码以在 AWS 中创建基础设施的工具。也称为基础设施即代码。 Check here

SDK: 这些是 Amazon 以各种语言提供的代码库,例如 Java、Python、PHP、Javascript、Typescript 等。这些库有助于与 AWS 服务交互(例如在 DynamoDB 中创建数据)您可以通过 CDK 或控制台创建。开发工具包通过 API 简化了在您的应用程序中使用 AWS 服务的过程。 Check here

【讨论】:

  • CDK 是否是 SDK 的子集,无论它采用何种方法(如生成 CloudFormation JSON/YAML)完成的工作?
  • 不,CDK 是基础设施即代码,这意味着您可以编写代码来创建 AWS 资源,例如 API Gateway、DynamoDB 或 Lambda。另一方面,SDK 有助于与这些 AWS 资源进行交互,例如:从 DynamoDB 获取项目或列出 S3 存储桶的内容。
【解决方案2】:

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 和 SDK 之间的区别?
  • 公平点@max_max_mir,我将其添加到描述中。如果您现在对答案感到满意,请告诉我。
【解决方案3】:

我发现对我来说不同之处在于 CDK 编码了 CloudFormation JSON/YAML。第一个响应,代码很好,但代码方面的好处是您可以针对代码编写单元测试。因此,您可以针对 CDK 中提供的服务建立安全感或保险政策。

还有其他方法可以测试 CF,但是,如果有开发背景,这感觉会更舒服。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 2012-05-04
    • 1970-01-01
    • 1970-01-01
    • 2017-08-28
    • 2020-07-02
    • 2015-05-29
    相关资源
    最近更新 更多