Cloud Shell

更新时间:

阿里云Cloud Shell是一款帮助您运维的免费产品,预装了Terraform的组件,并配置好身份凭证(credentials)。因此您可直接在Cloud Shell中运行Terraform的命令。

登录Cloud Shell

打开浏览器,访问Cloud Shell的地址https://shell.aliyun.com。 更多Cloud Shell入口及使用请参见使用云命令行

说明

建议您使用RAM用户登录,为确保您的阿里云账号的安全,如非必要,避免使用阿里云账号访问云资源。

切换Terraform版本

Cloud Shell中默认的Terraform版本可能较低,会导致部分功能无法正常使用,建议将其切换至更高版本。

  1. 查看当前Terrafrom版本,若版本低于1.2,建议切换到更高版本。

    terraform version

    image

  2. 查看Cloud Shell中内置的Terraform版本:

    tfenv list

    image

  3. 切换至指定Terrafrom版本:

    tfenv use <terraform_version>

    例如切换至1.9.5版本:

    image

编写Terraform模板

本文以使用Terraform创建ECS为例,帮助您理解Terraform是如何编排资源,以及如何使用Terraform命令进行资源的创建与销毁。

  1. 创建Terraform模板文件,命名为main.tf,并使用vim命令进行直接编辑。

    mkdir tf-demo && cd tf-demo
    vim main.tf

    复制以下Terraform示例代码到main.tf文件:

    provider "alicloud" {
      region = var.region
    }
    
    # 资源创建的地域
    variable "region" {
      default = "cn-beijing"
    }
    
    # ECS实例名称
    variable "instance_name" {
      default = "tf-cloudshell-test"
    }
    
    # ECS实例规格
    variable "instance_type" {
      default = "ecs.n2.small"
    }
    
    # 公网出带宽,值为0时,表示不开通公网
    variable "internet_bandwidth" {
      default = 10
    }
    
    # ECS系统镜像
    variable "image_id" {
      default = "ubuntu_18_04_64_20G_alibase_20190624.vhd"
    }
    
    # ECS系统盘类型
    variable "disk_category" {
      default = "cloud_efficiency"
    }
    # ECS实例登录密码
    variable "password" {
      default = "TF-test@1234"
    }
    
    # 创建VPC
    resource "alicloud_vpc" "vpc" {
      vpc_name   = "tf_test_foo"
      cidr_block = "172.16.0.0/12"
    }
    
    # 根据实例规格和云盘类型查询存在资源的可用区
    data "alicloud_zones" "default" {
      available_disk_category     = var.disk_category
      available_resource_creation = "VSwitch"
      available_instance_type     = var.instance_type
    }
    
    # 创建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" {
      security_group_name   = "default"
      vpc_id = alicloud_vpc.vpc.id
    }
    
    # 创建安全组入方向规则
    resource "alicloud_security_group_rule" "allow_all_tcp" {
      type              = "ingress"
      ip_protocol       = "tcp"
      nic_type          = "intranet"
      policy            = "accept"
      port_range        = "1/65535"
      priority          = 1
      security_group_id = alicloud_security_group.default.id
      cidr_ip           = "0.0.0.0/0"
    }
    
    resource "alicloud_instance" "instance" {
      # 绑定安全组
      security_groups = alicloud_security_group.default.*.id
      instance_type = var.instance_type
      system_disk_category = var.disk_category
      image_id = var.image_id
      instance_name = var.instance_name
      # 所在交换机
      vswitch_id = alicloud_vswitch.vsw.id
      internet_max_bandwidth_out = var.internet_bandwidth
      password  = var.password
    }
  2. 执行terraform init命令初始化配置。

  3. 执行terraform plan命令预览配置。image

  4. 执行terraform apply创建ECS实例,如果执行结果返回Apply complete! ,则证明资源创建成功。image.png

  5. 若不再需要这台实例,可执行terraform destroy对创建过的资源进行释放。