适用于 IaC 的 AWS CDK VS SDK

dev*_*tom 8 amazon-web-services aws-cloudformation infrastructure-as-code

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

但是根据文档,我并没有真正理解它们的不同之处,有人可以向我解释它们的不同之处以及您应该使用什么用例吗?

Mil*_*anG 8

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 之间的差异? (2认同)

hor*_*on7 7

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

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

  • 不,CDK 是基础设施即代码,这意味着您可以编写代码来创建 API Gateway、DynamoDB 或 Lambda 等 AWS 资源。另一方面,SDK 有助于与这些 AWS 资源进行交互,例如:从 DynamoDB 获取项目或列出 S3 存储桶的内容。 (7认同)