0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【学习笔记】Terraform

Posted at

概要

担当项目里面,使用chef进行着自动部署。
然后因为下面的问题,决定转移到别的pf上。
就顺便学习了terraform
(学了第一课就发现,因为功能上的不同,terraform并不能用来代替chef,嘛,都开始了学完吧。。)

解決したい問題

社内的chef有一个很致命的问题:管理者权限付与が複雑かつ管理しにくい

  • 利用者ごとで権限管理があるし、更に細かいDataBagの管理がある
  • DataBagの権限付与は元Adminしかできない

实际运用上,因为组内人员变动和笔记本的更新带来的私有钥匙丢失。
最后组内只有一个人还保留着权限。

冷汗之后,请最后剩下的组员把权限给了当前组的所有人之后,
决心放弃chef,移行到别的pf上

正文

Terraform和各PF(chef)的关系和作用范围

视频链接:https://www.udemy.com/course/terraform-cn/learn/lecture/20925020#overview
看到这里有点小失落,原本是希望terraform可以一站式地把部署也一块做了的。
想要完美替代chef,需要terraform+ansible或者单纯用ansible的样子了。
スクリーンショット 2021-02-14 13.19.43.png
スクリーンショット 2021-02-14 13.19.33.png

2-6 配置开发环境

概要

  • 这里用vagrant来部署terraform, aws等课程上用的东西
  • vagrant背后用visualbox来开启虚拟机

代码

# 先来到Vagrantfile所在文件夹
❯ pwd
/Users/syao/git/terraform_devops_env

# 开启terraform
vagrant up

# 登陆到开发环境
vagrant ssh

# 关掉虚拟机(不会删掉,想删用destroy)
vagrant halt

2-7 SFTP

概要

这里解释了怎么用vscode的SFTP插件来实现本地Mac的编辑内容实时反映到Docker的Container里面。
这其实有很多的应用场景,譬如在本地IDE编辑一个文件,实时反映到我的服务器上。
很久没有做インフラの相关配置了,这不失为一个很好的工具。

做密匙

如果还没的话,ssh-keygen来生成密匙,把公有钥匙放到container的.ssh下面

# 本地Mac
❯ ll
total 24
8 -rw-------  1 syao  staff  2622  2 14 16:05 id_rsa
8 -rw-r--r--  1 syao  staff   582  2 14 16:05 id_rsa.pub
8 -rw-r--r--  1 syao  staff  1117  2 14 16:16 known_hosts

# authorized_keys就是本地过去的id_rsa.pub
$ vagrant ssh 
$ ll .ssh
vagrant@devops-box:~$ ll .ssh
total 16
-rw------- 1 vagrant vagrant  971 Feb 14 07:14 authorized_keys
-rw-r--r-- 1 vagrant vagrant  222 Feb 14 07:15 known_hosts

配置SFTP

SFTP的说明都在EXTENSION里面可以看

  1. 打开VSCODE
  2. CMD+SHIFT+P 打开RUN界面
  3. 输入SFTP: Config
{
    "name": "My Server",
    "context": "sftp_test",
    "host": "devops-box",
    "protocol": "sftp",
    "port": 22,
    "username": "vagrant",
    "remotePath": "/home/vagrant/terraform_study",
    "uploadOnSave": true,
    "privateKeyPath": "~/.ssh/id_rsa"
}

手动发送(一般不需要)

  1. 打开VSCODE
  2. CMD+SHIFT+P 打开RUN界面
  3. 输入SFTP: Syn Local->Remote

2-9

复习一下2-8里vagrant做的事情,他装了一个OS然后装了一个terraform。
现在我们要在这个terrafrom上面搞事情了

重新设置SFTP

  1. 打开VSCODE
  2. CMD+SHIFT+P 打开RUN界面
  3. 输入SFTP: Config
    config文件只改一行
"context": "terraform_test"

登陆虚拟机check

如下tf文件都被发过来了的话OK

$ vagrant ssh
vagrant@devops-box> cd terraform_study
vagrant@devops-box> ll
total 16
drwxrwxr-x 2 vagrant vagrant 4096 May  7 08:06 ./
drwxr-xr-x 6 vagrant vagrant 4096 Feb 14 07:27 ../
-rw-rw-r-- 1 vagrant vagrant  224 May  7 08:05 instance.tf
-rw-rw-r-- 1 vagrant vagrant   46 May  7 08:06 versions.tf

开始Terraform

下面的代码执行之前

  1. 先更新instance.tf里面的AWS密匙
  2. AMI(amazon machine image)设定(跑到AWS上自己新建一个看看就知道)
  3. 新建
  4. AWS确认。发现的确有个新建的instance在跑
  5. 删除(不然会被收钱的)
  6. AWS确认。发现新建的instance被删除了Terminated, OK
# 新建代码
## 初始化。下载provider的包啊之类
vagrant@devops-box> terraform init

## 执行plan。有点类似dry-run,这时候如果密匙没有更新的话出error
vagrant@devops-box> terraform plan

## 应用
vagrant@devops-box> terraform apply

# 删除代码
vagrant@devops-box> terraform destroy

2-10 使用变量

  • tf文件可以拆分,然后通过变量的方式来被读取
  • .tfvars 秘密情報可以放到这个文件里来防止被上传到GIT

2-15 state和backend

  • terraform的状态文件会自动生成到文件terraform.tfstate
  • 为了保证协同开发的顺利进行,我们可以将tfstate文件放到backend上去
  • 这里的backend不用理解的很复杂,单纯看成是一个放状态文件的数据库即可

2-22 data source

  • 动态变量.根据设定计算出特定的值,然后输出json给terrafrom其他的程序来读取

3-34

  • 服务器压力测试工具: stress
  • CloudWatch: AWS的监控工具

3-36

  • Packer
    • 定制Machine Image.好处是事先download和install一些软件,节约时间
    • Packer的位置(本页面最上面),在Terraform的上游

4-39

  • Terraform Cloud。在VCS上的修改会自动反映到环境
    • Github的UI,做着CICD的事。

感想

  1. Terraform在功能上和AWS的CloudFormation一样。用哪个仁者见仁。这里有个比较可以参考:https://qiita.com/answer_d/items/74c3d317058d48394d21 (补充一点,因为Terraform是有GUI的,所以GUI不算是Terraform的缺点)
  2. 现状Y使用私有云而且自成一派,所以Terrafrom的支持上和使用上比较局限。provider选择Kubernetus的话,自动架构(注意:架构)部署应该是Y社内目前的最大应用场景
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?