暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

初识TerraForm与TerraForm初始化配置

耶喝运维 2020-06-22
839

之前一直用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"
}

看了他的四种认证方法,最后还是觉得这种比较好
好了,环境已经配置完成,下面开始创建各种资源。明天见


文章转载自耶喝运维,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论