阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Terraform:创建 Azure 虚机

416次阅读
没有评论

共计 4851 个字符,预计需要花费 13 分钟才能阅读完成。

在前文《Terraform 安装及简单介绍》中简单介绍了 Terraform 相关的概念,本文让我们使用 Terraform 在 Azure 上创建一个虚机,以此来直观体验一下 Terraform 强大威力。说明:本文的演示环境为 Ubuntu 16.04。

provider 与 resource

在 Terraform 的配置文件中,比较常见的配置类型有 provider 和 resource。

provider 在 Terraform 中负责管理资源的生命周期:创建、读取、更新、删除。比如访问 AWS 中的资源需要使用 AWS 的 provider,访问 Azure 中的资源需要使用 Azure 的 provider。

resource 是基础设施的一个组件。它可能是一些低级组件,例如物理服务器、虚拟机或容器。也可以是更高级别的组件,如电子邮件提供程序、DNS 记录或数据库提供程序。

指定 provider

provider "azurerm" {}

访问 Azure 中的资源需要使用 Azure 的 provider,即这里的 “azurerm”。这里没有把访问 azure 的认证信息写进来,还是以前文《Terraform 安装及简单介绍》中设置环境变量的方式来提供认证信息。

创建 Resource Group

下面的配置文件在 eastasia 的数据中心创建名称为 NickResourceGroup 的 Resource Group:

resource "azurerm_resource_group" "nicktfrg" {name = "NickResourceGroup"
    location = "eastasia"
    tags {environment = "My Terraform Demo"
    }   
}

在配置文件的其他部分中,可以使用 ${azurerm_resource_group.nicktfrg.name} 引用该 Resource Group。

创建虚拟网络

下面的配置在 Resource Group NickResourceGroup 中创建名为 NickVnet 的虚拟网络,其网络空间为 10.0.0.0/16:

resource "azurerm_virtual_network" "nicktfnetwork" {name                = "NickVnet"
    address_space       = ["10.0.0.0/16"]
    location            = "eastasia"
    resource_group_name = "${azurerm_resource_group.nicktfrg.name}"

    tags {environment = "My Terraform Demo"
    }
}

然后在 NickVnet 虚拟网络中创建名称为 NickSubnet 的子网:

resource "azurerm_subnet" "nicktfsubnet" {name                 = "NickSubnet"
    resource_group_name  = "${azurerm_resource_group.nicktfrg.name}"
    virtual_network_name = "${azurerm_virtual_network.nicktfnetwork.name}"
    address_prefix       = "10.0.2.0/24"
}

创建公共 IP 地址

如果要通过网络访问 Azure 云端的虚机,需要创建公共的 IP 地址并分配给虚机。下面的配置创建名为 nickPublicIP 的公共 IP 地址:

resource "azurerm_public_ip" "nicktfpublicip" {name                         = "NickPublicIP"
    location                     = "eastasia"
    resource_group_name          = "${azurerm_resource_group.nicktfrg.name}"
    public_ip_address_allocation = "dynamic"

    tags {environment = "My Terraform Demo"
    }
}

创建网络安全组

网络安全组控制出入虚机的网络流量。下面的配置创建名为 NickNetworkSecurityGroup 的网络安全组并定义规则放行 TCP 端口 22 上的 SSH 数据包:

resource "azurerm_network_security_group" "nicktfnsg" {name                = "NickNetworkSecurityGroup"
    location            = "eastasia"
    resource_group_name = "${azurerm_resource_group.nicktfrg.name}"

    security_rule {name                       = "SSH"
        priority                   = 1001
        direction                  = "Inbound"
        access                     = "Allow"
        protocol                   = "Tcp"
        source_port_range          = "*"
        destination_port_range     = "22"
        source_address_prefix      = "*"
        destination_address_prefix = "*"
    }

    tags {environment = "My Terraform Demo"
    }
}

创建虚拟网卡

虚拟网卡 (NIC) 将虚机连接到指定的虚拟网络、公共 IP 地址和网络安全组。下面的 Terraform 配置信息创建名为 NickNIC 的虚拟 NIC,并连接到已创建的虚拟网络资源:

resource "azurerm_network_interface" "nicktfnic" {name                = "NickNIC"
    location            = "eastasia"
    resource_group_name = "${azurerm_resource_group.nicktfrg.name}"
    network_security_group_id = "${azurerm_network_security_group.nicktfnsg.id}"

    ip_configuration {name                          = "NickNicConfiguration"
        subnet_id                     = "${azurerm_subnet.nicktfsubnet.id}"
        private_ip_address_allocation = "dynamic"
        public_ip_address_id          = "${azurerm_public_ip.nicktfpublicip.id}"
    }

    tags {environment = "My Terraform Demo"
    }
}

创建存储账户

若要为新建的虚机存储启动诊断日志,需要一个存储帐户。这些启动诊断日志有助于排查故障和监视虚机状态。这里创建的存储帐户仅用于存储启动诊断数据。由于每个存储帐户必须具有唯一名称,下面的配置会先生成一些随机文本:

resource "random_id" "randomId" {keepers = {
        # Generate a new ID only when a new resource group is defined
        resource_group = "${azurerm_resource_group.nicktfrg.name}"
    }

    byte_length = 8
}

接下来就可以创建存储帐户了。下面的配置会创建一个存储帐户,其名称基于上一步中生成的随机文本:

resource "azurerm_storage_account" "nicktfstorageaccount" {name                = "nicksa${random_id.randomId.hex}"
    resource_group_name = "${azurerm_resource_group.nicktfrg.name}"
    location            = "eastasia"
    account_replication_type = "LRS"
    account_tier = "Standard"

    tags {environment = "My Terraform Demo"
    }
}

创建虚机

准备好上面的资源后就可以开始创建虚机了,下面的配置创建名为 NickVM 的虚机,并添加虚拟网卡 NickNIC。新的虚机基于 Ubuntu 16.04 LTS 映像并禁止通过密码登录,同时会创建一个可以通过秘钥登录的名称为 nick 的用户。注意,ssh_keys 部分提供了 SSH 密钥数据,key_data 字段需要提供用户的有效 SSH 公钥:

resource "azurerm_virtual_machine" "nicktfvm" {name                  = "NickVM"
    location              = "eastasia"
    resource_group_name   = "${azurerm_resource_group.nicktfrg.name}"
    network_interface_ids = ["${azurerm_network_interface.nicktfnic.id}"]
    vm_size               = "Standard_DS1_v2"

    storage_os_disk {name              = "NickOsDisk"
        caching           = "ReadWrite"
        create_option     = "FromImage"
        managed_disk_type = "Premium_LRS"
    }

    storage_image_reference {publisher = "Canonical"
        offer     = "UbuntuServer"
        sku       = "16.04.0-LTS"
        version   = "latest"
    }

    os_profile {computer_name  = "phoenix"
        admin_username = "nick"
    }

    os_profile_linux_config {disable_password_authentication = true
        ssh_keys {path     = "/home/nick/.ssh/authorized_keys"
            key_data = "xxxxxxxxxxxxxxxxxx"
        }
    }

    boot_diagnostics {enabled     = "true"
        storage_uri = "${azurerm_storage_account.nicktfstorageaccount.primary_blob_endpoint}"
    }

    tags {environment = "My Terraform Demo"
    }
}

到这里配置文件就完成了,完整的配置文件内容请参考这里。

执行部署

创建 Terraform 配置文件 (也被称为模板) 后,第一步是初始化 Terraform。这一步会安装 配置文件中用到的所有 Terraform 插件:

$ terraform init

然后执行 plan 验证配置文件的正确性(关于登录 Azure 的认证信息,请参考前文《Terraform 简介》):

$ . azureEnv.sh  
$ terraform plan

检查 plan 的输出,如果符合预期,就可以通过 apply 执行实际的部署了:

$ terraform apply -auto-approve

检查结果

从 portal 上登录 Azure 查看我们创建的 Resouce Group NickResourceGroup,其中的资源包括虚拟机 NickVM 及其相关的网卡、Public IP 地址、虚拟网络、网络安全组、存储等组件:

Terraform:创建 Azure 虚机

获取虚机的公共 IP 地址
在 portal 上的 Cloud Shell 中执行下面的命令获得新建虚机的 IP 地址:

$ az vm show --resource-group NickResourceGroup --name NickVM -d --query [publicIps] --o tsv

或者是直接在 portal 上查看虚机的信息:

Terraform:创建 Azure 虚机

通过 SSH 登录虚机

$ ssh nick@13.70.0.72

Terraform:创建 Azure 虚机

这就可以开始工作了(当然对于一个系统管理员来说,所谓的工作就常常是指以自动化的方式在虚机上部署各种应用)!

总结

不管是通过 PowerShell 还是 Azure CLI,或者是本文介绍的 Terraform(当然,Terraform 强大的功能让它具有非常大的优势),我们操作的资源对象都是一样的。当你手中有多个工具时,你就可以根据具体的场景选择最佳的方式完成任务。

 

 

 

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-21发表,共计4851字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7993151
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛NAS-7:手把手教你免费内网穿透-Cloudflare tunnel

星哥带你玩飞牛 NAS-7:手把手教你免费内网穿透 -Cloudflare tunnel 前言 大家好,我是星...
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛NAS-5:飞牛NAS中的Docker功能介绍

星哥带你玩飞牛 NAS-5:飞牛 NAS 中的 Docker 功能介绍 大家好,我是星哥,今天给大家带来如何在...
还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手!

还在找免费服务器?无广告免费主机,新手也能轻松上手! 前言 对于个人开发者、建站新手或是想搭建测试站点的从业者...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

星哥带你玩飞牛NAS-16:不再错过公众号更新,飞牛NAS搭建RSS

  星哥带你玩飞牛 NAS-16:不再错过公众号更新,飞牛 NAS 搭建 RSS 对于经常关注多个微...
一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸

一句话生成拓扑图!AI+Draw.io 封神开源组合,工具让你的效率爆炸 前言 作为天天跟架构图、拓扑图死磕的...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...
星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定!

星哥带你玩飞牛 NAS-9:全能网盘搜索工具 13 种云盘一键搞定! 前言 作为 NAS 玩家,你是否总被这些...
恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击

恶意团伙利用 PHP-FPM 未授权访问漏洞发起大规模攻击 PHP-FPM(FastCGl Process M...