Terraform一键部署ECS实例

简介: Terraform一键部署ECS实例

Terraform简介

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

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

安装和配置Terraform

在Cloud Shell中使用Terraform

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

打开浏览器,访问Cloud Shell的地址https://shell.aliyun.comimage.png

在本地安装和配置Terraform

登录 Terraform官网 下载并安装适用于您的操作系统的程序包。

命令运行后将显示可用的Terraform选项的列表,如下所示,表示安装完成。

username:~$ terraform
Usage: terraform [-version] [-help] <command> [args]

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

export ALICLOUD_ACCESS_KEY="LTAIUrZCw3********"
export ALICLOUD_SECRET_KEY="zfwwWAMWIAiooj14GQ2*************"
export ALICLOUD_REGION="cn-beijing"

编写terraform脚本

这里选择在Cloud Shell中使用Terraform,创建相关目录:

mkdir /home/shell/terraform_ecs
cd /home/shell/terraform_ecs

terraform脚本如下:

variable "profile" {
  default = "default"
}
#Region
variable "region" {
  default = "cn-shanghai"
}
#将公钥拷贝到ECS上
locals {
  user_data_ecs = <<TEOF
#!/bin/bash
cp ~/.ssh/authorized_keys /root/.ssh
TEOF
}
provider "alicloud" {
  region  = var.region
  profile = var.profile
}
#VPC
module "vpc" {
  source  = "alibaba/vpc/alicloud"
  region  = var.region
  profile = var.profile
  vpc_name = "ecs_terraform"
  vpc_cidr          = "10.10.0.0/16"
  availability_zones = ["cn-shanghai-b"]
  vswitch_cidrs      = ["10.10.1.0/24"]
}
#安全组
module "security_group" {
  source  = "alibaba/security-group/alicloud"
  profile = var.profile
  region  = var.region
  vpc_id  = module.vpc.this_vpc_id
  ingress_cidr_blocks = ["0.0.0.0/0"]
  ingress_ports = [22]
  ingress_with_cidr_blocks_and_ports = [
    {
      protocol    = "tcp"
      priority    = 1
      description = "ingress for ssh"
    }
  ]
}
#ECS
module "ecs" {
  source  = "alibaba/ecs-instance/alicloud"
  profile = var.profile
  region  = var.region
  internet_max_bandwidth_out  = 1
  associate_public_ip_address = true
  name                        = "terraform_ecs"
  image_id                    = "centos_7_9_x64_20G_alibase_20201228.vhd"
  instance_type               = "ecs.t5-c1m2.xlarge"  #实例规格
  vswitch_id                  = module.vpc.this_vswitch_ids.0
  security_group_ids          = [module.security_group.this_security_group_id]
  system_disk_size     = 30
  number_of_instances = 3  #实例数量
  user_data = local.user_data_ecs
}
#设置本地~/.ssh/config的ssh信息
resource "local_file" "ssh_config" {
    content     = <<EOF
%{ for ip in module.ecs.this_public_ip }
Host ecs${index(module.ecs.this_public_ip, ip) + 1}
    StrictHostKeyChecking no
    HostName ${ip}
    User terraform
%{ endfor }
EOF
    filename = "/home/shell/.ssh/config"
}
#屏幕输出提示信息
resource "local_file" "info" {
    content     =  <<EOF
登录服务器:
%{ for ip in module.ecs.this_public_ip }
ssh root@ecs${index(module.ecs.this_public_ip, ip) + 1}%{ endfor }
公网 IP 地址(用于 ssh 登陆):
%{ for ip in module.ecs.this_public_ip }
ecs${index(module.ecs.this_public_ip, ip) + 1}:    ${ip}%{ endfor }
内网 IP 地址(用于集群内部通信,没有端口限制):
%{ for ip in module.ecs.this_private_ip }
ecs${index(module.ecs.this_private_ip, ip) + 1}:    ${ip}%{ endfor }
销毁服务器:
cd /home/shell/terraform_ecs
terraform destroy --auto-approve
EOF
    filename = "/home/shell/terraform_ecs/readme.txt"
}
output "服务器信息" {
   value = <<EOF
登录服务器:
%{ for ip in module.ecs.this_public_ip }
ssh root@ecs${index(module.ecs.this_public_ip, ip) + 1}%{ endfor }
公网 IP 地址(用于 ssh 登录):
%{ for ip in module.ecs.this_public_ip }
ecs${index(module.ecs.this_public_ip, ip) + 1}:    ${ip}%{ endfor }
内网 IP 地址(用于集群内部通信,没有端口限制):
%{ for ip in module.ecs.this_private_ip }
ecs${index(module.ecs.this_private_ip, ip) + 1}:    ${ip}%{ endfor }
销毁服务器:
cd /home/shell/terraform_ecs
terraform destroy --auto-approve
查看以上信息:
cat /home/shell/terraform_ecs/readme.txt
EOF
}

运行以下命令启动ECS:

terraform init #安装相关module
terraform apply --auto-approve #创建ECS

创建成功后会有如下输出:

Apply complete! Resources: 11 added, 0 changed, 0 destroyed.
Outputs:
服务器信息 = 
登录服务器:
ssh root@ecs1
ssh root@ecs2
ssh root@ecs3
公网 IP 地址(用于 ssh 登录):
ecs1:    47.117.170.15
ecs2:    47.117.172.214
ecs3:    47.117.152.20
内网 IP 地址(用于集群内部通信,没有端口限制):
ecs1:    10.10.1.151
ecs2:    10.10.1.152
ecs3:    10.10.1.153
销毁服务器:
cd /home/shell/terraform_ecs
terraform destroy --auto-approve
查看以上信息:
cat /home/shell/terraform_ecs/readme.txt

查看创建好的ECS:image.png登录ECS:

#脚本已经将在Cloud shell的公钥传到ECS上了,并且在~/.ssh/config配置了登录信息
ssh root@ecs1

官方文档:

https://registry.terraform.io/providers/aliyun/alicloud/latest/docs

https://github.com/terraform-alicloud-modules


相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
目录
相关文章
|
6天前
|
存储 机器学习/深度学习 编解码
阿里云服务器计算型c7、计算型c8y、计算型c8i实例性能对比与选择参考
目前阿里云在售的云服务器中,主要包含了第6代、第7代、第8代实例规格的云服务器产品,从类别上来说,又分为计算型(c系列)、通用型(g系列)、内存型(r/re系列)、通用算力型(U实例)、大数据型(d系列)、本地SSD型(i系列)、高主频型(hf系列)等不同种类的云服务器实例规格,而在阿里云目前的活动中,计算型(c系列)主要计算型c7、计算型c8y和计算型c8i实例可选,有的新手用户并不清楚这三个计算型实例之间的差别,本文对这三个计算型实例的实例规格、CPU(核)、内存(G)、计算、存储、内存等方面为大家做个对比,让大家了解一下他们之间的不同,以供参考选择。
|
6天前
|
存储 安全 网络协议
阿里云服务器通用型g7、通用型g8y、通用型g8i实例性能和适用场景对比与选择参考
目前阿里云在售的云服务器中,主要包含了第6代、第7代、第8代实例规格的云服务器产品,在选择云服务器实例规格时,对于需要平衡计算、存储和网络性能的应用场景来说,通用型g7、通用型g8y和通用型g8i实例是许多用户的热门选择。为了帮助大家更好地了解这三款实例的区别,并为选择提供参考,本文将详细对比它们的实例规格、CPU、内存、计算、存储、网络等方面的性能,并附上活动价格对比。让大家了解一下他们之间的不同,以供参考选择。
|
6天前
|
关系型数据库 MySQL Linux
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
基于阿里云服务器Linux系统安装Docker完整图文教程(附部署开源项目)
80 2
|
6天前
|
NoSQL Linux PHP
|
7天前
|
弹性计算 数据库连接 Nacos
阿里云ECS服务器在docker中部署nacos
docker pull nacos 失败,docker部署nacos遇到的问题,nacos数据库连接,nacos端口映射
42 1
|
11天前
|
机器学习/深度学习 弹性计算 缓存
阿里云服务器经济型e实例与通用算力型u1实例对比分析与选择指南
在阿里云服务器的实例规格中,经济型e实例和通用算力型u1实例是很多个人和普通企业级用户常见的选择,经济型e实例与通用算力型u1实例的主要区别在于性能、应用场景及价格策略。本文将详细对比这两种实例的性能、应用场景及价格策略,以供参考。
|
12天前
|
弹性计算 开发框架 .NET
阿里云服务器购买教程及云服务器地域、实例、操作系统、带宽等参数选择指南
对于初次购买阿里云服务器的用户来说,想使用阿里云服务器搭建网站或者运行APP、小程序等项目,第一步就是要先购买阿里云服务器,下面小编以图文形式给大家介绍一下阿里云服务器的购买流程,以及购买过程中如何云服务器地域、实例、带宽等关键配置和选择这些参数的一些注意事项,以供参考。
|
13天前
|
监控 网络安全 调度
Quartz.Net整合NetCore3.1,部署到IIS服务器上后台定时Job不被调度的解决方案
解决Quartz.NET在.NET Core 3.1应用中部署到IIS服务器上不被调度的问题,通常需要综合考虑应用配置、IIS设置、日志分析等多个方面。采用上述策略,结合细致的测试和监控,可以有效地提高定时任务的稳定性和可靠性。在实施任何更改后,务必进行充分的测试,以验证问题是否得到解决,并监控生产环境的表现,确保长期稳定性。
27 1
|
13天前
|
弹性计算 网络安全
阿里云国际OpenAPI多接口快速管理ECS服务器教程
阿里云国际OpenAPI多接口快速管理ECS服务器教程
|
2天前
|
存储 弹性计算 NoSQL
"从入门到实践,全方位解析云服务器ECS的秘密——手把手教你轻松驾驭阿里云的强大计算力!"
【10月更文挑战第23天】云服务器ECS(Elastic Compute Service)是阿里云提供的基础云计算服务,允许用户在云端租用和管理虚拟服务器。ECS具有弹性伸缩、按需付费、简单易用等特点,适用于网站托管、数据库部署、大数据分析等多种场景。本文介绍ECS的基本概念、使用场景及快速上手指南。
16 3

推荐镜像

更多