使用Terraform部署ECS

更新时间: 2024-08-19 15:35:02

Terraform是一个开源的基础设施即代码工具,允许开发人员通过声明式的语言来定义和管理基础设施的配置,提供了一种简洁的方式来创建、修改或删除ECS资源,减少手动操作的繁琐和错误,提高基础设施的可管理性和可维护性。本文为您介绍如何安装与配置Terraform、使用Terraform创建ECS实例。

更多Terraform信息,请参见什么是Terraform

支持的资源列表

目前支持Terraform编排和使用云服务器ECS的部分资源和数据源清单,请参见ECS Terraform资源和数据源

说明
  • Resource:资源,指新创建的资源,用于定义基础设施组件,例如一个ECS实例、一个虚拟机、一个网络安全组等。

  • Data Source:数据源,用于查询和获取已有的基础设施组件的信息,在Terraform配置中使用这些信息来引用或配置其他资源。

安装Terraform并配置权限

在本地安装和配置Terraform

在本地使用Terraform,需要安装并预配置Terraform。具体操作,请参见在本地安装和配置Terraform

  • 为提高权限管理的灵活性和安全性,建议您创建RAM用户,并为其授权。

    1. 登录 RAM控制台

    2. 创建一个RAM用户,用于执行Terraform命令,并为该用户创建AccessKey。具体步骤请参见创建RAM用户

    3. 为RAM用户授权。具体步骤请参见为RAM用户授权

  • 创建环境变量,用于存放身份认证信息。

    AccessKey管理页面上创建和查看您的AccessKey。

    若无对应环境变量,在执行terraform模板时无法确认身份信息,将会导致调用失败。

使用在线服务(免安装和权限配置)

如果您不想安装Terraform,直接使用在线服务Cloud Shell

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

重要

通过Cloud Shell使用Terraform时,由于其销毁特性会导致数据丢失,因此建议您使用Cloud Shell做简单、快速的操作,例如调试。更多使用限制,请参见使用限制

使用Terraform创建并管理ECS

下文以创建ECS为例,介绍如何使用Terraform创建并管理ECS资源。

  1. 创建专有网络和交换机。

    1. 创建terraform.tf文件,输入以下内容,并保存在当前的执行目录中。

      resource "alicloud_vpc" "vpc" {
        vpc_name   = "tf_test_foo"
        cidr_block = "172.16.0.0/12"
      }
      
      resource "alicloud_vswitch" "vsw" {
        vpc_id     = alicloud_vpc.vpc.id
        cidr_block = "172.16.0.0/21"
        zone_id    = "cn-beijing-f"
      }
    2. 运行terraform init进行初始化,下载所需插件。

    3. 运行terraform apply开始创建。

    4. 运行terraform show查看已创建的专有网络和交换机。

      您也可以登录VPC控制台查看专有网络和交换机的属性。

  2. 在上一步创建的专有网络中创建一个安全组,并添加一个允许192.168.0.0/16地址块访问的安全组规则。

    1. 在terraform.tf文件中增加以下内容。

      resource "alicloud_security_group" "default" {
        name   = "default"
        vpc_id = alicloud_vpc.vpc.id
      }
      
      resource "alicloud_security_group_rule" "allow_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           = "192.168.0.0/16"
      }
    2. 运行terraform apply开始创建。

    3. 运行terraform show查看已创建的安全组和安全组规则。

      您也可以登录ECS控制台查看安全组和安全组规则。

  3. 创建ECS实例。

    1. 在terraform.tf文件中增加以下内容。

      resource "alicloud_instance" "instance" {
        # cn-beijing
        availability_zone = "cn-beijing-f"
        security_groups   = alicloud_security_group.default.*.id
        # series III
        instance_type              = "ecs.e-c1m1.large"
        system_disk_category       = "cloud_essd"
        image_id                   = "aliyun_2_1903_x64_20G_alibase_20240628.vhd"
        instance_name              = "test_foo"
        vswitch_id                 = alicloud_vswitch.vsw.id
        internet_max_bandwidth_out = 10
        password                   = "Terraform@Example"
      }
      
      output "public_ip" {
          value = alicloud_instance.instance.public_ip
      }
      说明
      • 在上述示例中,指定了internet_max_bandwidth_out= 10,因此会自动为实例分配一个公网IP,输出到 output 中,供后续访问实例使用。

      • 详细的参数解释请参见 阿里云参数说明

    2. 运行terraform apply开始创建。

    3. 运行terraform show查看已创建的ECS实例,并获取publicip。

    4. 运行ssh root@<publicip>,并输入设定好的密码来访问ECS实例。

完整代码

说明

您也可以在OpenAPI 门户调试运行代码。一键运行

resource "alicloud_vpc" "vpc" {
  vpc_name   = "tf_test_foo"
  cidr_block = "172.16.0.0/12"
}

resource "alicloud_vswitch" "vsw" {
  vpc_id     = alicloud_vpc.vpc.id
  cidr_block = "172.16.0.0/21"
  zone_id    = "cn-beijing-f"
}

resource "alicloud_security_group" "default" {
  name   = "default"
  vpc_id = alicloud_vpc.vpc.id
}

resource "alicloud_security_group_rule" "allow_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           = "192.168.0.0/16"
}
resource "alicloud_instance" "instance" {
  # cn-beijing
  availability_zone = "cn-beijing-f"
  security_groups   = alicloud_security_group.default.*.id
  # series III
  instance_type              = "ecs.e-c1m1.large"
  system_disk_category       = "cloud_essd"
  image_id                   = "aliyun_2_1903_x64_20G_alibase_20240628.vhd"
  instance_name              = "test_foo"
  vswitch_id                 = alicloud_vswitch.vsw.id
  internet_max_bandwidth_out = 10
  password                   = "Terraform@Example"
}

output "public_ip" {
    value = alicloud_instance.instance.public_ip
}

相关文档

更多实践教程,请参见Terraform的教程

更多Terraform的常用命令,请参见Terraform常用命令

更多创建ECS实例的方式,请参见ECS实例交付(创建)方式

资源编排服务为Terraform提供了托管的能力,您可以创建Terraform类型的模板,定义阿里云、AWS或Azure资源,配置资源参数和资源间的依赖关系。更多信息,请参见在资源编排(ROS)中使用Terraform

上一篇: CLI参考 下一篇: 资源编排ROS参考
阿里云首页 云服务器 ECS 相关技术圈