关于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也有自己的状态管理组件 ...
随机推荐
- protobuf的下载、编译和使用
一 背景 工作中临时需要使用 protobuf v3.0.2 做消息格式转换,折腾了很久才搞定,这里特意做一个记录. 二 准备工作 全程使用的电脑为公司的win7 64位旗舰版,已经预先安装VS201 ...
- 笔记:Maven 生命周期与命令行详解
Maven 拥有三套相互独立的生命周期,分别是 clean.default和site,clean 生命周期的目的是清理项目,default 生命周期的目的是构建项目,而site生命周期的目的是建立项目 ...
- React 系列文章(1): npm 手动搭建React 运行实例 (新手必看)
摘 要 刚接触React 开发, 在摸索中构建react 运行环境,总会遇到各种坑:本文,将用最短时间解决webpack+react 环境搭建问题. 1.如果你还没有React基础 看这里. 2.如果 ...
- python自学日志--基础篇(1)
从认识python,到学习python,中间经历了挺长一段时间的心理挣扎.人总是对未知的事物有着天生的恐惧感,但是,人又是对未知充斥好奇.所以在最后,还是推开了这扇门,开始学习python. pyth ...
- Hibernate 介绍及其 环境搭建
介绍 数据持久化概念 数据持久化是将内存中的数据模型转换为存储模型,以及将存储模型转换为内存中的数据模型的统称.例如:文件的存储.数据的读取等都是数据持久化操作.数据模型可以是任何数据结构或对象模型, ...
- 【Python】 hash值计算 hashlib & hmac
hashlib & hmac *不是很清楚能不能把这种hash值取样算法称之为加密,但是似乎好像也是这么说的哈(非科班出身的野路子就是没这种基本知识的) ■ 基本用法 hashlib支持MD5 ...
- Algorithm --> Dijkstra和Floyd最短路径算法
Dijkstra算法 一.最短路径的最优子结构性质 该性质描述为:如果P(i,j)={Vi....Vk..Vs...Vj}是从顶点i到j的最短路径,k和s是这条路径上的一个中间顶点,那么P(k,s)必 ...
- 推荐一个利用 python 生成 pptx 分析报告的工具包:reportgen
reportgen v0.1.8 更新介绍 这段时间,我对 reportgen 进行了大工程量的修改和更新.将之前在各个文章中出现的函数进行了封装,同时也对现有工具包的一些逻辑进行了调整. 1.rep ...
- JavaScript 通过队列实现异步流控制
知乎上面看到一个面试题. 某个应用模块由文本框 input,以及按钮 A,按钮 B 组成.点击按钮 A,会向地址 urlA 发出一个 ajax 请求,并将返回的字符串填充到 input 中(覆盖 in ...
- C#/AutoCAD 2018/ObjectArx/二次开发添加删除实体的工具函数(四)
1.添加删除实体 C# ObjectARX二次开发添加删除实体是非常容易主要代码如下: 添加实体: objId = btr.AppendEntity(entity); trans.AddNewlyCr ...