Terraform 介绍

什么是 Terraform

Terraform是一种开源工具,用于安全高效地预览,配置和管理云基础架构和资源。

概览

HashiCorp Terraform 是一个IT基础架构自动化编排工具,可以用代码来管理维护 IT 资源。Terraform的命令行接口(CLI)提供一种简单机制,用于将配置文件部署到阿里云或其他任意支持的云上,并对其进行版本控制。它编写了描述云资源拓扑的配置文件中的基础结构,例如虚拟机、存储帐户和网络接口。

Terraform是一个高度可扩展的工具,通过 Provider 来支持新的基础架构。Terraform能够让您在阿里云上轻松使用 简单模板语言 来定义、预览和部署云基础结构。您可以使用Terraform来创建、修改、删除ECS、VPC、RDS、SLB等多种资源。

优势

将基础结构部署到多个云
Terraform适用于多云方案,将类似的基础结构部署到阿里云、其他云提供商或者本地数据中心。开发人员能够使用相同的工具和相似的配置文件同时管理不同云提供商的资源。

自动化管理基础结构
Terraform能够创建配置文件的模板,以可重复、可预测的方式定义、预配和配置ECS资源,减少因人为因素导致的部署和管理错误。能够多次部署同一模板,创建相同的开发、测试和生产环境。

基础架构即代码(Infrastructure as Code)
可以用代码来管理维护资源。允许保存基础设施状态,从而使您能够跟踪对系统(基础设施即代码)中不同组件所做的更改,并与其他人共享这些配置 。

降低开发成本
您通过按需创建开发和部署环境来降低成本。并且,您可以在系统更改之前进行评估。

应用场景

Terraform可以对基础设施进行编码,利用代码来进行资源的增删查改。
创建基础设施
您可以使用Terraform创建和管理ECS、VPC和SLB等基础资源。

均衡负载业务流量
您可以将访问流量按照定义的转发规则分发到指定的后端服务器(ECS实例),提高应用系统对外的服务能力,消除单点故障。

自动伸缩
根据您的业务需求和策略自动调整弹性计算资源,在业务需求增长时无缝增加ECS实例满足计算需要,在业务需求下降时自动减少ECS实例节约成本。

集群管理
您可以使用Terraform快速创建专有网络的集群。
在阿里云中启动kubernetes集群,并且在集群中创建VPC、交换机和NAT网关等资源,请参见示例模板kubernetes module。

配置函数计算服务
阿里云函数计算是事件驱动的全托管计算服务。通过函数计算,您无需管理服务器等基础设施,只需编写代码并上传。借助于函数计算,您可以快速构建任何类型的应用和服务,无需管理和运维。

安装和配置 Terraform

在阿里云 Cloud Shell 中使用 Terraform

阿里云 Cloud Shell 集成了 Terraform 组件:https://help.aliyun.com/document_detail/95841.html?spm=a2c4g.11186623.6.545.4e13190cErHLYf

在本地安装和配置 Terraform

准备

云:阿里云
机器信息:
Terraform 实践 - 图1

安装

下面是 Centos 7安装,其它操作系统请参照官网:https://www.terraform.io/docs/cli/install/yum.html

  1. # Centos
  2. sudo yum install -y yum-utils
  3. sudo yum-config-manager --add-repo https://rpm.releases.hashicorp.com/RHEL/hashicorp.repo
  4. sudo yum install terraform

安装好后输入 terrafrom 命令出现如下内容即为安装成功
Terraform 实践 - 图2

在阿里云创建 RAM 用户

登录 RAM 控制台:
https://ram.console.aliyun.com/?spm=a2c4g.11186623.2.8.33fd16f2IgYtaY#/overview
创建名为Terraform的RAM用户,并为该用户创建AccessKey:
Terraform 实践 - 图3
创建如下:
Terraform 实践 - 图4
添加用户权限
Terraform 实践 - 图5
我这里是测试所以就加了所有权限,生产环境请根据实际情况添加
Terraform 实践 - 图6

添加环境变量

  1. sudo vim /etc/profile
  2. # 添加如下内容
  3. # key secret 填写自己 RAM 用户生成的,REGION 为区域
  4. export ALICLOUD_ACCESS_KEY="LTAI4G7W8JG*********"
  5. export ALICLOUD_SECRET_KEY="8eMc5Y0SfHPXppigtb******"
  6. export ALICLOUD_REGION="cn-hangzhou"
  7. # 使配置生效
  8. source /etc/profile

实践

  1. # 创建执行目录,后续操作在下面目录中执行
  2. mkdir /opt/terraform
  3. cd /opt/terraform
  4. # 初始化
  5. terraform init

云服务器 ECS

创建一台 ECS 实例

  • 创建专有网络和交换机
  1. vim terraform.tf
  2. # 输入以下内容
  3. resource "alicloud_vpc" "vpc" {
  4. name = "tf_test_foo"
  5. cidr_block = "172.16.0.0/12"
  6. }
  7. resource "alicloud_vswitch" "vsw" {
  8. vpc_id = alicloud_vpc.vpc.id
  9. cidr_block = "172.16.0.0/21"
  10. availability_zone = "cn-hangzhou-b"
  11. }
  12. #
  13. # 创建
  14. Terraform apply
  15. # 命令行查看或者登陆控制台查看
  16. terraform show

Terraform 实践 - 图7

  • 在上一部创建的专有网络中创建一个安全组,并添加一个允许任何地址访问的安全组规则
    在 terraform.tf 文件中添加以下内容
  1. resource "alicloud_security_group" "default" {
  2. name = "default"
  3. vpc_id = alicloud_vpc.vpc.id
  4. }
  5. resource "alicloud_security_group_rule" "allow_all_tcp" {
  6. type = "ingress"
  7. ip_protocol = "tcp"
  8. nic_type = "intranet"
  9. policy = "accept"
  10. port_range = "1/65535"
  11. priority = 1
  12. security_group_id = alicloud_security_group.default.id
  13. cidr_ip = "0.0.0.0/0"
  14. }

运行terraform apply开始创建

  • 创建 ECS 实例
    在 terraform.tf 文件中添加以下内容
resource "alicloud_instance" "instance" {
  # cn-beijing
  availability_zone = "cn-hangzhou-b"
  security_groups = alicloud_security_group.default.*.id

  # series III
  instance_type        = "ecs.n2.small"
  system_disk_category = "cloud_efficiency"
  image_id             = "ubuntu_18_04_64_20G_alibase_20190624.vhd"
  instance_name        = "test_foo"
  vswitch_id = alicloud_vswitch.vsw.id
  internet_max_bandwidth_out =10
  password = "P@ss12345"
}

运行terraform apply开始创建,创建完成控制台
Terraform 实践 - 图8

以上就是创建 ECS 的操作,其它操作可以查看阿里云官网文档:
https://help.aliyun.com/product/95817.html?spm=a2c4g.11186623.6.540.423c278brGHPCC

参考

Terraform 常用命令

https://help.aliyun.com/document_detail/145531.html?spm=a2c4g.11174283.6.573.4e9511e91k8F33