Infrastractor As Code中Code与物理资源同步的原理分析

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 上篇文章讲到《企业应用如何解决Multi-Cloud的基础设施管理及应用部署问题》,其核心是使用Terraform的模板管理基础设施,虽然Terraform的中文资料较少,好在Aliyun官方仓库的Example目录中提供了大量的模板参考,参考这些模板将能够管理常用的云服务。 什么是Infrast

上篇文章讲到《企业应用如何解决Multi-Cloud的基础设施管理及应用部署问题》,其核心是使用Terraform的模板管理基础设施,虽然Terraform的中文资料较少,好在阿里云Terraform官方仓库的Example目录中提供了大量的模板参考,参考这些模板将能够管理常用的云服务。

什么是Infrastractor As Code(IaC)

基础设施即代码(IaC)的概念已经被人们所熟知,其核心就是“告别手工配置基础设施的时代,用自定义脚本来配置基础设施”。目前也有很多的自动化工具来实现自定义脚本,如Terraform、Ansible、Chef、Puppet、SaltStack等等。IaC的好处是可以将脚本做为基础设施的文档,可以做版本管理,每次的变更都有历史记录,还有些人基于这些脚本生成任何人都能看懂的基础设施关系图、图表等等。

但在实践中很多人在后续的变更中不再使用脚本变更,而是直接在管理系统中或其他方式手动修改基础设施,导致脚本丧失了作为追溯依据的价值。所以对于IaC其重中之重是通过脚本再次更新资源、以及物理资源的变更与脚本的同步问题,本文将深入讲解Terraform的核心之一State的原理,通过其原理对其运作机制有更进一步的认识,从而达到灵活创建/更新/同步云资源的目的。

state的原理

Terraform可以轻松的做到通过Code(下面统称为模板)更新物理资源,以及物理资源更新后与模板的差异对比,这些都源于其State文件(运行apply命令后生成的tfstate文件)。下图是各个命令运行后模板与State与物理资源的各种关系变化。

state

实例讲解

下面就以一台云服务器的全生命周期管理来讲解创建、更新、物理资源变更、释放时的各种变化。

1.创建一台经典网络下的云服务器模板如下:


resource "alicloud_instance" "webserver" {
    count = 1
    availability_zone = "cn-beijing-b"
    security_groups = ["****"]
    allocate_public_ip = true
    instance_charge_type = "PostPaid"
    instance_type = "ecs.n1.small"
    internet_charge_type = "PayByTraffic"
    internet_max_bandwidth_out = 5
    system_disk_category = "cloud_efficiency"
    image_id = "ubuntu_140405_64_40G_cloudinit_20161115.vhd"
    instance_name = "tf_snat"
    tags {
        role = "webserver"
    }
}

运行


terraform apply

在阿里云的ECS控制台可以看到新创建的云服务器。

2.修改Tag:添加一个标签,模板tags部分增加如下内容:


datacenter = "beijing"

完整的模板如下:


resource "alicloud_instance" "webserver" {
    count = 1
    availability_zone = "cn-beijing-b"
    security_groups = ["****"]
    allocate_public_ip = true
    instance_charge_type = "PostPaid"
    instance_type = "ecs.n1.small"
    internet_charge_type = "PayByTraffic"
    internet_max_bandwidth_out = 5
    system_disk_category = "cloud_efficiency"
    image_id = "ubuntu_140405_64_40G_cloudinit_20161115.vhd"
    instance_name = "tf_snat"
    tags {
        role = "webserver"
        datacenter = "beijing"
    }
}

运行


terraform plan

会对比tfstate文件,返回变更差异:

2

如果确认要变更物理资源,执行


terraform apply

3.如果物理资源有变更,比如其他管理员使用控制台或其他工具更新了标签,增加了标签"renew = 2018",执行


terraform refresh

将会根据物理资源更新tfstate文件,再次运行:


terraform plan

将会看到模板与state文件的差异:

3

此时有两个选择:如果想以物理资源的变更为基准,可以更新模板,添加tag;如果想以模板为基准,可以直接执行terraform apply命令更新物理资源。

4.如果想释放这台云服务器,执行


terraform destroy

将根据state文件的记录删除这台云服务器。

本文详细讲解了terraform使用状态逼近的方法使得IaC中的Code和物理环境一致,使用状态文件tfstate来描述状态的变更,了解了这点之后大家可以灵活运用此文件做到模板与物理资源的同步问题,基于此基础设施的管理会更有序,其上的应用部署也会更有序。

大家有问题也可以在https://github.com/alibaba/terraform-provider的Issue中提问。

相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
7月前
|
运维
SAP ABAP 系统记录传输请求处理过程的日志存放目录
SAP ABAP 系统记录传输请求处理过程的日志存放目录
58 0
|
7月前
|
BI 数据库
SAP ABAP 释放 TR 遇到错误消息 ended with return code 8 的含义和处理办法
SAP ABAP 释放 TR 遇到错误消息 ended with return code 8 的含义和处理办法
78 0
|
缓存 运维 NoSQL
分布式ID生成方法的超详细分析(全)
目录前言1. UUID2. 数据库自增3. 数据库集群4. 数据库号段5. redis模式6. 雪花算法7. 其他总结 前言 关于什么是分布式ID 数据量不是很多的时候,单一个数据库表可以支撑其业务,即使数据在大也可以主从复制 到一定量的数据时,实现分库分表的时候,就需要一个全局唯一的ID,订单的编号就是分布式ID 关于上面牵扯到的主从复制 可看我之前的文章进行查缺补漏 关于主从复制的超详细解析(全) 关于数据库的分布式ID可看我之前在Mycat种提及到 具体都有如下: 在实现分库分表的情况下,数据库自增主
250 0
分布式ID生成方法的超详细分析(全)
|
7月前
|
缓存 索引
SAP ABAP 系统传输请求(Transport Request)导入到其他系统背后执行的逻辑
SAP ABAP 系统传输请求(Transport Request)导入到其他系统背后执行的逻辑
95 0
|
C++
VS Code使用过程中遇到的一些问题
VS Code使用过程中遇到的一些问题
44 0
|
Android开发
跨程序共享数据——Content Provider 之 ContentResolver基本用法 & 一个读取系统联系人的Demo
跨程序共享数据——Content Provider 之 ContentResolver基本用法 & 一个读取系统联系人的Demo
VS Code项目中共享自定义的代码片段方案
VS Code项目中共享自定义的代码片段方案
|
Web App开发 XML 缓存
UI5 Source code map机制的细节介绍
UI5 Source code map机制的细节介绍
UI5 Source code map机制的细节介绍
SAP UI5的source code map(源代码映射)机制
SAP UI5库文件里出现的变量和函数,按照先后顺序出现在sap-ui-core-js.map文件里,如下图所示:
SAP UI5的source code map(源代码映射)机制
|
缓存 监控 JavaScript
VS Code 是如何优化启动性能的?
本文主要是对 CovalenceConf 2019: Visual Studio Code – The First Second 这次分享的介绍,CovalenceConf 是一个以 Electron 构建桌面软件为主题的技术会议,这也是 VS Code 团队为数不多的对外分享之一(质量较高),主要分享了 VS Code 是如何优化启动性能的。
VS Code 是如何优化启动性能的?