我最近开始使用AWS和IaC,我使用Cloudformation来提供我的AWS资源,但是我发现AWS提供了一个SDK和一个CDK,使您能够以编程方式提供资源,而不是普通的json/yaml。
但是,基于我并不真正理解它们之间的区别的文档,有人能解释一下它们有何不同吗?对于什么用例,您应该使用什么?
发布于 2020-04-17 18:21:46
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。
AWS是CloudFormation之上的一个抽象。实际上,在合成脚本时,CDK脚本被转换为CloudFormation定义。
最好在一个例子中描述这种区别:想象一下,对于堆栈中的每个lambda函数,您想要创建一个错误的CloudWatch警报并连接到SNS主题。
使用CloudFormation,您将需要为每个lambda函数编写一组非常相似的yaml/json定义,以确保监视;( b)使用嵌套堆栈模板;( c)使用CloudFormation模块。
使用CDK,您可以编写一个泛型代码构造类或方法,它可以为给定的lambda函数创建警报,并为给定的主题创建SNS警报操作。
换句话说,CDK可以帮助您以一种非常熟悉的方式概括和重用您的IaC,以帮助您开发业务代码。代码比CF定义更短、更易读。
当您需要在不同的AWS区域中设置类似的资源时,以及当您在每个环境中都有不同的AWS帐户时,这种差异就更显着了。您可以使用一个CDK代码库管理所有AWS帐户和区域。
发布于 2020-07-09 21:10:33
发布于 2022-05-26 08:28:54
一些背景: CloudFormation是亚马逊的“基础设施即代码”方法的解决方案,用于管理跨帐户/区域的大量资源的定义、提供和部署。这是通过使用基于yaml/json的声明性模板语言来定义所有的模板来完成的,然后通过各种方法(控制台、cli、API.)执行模板。更多信息:
还有其他流行的IaC解决方案或工具可以帮助更容易地实现这一点,例如Terraform和库伯内斯 (也使用声明性模板定义所需状态的容器编排)。
IaC的潜在好处:在较高的级别上,您可以更好地跟踪和审计(您的下位)、重用定义/流程、以更加一致的方式进行所有更改,以及通过使用底层代码方法可以获得的所有自动化和保证,使您的更改更加一致,速度更快。您可能熟悉前面的答复中提到的这些内容,以及更多内容,例如:
CDK --这是帮助CloudFormation自动化,作为提供和部署资源的IaC方法的一部分。它允许您使用各种流行的编程语言来帮助创建、测试和管理CF设置。AWS的一些动机是:“YAML是描述集群所需状态的优秀格式,但它没有表示逻辑和可重用抽象的原语。” CDK使用编程语言的熟悉性和表达能力对应用程序进行建模。
然而,亚马逊( )知道其他解决方案,并高兴地在CDK主页面上指出它们,淡化了它与CF的原始连接。如果您不想使用CloudFormation,则不需要使用它;具体来说,它们提到您可以在以下帮助下使用相同的CDK结构:
SDK AWS为它们的所有服务提供了一个API,各种SDK允许您访问它们。例如,我可以使用AWS的Java来进行管理API网关。如果我想编写一些定制的部署过程,我可以使用SDK来编写脚本,管理所有的状态,等等。您甚至可以使用各种底层API重新实现CloudFormation服务.但是,API有不同级别的文档。例如,CloudFormation Java只在原始API引用中提到,而不是在更友好的开发人员指南中提到。
https://stackoverflow.com/questions/61268068
复制相似问题