适用于 IaC 的 AWS CDK 与 SDK
AWS CDK VS SDK for IaC
我最近开始使用 AWS 和 IaC,我正在使用 Cloudformation 来配置我的 AWS 资源,但我发现 AWS 同时提供了一个 SDK 和一个 CDK,使您能够以编程方式而不是简单地配置资源 json/yaml.
但是根据文档,我并没有真正理解它们之间的区别,有人可以向我解释它们之间的区别以及您应该使用什么用例吗?
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,您可以编写通用代码构造 - class 或方法,它可以为给定的 lambda 函数创建警报并为给定的主题创建 SNS 警报操作。
换句话说,CDK 可以帮助您以一种非常熟悉的方式概括和重用您的 IaC 来开发您的业务代码。代码比 CF 定义更短、更易读。
当您需要在不同的 AWS 区域设置类似的资源并且每个环境具有不同的 AWS 账户时,差异会更加显着。您可以使用单个 CDK 代码库管理所有 AWS 账户和区域。
CDK: 是一个用于对您的基础设施或堆栈进行建模和配置的框架。 Stack 可以包含一个数据库,例如:DynamoDB、S3 Bucket、Lambda、API Gateway 等。它提供了一种编写代码以在 AWS 中创建基础设施的工具。也称为基础设施即代码。
Check here
SDK:这些是亚马逊提供的各种语言的代码库,如Java、Python、PHP、Javascript、Typescript 等。这些库有助于与您通过 CDK 或控制台创建的 AWS 服务(如在 DynamoDB 中创建数据)进行交互。 SDK 通过 API 简化了在您的应用程序中使用 AWS 服务的过程。
Check here
我发现对我来说不同之处在于 CDK 编码了 CloudFormation JSON/YAML。第一反应,代码很好,但是代码方面的好处是您可以针对代码编写单元测试。因此,您可以针对 CDK 中提供的服务建立安全感或保险政策。
还有其他方法可以测试 CF,但是,有开发背景,感觉更舒服。
首先介绍一些背景知识: CloudFormation 是亚马逊针对“基础设施即代码”方法的解决方案,用于管理跨 accounts/regions。这是通过使用他们的声明性 yaml/json-based 模板语言来定义它,然后通过各种方式(控制台、cli、APIs...)执行模板来完成的。更多信息:
- 白皮书:https://docs.aws.amazon.com/whitepapers/latest/develop-deploy-dotnet-apps-on-aws/infrastructure-as-code.html
- 常见问题解答:https://aws.amazon.com/cloudformation/faqs/
还有其他流行的 IaC 解决方案或工具可以帮助更轻松地实现它,例如 Terraform and Kubernetes(也使用声明性模板定义所需状态的容器编排)。
IaC 的潜在好处:在高层次上,您可以更好地跟踪和审计您的基础设施,重用 definitions/processes,以更 一致 的方式进行所有更改,更快 感谢您的所有自动化和保证可以使用 infra-as-code 方法。您可能熟悉前面答案中提到的这些以及更多内容,例如:
- 版本控制您的基础设施定义,
- 更高效和逻辑复杂的模板构建方式,
- 能够针对它们编写测试,
- 在使用模板进行真正的基础设施更改之前进行比较(参见“更改集”),
- 检测实时基础设施何时与您的定义不同,
- 自动回滚,
- 以及通过 CF 等框架提供的许多其他状态管理协助,在执行常规操作职责时可能需要这些协助。
CDK:
这是为了帮助 自动化 CloudFormation 作为 IaC 方法的一部分来配置和部署资源。它允许您使用各种流行的编程语言来帮助创建、测试和管理您的 CF 设置。 AWS 的一些动机:“YAML 是一种用于描述集群所需状态的出色格式,但它没有用于表达逻辑和可重用抽象的原语。”“AWS CDK 使用编程语言的熟悉性和表达能力来建模您的应用程序。”更多信息:https://docs.aws.amazon.com/cdk/v2/guide/home.html
然而,Amazon 知道其他解决方案,现在很高兴在 CDK 主页上指出它们,淡化了它与 CF 的原始联系。如果您不想,则不需要使用 CloudFormation;具体来说,他们提到您可以在以下帮助下使用相同的 CDK 结构:
- cdktf 由其创建者 Hashicorp 维护的 Terraform
- cdk8s for Kubernetes by AWS。回复:“我们意识到这与我们的客户在通过 CloudFormation 模板定义他们的应用程序时遇到的问题完全相同,这个问题由 AWS Cloud Development Kit (AWS CDK) 解决,我们可以应用来自 AWS CDK 的相同设计概念帮助所有 Kubernetes 用户。”
SDK:
AWS 的所有服务都有 API,各种 SDK 可让您访问它们。比如我可以使用AWS的Java SDK来manage an API Gateway. If I wanted to script some custom deployment process, I could do so with the SDK, managing all the state, etc. myself. You could probably even re-implement the CloudFormation service with the various underlying APIs... The APIs have varying levels of documentation though. E.g. CloudFormation Java APIs are only mentioned in the raw API reference,而不是更友好的Developer Guide
我最近开始使用 AWS 和 IaC,我正在使用 Cloudformation 来配置我的 AWS 资源,但我发现 AWS 同时提供了一个 SDK 和一个 CDK,使您能够以编程方式而不是简单地配置资源 json/yaml.
但是根据文档,我并没有真正理解它们之间的区别,有人可以向我解释它们之间的区别以及您应该使用什么用例吗?
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,您可以编写通用代码构造 - class 或方法,它可以为给定的 lambda 函数创建警报并为给定的主题创建 SNS 警报操作。
换句话说,CDK 可以帮助您以一种非常熟悉的方式概括和重用您的 IaC 来开发您的业务代码。代码比 CF 定义更短、更易读。
当您需要在不同的 AWS 区域设置类似的资源并且每个环境具有不同的 AWS 账户时,差异会更加显着。您可以使用单个 CDK 代码库管理所有 AWS 账户和区域。
CDK: 是一个用于对您的基础设施或堆栈进行建模和配置的框架。 Stack 可以包含一个数据库,例如:DynamoDB、S3 Bucket、Lambda、API Gateway 等。它提供了一种编写代码以在 AWS 中创建基础设施的工具。也称为基础设施即代码。 Check here
SDK:这些是亚马逊提供的各种语言的代码库,如Java、Python、PHP、Javascript、Typescript 等。这些库有助于与您通过 CDK 或控制台创建的 AWS 服务(如在 DynamoDB 中创建数据)进行交互。 SDK 通过 API 简化了在您的应用程序中使用 AWS 服务的过程。 Check here
我发现对我来说不同之处在于 CDK 编码了 CloudFormation JSON/YAML。第一反应,代码很好,但是代码方面的好处是您可以针对代码编写单元测试。因此,您可以针对 CDK 中提供的服务建立安全感或保险政策。
还有其他方法可以测试 CF,但是,有开发背景,感觉更舒服。
首先介绍一些背景知识: CloudFormation 是亚马逊针对“基础设施即代码”方法的解决方案,用于管理跨 accounts/regions。这是通过使用他们的声明性 yaml/json-based 模板语言来定义它,然后通过各种方式(控制台、cli、APIs...)执行模板来完成的。更多信息:
- 白皮书:https://docs.aws.amazon.com/whitepapers/latest/develop-deploy-dotnet-apps-on-aws/infrastructure-as-code.html
- 常见问题解答:https://aws.amazon.com/cloudformation/faqs/
还有其他流行的 IaC 解决方案或工具可以帮助更轻松地实现它,例如 Terraform and Kubernetes(也使用声明性模板定义所需状态的容器编排)。
IaC 的潜在好处:在高层次上,您可以更好地跟踪和审计您的基础设施,重用 definitions/processes,以更 一致 的方式进行所有更改,更快 感谢您的所有自动化和保证可以使用 infra-as-code 方法。您可能熟悉前面答案中提到的这些以及更多内容,例如:
- 版本控制您的基础设施定义,
- 更高效和逻辑复杂的模板构建方式,
- 能够针对它们编写测试,
- 在使用模板进行真正的基础设施更改之前进行比较(参见“更改集”),
- 检测实时基础设施何时与您的定义不同,
- 自动回滚,
- 以及通过 CF 等框架提供的许多其他状态管理协助,在执行常规操作职责时可能需要这些协助。
CDK: 这是为了帮助 自动化 CloudFormation 作为 IaC 方法的一部分来配置和部署资源。它允许您使用各种流行的编程语言来帮助创建、测试和管理您的 CF 设置。 AWS 的一些动机:“YAML 是一种用于描述集群所需状态的出色格式,但它没有用于表达逻辑和可重用抽象的原语。”“AWS CDK 使用编程语言的熟悉性和表达能力来建模您的应用程序。”更多信息:https://docs.aws.amazon.com/cdk/v2/guide/home.html
然而,Amazon 知道其他解决方案,现在很高兴在 CDK 主页上指出它们,淡化了它与 CF 的原始联系。如果您不想,则不需要使用 CloudFormation;具体来说,他们提到您可以在以下帮助下使用相同的 CDK 结构:
- cdktf 由其创建者 Hashicorp 维护的 Terraform
- cdk8s for Kubernetes by AWS。回复:“我们意识到这与我们的客户在通过 CloudFormation 模板定义他们的应用程序时遇到的问题完全相同,这个问题由 AWS Cloud Development Kit (AWS CDK) 解决,我们可以应用来自 AWS CDK 的相同设计概念帮助所有 Kubernetes 用户。”
SDK: AWS 的所有服务都有 API,各种 SDK 可让您访问它们。比如我可以使用AWS的Java SDK来manage an API Gateway. If I wanted to script some custom deployment process, I could do so with the SDK, managing all the state, etc. myself. You could probably even re-implement the CloudFormation service with the various underlying APIs... The APIs have varying levels of documentation though. E.g. CloudFormation Java APIs are only mentioned in the raw API reference,而不是更友好的Developer Guide