【Terraform】Terraform自动创建云服务器脚本

在这里插入图片描述

  • Terraform 是由 HashiCorp 创建的开源“基础架构即代码”工具 (IaC)
    • 使用HCL(配置语言)描述云平台基础设施(这里教你使用低级基础设施:交换机、云服务器、VPC、带宽)

Terraform提供者(Provider)

  • 您可以为使用的云平台和服务(还包括K8S的)找到提供商,并添加到您的配置中,然后用它们来配置基础设施
  • 几乎每个主要的云提供商、SaaS 产品等都可以使用由 Terraform 社区或各个组织开发和/或支持的提供商

阿里云

  • 这里以阿里云为例,其他云也可模仿这里做法
    • 使用terraform脚本自动生成服务器,原理是按量付费自动生成服务器,按时间付费(1小时几毛钱),在你不需要服务器的时候自动销毁
  • 首先准备一个阿里云账户,往里充值100元(阿里云限制不足100元账户,不得使用按量付费)
  • 为阿里云账户生成accesskey、secretkey(后面简称ak、sk)
    • 首先,不要泄露这个东西到公开的仓库中,以免对你造成损失
    • 登入控制台(右上角),找到 企业 -> 人员权限管理
      在这里插入图片描述
    • 左侧 用户 -> 创建用户 -> 输入名称 -> 开启 OpenAPI调用访问
      在这里插入图片描述
    • 然后保存好你的ak,sk
      在这里插入图片描述
  • 给terraform用户授权
    • 授权VPC(虚拟私有云)和ECS(服务器)权限
      在这里插入图片描述
      在这里插入图片描述
      在这里插入图片描述
  • 阿里云 region 大全(其他云可自行搜索)
地域名称 所在城市 Region ID 可用区数量
华北 1 青岛 cn-qingdao 2
华北 2 北京 cn-beijing 7
华北 3 张家口 cn-zhangjiakou 2
华北 5 呼和浩特 cn-huhehaote 2
华东 1 杭州 cn-hangzhou 8
华东 2 上海 cn-shanghai 6
华南 1 深圳 cn-shenzhen 5
西南 1 成都 cn-chengdu 1
中国香港 香港 cn-hongkong 2
亚太东南 1 新加坡 ap-southeast-1 3
亚太东南 2 悉尼 ap-southeast-2 2
亚太东南 3 吉隆坡 ap-southeast-3 2
亚太东南 5 雅加达 ap-southeast-5 2
亚太南部 1 孟买 ap-south-1 2
亚太东北 1 东京 ap-northeast-1 1
美国西部 1 硅谷 us-west-1 2
美国东部 1 弗吉尼亚 us-east-1 2
欧洲中部 1 法兰克福 eu-central-1 2
英国(伦敦) 伦敦 eu-west-1 2
中东东部 1 迪拜 me-east-1 1
  • 上面已经开通了ak、sk,现在使用阿里云自带的CloudShell调用terraform
    在这里插入图片描述
    • 自行为cloudshell绑定存储卷,方便销毁服务器。这个请自己搞定,点两下鼠标就行了。绑定后请关闭cloudshell,重新打开
    • 创建 main.tf 文件(配置清单)
    • 这边演示创建美国的服务器,最小的规格,按量付费(美国调用chatgpt、dockerhub无限制)
// export TF_VAR_alicloud_access_key=
// export TF_VAR_alicloud_secret_key=
// 使用阿里云驱动
terraform {required_providers {alicloud = {source = "aliyun/alicloud"}}
}// 声明变量
variable "alicloud_access_key" {
type = string
}
variable "alicloud_secret_key" {type = string
}// ak sk 可用区
provider "alicloud" {access_key = var.alicloud_access_keysecret_key = var.alicloud_secret_keyregion = "us-east-1"  // region区域
}// VPC专有网络,不收费
resource "alicloud_vpc" "vpc" {vpc_name = "your_name"cidr_block = "172.16.0.0/12" // 网段
}// switch交换机,虚拟资源,不收费
resource "alicloud_vswitch" "vsw" {vpc_id = alicloud_vpc.vpc.id  // 绑定vpccidr_block = "172.17.0.0/21" // 网段zone_id = "us-east-a" // 可用区
}// security_group 安全组,不收费
resource "alicloud_security_group" "group" {name = "your_name"vpc_id = alicloud_vpc.vpc.id // 绑定vpcsecurity_group_type = "normal" // 普通类型
}// security_group_rule 规则
resource "alicloud_security_group_rule" "allow_80_tcp" {type = "ingress"  // 入流量ip_protocol = "tcp"  // tcp协议nic_type = "intranet"  // 不用管policy = "accept"  // 接受类型port_range = "80/80"  // 端口范围,你需要访问什么端口就开什么端口priority = 1  // 优先级security_group_id = alicloud_security_group.group.id // 绑定安全组cidr_ip = "0.0.0.0/0"  // 运行外部网络访问
}// security_group_rule 规则,同上
resource "alicloud_security_group_rule" "allow_22_tcp" {type = "ingress"ip_protocol = "tcp"nic_type = "intranet"policy = "accept"port_range = "22/22"priority = 1security_group_id = alicloud_security_group.group.idcidr_ip = "0.0.0.0/0"
}// ecs按量付费,这里使用最小的规格
resource "alicloud_instance" "myecs" {availability_zone = "us-east-a"  // 可用区security_groups = alicloud_security_group.group.*.id // 绑定安全组instance_type = "ecs.xn4.small"  // 服务器规格system_disk_category = "cloud_efficiency" // 系统磁盘system_disk_name = "your_name"  // 磁盘显示名称system_disk_description = "your_name" // 磁盘描述信息image_id = "centos_7_9_x64_20G_alibase_20201228.vhd" // 操作系统镜像id,这里是centos7.9instance_name = "your_name" // 服务器实例名字vswitch_id = alicloud_vswitch.vsw.id  // 绑定交换机internet_max_bandwidth_out = 1  // 限制最大带宽1Mb,这里会生成公网ip,以提供访问internet_charge_type = "PayByTraffic"  // 重点---付费类型:按量付费password = "root@123"  // 生成服务器后,你的root密码
}
  • 将ak和sk以环境变量方式输入到终端中
export TF_VAR_alicloud_access_key="你的ak"
export TF_VAR_alicloud_secret_key="你的sk"

在这里插入图片描述

  • 执行terraform init (此步骤为下载阿里云的provider)
    在这里插入图片描述
  • terraform plan (打印即将创建的资源清单、并且有检查语法的效果)
    在这里插入图片描述
  • 创建资源,使用 terraform apply ,然后再交互输入 yes
    在这里插入图片描述
  • 创建成功
    在这里插入图片描述
  • 此时登录ecs控制台,选择 美国 弗吉尼亚,就会看到新建了一台按量付费的实例。并且自带公网ip,可通过ssh连接(main.tf开通了22端口)
    在这里插入图片描述
  • 然后当你使用完了服务器,不需要资源,再在cloudshell里执行 terraform destroy,并交互式输入yes。即可一键销毁上面创建的所有资源
    在这里插入图片描述
    在这里插入图片描述

提醒

  • 可根据你所需要的区域,替换region和zone
  • 当创建失败时,可能会是该可用区资源不足。这时候请不要自行解决,请提工单给阿里云让他们帮你查,然后根据他们的提示修改你的main.tf清单
  • 如果想编排多个实例,请根据语法自行扩展
  • 安全组你需要放行什么端口,模仿上方的写法,自己创建对应的规则
  • 按量付费的费用不高,这里只展示了最小规格服务的使用,你可以适当提高服务器资源
  • 按量付费生成的账单大概如下
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/130795.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构和算法(5):二叉树

树 向量允许通过下标或秩,在常数的时间内找到目标对象;然而,一旦需要对这类结构进行修改,那么无论是插入还是删除,都需要耗费线性的时间。 列表允许借助引用或位置对象,在常数的时间内插入或删除元素&…

Springboot整合JWT完成验证登录

目录 一、引入依赖二、JwtUtil 代码解读三、LoginController 代码解读四、整体代码五、结果展示 一、引入依赖 <dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>0.9.1</version></depende…

el-table 实现表、表格行、表格列合并

最近写vue开发项目的时候&#xff0c;很多地方用到了Element组件中的Table 表格。经过一周的边学边做&#xff0c;我总结了以下三种有关表格的合并方法。 一、合并表头 话不多说&#xff0c;先看效果图 代码如下&#xff1a; 表格结构如上&#xff0c;其中:header-cell-style对…

233062C++QTday5

实现一个图形类&#xff08;Shape&#xff09;&#xff0c;包含受保护成员属性&#xff1a;周长、面积&#xff0c; 公共成员函数&#xff1a;特殊成员函数书写 定义一个圆形类&#xff08;Circle&#xff09;&#xff0c;继承自图形类&#xff0c;包含私有属性&#xff1a;半…

自动化测试框架unittest与pytest的区别!

引言   前面文章已经介绍了python单元测试框架&#xff0c;大家平时经常使用的是unittest&#xff0c;因为它比较基础&#xff0c;并且可以进行二次开发&#xff0c;如果你的开发水平很高&#xff0c;集成开发自动化测试平台也是可以的。而这篇文章主要讲unittest与pytest的区…

QQ 逻辑漏洞可执行文件 漏洞复现

本文由掌控安全学院- wax 投稿 首先拿到QQ的版本&#xff0c;目前可测试版本包括QQ最新版本&#xff0c;TIM最新版本 新创建一个bat文件&#xff08;这个可以随意&#xff0c;上马的也可以&#xff0c;exe也可以&#xff09; &#xff0c;本次测试内容如下首先向你的手机端发一…

对接西部数据Western Digital EDI 系统

近期我们为国内某知名电子产品企业提供EDI解决方案&#xff0c;采用知行之桥 EDI 系统作为核心组件&#xff0c;成功与西部数据Western Digital&#xff08;简称西数&#xff09;建立EDI连接&#xff0c;实现数据安全且自动化传输。 EDI实施需求 EDI连接 传输协议&#xff1a;A…

数据结构 排序

目录 第八章 排序8.1排序的基本概念1. 概念2. 排序算法的分类 8.2 插入排序8.2.1 直接插入排序8.2.2 算法效率分析8.2.2 折半插入排序总结8.2.3 希尔排序 8.3 交换排序8.3.1冒泡排序8.3.2快速排序&#xff08;了解栈的过程&#xff09; 8.4 选择排序8.4.1 简单选择排序8.4.2 堆…

小工具之视频抽帧

视频抽帧工具&#xff0c;所有视频所在目录以及抽帧图片保存路径 单个视频抽帧操作步骤&#xff1a; 选择文件路径->选择保存路径->拖动跳帧间隔->点击抽取帧 批量视频抽帧操作步骤&#xff1a; 选择文件夹路径->选择保存路径->拖动跳帧间隔->点击抽取帧 imp…

iview label-in-value 和 @on-change 的使用

在select加上label-in-value 之后&#xff0c;就可以调用通过on-change默认的方法&#xff0c;获取到value和label的值了 <Select v-model"params.area" placeholder"选择区县" label-in-value clearable style"width: 102px"><Option…

pip和conda的环境管理,二者到底应该如何使用

关于pip与conda是否能混用的问题&#xff0c;Anaconda官方早就给出了回答 先说结论&#xff0c;如果conda和pip在相同环境下掺杂使用&#xff0c;尤其是频繁使用这两个工具进行包的安装&#xff0c;可能会导致环境状态混乱 就像其他包管理器一样&#xff0c;大部分这些问题均…

mysql在ubuntu上命令行登陆密码不正确

1.登陆提示如下 2.使用mysql -u root -p登录也是类似的 3.打开宝塔面板 点击root密码&#xff0c;更改密码后即可在命令行界面登录 4.登录效果如下

深度学习环境搭建——之Anaconda3安装配置

序言&#xff1a; 工作中一直从事的是FPGA嵌入式开发&#xff0c;图像处理相关的工作。目前随着AI的浪潮&#xff0c;也被动卷入到深度学习的漩涡中&#xff0c;为了不被漩涡卷入深渊&#xff0c;只能自学些深度学习相关的知识&#xff0c;俗话说“好记性不如烂笔头”何况已经…

profinet是什么?

profinet是什么&#xff1f; 参考&#xff1a;一文读懂Profibus、Profinet、Ethernet的区别 PROFINETPROFIbusetherNET&#xff0c;把Profibus的主从结构移植到以太网上&#xff0c;所以profinet会有Controller和Device&#xff0c;他们的关系可以简单的对应于profibus的Maste…

【C++】构造函数意义 ( 构造函数显式调用与隐式调用 | 构造函数替代方案 - 初始化函数 | 初始化函数缺陷 | 默认构造函数 )

文章目录 一、构造函数意义1、类的构造函数2、构造函数显式调用与隐式调用3、构造函数替代方案 - 初始化函数4、初始化函数缺陷5、默认构造函数6、代码示例 - 初始化函数无法及时调用 一、构造函数意义 1、类的构造函数 C 提供的 构造函数 和 析构函数 作为 类实例对象的 初始化…

长短期记忆网络(LSTM)

概念 三个门&#xff1a;遗忘门、输入门、输出门 候选记忆单元 记忆单元 隐状态 ot 控制是否让输出&#xff0c;是否要进行重置。 总结 代码实现 import torch from torch import nn from d2l import torch as d2lbatch_size,num_steps 32,35 train_iter,vocab d2l.load_…

Linux中安装MySQL_图解_2023新

1.卸载 为了避免不必要的错误发生,先将原有的文件包进行查询并卸载 // 查询 rpm -qa | grep mysql rpm -qa | grep mari// 卸载 rpm -e 文件名 --nodeps2.将安装包上传到指定文件夹中 这里采用的是Xftp 3.将安装包进行解压 tar -zxvf 文件名 -C 解压路径4.获取解压的全路…

day55:C++ day5,运算符重载剩余部分、静态成员、继承

#include <iostream> #include <cstring> #define pi 3.14 using namespace std;class Shape { protected:double round;double area; public://无参构造Shape():round(40),area(100){cout<<"Shape::无参构造函数&#xff0c;默认周长为40&#xff0c;面…

sql 时间函数

1&#xff0c;前提 今天看同事写的sql里面出现了时间类的函数&#xff0c;平时自己也经常用到&#xff0c;每次都要百度&#xff0c;还不如自己整理记录在一起&#xff0c;方便后续使用。 2&#xff0c;sql时间函数 2.1 获取当前时间&#xff1a; selectNOW() as 当前日期时…

docker 部署 node.js(express) 服务

1、在 express 项目根目录下新增 Dockerfile 文件&#xff0c;内容如下&#xff1a; 创建服务容器的方法&#xff0c;可以根据自己的情况选择&#xff1a; 1、以下示例为宿主机没有安装 node 环境的写法&#xff1b; 2、先在本地构建包含 node 和 express 的基础镜像&#xff0…