关于terraform的状态管理
我们想在aws创建3台主机,使用ansible和terraform都是可以实现的。
用ansible可能是这样子的:
- ec2: count: 10 image: ami-40d281120 instance_type: t2.micro
用terraform可能是这样子的:
resource "aws_instance" "example" { count = 10 ami = "ami-40d28157" instance_type = "t2.micro" }
好了现在问题来了,我现在想要把主机数从10台增加到15台,怎么办?
ansible:
现在的配置文件不能用了,我们必须再写一个创建5台主机的配置文件
terraform:
直接在原有的基础上把10改成15就可以了,terraform知道之前创建了10台,所以会自动再加5台
也就是说terraform记录了状态。
状态信息记录在哪里?
顾名思意,就是:terraform.tfstate 文件
每次运行terraform apply时,都会把最新的配置和当前状态文件中的内容进行比较后,再做更改。
这东西不能乱改,改乱了你懂的,所以当团队共用一个文件的时候,就要小心了,应该做个加锁处理之类的,来防止差异性。
而且这个文件不应该放到github这些网站上去,因为状态文件里有敏感信息,而且谁也不能保证github上提交的是最新的版本。
即然不能放到github上,又能放到哪里去?答案是可以放到aws的s3上去,当然也支持其它的一些存储。
相关的命令是:terraform remote config
> terraform remote config \ -backend=s3 \ -backend-config="bucket=(YOUR_BUCKET_NAME)" \ -backend-config="key=global/s3/terraform.tfstate" \ -backend-config="region=us-east-1" \ -backend-config="encrypt=true" Remote configuration updated Remote state configured and pulled.
上面这堆就把代码都推到s3上了,这样以后再运行terraform命令的时候,terraform会自动保持更新并使用状态文件的。
对于状态文件锁定,是terraform企业版本中提供的功能,如果不想付费,我们可以使用专用的部署服务器来进行操作,而不是在本地pc。
文件的编写应该有良好的文件结构,比如这样:
stage
非生产工作量的环境(即测试)。
prod
生产工作负载环境(即面向用户的应用程序)。
MGMT
DevOps工具的环境(例如,堡垒主机,詹金斯)。
global
一个放置在所有环境中使用的资源的地方(例如S3,IAM)。
在每个环境中,每个“组件”都有单独的文件夹。每个项目的组件都不相同,但典型的组件有:
VPC
此环境的网络拓扑。
service
在此环境中运行的应用程序或微服务,例如Ruby on Rails前端或Scala后端。每个应用程序甚至可以生活在自己的文件夹中,以隔离它与所有其他应用程序。
data-storage
要在此环境中运行的数据存储库,例如MySQL或Redis。每个数据存储甚至可以存放在自己的文件夹中,以将其与所有其他数据存储隔离。
关于terraform的状态管理的更多相关文章
- Terraform插件Provider管理,搜索、定义、下载
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 简介 最近工作中用到了Terraform,权当学习记录一下,希望能帮助到其它人. Terraform系列文章如下: Ter ...
- Terraform模块Module管理,聚合资源的抽取与复用
我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 最近工作中用到了Terraform,权当学习记录一下,希望能帮助到其它人. Terraform系列文章如下: T ...
- Redux状态管理方法与实例
状态管理是目前构建单页应用中不可或缺的一环,也是值得花时间学习的知识点.React官方推荐我们使用Redux来管理我们的React应用,同时也提供了Redux的文档来供我们学习,中文版地址为http: ...
- 表格搞定 Asp.net Web 状态管理
最近在网上搜罗了 ASP.NET WEB 状态管理方面的一些内容,终于把这些内容整合总结了一下. 1. 希望自己通过整理,能够掌握一些,为自己投资. 2. 以便自己忘记,又要浪费时间搜罗. 3. 希望 ...
- [译]面向初学者的Asp.Net状态管理技术
介绍 本文主要讲解Asp.Net应用程序中的状态管理技术(Asp.Net中有多种状态管理技术),并批判性地分析所有状态管理技术的优缺点. 背景 HTTP是无状态的协议.客户端发起一个请求,服务器响应完 ...
- [Asp.Net]状态管理(Session、Application、Cache)
上篇博文介绍了在客户端状态管理的两种方式:http://www.cnblogs.com/wolf-sun/p/3329773.html.除了在客户端上保存状态外,还可以在服务器上保存状态.使用客户端的 ...
- [Asp.Net]状态管理(ViewState、Cookie)
简介 HTTP协议是无状态的.从客户端到服务器的连接可以在每个请求之后关闭.但是一般需要把一些客户端信息从一个页面传送给另一个页面. 无状态的根本原因是:浏览器和服务器使用Socket通信,服务器将请 ...
- HttpClient_HttpClient 4.3.6 HTTP状态管理
HTTP状态管理 最初的HTTP被设计成以状态.请求/应答为导向的协议,它被制作成是没有特殊条款的,以便在状态会话中能交换逻辑关系请求/应答.HTTP协议越来越受欢迎和被采用,越来越多的系统会在应用程 ...
- Ansible状态管理
转载自:http://xdays.me/ansible状态管理.html 简介 就像所有服务器批量管理工具(puppet有DSL,salt有state)一样,ansible也有自己的状态管理组件 ...
随机推荐
- [Luogu 1402] 酒店之王
题目 Description XX酒店的老板想成为酒店之王,本着这种希望,第一步要将酒店变得人性化.由于很多来住店的旅客有自己喜好的房间色调.阳光等,也有自己所爱的菜,但是该酒店只有p间房间,一天只有 ...
- 笔记:Eclipse 安装 Hibernate Tools
在线安装,要求 Eclipse Neon 4.6 版本和Java 8,在 Help > Install New Software,在打开的窗体中的 Work with 中输入URL地址" ...
- for..of与for..in
var arr=[1,2,3,5] undefined for(var m of arr) console.log(m)//1,2,3,5 for(var m in arr) console.log( ...
- poj-1012-约瑟夫问题
Description The Joseph's problem is notoriously known. For those who are not familiar with the origi ...
- 数据库 --> MySQL使用
MySQL使用 代码: #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h>#includ ...
- 常用linux日志查询命令
1.查看实时日志: tail -f nohup.out 2.分页查看所有日志: cat nohup.out | more 4.分页查看前N行日志: tail -n 1000 nohup.out | m ...
- 如何打包静态库.a文件 iOS
代码调试好了开始打包成sdk,下面是将要打包的FRSDK代码(FRSDK.h暴露在外面有别人调用) 1.创建新工程(Xcode File-New-Project) 2.把下面的红色框的东西移除 3.将 ...
- drbd(四):drbd多节点(drbd9)
1.drbd多节点简介 在drbd9以前,drbd一直只能配置两个节点,要么是primary/secondary,要么是primary/primary.虽然在这些版本上也能配置第三个节点实现三路节点的 ...
- alpha冲刺总结随笔
前言:前面乱乱糟糟整了一路,到最后终于可以稳定下来了.安安心心做个总结,然后把之后要做的事情都理清楚好了. 新学长似乎是个正经[并不]大腿. 看起来也不用都是一个人或者跟陈华学长两个人对半开了[突然摸 ...
- 敏捷冲刺每日报告四(Java-Team)
第四天报告(10.28 周六) 团队:Java-Team 成员: 章辉宇(284) 吴政楠(286) 陈阳(PM:288) 韩华颂(142) 胡志权(143) github地址:https://gi ...