文档

在Windows中使用Terraform

更新时间:
一键部署

本文为您介绍在Windows中,如何快速使用Terraform创建阿里云资源。

使用Terraform进行基础设施即代码(IaC)管理,包含以下几个主要步骤。

  1. 安装Terraform:确保您的系统能够识别并执行Terraform命令。

  2. 编写Terraform配置文件:配置文件是Terraform的核心,用于描述资源的创建、配置和依赖关系,如创建VPC、ECS、OSS等。

  3. 初始化与创建资源:将基础设施设计变为现实的关键步骤。

  4. 查看和管理资源:在部署后,可以便捷地查看和管理基础设施环境,确保其符合最新的需求和设计。

  5. 销毁资源:当不再需要所创建的资源时,可以销毁相应目录下已创建资源。

1. 安装Terraform

  1. 访问Terraform官网,下载适合您的Windows操作系统版本的Terraform二进制文件并解压。

    image

  2. 配置环境变量,将Terraform的安装路径添加到系统环境变量Path中。

    1. 在桌面右键单击此电脑,选择属性 -> 高级系统设置 -> 环境变量 -> 系统变量/用户变量。

    2. 在系统变量/用户变量中单击Path,选择编辑 -> 新建,输入文件所在目录的路径,单击确定完成配置。

  3. 验证安装成功,同时按下Win+R键,输入cmd单击确定,打开命令提示符。执行terraform --version,如果出现以下信息则表示安装成功。

    Terraform v1.9.3
    on windows_amd64
    

2. 编写Terraform配置文件

配置文件是Terraform的核心,用于定义在云端或本地部署的基础设施资源,如VPC、ECS、OSS等。

  1. 创建一个新的文件夹,例如命名为ecs,并在该文件夹下创建一个Terraform配置文件,例如配置文件名称为main.tf

    为每个Terraform项目创建独立执行目录可以确保资源组织清晰,避免状态文件混淆,便于版本控制和团队协作,同时有利于实现环境隔离和模块化管理,提高配置管理的可维护性和安全性。

  2. 编写Terraform配置文件,以创建ECS为例。将 ECS 实例及其依赖的资源(VPC,安全组等)以代码化的方式定义到配置文件中。为了方便起见,您可以将以下代码复制到main.tf中。

    重要
    • 示例中创建的ECS为按量计费,资源创建后将会产生相关费用。

    • 示例中使用了环境变量作为Terraform认证方式,更多信息,请参见Terraform身份认证

    创建ECS所需要的资源如下:

    Resource

    说明

    alicloud_vpc

    创建VPC实例

    alicloud_vswitch

    创建vSwitch实例

    alicloud_security_group

    创建安全组实例

    alicloud_security_group_rule

    创建安全组的出入访问规则

    alicloud_instance

    创建ECS实例

    variable "name" {
      type    = string
      default = "tf-test"
    }
    
    # 设置地域
    variable "region" {
      type    = string
      default = "cn-beijing"
    }
    
    # 公网带宽,当大于0的时候,将为实例分配一个公网。
    variable "internet_max_bandwidth_out" {
      type    = number
      default = 10
    }
    
    # 设置ECS实例规格
    variable "instance_type" {
      type    = string
      default = "ecs.e-c1m1.large"
    }
    
    # 设置镜像ID
    variable "image_id" {
      default = "ubuntu_18_04_64_20G_alibase_20190624.vhd"
    }
    
    # 设置标签
    variable "tags" {
      type    = map(string)
      default = {
        From =  "Terraform"
        Usage =  "demo"
      }
    }
    
    provider "alicloud" {
      region = var.region
    }
    
    # 获取zone_id
    data "alicloud_zones" "default" {
      available_instance_type = var.instance_type
      available_resource_creation = "VSwitch"
      available_disk_category = "cloud_ssd"
    }
    
    # 创建VPC
    resource "alicloud_vpc" "vpc" {
      vpc_name   = var.name
      cidr_block = "172.16.0.0/12"
    }
    
    # 创建vswitch
    resource "alicloud_vswitch" "vsw" {
      vpc_id     = alicloud_vpc.vpc.id
      cidr_block = "172.16.0.0/21"
      zone_id    = data.alicloud_zones.default.zones[0].id
    }
    
    # 创建安全组
    resource "alicloud_security_group" "default" {
      name   = var.name
      vpc_id = alicloud_vpc.vpc.id
    }
    
    # 向安全组添加入方向放行规则
    resource "alicloud_security_group_rule" "allow_tcp_22" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "22/22"
      priority          = 1
      security_group_id = alicloud_security_group.default.id
      cidr_ip           = "0.0.0.0/0"
    }
    
    # 创建ECS
    resource "alicloud_instance" "instance" {
      availability_zone          = data.alicloud_zones.default.zones.0.id
      security_groups            = alicloud_security_group.default.*.id
      instance_type              = var.instance_type
      system_disk_category       = "cloud_essd_entry"
      image_id                   = var.image_id
      instance_name              = var.name
      vswitch_id                 = alicloud_vswitch.vsw.id
      internet_max_bandwidth_out = var.internet_max_bandwidth_out
      tags                       = var.tags
    }
    
    output "ecs_id" {
      value = alicloud_instance.instance.id
    }
    
    output "ecs_ip" {
      value = alicloud_instance.instance.public_ip
    }

3. 初始化与创建资源

Terraform配置文件编写完成后,需要先初始化工作目录,然后再创建资源。

3.1 Terraform初始化

cmd中切换到步骤2所创建的文件夹,然后执行terraform init命令进行初始化。terraform init命令是使用任何Terraform配置文件之前必须执行的第一个命令,主要目的是初始化一个Terraform工作目录,包括下载必要的阿里云提供商插件以及各种其他记录文件。

# 切换到D盘
d:
# 切换到步骤2中的文件夹路径的命令,tool/terraform/projects/ecs是步骤2创建的文件夹路径,您可根据实际路径替换。
cd tool/terraform/projects/ecs
# 执行初始化命令
terraform init
说明

当您因网络延迟等原因导致terraform init超时,无法正常下载Provider等情况时,可通过配置阿里云镜像站解决,具体操作步骤,请参见Terraform Init 加速方案配置

3.2 创建资源

  1. 执行terraform plan创建一个执行计划,并详细展示了在执行 terraform apply 时将创建、修改或销毁的所有资源信息。

    image

  2. 执行terraform apply时,将根据terraform plan生成的执行计划来创建资源。在创建过程中,需要按照提示输入yes,以继续创建资源。关于变量如何传值,请参见Variable 介绍中的变量设置方式。

    image

4. 查看和管理资源

在部署后,您也能轻松地管理和维护您的基础设施环境,确保其符合最新的需求和设计。

4.1 查看资源

  • 通过terraform show命令查看资源的详细信息。

    image

  • 通过terraform state list命令列出所有已创建的资源。

    image

  • 通过terraform state show <资源类型>.<资源名称>查看某个资源的详细信息。

    image

  • 通过阿里云控制台查看已创建资源信息。

4.2 管理资源

Terraform在完成资源的创建和修改后,会将资源的状态和属性信息保存在terraform.tfstate文件中。我们可以使用terraform state相关命令对state进行管理。更多信息,请参见Terraform State 介绍

4.3 资源变更

  1. 修改配置文件(如main.tf或者其他.tf文件)中需要变更的资源定义,例如您想添加新的安全组入方向放行规则。

    resource "alicloud_security_group_rule" "allow_tcp_443" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "443/443"
      priority          = 1
      security_group_id = alicloud_security_group.default.id
      cidr_ip           = "0.0.0.0/0"
    }
  2. 执行terraform plan命令预览所做的变更。

    image

  3. 如果变更符合预期,执行terraform apply命令,来应用这些变更到您的基础设施。执行此命令时,Terraform会要求您确认是否确实要进行这些变更。输入 yes 并回车后,变更会被应用。

    image

5. 资源销毁

当不再需要所创建的资源时,可以通过terraform destroy命令销毁所有已创建的资源。

image

相关文档