当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实例
954 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
1136 0
|
存储 弹性计算 数据中心
Terraform 一分钟部署阿里云ECS集群(含视频)
“企业上云”是当下大势所趋,“提效、降成本” 是企业上云、迁云和管理云必须关注的问题。今天将从一个集群部署的场景出发,介绍阿里云如何借助生态工具Terraform持续降低企业上云、迁云和管理云的成本。
5732 1
|
数据中心 弹性计算 存储
Terraform 一分钟部署阿里云ECS集群(含视频)
“企业上云”是当下大势所趋,“提效、降成本” 是企业上云、迁云和管理云必须关注的问题。今天将从一个集群部署的场景出发,介绍阿里云如何借助生态工具Terraform持续降低企业上云、迁云和管理云的成本。
2748 0
Terraform 一分钟部署阿里云ECS集群(含视频)
|
弹性计算 监控 数据中心
Segment:使用Docker、ECS和Terraform重建基础设施
本文讲的是Segment:使用Docker、ECS和Terraform重建基础设施,【编者的话】本文转帖自Segment公司CTO以及联合创始人Calvin French-Owen发表的文章。Segment公司采用独立的AWS账户进行真正意义上的隔离,采用Docker和ECS运行服务,并采用Terraform配置脚本进行整合并为服务描述添加Datadog供应商获得免费的监控告警信息。
1590 0
|
弹性计算 数据中心 对象存储
Terraform 助力 ECS 实例借助 RAM 管理阿里云产品
ECS 实例借助于 RAM Role 可以帮助实例内部应用程序实现对阿里云产品的轻松访问和管理,Terraform 可实现对 RAM Role,Policy,ECS 实例以及其他资源的统一管理和平滑扩容,以降低整个运维流程的复杂度。
5550 0
|
4天前
|
弹性计算 运维 安全
阿里云轻量应用服务器与ECS的区别及选择指南
轻量应用服务器和云服务器ECS(Elastic Compute Service)是两款颇受欢迎的产品。本文将对这两者进行详细的对比,帮助用户更好地理解它们之间的区别,并根据自身需求做出明智的选择。
|
5天前
|
SQL 弹性计算 安全
阿里云上云优选与飞天加速计划活动区别及购买云服务器后续必做功课参考
对于很多用户来说,购买云服务器通常都是通过阿里云当下的各种活动来购买,这就有必要了解这些活动的区别,同时由于活动内的云服务器购买之后还需要单独购买并挂载数据盘,还需要设置远程密码以及安全组等操作之后才能正常使用云服务器。本文就为大家介绍一下目前比较热门的上云优选与飞天加速计划两个活动的区别,以及通过活动来购买云服务器之后的一些必做功课,确保云服务器可以正常使用,以供参考。
|
8天前
|
弹性计算 安全 开发工具
灵码评测-阿里云提供的ECS python3 sdk做安全组管理
批量变更阿里云ECS安全组策略(批量变更)
|
25天前
|
存储 人工智能 弹性计算
阿里云弹性计算(ECS)提供强大的AI工作负载平台,支持灵活的资源配置与高性能计算,适用于AI训练与推理
阿里云弹性计算(ECS)提供强大的AI工作负载平台,支持灵活的资源配置与高性能计算,适用于AI训练与推理。通过合理优化资源分配、利用自动伸缩及高效数据管理,ECS能显著提升AI系统的性能与效率,降低运营成本,助力科研与企业用户在AI领域取得突破。
45 6

推荐镜像

更多
下一篇
DataWorks