背景
为满足 GrowingIO 客户多样性的需求,在公有云设施上使用 Terraform 作资源管理。采取 Terrform 具有以下相关优势:
- 多云支持,主流云厂商均提供对应的
Provider
支持。 - 自动化管理基础结构,可重复对资源进行编排使用。
- 基础架构即代码
(Infrastructure as Code)
,允许保存基础设施状态,便于追踪管理。 - 统一的语法来管理不同的云服务,实现标准化管理。
Terraform 介绍
概念
Terraform
是一个开源 IAS
工具,提供一致的 CLI
工作流,可管理数百个云服务。 Terraform
通过将云厂商提供的 API
编写为声明式配置文件,通过Terraform
的命令行接口,可将资源调度配置应用到任意支持的云上,并实现版本控制。更多详情请参见HashiCorp Terraform。
Terraform
通过不同的Provider
来支持不同云平台。国外云服务商如 Azure
, AWS
, GoogleCloud
, DigtalOcean
,国内云服务商如 Aliyun
, TencentCloud
, Ucloud
, BaiduCloud
均有提供官方的 Provider
。
架构
Terraform
通过解析用户书写的HCL(HashiCorp Configuration Language)
格式的DSL
文件,然后通过Terraform core
与各云厂商提供的Providers
进行交互,从而进行相关资源的调度。各云厂商依HCL
代码风格,将自家资源调用API
重新封装,以生成对应的 Providers
。
项目实践
项目设计
- 客户项目存在多个同构环境,环境交付需要一致。
- 每个环境中存在中多个项目,各项目对资源调度需求各异。
- 每个项目需要使用
EC2
、ELB
、EBS
、EMR
等多种资源。
项目实现
项目结构
# tree -L 3 .
├── README.MD
├── module
│ ├── app1
│ │ ├── config.tf
│ │ ├── locals.tf
│ │ ├── mai