【问题标题】:On AWS, should every part of my infrastructure be defined as code?在 AWS 上,我的基础设施的每个部分都应该定义为代码吗?
【发布时间】:2018-07-16 07:47:30
【问题描述】:

我有一个使用 RDS、Lambda 等组件在 AWS 上运行的项目,并且我使用了 CloudFormation、CodeCommit(用于源代码)、CodeBuild(用于构建)和 CodePipeline(用于 CI/CD)等工具。

是否应该使用 CloudFormation 堆栈定义管道和源存储库本身?

【问题讨论】:

    标签: amazon-web-services amazon-cloudformation aws-codepipeline aws-codecommit


    【解决方案1】:

    我认为最佳做法是为上述场景设置两个不同的堆栈

    1) 第一个堆栈 - 应具有支持资源,例如 codecommit、codebuild 和 codepipeline。

    这些资源可以在不同的应用程序中使用

    2) 第二个栈 - 应该有应用相关的资源,例如 RDS、Lambda

    堆栈是 AWS 资源的集合,您可以将其作为 单个单元。换句话说,您可以创建、更新或删除一个 通过创建、更新或删除堆栈来收集资源。全部 堆栈中的资源由堆栈的 AWS CloudFormation 定义 模板。例如,堆栈可以包含所有资源 需要运行 Web 应用程序,例如 Web 服务器、数据库、 和网络规则。如果您不再需要该 Web 应用程序, 你可以简单地删除堆栈,它的所有相关资源都是 已删除。

    Stacks user guide

    【讨论】:

    • 我了解 canformation+codepipeline 对配置应用程序基础架构(lambdas、ec2s、rds 等)有什么好处,但是使用它来配置开发基础架构(源存储库、管道)有什么优势)?
    • 这就是基础设施即代码 (IAC) 的全部意义所在?获得基础架构代码后,您可以在任何区域或多个区域(即在灾难恢复等情况下)配置基础架构。此外,环境将是相同的。如果是手动的,您最终可能会遗漏一些小东西。
    【解决方案2】:

    是的,使用云形成模板,您可以为您的项目配置源代码存储库、构建项目和管道。

    请参考以下链接获取官方文档。

    CodeCommit with Cloud Formation

    CodeBuild with Cloud Formation

    CodePipeline with Cloud Formation

    编辑 1 - CF 模板相对于 CLI/Sdk 的优势。

    云形成是在 AWS 上进行部署的方式。以下是 CFn 相对于 CLI / SDK / 控制台的几个优点。

    1. 管理资源集很容易。如果出现故障,AWS 将负责回滚。如果使用 SDK / CLI,您必须注意错误情况,以便清理资源。

    2. 可以轻松地将输出从一个资源/模板传输到另一个。再次在 SDK / CLI 中,您必须编写该编排代码。

    3. 由于云形成模板是声明性的,因此更新更易于管理。您的资源状态由 AWS 维护。在 SDK / CLI 中,您需要手动处理状态。

    请参阅Best practices 部分,了解如何使用云形成模板以获得有效结果。

    【讨论】:

    • 好的,我明白,但问题是:我应该通过 cloudformation 管理它们吗?我的意思是,这是一种众所周知的良好做法吗?在这种情况下,我会得到什么好处?
    • 按要求更新了答案。希望对您有所帮助。
    猜你喜欢
    • 2021-04-19
    • 2021-01-25
    • 2021-04-27
    • 2015-12-07
    • 1970-01-01
    • 1970-01-01
    • 2020-08-27
    • 1970-01-01
    • 2018-03-19
    相关资源
    最近更新 更多