Azure Terraform(二)语法详解
一,引言
上篇文章开始,我们简单介绍了以下通过基础设施管理工具----- Terraform,通过它来统一管理复杂的云基础设施资源。作为入门演示,使用Terraform 部署Azure 资源组的方式直观的感受到iac 工具带来的强大便利。接下来,今天介绍 Terraform 语法详解,从代码的角度来理解Azure 各个资源模块更好的理解如果部署资源。
-------------------- Azure Terraform 系列 --------------------
1,Azure Terraform(一)入门简介
2,Azure Terraform(二)语法详解
二,正文
1,Azure Providers
Terraform 作为同一个可以可扩展的工具,是通过 Provider 来支持新的基础架构。Provider 是上游API的逻辑抽象。他们负责理解API交互并暴露资源。我们可以将 Provider 可以理解为各个云厂商提供的与云资源交互的后端驱动,不同的基础设施提供商都需要提供一个Provider来实现对自家基础设施的统一管理,例如我们熟知的 Azure,AWS,GCP,Kubernetes,Aliyun等等。根据官方罗列的 官方 Providers 和验证过的 Providers,超过了600多个。
大家可以点击此连接查看具体的 Terraform Providers :https://registry.terraform.io/browse/providers
那么我们想指定 Terraform Azure Provider 怎么写?
provider "azurerm" {
version = "~>2.0"
features {}
}
version ="~>2.0" ,表示我们要使用 azure provider 的版本为 >2.0
features:表示自定义某些Azure提供程序资源的行为,我们目前使用的是 azure provider 的版本 2.x,如果使用的 azure provider 的版本为 1.x,则不需要 features
terraform init 来验证以上的解释
(1)provider version > 2.0

(2)provider version = 1.33

2,基本的Terraform 配置文件
resource "azurerm_resource_group" "example" {
name = "Web_Test_TF_RG"
location = "East Asia"
}
resource:表示我们将创建类型为 “azurerm_resource_group” 新的资源组
example:表示我们为当前新创建的资源组的 terraform module 起的名称
当前新创建的资源组,我们为其定义了两个参数,分别为 “name” 和 “location”
name:表示为当前即将创建的资源组的名称为 “Web_Test_TF_RG”
location:表示当前资源组所在的位置为 “East Asia”
接下就是执行部署计划的过程了 (plan 生成执行计划过程我就不在演示了)
3,Terraform 状态管理
terraform apply
执行计划部署完成后,会在Terraform 项目文件夹中生成 “terraform.tfstate” 的文件和 “.terraform.tfstate.lock.info”的文件

terraform.tfstate:当前文件中包含了因为它包含有关已部署到Azure的内容的所有状态信息

terraform.tfstate.lock.info:这个文件从名字上就可以看出来,部署过程中加锁。这时候就有人疑惑了,为什么要加锁 ?
原因很简单,就那操作数据库来说,对同一数据的修改,或者删除的时候,需要加锁处理。这里的terraform 的状态文件加锁也是同样的道理。
4,Terraform扩展知识点
其实我们都知道,Azure 有好几个版本,我们一般常用的就是 Azure Global,Azure China,如果我们在 Azure Provider 中不指定哪个Azure 环境,Terraform 会默认认为我们是将云资源部署在 Azure Global 上的。如果我们用的是Azure China(世纪互联版的Azure),那我就必须得在 Provider 中指定Azure 环境
environment 的值可能为:
(1)public(默认)
(2)usgovernment
(3)german
(4)china
注意:如果不想在Provider 中指定云环境,我们可以设置环境变量
setx ARM_ENVIRONMENT china
完整示例
provider "azurerm" {
version = "~>2.0"
environment = "china"
features {}
}
ok,今天的分享就到此结束,今天也没有介绍新的内容,基本上就是对昨天代码的参数介绍,让我们能够更好的理解 Terraform 。
φ(゜▽゜*)♪是
Azure Terraform(二)语法详解的更多相关文章
- Velocity魔法堂系列二:VTL语法详解
一.前言 Velocity作为历史悠久的模板引擎不单单可以替代JSP作为Java Web的服务端网页模板引擎,而且可以作为普通文本的模板引擎来增强服务端程序文本处理能力.而且Velocity被移植到不 ...
- Java8初体验(二)Stream语法详解(转)
本文转自http://ifeve.com/stream/ Java8初体验(二)Stream语法详解 感谢同事[天锦]的投稿.投稿请联系 tengfei@ifeve.com上篇文章Java8初体验(一 ...
- Java8初体验(二)Stream语法详解---符合人的思维模式,数据源--》stream-->干什么事(具体怎么做,就交给Stream)--》聚合
Function.identity()是什么? // 将Stream转换成容器或Map Stream<String> stream = Stream.of("I", & ...
- Thymeleaf3语法详解和实战
Thymeleaf3语法详解 Thymeleaf是Spring boot推荐使用的模版引擎,除此之外常见的还有Freemarker和Jsp.Jsp应该是我们最早接触的模版引擎.而Freemarker工 ...
- mysql用户授权、数据库权限管理、sql语法详解
mysql用户授权.数据库权限管理.sql语法详解 —— NiceCui 某个数据库所有的权限 ALL 后面+ PRIVILEGES SQL 某个数据库 特定的权限SQL mysql 授权语法 SQL ...
- Java8的Stream语法详解(转载)
1. Stream初体验 我们先来看看Java里面是怎么定义Stream的: A sequence of elements supporting sequential and parallel agg ...
- [持续交付实践] pipeline使用:语法详解
一.引言 jenkins pipeline语法的发展如此之快用日新月异来形容也不为过,而目前国内对jenkins pipeline关注的人还非常少,相关的文章更是稀少,唯一看到w3c有篇相关的估计是直 ...
- Java 8系列之Stream的基本语法详解
本文转至:https://blog.csdn.net/io_field/article/details/54971761 Stream系列: Java 8系列之Stream的基本语法详解 Java 8 ...
- spring AspectJ切入点语法详解 记录以便查阅
AspectJ切入点语法详解 6.5.1 Spring AOP支持的AspectJ切入点指示符 切入点指示符用来指示切入点表达式目的,,在Spring AOP中目前只有执行方法这一个连接点,Spri ...
随机推荐
- 二:robot framework基本组成
1.RF组成:套件.用例.关键字 套件:测试用例的集合,可以是一个模块的功能点的集合.也可以是很多模块功能点的集合 用例:一般是由多个关键字组成的 关键字:测试库.资源文件.用例所在文件的关键字表 2 ...
- Windows生产力工具推荐
相信大部分同学还是Windows用户,作为一个长期Windows/MacOS双系统长期用户,Windows在用的好,工作效率也很高,下面就推荐几款Windows下面的生产力工具. utools 用过M ...
- Spring Boot 实现看门狗功能 (调用 Shell 脚本)
需要实现看门狗功能,定时检测另外一个程序是否在运行,使用 crontab 仅可以实现检测程序是否正在运行,无法做到扩展,如:手动重启.程序升级(如果只需要实现自动升级功能可以使用 inotify)等功 ...
- java并发编程实战《二十一》无锁工具类
不安全的累加代码,如下 1 public class Test { 2 long count = 0; 3 void add10K() { 4 int idx = 0; 5 while(idx++ & ...
- 第10.4节 Python模块的弱封装机制
一. 引言 Python模块可以为调用者提供模块内成员的访问和调用,但某些情况下, 因为某些成员可能有特殊访问规则等原因,并不适合将模块内所有成员都提供给调用者访问,此时模块可以类似类的封装机制类似的 ...
- 第10.3节 Python导入模块能否取消导入?
模块导入后,是否可以取消导入?实际上当模块导入后,是无法逆向还原到导入前的状态的,但是可以利用"del 模块名"进行导入模块的删除,此时的删除只是删除了导入模块对应的模块变量名,删 ...
- Markdown常用数学符号&公式
符号 代码 描述 \(\sim\) $\sim$ 波浪号 \(\sum\) $\sum$ 求和公式 \(\sum_{i=0}^n\) $\sum_{i=0}^n$ 求和上下标 \(\times\) $ ...
- 【题解】Railway [Uva10263]
[题解]Railway [Uva10263] 传送门:\(\text{Railway [Uva10263]}\) [题目描述] 给出点 \(M\) 以及一个由 \(n\) 条线段依次相连的类曲形图(由 ...
- 题解-CF708D Incorrect Flow
题面 CF708D Incorrect Flow 给一张网络流图,可能有流量不守恒或者流量超过容量的情况,求最少的将某条边流量或容量 \(\pm 1\) 的操作次数使得网络流图正确. 数据范围:\(1 ...
- C++ 纯虚函数与抽象类——virtual 和纯说明符 “=0”
什么时候使用纯虚函数 某些类,在现实角度和项目角度都不需要实例化(不需要创建它的对象),这个类中定义的某些成员函数只是为了提供一个形式上的接口,准备上子类来做具体的实现.此时这个方法就可以定义为&qu ...