一,引言

  众所周知,当企业将项目整体架构资源迁移到云上,云基础设施架构师就要根据现有项目搭建整体项目的基础设施资源的架构,然后我们的云运维工程师就要根据设计好基础设施的架构图来创建云上资源,但是在构筑的过程太单一,太传统。动动鼠标创建资源的方式成本太高,同时还有一定几率出错的风险,这种方式已经不适合现代企业迁移基础设施架构的方式。如果能够通过一种 IT 基础设施架构自动化编排工具来管理维护IT资源岂不能够大大降低企业在基础设施构建过程中成本问题,同时也可以提高云基础设施开发人员在 IAC(基础设施即代码) 方面的技能。

  Terraform ----- 是一个基础设施管理工具,它允许我们以代码的方式构建、更改和管理基础设施。Terraform 并不局限于任何特定的云服务提供商,它可以与多个云提供商和环境协同工作。虽然 Azure,AWS 分明有针对自己云平台的资源管理、设置的解决方案。

(1)Azure:ARM 模板(ARM模板是一个定义项目基础结构和配置的 JavaScript 对象表示法 (JSON) 文件。 该模板使用声明性语法,使你可以指明要部署的内容,而不需要编写一系列编程命令来创建内容。 在该模板中,指定要部署的资源以及这些资源的属性。)

(2)AWS:CloudFormation(AWS CloudFormation 是一项服务,可帮助您对 Amazon Web Services 资源进行建模和设置,以便能花较少的时间管理这些资源,而将更多的时间花在运行于 AWS 中的应用程序上。您创建一个描述您所需的所有 AWS 资源(如 Amazon EC2 实例或 Amazon RDS 数据库实例)的模板,并且 AWS CloudFormation 将负责为您设置和配置这些资源。)

Terraform CLI 提供一种简单机制,用于将配置文件部署到 Azure 并对其进行版本控制,使用 Terraform 基于模板的配置文件,能够以可重复、可预测的方式定义、预配和配置 Azure 资源。

在本系列博客文章中,我将详细介绍有关使用Terraform以及为Microsoft Azure基础结构设置持续部署和测试的一些最佳实践。

  许可支持 模块化 状态管理 导入现有资源 可视化依赖 语言 验证
免费、开源,来自 Hashicorp 和社区的支持 Terraform Registry中提供了一些可用于模块化模板的功能介绍和使用示例。我们可以将这些独立的模块进行拼接,使得模块之间能够建立联系。 默认情况下,将状态保存在本地,但是可以使用远程状态功能将状态保存在Terraform Cloud,Storage Account 可以将现有资源导入terraform来管理 可以使用terraform graph命令生成配置或执行计划的直观表示。 HCL是Terraform的配置语言,它是HashiCorp发明的一种声明式语言 提供了检查模板文件语法错误

二,正文

1,下载并安装 Terraform

(1),使用chocolatey 安装

需要安装Terraform,请使用 CMD 或者 PowerShell 中运行一下命令

choco install terraform

特意说明一下,我这里使用的是 chocolatey 包管理器进行下载安装 terraform

chocolatey 安装方式:https://chocolatey.org/install

(2),下载terraform 安装包

Terraform 下载链接:https://www.terraform.io/downloads.html

记得下载完成的 Terraform 文件之后,将其配置到环境变量中

两个方式安装完成后并且配置后,测试是否配置成功

2,创建 Terraform 项目

打开 VS CODE 创建 terraform_demo_code 文件夹,并且在此文件夹中创建名为 “main.tf” 文件,作为基本的Terraform 配置文件

指定云提供者,配置资源组代码块,并保存

provider "azurerm" {
version = "~>2.0"
features {}
} resource "azurerm_resource_group" "example" {
name = "Web_Test_TF_RG"
location = "East Asia"
}

3,初始化并执行Terraform

3.1,在初始化 terraform 部署之前,我们需要向Azure 进行验证身份,terraform 支持多种向Azure 进行身份验证的选项

(1),通过 Azure 账号登陆进行身份验证

(2),通过配置Azure 服务主题进行身份验证

注意这里的方式的身份方式二选一,尽量不要

方式一,直接在 CMD 中执行

az login

使用Azure 账号进行微软账号身份验证,输入登陆用户名,密码即可完成身份验证

提示已经登陆到微软Azure

CMD 中也可以看到登陆成功的提示

方式二,配置服务主体

创建一个具有“参与者”角色的服务主体。 此“参与者”角色(默认角色)具有读取和写入到 Azure 帐户的完全权限

这个可以参考我之前讲解的 Azure AD(四)知识补充-服务主体,文中有介绍如何创建服务主题

接下来我们需要将生成好的 “appId”,“password”,"tenant",“subscriptionid” 配置到环境变量中

setx ARM_SUBSCRIPTION_ID xxxx-xxxx-xxxx-xxxx
setx ARM_CLIENT_ID xxxx-xxxx-xxxx-xxxx
setx ARM_CLIENT_SECRET xxxx-xxxx-xxxx-xxxx
setx ARM_TENANT_ID xxxx-xxxx-xxxx-xxxx

注意,我在此演示使用的时方法一

3.2,认证完成后,就可以开始执行Terraform 的初始化操作了

CMD 中执行 terraform init 下载创建 Azure 资源组所需的 Azure 模块

terraform init

3.3,terraform plan 执行计划

CMD 中执行 terraform plan 创建执行计划,这个执行计划可以理解为 terraform 会预处理执行,展示那些资源被创建,修改,删除,此执行计划不会真的执行,只验证执行计划是否符合预期

terraform plan

3.4,terraform apply 执行部署计划到云端

CMD 中执行 terraform apply 执行部署计划

terraform apply

执行完成后,需要一个确认过程,输入 “yes” 确认同意此次操作

接下来,我们就可以通过控制台看到执行部署过程的日志信息,资源组创建完成

为了检验真实性,我们登陆到Azure portal 中查看所以资源组,检查一下是否名为 "Web_Test_TF_RG" 的资源组被创建完成

bingo,大功告成。

3.5,销毁通过 terraform 创建的资源

撤销,销毁通过terraform 执行部署计划的资源,CMD 中执行 terraform destroy 执行部署销毁计划

terraform destroy

执行完成后,需要一个确认销毁的确认过程,输入 “yes” 确认同意此次操作

接下来,我们就可以通过控制台看到执行销毁过程的日志信息,资源组被删除

再次回到Azure Portal 中查看所有资源组,名为“Web_Test_TF_RG” 已经被删除

*★,°*:.☆( ̄▽ ̄)/$:*.°★* ,截至到现在,通过以上步骤,我们具备了在Microsoft Azure上开始使用Terraform的所有基础知识,创建,删除资源。

三,结尾

  今天的内容不多,实战演示了通过  terraform 这种 iac 工具实现管理云基础设施,利用Terraform这把利器,节约资源开销,提高从部署到运维的自动化生产力。

参考资料:Azure 上的Terraform

作者:Allen

版权:转载请在文章明显位置注明作者及出处。如发现错误,欢迎批评指正。

Azure Terraform(一)入门简介的更多相关文章

  1. Azure Key Vault(二)- 入门简介

    一,引言 在介绍 Azure Key Vault 之前,先简单介绍一下 HSM(硬件安全模块). -------------------- 我是分割线 -------------------- 1,什 ...

  2. Azure Terraform(二)语法详解

    一,引言 上篇文章开始,我们简单介绍了以下通过基础设施管理工具----- Terraform,通过它来统一管理复杂的云基础设施资源.作为入门演示,使用Terraform 部署Azure 资源组的方式直 ...

  3. Azure Terraform(三)部署 Web 应用程序

    一,引言 上一节关于 Terraform 的文章讲到 Terraform 使用到的一些语法,以及通过演示使用 Terraform 在Azure 上部署资源组,极大的方便了基础设施实施人员,也提高了基础 ...

  4. Azure Terraform(五)利用Azure DevOps 实现自动化部署基础资源

    一,引言 上一篇我们结合学习 Azure Traffic Manger 的内容,做了一个负载均衡的基础设施架构.通过 Terraform 部署执行计划,将整个 Azure Traffic Manage ...

  5. Azure Terraform(六)Common Module

    一,引言 之前我们在使用 Terraform 构筑一下 Azure 云资源的时候,直接将所以需要创建的资源全面写在 main.tf 这个文件中,这样写主要是为了演示使用,但是在实际的 Terrafor ...

  6. Azure Terraform(七)利用Azure DevOps 实现自动化部署基础资源(补充)

    一,引言 之前一篇文章有讲解到利用 利用Azure DevOps 实现自动化部署基础资源,当时 TF 代码没有针对 Azure 各个资源的封装,所有的资源代码全部写在一个 main.tf 文件中.然后 ...

  7. Azure Terraform(八)利用Azure DevOps 实现Infra资源和.NET CORE Web 应用程序的持续集成、持续部署

    一,引言 上一篇讲解到利用 Azure DevOps 将整个 Azure Web App,Azure Traffic Manager profile,Azure Storage Account,Azu ...

  8. Azure Terraform(九)利用 Azure DevOps Pipeline 的审批来控制流程发布

    一,引言 Azure Pipeline 管道是一个自动化过程:但是往往我们由于某种原因,需要在多个阶段之前获得批准之后再继续下一步流程,所以我们可以向Azure Pipeline 管道添加审批!批准流 ...

  9. Azure Terraform(十)利用 Azure DevOps 的条件语句选择发布环境

    一,引言 之前我讲过的所有的案例中,都是将整个Azure Resource 部署到同一个订阅下,没有做到灵活的在 Azure Pipeline 在运行前选择需要部署的环境.在实际的项目开发中,我们也会 ...

  10. 掌握 Ajax,第 1 部分: Ajax 入门简介

    转:http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro1.html 掌握 Ajax,第 1 部分: Ajax 入门简介 理解 Ajax 及其工作 ...

随机推荐

  1. C++反射机制:可变参数模板实现C++反射(二)

    1. 概要   2018年Bwar发布了<C++反射机制:可变参数模板实现C++反射>,文章非常实用,Bwar也见过好几个看了那篇文章后以同样方法实现反射的项目,也见过不少从我的文章抄过去 ...

  2. [Docker]Docker与Linux ip_forward数据包转发

    背景 今天在一台新虚拟机上需要临时启动一个consul服务,安装Docker后使用docker启动,但是在执行启动命令后发现docker有一个警告: WARNING: IPv4 forwarding ...

  3. sqli-labs-master 闯关前知识点学习

    1).前期准备.知识点 开始之前,为了方便查看sql注入语句,我在sqli-labs-master网页源码php部分加了两行代码,第一行意思是输出数据库语句,第二行是换行符 一.Mysql 登录 1. ...

  4. JVM 堆中对象分配、布局和访问

    本文摘自深入理解 Java 虚拟机第三版 对象的创建 Java 是一门面向对象的语言,Java 程序运行过程中无时无刻都有对象被创建出来.从语言层面看,创建对象只是一个 new 关键字而已,而在虚拟机 ...

  5. 【MySQL篇】Navicat导入SQL文件报错终极解决方案

    面对大数据库文件(一般50M以上),使用Navicat导入的时候容易出现[ERR]2006等报错问题,此文提供了几种办法,包括修改MySQL的配置参数在网上也有很多详细教程介绍过,但此文精彩处在于前面 ...

  6. DBeaver连接达梦|虚谷|人大金仓等国产数据库

    前言 工作中有些项目可能会接触到「达梦.虚谷.人大金仓」等国产数据库,但通常这些数据库自带的连接工具使用并不方便,所以这篇文章记录一下 DBeaver 连接国产数据库的通用模版,下文以达梦为例(其他国 ...

  7. 基于CFSSL工具创建CA证书,服务端证书,客户端证书

    背景描述 在局域网中部署组件时,想要通过证书来实现身份的认证,确保通信的安全性,可以通过cfssl工具来进行CA证书,服务端证书,客户端证书的创建. 目录 背景描述 部署cfssl工具 下载,上传cf ...

  8. Spring Cloud 学习 (十) Spring Security, OAuth2, JWT

    通过 Spring Security + OAuth2 认证和鉴权,每次请求都需要经过 OAuth Server 验证当前 token 的合法性,并且需要查询该 token 对应的用户权限,在高并发场 ...

  9. 微服务注册到Nacos的IP私网172.x.x.x网段无法访问的问题

    解决方案一 显示声明注册服务实例的外网IP,默认就是使用私网的IP造成无法访问的,配置如下: spring: cloud: nacos: discovery: ip: 101.37.6.8 解决方案二 ...

  10. 第9章 Python文件操作目录

    第9章 Python文件操作 第9.1节 Python的文件打开函数open简介 第9.2节 Python的文件打开函数open详解 第9.3节 Python的文件行读取:readline 第9.4节 ...