之前一直用cf 来创建aws的资源,但是cf 并不适配多云环境,所以准备使用tf 重构一下之前的基础设施即代码,首先先快速测试一下使用tf的感觉
Quick Start
创建一个目录,在目录下创建一个.tf的文件声明
provider "aws" {
access_key = "xxxx"
secret_key = "xxxx"
region = "us-east-2"
}
resource "aws_instance" "cdh-elk7-001" {
ami = "ami-xxx"
instance_type = "t2.micro"
subnet_id = "subnet-xxxx"
}
使用terraform init 声明该配置要被创建
使用terraform apply 创建改配置
使用terraform show 查看被创建的资源
正式开始
首先要明白几个概念,
provider
data
resource
以我目前的学习进度,先看这三个东西貌似就够用了
provider:
声明一个要使用的插件,这个插件就是已经封装好对应环境的api操作,可以用声明式的方式去使用它
data:
这个东西是在aws 上创建一个资源,这个资源没有被分配,他是要结合这下面的resource来用的
resource:
这个方法就是创建、修改、删除AWS的资源,所以tf基本就是 定义个使用的provider,定义一个data,resource去调用定义的data,ok我们入门就用这三种方法来进行,后续的复杂用法,后面在研究
初始化一个目录
我是多云下,所以需要维护一个目录,方便后期接入gitops流程做准备
mkdir -p /opt/terraform/aws/.creds # aws的ack目录
mkdir -p /opt/terraform/gcp/.creds # gcp的ack目录
mkdir -p /opt/terraform/plugin # 插件目录
mkdir -p /opt/terraform/aws/zhanghao1/tokyo #aws多账号多region结构
mkdir -p /opt/terraform/aws/zhanghao2/ohio #aws多账号多region结构
先这样,以后再优化。
terraform init
这个命令可以初始化一个配置,当你编写了.tf 的声明文件之后需要使用terraform init 进行初始化配置,他会根据你的声明去下载所需要用的Provides插件,可是在生产环境中,我们要对这些插件控制版本来符合IAC规则 ,所以我们需要手动的下载固定版本的插件用一个目录去维护他们
去这个网站上下载插件
https://releases.hashicorp.com/
把它们放在同一个目录带着版本号
tree /opt/terraform/plugin
plugin/
├── terraform-provider-aws_v2.67.0_x4
└── terraform-provider-google_v3.26.0_x5
之后使用-plugin-dir 参数初始化并且跳过自动安装
terraform init -input=false -plugin-dir=/opt/terraform/plugin
这样init 步骤完成,下面说一下accesskey
认证
如何配置比较好,同样的因为是多云,所以我们希望由一个目录去维护所有的ack,那么我们首先来创建他
mkdir /opt/terraform/aws/.creds
mkdir /opt/terraform/gcp/.creds
用这种目录结构去维护多个ack,如果全部放在一起,太乱了
在使用的时候
provider "aws" {
region = "us-east-2"
shared_credentials_file = "/opt/terraform/aws/.creds/zhanghao1"
profile = "customprofile"
}
看了他的四种认证方法,最后还是觉得这种比较好
好了,环境已经配置完成,下面开始创建各种资源。明天见




