适合Terraform初学者的推荐! 概述《详解Terraform 第3版》

首先

我在今年(2023年)11月读了《详解 Terraform 第3版》,所以在这里给大家推荐一下这本书并分享每章节中有助于理解的文章链接。

正如标题中所提到的,即使我只有2个月的Terraform经验,作为初学者的作者也能轻松地阅读这本书,所以我也向初学者们推荐它!

 

摘要

「詳解 Terraform 第3版」是一本广泛解释了Terraform的基础知识和应用的书籍,介绍了DevOps和IaC的概念、状态管理、模块使用、秘钥管理、多个提供者的使用等内容。

第一章和第二章是面向初学者的内容,对于初次使用Terraform的人也非常友好。
从第三章开始,内容更加实用,也可以用作参考书。(对于高级用户来说可能有点不够)

我在每个章节中简要描述了内容以及提供了与理解有帮助的文章和附加文章的链接。

第一章:为什么要使用Terraform

目标:希望了解Terraform的背景和必要性的人们

本文描述了DevOps、基础设施即代码(IaC)和Terraform的机制(它是一种声明式语言)。

有关Terraform的机制,以下的文章等以简明易懂的方式进行了解释。

 

第二章:开始使用Terraform

对于希望了解Terraform的基本使用方法、AWS的基础知识(如EC2、VPC等)以及基本的Terraform编程写作技巧的人。

这篇文章详细描述了Terraform的基础知识,包括计划、应用、变量和数据源。此外,还详细解释了可视化命令,如Terraform output和Terraform graph。

关于可视化,以下文章非常易懂。

 

本文中详细阐述了云计算AWS(Amazon Web Services)中的基础知识,包括EC2、VPC、安全组、负载均衡等,并介绍了如何使用terraform编写相关程序。

第三章:管理Terraform状态

目标:想了解状态保存方法和在不同环境中分离方法的人。

在第三章中,详细介绍了状态管理的方法。

作为保存和共享状态的方法,推荐使用S3和DynamoDB(通过锁定)。

具体的的方法可以在下面的文章中找到。

 

在处理不同环境(例如:开发环境和测试环境)的状态管理时,可以通过使用工作区进行分离(选项1),或者通过使用文件布局进行分离(选项2)。

采用文件布局进行分离时,文档中提到了以环境和模块集合 (如VPC、数据库等) 进行文件夹划分的方法。关于文件夹划分的方法,我认为每个团队可能都有不同的流派,但可以作为参考。

尽管在书籍中没有提到,但据说也有使用Terraform Cloud进行状态管理的方法。

 

第4章:使用模块创建可重复利用的基础设施。

目标:希望了解模块的优点和使用方法的人们。

在使用模块时必不可少的变量根据环境而变化的是var(例如:数据库大小),而不会改变的是locals(例如:端口号)。

关于模块版本的管理方法,文档中提到了利用”live”(在线)和”modules”两种方式进行操作。
在”modules”中对代码进行修改并在dev和stg环境中进行测试,一旦测试通过,则将代码移至”live”环境(即prd模块的源代码是参考”live”环境的)。

第五章:Terraform技巧和要点

需要了解Terraform的语法和技巧的人。

Terraform的语法介绍如下,共有以下七项。

関数•文法説明countcountの個数だけリソースを作成 (0でリソースを作成しない)length配列の長さを返すスプラット式配列の全ての要素を指定for_eachリスト、集合、マップをループfor式リスト内包表記concat2つ以上のリストを1つにまとめるoneリストの要素数が0->null、1->要素、2以上:エラー

在使用Terraform时,有以下三点要注意。

    1. 仅使用Terraform来操作环境

 

    1. 如果存在现有基础架构,则进行导入

 

    在执行之前使用计划确认(确认所需资源是否被删除)。为了实现零停机部署,将lifecycle的create_before_destroy=true设置为先创建替代资源。

创建之前销毁的文档如下。

 

第六章:管理保密事项

对于想要了解密码等秘密信息管理方法的人们。

有关使用秘密信息进行认证的情况已经解释了三种。

    1. 供应商

 

    1. 资源和数据文件

 

    状态文件和计划文件

网络服务提供商

保存个人用户的机密信息的方法有以下两种。

    • 環境変数

aws-vault add(AWSの認証)

关于aws-vault的解释如下。

 

对于CircleCI机器用户来说,它将保存在CircleCI上下文中。

资源和数据文件 hé

资源和数据文件的秘密信息将通过以下三个方式进行管理。

    • 環境変数

 

    • 暗号化されたファイル

 

    • KMSを使う方法やPSGキーを使う方法があります。

 

    シークレットストア

有关KMS的详细解释请参考以下文章。

 

国家文件和计划文件

建议使用支持加密的后端来保存数据,并对文件进行加密。

使用多个供应商

目标:
希望了解如何处理多个提供商的方法的人。

以下是对使用多个供应商的场景进行分类的三种方式。

    • 複数のAWSリージョンにデプロイ

 

    • 複数のAWSアカウントにデプロイ

 

    異なる複数のプロバイドにデプロイ

多个亚马逊云服务(AWS)区域

在部署到多个地区时,可以使用多个provider模块,并分别设置不同的地区和别名。

多个AWS账户

在部署到多个账户时,需要分别配置不同的 assume_role 和 alias。

不同的多个供应商

作为一个现实且难以实现的例子,介绍了将Docker化的应用程序与AWS提供商和Kubernetes结合使用的方法。

同样介绍了Docker和Kubernetes的用法以及特点。

第八章: 用於正式環境的Terraform程式碼

目标:
希望了解所需元素以创建生产级别的Terraform项目的人。

关于需要花费时间在实施生产级基础设施方面的原因,可以列举以下三点。

– 工具的迅猛发展和发展中的状态
– 偶发的复杂性:由选定的工具引起的问题
– 本质上的复杂性:无论选择的工具如何,都会出现的问题

在真正的生产环境中,需要检查多个项目,列举如下。

    • インストール

 

    • 設定

 

    • プロビジョニング

 

    • デプロイ

 

    • 高可用性

 

    • スケーラビリティ

 

    • パフォーマンス

 

    • ネットワーク

 

    • セキュリティ

 

    • メトリクス

 

    • ログ

 

    • バックアップ

 

    • コスト

 

    • ドキュメント

 

    テスト

由于大规模的基础设施,还需要小型化、可组合、可测试和版本管理的模块化。

第九章:测试Terraform代码。

目标群体:
想要了解Teraform测试的人

测试方法有两种,一种是手动测试,另一种是自动测试。

人工测试

在手动测试中,您需要执行以下步骤:(1)在AWS或类似的平台上创建资源,(2)发送curl或HTTP请求进行确认,(3)手动删除资源。(也就是说,需要在每个步骤中手动输入命令。)

在手动测试中,建议为开发者准备一个沙盒环境,并定期删除。

自动测试

在自动化测试中,将手动测试中的每个步骤整合为一个步骤自动化进行。

在这本书中,介绍了Terratest作为Go语言库的自动化测试工具,并且提供了单位测试、集成测试和端对端测试的示例。

 

注意事项以及技巧也有所记录,关于单元测试的并行化,可以通过将ID设置为随机来避免重复,还介绍了针对启动失败或其他失败的恢复能力,对已知错误进行重试等方法。

关于并列测试的内容在以下的文章中以简明易懂的方式进行了解释。

 

其他

除了上述内容,还介绍了静态分析(terraform validate、Policy of Code)和基于计划的分析,以及服务器测试(InSpec、Serverspec、Goss)。

第十章:使用Terraform进行团队合作

目标:
希望在团队中引入Terraform的人员。

本文介绍了实际的部署工作流程和部署策略,

有关部署策略的详细解释,请参阅以下网站文章。

 

每一章都介绍了文件布局和测试方法等事项,并且在各处都有出现,非常适合复习。

最后。

「Terraform 第3版详解」的书籍介绍和参考链接介绍到此为止。

对于初学者的我来说,这本书对于吸收和整理知识非常有帮助。

如果能对您有一点帮助,那就太好了。