当你完全理解并熟练掌握『实践Terraform』时所做的学习笔记

在「实践 Terraform」中学到了什么?

本书的构成是通过使用Terraform来创建应用程序在AWS上进行构建,并通过此过程学习Terraform。

在了解整个架构的基础上,使用Terraform来构建该架构。

这本书分为“入门篇”、“实践篇”和“运用·设计篇”三部分。第1章到第3章是“入门篇”。第1章将进行AWS和Terraform的设置。然后在第2章和第3章中,我们将一次性学习Terraform的基础知识。第4章到第16章是“实践篇”。第4章将进行系统的整体设计。

Terraform是一款用于构建基础设施的工具,通过编写代码可以定义在类似于AWS和GCP这样的云平台上构建的资源,从而实现基础架构即代码(Infrastructure as Code)。

Terraform的主要特点包括:
» 基础设施即代码
使用高级配置语法来描述基础设施。这使得你可以将数据中心的蓝图版本化,并像对待其他代码一样进行处理。此外,基础设施可以进行共享和重用。
» 执行计划
Terraform有一个“计划”步骤,它生成一个执行计划。执行计划展示了在调用apply时Terraform将要执行的操作。这让你避免在Terraform操作基础设施时遇到任何意外情况。
» 资源图
Terraform构建了你所有资源的图形,并通过并行化创建和修改任何非依赖资源。因此,Terraform以尽可能高效的方式构建基础设施,并让操作员了解其基础设施的依赖关系。
» 变更自动化
可以以最少的人为干预将复杂的变更集应用到你的基础设施上。通过之前提到的执行计划和资源图,你可以确切地知道Terraform将会以何种顺序对基础设施进行更改,避免许多可能的人为错误。

通过本书可以学习到如何开始使用Terraform,了解Terraform的基本操作和知识,以及在实际工作中进行设计和运维所需的知识。

考虑到本书通过Terraform构建了以下技术堆栈,因此可以毫不夸张地认为我们已经成功构建了基于容器的一般应用程序的架构。

4.3技术栈
我们将在各章中实现以下资源(图4.1)。
– 第5章“权限管理”:IAM策略、IAM角色
– 第6章“存储”:S3
– 第7章“网络”:VPC、NAT网关、安全组
– 第8章“负载均衡器和DNS”:ALB、Route53、ACM
– 第9章“容器编排”:ECSFargate
– 第10章“批处理”:ECSScheduledTasks
– 第11章“密钥管理”:KMS
– 第12章“配置管理”:SSM参数存储
– 第13章“数据存储”:RDS、ElastiCache
– 第14章“部署管道”:ECR、CodeBuild、CodePipeline
– 第15章“无SSH操作”:EC2、SessionManager
– 第16章“日志记录”:CloudWatchLogs、KinesisDataFirehose

因此可以说,不仅仅是学习了Terraform,还学习了AWS整体技术栈。

再者,在本书中所使用的是AWS,但我认为如果进行适用的话,也可以尝试使用GCP或Azure等其他平台。

写经之后的感触

如果不了解AWS,可能会在各种情况下陷入困境。

只要对AWS的基本概念有一定理解,基本上就没有太多困惑的地方了。

如果对AWS本身没有理解,我认为将对概念的理解感到困难。

这本书虽然对AWS的各项服务做了简要的解释,但并不是为了教授AWS本身而存在,所以如果完全不了解AWS的话,你需要自己查阅相关资料或者先读其他的书籍。

这似乎也可以用作逆向查询词典。

而且,我认为它还可以用作在实际工作中构建每个资源时的反向参考。

我觉得最佳实践既有用,也可以作为手册的参考书,持有它不会有损失。

在真正去做全体任务之前很难有体会

只是抄写这本书,感觉和在命令行界面上制作每一个资源之间并没有太大的区别吗?

当我想要同时操作所有这些资源时,我感到Terraform非常强大。

当需要删除为降低成本而创建的资源时,通过GUI一个个点击或者使用CLI逐个删除既麻烦又可能导致遗漏。

由于Terraform的存在,仅仅运行terraform destroy命令就可以确保无论多少个资源都被完全删除,也就意味着不会发生任何错误,并且工作速度极快,能够快速完成任务。

不仅在删除资源时,而且在重新构建已创建的基础设施并重建相同环境时也可享受类似的好处。

在本书中使用/介绍的命令列表

请将本书中使用和介绍的命令的列表和概述整理在备忘录中。

进行 terraform 初始化。

为了执行Terraform操作,初始化工作目录。

当设置被新增或从GitHub克隆时,执行操作。

使用 terraform init 命令来初始化包含 Terraform 配置文件的工作目录。这是在编写新的 Terraform 配置文件或从版本控制中克隆现有配置文件后应首先运行的命令。多次运行此命令是安全的。
https://www.terraform.io/docs/commands/init.html

查看terraform计划

当执行计划被输出时,会显示添加或删除了哪些内容。

为了理解即将执行的内容而使用。

但实际上并不会执行。

使用terraform plan命令可以创建执行计划。Terraform执行刷新(除非明确禁用),然后确定在配置文件中指定的期望状态所需的操作。

部署Terraform

执行 plan 命令输出的执行结果。
实际执行此命令将会添加或更新资源。

使用terraform apply命令来应用必要的更改,以达到配置的期望状态,或者是terraform plan执行计划生成的预定行动集合。

销毁基础设施

删除通过terraform apply创建的资源。

如果不想被无条件删除,就需要进行适当的删除防止措施,因为大多数资源都会被删除。

terraform destroy命令用于销毁由Terraform管理的基础设施。
https://www.terraform.io/docs/commands/destroy.html

获取Terraform

下载执行.tf文件所需的模块。

使用 terraform get 命令可以下载和更新在根模块中提到的模块。

使用terraform fmt进行格式化。

提供对.tf文件进行格式化的功能。

– 会递归地为你进行格式化。

terraform fmt命令用于重写Terraform配置文件以达到规范的格式和样式。该命令应用了Terraform语言风格约定的部分子集,以及其他为了可读性进行的小的调整。
https://www.terraform.io/docs/commands/fmt.html

验证基础设施是否合法

terraform fmt是一个与格式相关的命令,它可以检查文件的编写是否正确。

静态分析工具。

terraform – 安装自动补全

安装用于在CLI中操作Terraform时的选项卡存储功能。

如果不再需要,可以使用terraform -uninstall-autocomplete进行删除。

如果您使用bash或zsh作为命令行Shell,Terraform可以为所有命令名称和(目前支持的)一些命令参数提供Tab补全支持。
https://www.terraform.io/docs/commands/index.html#shell-tab-completion

tflint

terraform validate可以帮助我们发现由于无法识别的提供商所引起的问题。

通过在main.tf中添加类似的描述,例如”tflint –deep –aws-region=ap-northeast-1″,可以执行特定地区(region specific)的操作。

由于t1.2xlarge是一个不存在的实例类型,运行terraform apply时将会出现错误。但terraform plan和terraform validate无法预先找到这个可能的错误。这是因为它是一个AWS提供商特定的问题,并且作为Terraform配置是合法的。
https://github.com/terraform-linters/tflint#why-tflint-is-required

Terraform控制台

打开交互式控制台。

terraform状态

与已创建资源相关的各种信息的持有状态的命令集合。

terraform state 命令用于高级状态管理。随着您对 Terraform 的使用变得更加高级,有一些情况可能需要修改 Terraform 状态。与直接修改该状态不同,terraform state 命令在许多情况下可以代替使用。
https://www.terraform.io/docs/commands/state/index.html

列出 terraform 状态

如果提供额外的参数,可以对资源进行筛选并列举出来。

使用 terraform state list 命令可以列出 Terraform 状态中的资源。
https://www.terraform.io/docs/commands/state/list.html

显示terraform的状态

展示资源的详细信息。

使用terraform state show命令可以显示Terraform状态中单个资源的属性。
https://www.terraform.io/docs/commands/state/show.html

terraform state pull – 获取terraform状态

基本上,狀態(State)通常在本地保存,但在團隊開發中,為保持相同的狀態,需要使用像Terraform Cloud或S3等雲端存儲進行管理。

这个命令是用来将该状态带到本地的命令。

使用 terraform state pull 命令可以手动从远程状态下载并输出状态。此命令还适用于本地状态。
https://www.terraform.io/docs/commands/state/pull.html

部署terraform状态

在本地通过状态来修改远程的状态。
基本上不应该使用它。

terraform state push命令用于手动上传本地状态文件到远程状态。此命令还可以与本地状态一起使用。
https://www.terraform.io/docs/commands/state/push.html

删除 Terraform 中的 aws_instance.remove 状态。

删除Terraform中状态管理的资源。
虽然很难想象,但是在希望将资源从Terraform管理中排除的情况下使用。

使用 terraform state rm 命令可以从 Terraform 状态中移除项目。此命令可以移除单个资源、资源的单个实例、整个模块等等。
https://www.terraform.io/docs/commands/state/rm.html

将 Terraform 的状态迁移。

当存在多个状态时,用于将资源从一个状态移动到另一个状态。

terraform state mv命令用于在Terraform状态中移动项目。该命令可以移动单个资源、资源的单个实例、整个模块等。该命令还可以将项目移动到完全不同的状态文件中,实现高效的重构。
https://www.terraform.io/docs/commands/state/mv.html

terraform导入

将存在但未由 Terraform 管理的资源加入 Terraform 管理的命令。

之前只用GUI和CLI操作AWS,但是现在想要引入Terraform来使用!将来可能会用到。

可以使用terraform import命令将现有资源导入到Terraform中。

terraform的工作区

关于在单个代码中构建多个环境的Workspace的命令集。

使用terraform工作区命令来管理工作区。
https://www.terraform.io/docs/commands/workspace/index.html

创建一个新的Terraform工作空间

添加新的工作空间。

如果在工作区没有进行操作的话,默认会在一个名为”default”的工作区进行工作。

使用terraform workspace new命令可以创建一个新的工作区。
https://www.terraform.io/docs/commands/workspace/new.html

查看当前的 Terraform 工作区

展示当前的工作空间。

使用terraform workspace show命令可以输出当前工作空间的信息。
https://www.terraform.io/docs/commands/workspace/show.html

查看 Terraform 工作区列表。

显示工作空间列表

terraform工作区列表命令用于列出所有现有的工作区。
https://www.terraform.io/docs/commands/workspace/list.html

切换到 terraform 工作空间

设定一个用于进行任务的工作空间。

使用 terraform workspace select 命令选择不同的工作空间,以便进行后续操作。
https://www.terraform.io/docs/commands/workspace/select.html

TF_LOG=调试

环境变量。

可以在标准输出中输出调试级别的日志。
可以逐字逐句用于调试。

通过将TF_LOG环境变量设置为任意值,Terraform可以启用详细日志记录。这将导致详细日志出现在stderr上。
https://www.terraform.io/docs/internals/debugging.html

升级Terraform至0.12版本。

进行升级到0.12版本的命令。
如果使用的是0.11及以前的版本,可以使用官方命令而非手动操作进行升级。

升级命令terraform 0.12upgrade应用了几个自动升级规则,以帮助准备一个为Terraform v0.11编写的模块在Terraform v0.12中使用。
https://www.terraform.io/docs/commands/0.12upgrade.html

广告
将在 10 秒后关闭
bannerAds