Terraform 和云资源管理
前言 过去一年在前公司(电信)写了很多基础设施的自动化的实现,主要是通过 Ansible 将以往手动部署的中间件代码化,实现中间件的高效部署和持续运维。但像云服务器,域名等云资源,还是通过人工在控制台点点点来完成的。过去新机房的建设,近万台服务器,全是靠人工点出来的。 业界已经有成熟的工具:Terraform,国内的云公司比如:阿里云和腾讯云,也都有完善的支持了。这里记录一下 Arch Linux DevOps 团队的实现和我本地的实践。 本文会包含: 云资源如何代码化 Terraform 代码如何实现本地 AK、SK 等加密信息的加密存储 IaC & Terraform Terraform 介绍 Terraform 是声明式的(类似 K8s),基于自己的描述语言:HCL。比如有 10 台服务器,那么在存放 HCL 的基础设施代码仓库里,就会有 10 台服务器对应的安全组/规格/镜像的声明(当然,为了避免重复代码,会使用模块进行抽象)。 Terraform HCL 只声明必要的项,一些非必要的项,比如实例的 ID,镜像的 ID,会作为状态,存放在一个叫 state backend 的地方,通过本地的 HCL 代码配合 state backend 中的数据一起,将云资源所有信息声明出来。 默认 state backend 是执行者本地的一份 tfstate 结尾的文件。本地文件会导致一个问题,如果其他人想要获得当前所有云设施的最新状态,就需要跟之前的执行者索取他本地最新的 state 文件。因此,团队内一般会使用 remote state backend,这可以是一个数据库或者 S3(AWS 对象存储服务)。比如我本地就是用 PostgreSQL 来作为 remote state backend。所有基础设施代码的贡献者,确保能安全的访问到 PG 和对象存储即可。 即使使用了 remote state backend,本地还是会有 tfstate 文件,但将只包含 remote state backend 的连接信息,不包含云资源的补充信息。本地 tfstate 文件的信息在初始化 Terraform 时写入,比如我本地的 Terraform 首次初始化的命令如下:...