Terraform 使用实例详解

Terraform 是一个 IT 基础架构自动化编排工具,它的口号是 "Write, Plan, and create Infrastructure as Code", 基础架构即代码。具体的说就是可以用代码来管理维护 IT 资源,比如针对 AWS,我们可以用它创建,修改,删除 S3 Bucket, Lambda, EC2 实例,Kinesis, VPC 等各种资源。并且在真正运行之前可以看到执行计划(即干运行-dryrun)。由于状态保存到文件中,因此能够离线方式查看资源情况 -- 当然,前提是不要在 Terraform 之外对资源进行修改。

Terraform 配置的状态除了能够保存在本地文件中,也可以保存到 ConsulS3, azure, http, swift 等处。

Terraform 是一个高度可扩展的工具,通过 Provider 来支持新的基础架构,AWS 不过为目前官方内建 68 个 Providers 中的一个。其他能用 Terraform 的地方有 Alicloud(阿里云, 实名制备案才能用), Google Cloud, Heroku, Kubernetes, Microsoft Azure, MySQL, RabbitMQ, Docker 等等。愿意的话可以写自己的 Provider, 如搞个 Kafka 的话,用来管理 Topic 等的创建,维护工作。

Terraform 之前我们对 AWS 的操作用的是 awscli, 或 Serverless。awscli 什么都能做,但它是无状态的,必须明确用不同的命令来创建,修改和删除。Serverless 不是用来管理基础架构的,用它创建  Lambda 时创建资源都是很麻烦的事。AWS 提供的 CloudFormation 才是与 Terraform 较类似的工具,但是看到用法就头疼。

下面从最简单例子开始,看看怎么用 Terraform 创建,删改,修改 S3 Bucket。本地系统为 Mac OS。

1. Terraform 安装

brew install terraform

安装后 shell 命令就是 terraform, 常用的是 terraform init, terraform plan, terraform apply

2. 创建配置文件

像 git 一样,每个 Terraform 项目需要自己单独的目录空间,所以我们创建一个 terraform-learning 目录

mkdir terraform-learning
cd terraform-learning

该目录下的所有  *.tf 文件都会被 Terraform 加载,在初始化 Terraform 工作空间之前必须至少要有一个 *.tf 文件。我们这里建立文件 main.tf, 内容如下

Terraform 使用实例详解

Terraform 配置的语法是该公司 HashiCorp 独创的 HCL(HashiCorp configuration language), 它可以兼容 JSON 格式。

上面 tf 文件在 Vim 中的语法加亮是安装的 hashivim/vim-terraform 插件。

我们写好了 *.tf 文件后可以调用 terraform fmt 对配置文件进行格式化,它比较喜欢被 Java 弃用的等号对齐的格式。

3. 配置文件介绍

从正式跨入 terraform 命令正题之前先来大概的介绍一下上面那个 main.tf 文件。

1) provider "aws" 部分,它指定选用什么 provider, 以及验证信息。aws 既允许指定 access_key 和 secret_key

provider "aws" {
    region           = "us-east-1"
    access_key  = "your-access-key-here"
    secret_key   = "your-secret-key-here"
}

也能够指定证书文件中的 profile

provider "aws" {
    region                                  = "us-east-1"
    shared_credentials_file  = "~/.aws/credentials"   //不指定的话,默认值是 "~/.aws/credentials"
    profile                                  = "yanbin"                        //不指定的话,默认值是 "default"
}

如果是使用 shared_credentials_file 中的 profile, 请确定您以预先生成好的 credentials 文件及有效的 profile。

更多关于 AWS Provider 的配置请参考 https://www.terraform.io/docs/providers/aws/index.html

2) resource "aws_s3_bucket" "s3_bucket" 部分

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/13003.html