当Terraform遇上ECS(一)——DataSource篇

简介: 镜像id、实例类型id,可用区都是创建ECS实例的时候必须要考虑的参数,您是通过什么方式来选择的呢?本文将介绍,如何通过Terraform来轻松筛选这些参数并创建ECS实例。

背景

越来越多的公司已经熟知并运用“基础设施即代码”来构建和维护自己的云基础设施。目前也有许多的自动化构建工具协助用户通过脚本进行云资源的部署和生命周期的管理,如:Terraform、Ansible、Chef等。但是,在实施过程中,都遇到了如何获取镜像id、可用区、实例类型id,如何跟自己的脚本相结合而备受困扰?

请首先检查一下您的构建脚本,是否有imageId=centos_6u8_64_40G_cloudinit_20161115.vhdinstanceType=ecs.s2.largezoneId=cn-beijing-a,类似这样hardcode的代码或者配置?您是否遇到过前几天还顺利运行的脚本, 再次创建的时候却报Image.Invalid错误?另外,您是通过什么方式获取到的这些code值,通过ECS售卖页?本文介绍如何通过Terraform Data Source完美解决这些问题,优雅的创建ECS instance。

Terraform简介

Terraform 是管理云基础设施的开源工具,支持阿里云、AWS、Azure、GoogleCloud、DigitalOcean等。他通过模板来定义基础设施,通过指令来实现资源创建/更新/销毁的全生命周期管理。创建ECS实例模板如下:

resource "alicloud_instance" "web" {
    # cn-beijing
    availability_zone = "cn-beijing-b"
    image_id = "ubuntu_140405_32_40G_cloudinit_20161115.vhd"

    system_disk_category = "cloud_ssd"

    instance_type = "ecs.n1.small"
    internet_charge_type = "PayByBandwidth"
    security_groups = ["${alicloud_security_group.tf_test_foo.id}"]
    instance_name = "test_foo"
    io_optimized = "optimized"
}

Install Terraform, 然后执行terraform apply,稍等片刻一台ECS实例就被创建完成。

Resource Data简介

对于常用的查询类资源,可以通过Resource Data实时获取,也能在模板中进行引用。Resource Data是只读类型的资源,支持参数过滤,不会改变基础架构状态。这里以Ecs instance_type为例,做一个介绍:

  • 之前:
    根据需要去ECS售卖页上去筛选实例规格,然后把规格code复制、粘贴到模板中。这种方式,不仅操作繁琐,也跟自动化运维的思路不相称。
  • 现在:
    以描述的方式填写过滤条件,Resource Data会进行查询并返回结果,模板片段如下:
data "alicloud_instance_types" "1c2g" {
  cpu_core_count = 1
  memory_size = 2
}

这里,我们定义了一个1核2G的Resource Data。执行terraform apply,您将会得到所有1核2G实例规格的一个Map,如下图:

{
                          
   "cpu_core_count": "1",
   "memory_size": "2",
   "id": "2404647170",
   "instance_types.#": "3",
   "instance_types.0.cpu_core_count": "1",
   "instance_types.0.family": "ecs.s1",
   "instance_types.0.id": "ecs.s1.small",
   "instance_types.0.memory_size": "2",
   "instance_types.1.cpu_core_count": "1",
   "instance_types.1.family": "ecs.n1",
   "instance_types.1.id": "ecs.n1.small",
   "instance_types.1.memory_size": "2",
   "instance_types.2.cpu_core_count": "1",
   "instance_types.2.family": "ecs.n4",
   "instance_types.2.id": "ecs.n4.small",
   "instance_types.2.memory_size": "2"
                          
}

其中,

- `cpu_core_count`和`memory_size`是我们自定义的筛选条件
- `instance_types.#`代表返回结果条目数
- 每个实例类型的结构包含`cpu_core_count`、`family`、`id`、`memory_size`四个属性。其中id是实例规格ID,如`ecs.s1.small`

创建Ecs实例

Terraform 已经集成了阿里云地域、可用区、镜像、实例规格类型几种常用Data Resource. 这几个资源组合到一起,可以发挥更大的作用。

举个例子:在大多数情况下,我们往往并不是非常关心实例具体到哪个可用区,但是API接口又需要我们指明可用区,然而不同可用区支持的实例类型、磁盘类型、网络类型都不同。要选到满意的搭配,需要煞费一番周折。但是,通过组合Data Source,多重过滤参数,可以很轻松的进行选配,即使调整参数,也不需要在页面上点来点去。

一般的购买行为是这样的:首先,我们都会有个初始需求。比如,操作系统必须是centos的,实例类型是低配的(1c1g ~ 2c2g),磁盘类型需要是固态云盘。然后,根据这个清单去尝试购买资源,这个过程中根据库存情况进行微调。

用模板描述资源过程是类似的:先定义镜像、实例类型和可用区的筛选条件,然后在Ecs的配置中引用他们,最后尝试去创建资源。如果库存不足,则进行参数调整。

模板如下:

data "alicloud_images" "centos" {
    owners = "system"
    name_regex = "^centos_6"
}

data "alicloud_instance_types" "1c2g" {
    cpu_core_count = 1
    memory_size = 2
    instance_type_family = "ecs.n1"
}

data "alicloud_zones" "default" {
    "available_instance_type"= "${data.alicloud_instance_types.1c2g.instance_types.0.id}"
    "available_disk_category"= "cloud_ssd"
}

resource "alicloud_instance" "instance" {
  image_id = "${data.alicloud_images.centos.0.image_id}"
  instance_type = "${data.alicloud_instance_types.1c2g.instance_types.0.id}"
  
  availability_zone = "${data.alicloud_zones.default.zones.0.id}"
  security_groups = ["${alicloud_security_group.group.id}"]

  internet_charge_type = "PayByTraffic"
  io_optimized = "optimized"

  instance_charge_type = "PostPaid"
  system_disk_category = "cloud_ssd"

}

resource "alicloud_security_group" "group" {
  name = "tf-sg"
  description = "New security group"
}

模板详解:

  • alicloud_images: 筛选centos类型的系统镜像
  • alicloud_instance_types: 选择1核2G的Ecs实例规格
  • alicloud_zones: 选择支持上述实例类型的可用区
  • alicloud_instance: 描述Ecs 实例配置
  • alicloud_security_group: 定义安全组

运行terraform apply,结果如下:

data.alicloud_instance_types.1c2g: Refreshing state...
data.alicloud_images.centos: Refreshing state...
data.alicloud_zones.default: Refreshing state...
alicloud_security_group.group: Creating...
  description: "" => "New security group"
  name:        "" => "tf-sg"
alicloud_security_group.group: Creation complete
alicloud_instance.instance: Creating...
  availability_zone:          "" => "cn-beijing-c"
  instance_type:              "" => "ecs.n1.small"
  image_id:                   "" => "centos_6u8_64_40G_cloudinit_20161115.vhd"

从运行结果来看,我们并没有提前指定实例类型、镜像、可用区的具体值,而是根据需求描述Terraform在运行时去查找到了合适的值。至此,一个模板把整个ECS的选配(从实例类型、镜像、可用区)等自动化配置了起来,不仅不需要人工的干预,还能进行后续的扩展、升级和维护。

反馈

本文讲述了一种自动化选配、构建ECS资源的方法。大家对自动构建工具Terraform感兴趣,或者有问题也可以在github https://github.com/alibaba/terraform-provider 的Issue中提问。

相关实践学习
2分钟自动化部署人生模拟器
本场景将带你借助云效流水线Flow实现人生模拟器小游戏的自动化部署
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
存储 弹性计算 运维
Terraform一键部署ECS实例
Terraform一键部署ECS实例
949 0
Terraform一键部署ECS实例
|
存储 弹性计算 Kubernetes
Terraform Aliyun 创建ecs, kubernetes 实例
terraform demo for aliyun 创建vpc, 网关, EIP, ecs, kubernetes, Serverless Kubernetes env : Terraform v0.12.28 provider.alicloud v1.92.0
1132 0
|
存储 弹性计算 数据中心
Terraform 一分钟部署阿里云ECS集群(含视频)
“企业上云”是当下大势所趋,“提效、降成本” 是企业上云、迁云和管理云必须关注的问题。今天将从一个集群部署的场景出发,介绍阿里云如何借助生态工具Terraform持续降低企业上云、迁云和管理云的成本。
5726 1
|
数据中心 弹性计算 存储
Terraform 一分钟部署阿里云ECS集群(含视频)
“企业上云”是当下大势所趋,“提效、降成本” 是企业上云、迁云和管理云必须关注的问题。今天将从一个集群部署的场景出发,介绍阿里云如何借助生态工具Terraform持续降低企业上云、迁云和管理云的成本。
2743 0
Terraform 一分钟部署阿里云ECS集群(含视频)
|
弹性计算 监控 数据中心
Segment:使用Docker、ECS和Terraform重建基础设施
本文讲的是Segment:使用Docker、ECS和Terraform重建基础设施,【编者的话】本文转帖自Segment公司CTO以及联合创始人Calvin French-Owen发表的文章。Segment公司采用独立的AWS账户进行真正意义上的隔离,采用Docker和ECS运行服务,并采用Terraform配置脚本进行整合并为服务描述添加Datadog供应商获得免费的监控告警信息。
1589 0
|
弹性计算 数据中心 对象存储
Terraform 助力 ECS 实例借助 RAM 管理阿里云产品
ECS 实例借助于 RAM Role 可以帮助实例内部应用程序实现对阿里云产品的轻松访问和管理,Terraform 可实现对 RAM Role,Policy,ECS 实例以及其他资源的统一管理和平滑扩容,以降低整个运维流程的复杂度。
5545 0
|
16天前
|
人工智能 弹性计算 编解码
阿里云GPU云服务器性能、应用场景及收费标准和活动价格参考
GPU云服务器作为阿里云提供的一种高性能计算服务,通过结合GPU与CPU的计算能力,为用户在人工智能、高性能计算等领域提供了强大的支持。其具备覆盖范围广、超强计算能力、网络性能出色等优势,且计费方式灵活多样,能够满足不同用户的需求。目前用户购买阿里云gpu云服务器gn5 规格族(P100-16G)、gn6i 规格族(T4-16G)、gn6v 规格族(V100-16G)有优惠,本文为大家详细介绍阿里云gpu云服务器的相关性能及收费标准与最新活动价格情况,以供参考和选择。
|
21天前
|
机器学习/深度学习 人工智能 弹性计算
什么是阿里云GPU云服务器?GPU服务器优势、使用和租赁费用整理
阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等多种场景。作为亚太领先的云服务提供商,阿里云的GPU云服务器具备灵活的资源配置、高安全性和易用性,支持多种计费模式,帮助企业高效应对计算密集型任务。
|
23天前
|
存储 分布式计算 固态存储
阿里云2核16G、4核32G、8核64G配置云服务器租用收费标准与活动价格参考
2核16G、8核64G、4核32G配置的云服务器处理器与内存比为1:8,这种配比的云服务器一般适用于数据分析与挖掘,Hadoop、Spark集群和数据库,缓存等内存密集型场景,因此,多为企业级用户选择。目前2核16G配置按量收费最低收费标准为0.54元/小时,按月租用标准收费标准为260.44元/1个月。4核32G配置的阿里云服务器按量收费标准最低为1.08元/小时,按月租用标准收费标准为520.88元/1个月。8核64G配置的阿里云服务器按量收费标准最低为2.17元/小时,按月租用标准收费标准为1041.77元/1个月。本文介绍这些配置的最新租用收费标准与活动价格情况,以供参考。
|
21天前
|
机器学习/深度学习 人工智能 弹性计算
阿里云GPU服务器全解析_GPU价格收费标准_GPU优势和使用说明
阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等场景。作为亚太领先的云服务商,阿里云GPU云服务器具备高灵活性、易用性、容灾备份、安全性和成本效益,支持多种实例规格,满足不同业务需求。
121 2

推荐镜像

更多