我们想在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的状态管理的更多相关文章

  1. Terraform插件Provider管理,搜索、定义、下载

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 简介 最近工作中用到了Terraform,权当学习记录一下,希望能帮助到其它人. Terraform系列文章如下: Ter ...

  2. Terraform模块Module管理,聚合资源的抽取与复用

    我最新最全的文章都在南瓜慢说 www.pkslow.com,欢迎大家来喝茶! 1 简介 最近工作中用到了Terraform,权当学习记录一下,希望能帮助到其它人. Terraform系列文章如下: T ...

  3. Redux状态管理方法与实例

    状态管理是目前构建单页应用中不可或缺的一环,也是值得花时间学习的知识点.React官方推荐我们使用Redux来管理我们的React应用,同时也提供了Redux的文档来供我们学习,中文版地址为http: ...

  4. 表格搞定 Asp.net Web 状态管理

    最近在网上搜罗了 ASP.NET WEB 状态管理方面的一些内容,终于把这些内容整合总结了一下. 1. 希望自己通过整理,能够掌握一些,为自己投资. 2. 以便自己忘记,又要浪费时间搜罗. 3. 希望 ...

  5. [译]面向初学者的Asp.Net状态管理技术

    介绍 本文主要讲解Asp.Net应用程序中的状态管理技术(Asp.Net中有多种状态管理技术),并批判性地分析所有状态管理技术的优缺点. 背景 HTTP是无状态的协议.客户端发起一个请求,服务器响应完 ...

  6. [Asp.Net]状态管理(Session、Application、Cache)

    上篇博文介绍了在客户端状态管理的两种方式:http://www.cnblogs.com/wolf-sun/p/3329773.html.除了在客户端上保存状态外,还可以在服务器上保存状态.使用客户端的 ...

  7. [Asp.Net]状态管理(ViewState、Cookie)

    简介 HTTP协议是无状态的.从客户端到服务器的连接可以在每个请求之后关闭.但是一般需要把一些客户端信息从一个页面传送给另一个页面. 无状态的根本原因是:浏览器和服务器使用Socket通信,服务器将请 ...

  8. HttpClient_HttpClient 4.3.6 HTTP状态管理

    HTTP状态管理 最初的HTTP被设计成以状态.请求/应答为导向的协议,它被制作成是没有特殊条款的,以便在状态会话中能交换逻辑关系请求/应答.HTTP协议越来越受欢迎和被采用,越来越多的系统会在应用程 ...

  9. Ansible状态管理

     转载自:http://xdays.me/ansible状态管理.html 简介 就像所有服务器批量管理工具(puppet有DSL,salt有state)一样,ansible也有自己的状态管理组件 ...

随机推荐

  1. IMLite轻量级即时通信工具开发指南

    花了一周时间开发了一个简单的即时通信工具,勉强算是程序原型.现在我把开发流程和一些个人的想法记录下来.本文首先介绍程序架构和通信接口,之后会聚焦到服务器的信号槽设计原则,接下来将解释有关TCP通信的粘 ...

  2. Maven-06: 插件的内置绑定

    Maven的生命周期与插件相互绑定,用以完成实际的构建任务.具体而言,是生命周期的阶段与插件的目标相互绑定,以完成某个具体的构建任务.例如项目编译这一任务,它对应default生命周期的compile ...

  3. 在Ubuntu下如何切换到超级用户

    由于 Ubuntu 是基于 Debian 的 linux 操作系统,在默认的情况下,是没有超级用户(superuser, root)的,但有些系统操作必须有超级用户的权限才能进行,如手动释放内存等. ...

  4. NodeJs实现下载Excel文件

    nodejs作为一门新的语言,报表功能也不是十分完善. (1).js-xlsx : 目前 Github 上 star 数量最多的处理 Excel 的库,支持解析多种格式表格XLSX / XLSM / ...

  5. java大数(BigInteger)

    JAVA之BigInteger 用Java来处理高精度问题,相信对很多ACMer来说都是一件很happy的事,简单易懂.用Java刷了一些题,感觉Java还不错,在处理高精度和进制转换中,调用库函数的 ...

  6. Java NIO之套接字通道

    1.简介 前面一篇文章讲了文件通道,本文继续来说说另一种类型的通道 -- 套接字通道.在展开说明之前,咱们先来聊聊套接字的由来.套接字即 socket,最早由伯克利大学的研究人员开发,所以经常被称为B ...

  7. 网络通信 --> CRC校验

    CRC校验 一.什么是CRC校验     循环校验码(Jyclic Redundancy Check,简称CRC码): 是数据通信领域中最常用的一种差错校验码,其特征是信息字段和校验字段的长度可以任意 ...

  8. color 圆盘染色

    Color 圆盘染色 题目大意:给你一个圆盘,等分成n个扇形,有m种颜色,每两个相邻的扇形不能相交,求染色方案数. 注释:m,n<=$10^6$. 想法:这题是小圆盘染色的加强版(小圆盘染色?) ...

  9. runtime.getruntime.availableprocessors

    1:获取cpu核心数: Runtime.getRuntime().availableProcessors(); 创建线程池: Executors.newFixedThreadPool(nThreads ...

  10. vue-axios基本用法

    废话不多说,直接搞事搞事. 首先安装axios: 1):npm install 2):npm install vue-axios --save 3):npm install qs.js --save ...