博客
关于我
Azure Terraform(二)语法详解
阅读量:397 次
发布时间:2019-03-05

本文共 1879 字,大约阅读时间需要 6 分钟。

一,引言

上篇文章我们简单介绍了通过基础设施管理工具Terraform来统一管理复杂的云基础设施资源。作为入门演示,我们使用Terraform部署Azure资源组的方式感受到了iac工具带来的强大便利。接下来,我们将详细介绍Terraform语法,从代码的角度更好地理解Azure各个资源模块的使用方法,以便更高效地部署资源。

--------------------Azure Terraform 系列--------------------

二,正文

1,Azure Providers

Terraform作为一个可扩展的工具,通过Provider支持新的基础架构。Provider可以理解为上游API的逻辑抽象,他们负责理解API交互并暴露资源。不同云厂商都需要提供一个Provider来实现对自家基础设施的统一管理,例如Azure、AWS、GCP、Kubernetes、阿里云等。官方罗列的Providers数量超过600个。

如果你想了解具体的Terraform Providers,可以点击此链接查看:[链接]。

那么,如何指定Terraform Azure Provider?

provider "azurerm" {      version = "~>2.0"      features {}    }
  • version ="~>2.0":表示我们要使用Azure Provider的版本为>2.0。
  • features:表示自定义某些Azure提供程序资源的行为。对于Azure Provider的版本2.x,features字段是必要的。如果使用的是1.x版本,则不需要features。

你可以通过terraform init来验证以上解释。

2,基本的Terraform 配置文件

我们知道,Terraform通过定义资源模块来创建和管理云资源。以下是一个基本的Terraform配置文件示例:
resource "azurerm_resource_group" "example" {      name = "Web_Test_TF_RG"      location = "East Asia"    }
  • resource:表示我们将创建一个类型为“azurerm_resource_group”的资源组。
  • example:表示我们为当前新创建的资源组命名为“Web_Test_TF_RG”。
  • name:定义资源组的名称为“Web_Test_TF_RG”。
  • location:定义资源组的位置为“East Asia”。

执行部署计划后,Terraform会在项目文件夹中生成terraform.tfstate和.terraform.tfstate.lock.info文件。

3,Terraform 状态管理

执行`terraform apply`命令后,Terraform会在项目文件夹中生成以下文件:
  • terraform.tfstate:包含已部署到Azure的所有状态信息。
  • .terraform.tfstate.lock.info:表示部署过程中加锁的文件。

有人可能会问:为什么要加锁?

原因很简单,类似于对数据库的操作,对同一数据的修改或删除需要加锁处理。Terraform的状态文件加锁也是出于同样的道理。

4,Terraform扩展知识点

你知道Azure有多个版本,常用的有Azure Global和Azure China。如果我们在Terraform的Provider中不指定Azure环境,Terraform会默认将资源部署到Azure Global。如果使用Azure China(世纪互联版的Azure),则必须在Provider中指定Azure环境。

environment的可能取值包括:

  • public(默认)
  • usgovernment
  • german
  • china

如果不想在Provider中指定云环境,可以通过设置环境变量来实现:

setx ARM_ENVIRONMENT china

完整示例:

provider "azurerm" {      version = "~>2.0"      environment = "china"      features {}    }

今天的分享到此结束。虽然没有介绍新的内容,但通过对代码参数的介绍,让我们能够更好地理解Terraform。

三,结尾

参考资料:[链接] 作者: 版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。
你可能感兴趣的文章
python3的 pymysql把mysqldb库取代了,让python 3支持mysqldb的解决方法
查看>>
Python3笔记——IDE的选择
查看>>
python3简单使用requests 用户代理,cookie池
查看>>
Python3组播通信编程实现教程(发送者+接收者)
查看>>
Python3编写网络爬虫10-数据存储方式三-CSV文件存储
查看>>
python3读取redis返回数据带有'b'的问题
查看>>
Python3连接MySQL
查看>>
Python关于isinstance函数的解析 | 附Demo(全)
查看>>
Python3:setup.py:完成所有任务的PIP安装(Build_ext+Install)
查看>>
python4.0 gil_Python 并发编程系列--1、浅谈GIL历史及对多线程的影响
查看>>
python60行绘图程序_天底下最简单的QT画图板,就一个类,60行代码
查看>>
Python: AES加密与解密
查看>>
Python: Range() 最大尺寸;动态的还是静态的?
查看>>
Python: Windows下用 multiprocessing 的深坑
查看>>
python:Could not find platform independent libraries <prefix>解决方法
查看>>
Python:datetime tzinfo 时区名称文档
查看>>
Python:deepcopy(list) vs new_list = old_list[:]
查看>>
Python:Google API - 从消息中获取 mimeTypes
查看>>
Python:Google API - 从消息中获取 mimeTypes
查看>>
Python:subprocess.call,stdout to file,stderr to file,在屏幕上实时显示stderr
查看>>