摘要
本文描述如何使用 AWS CloudFormation 创建和管理虚拟私有云(VPC),包括子网、NATting 等。这是关于在构建和管理云资源时将基础设施视为代码的经验。
本文要点
AWS CloudFormation 允许我们在 AWS 环境中实现“基础设施即代码”。
借助 CloudFormation 很容易就可以构建出复杂的虚拟私有云(VPC),并可以自动升级。
我们可以重用 CloudFormation 模板构建用于各种用途的各种资源堆栈。
CloudFormation 提供了伪参数和内部函数。
- 我们可以在用完之后把堆栈删除。
本文描述如何使用 AWS CloudFormation 创建和管理虚拟私有云(VPC),包括子网、NATting 等。本文的重点是使用 CloudFormation 和基础设施即代码构建和管理 AWS 资源,有关 VPC 设计的问题介绍得相对较少。
网络专家:由于本文的重点是 CloudFormation,所以你可能对 CIDR 块、路由表等有不同的看法。没问题,你可以根据需要修改这个模板。
转入正题:本文介绍的 CloudFormation 模板源代码可以在GitHub上找到。你可以随意下载、修改和使用此模板(不过我不会为误用承担责任)。
为什么使用 CloudFormation?
你可能想知道,当我们可以通过管理控制台中的 VPC 向导创建 VPC 时,为什么要使用 CloudFormation 来构建 VPC,原因如下。
基础设施即代码:CloudFormation 使我们只用一个步骤就可以创建一个“资源堆栈”。资源是我们创建的东西(EC2 实例、VPC、子网等等),一组这样的资源称为堆栈。我们可以编写一个模板,使用它可以很容易地按照我们的意愿通过一个步骤创建一个网络堆栈。这比通过管理控制台或 CLI 手动创建网络更快,而且可重复,一致性更好。我们可以将模板签入源代码控制,并在任何时候根据需要把它用于任何目的。
可升级:我们可以通过修改 CloudFormation 模板来修改网络堆栈,然后根据修改后的模板修改堆栈。CloudFormation 足够智能,可以通过修改堆栈来匹配模板。
可重用:我们可以重用这个模板,在不同时期、不同区域创建多个不用用途的网络。
漂移检测:CloudFormation 有一个新特性(截止到 2018 年 11 月),可以让我们知道资源是否已经“漂移”出了最初的配置。这可能发生在管理员手动更改资源时,这通常不是成熟的组织所鼓励的做法。
用完即弃:我们很容易在用完之后把堆栈删除。
你需要做什么准备?
学习本教程之前,你需要做好以下准备。
一个 AWS 账户。作为 IAM 用户,你可能可以继续本教程,但你必须拥有创建 VPC、子网、路由表、EC2 实例等的权限。通常,我会建议你创建一个你可以完全控制的私人 AWS 账户。在这个帐户中,创建一个具有全部权限的 IAM 用户,用于日常工作。与本教程相关的成本非常低,特别是当你在用完后把堆栈删除的话。
一个文本编辑器。几乎任何编辑器都可以:Sublime、Atom、nano,或者 Eclipse、IntelliJ、Visual Studio 等成熟的 IDE。你只要确保不使用文字处理器——它会嵌入一些会导致语法错误的特殊字符。我将使用 Visual Studio Code,这是我最喜欢的编辑器(本周)。
开始
创建一个空的 YAML 文件:首先创建一个空文件。保存时将其命名为“MyNetwork.YML”。你可以使用任何自己喜欢的名称,但稍后我会用到这个文件名。一定要使用 YML 扩展名。CloudFormation 支持 JSON 或 YAML,我们将使用后者。主要原因是:1)句法不那么讲究,2)能够在工作中添加注释,没有注释我就记不起一周前在做什么了。
添加样板内容:创建好空文件之后,复制并粘贴下面这个结构,这是任何 CloudFormation 模板都需要的样板内容:
复制代码
AWSTemplateFormatVersion: 2010-09-09 # 这个 CloudFormation 模板会部署一个基本的 VPC/ 网络 Resources:
小结
通过 CloudFormation 创建、修改和删除资源堆栈的能力是基础设施即代码概念的一个有效的示例。现在,我们有了一个更快、可重复、可重用的系统,我们不再需要通过界面或命令来手动设置基础设施。
在下一篇文章中,我将向你展示如何使这个模板更加灵活,使用参数和条件创建数量不同的子网,使私有子网可选,并探讨其他 NAT 选项。我们还将看到,如何把这个堆栈的资源所生成的输出作为其他堆栈的输入供其消费。
关于作者
Ken Krueger 以“通过现代技术的应用,指导组织和个人走向商业成功”作为自己的专业使命。他有超过 30 年的软件开发、项目领导、项目经理、Scrum Master 和导师经验,跨越大型机、客户端 - 服务器和 Web 时代。他在 Java、Spring、SQL、Web 开发、云和相关技术方面有丰富的经验。行业经验包括电信、金融、房地产、零售、发电、航运、酒店和软件开发。他拥有南佛罗里达大学 MIS 学位,罗林斯学院克鲁默商学院 MBA 学位,以及 Scrum Master、PMP、AWS 和 Java 认证。
标签:
发表评论 (已有0条评论)