• 【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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 上面已经开通了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_key
      secret_key = var.alicloud_secret_key
      region = "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  // 绑定vpc
      cidr_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 // 绑定vpc
      security_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 = 1
      security_group_id = alicloud_security_group.group.id
      cidr_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.9
      instance_name = "your_name" // 服务器实例名字
      vswitch_id = alicloud_vswitch.vsw.id  // 绑定交换机
      internet_max_bandwidth_out = 1  // 限制最大带宽1Mb,这里会生成公网ip,以提供访问
      internet_charge_type = "PayByTraffic"  // 重点---付费类型:按量付费
      password = "root@123"  // 生成服务器后,你的root密码
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 将ak和sk以环境变量方式输入到终端中
    export TF_VAR_alicloud_access_key="你的ak"
    export TF_VAR_alicloud_secret_key="你的sk"
    
    • 1
    • 2

    在这里插入图片描述

    • 执行terraform init (此步骤为下载阿里云的provider)
      在这里插入图片描述
    • terraform plan (打印即将创建的资源清单、并且有检查语法的效果)
      在这里插入图片描述
    • 创建资源,使用 terraform apply ,然后再交互输入 yes
      在这里插入图片描述
    • 创建成功
      在这里插入图片描述
    • 此时登录ecs控制台,选择 美国 弗吉尼亚,就会看到新建了一台按量付费的实例。并且自带公网ip,可通过ssh连接(main.tf开通了22端口)
      在这里插入图片描述
    • 然后当你使用完了服务器,不需要资源,再在cloudshell里执行 terraform destroy,并交互式输入yes。即可一键销毁上面创建的所有资源
      在这里插入图片描述
      在这里插入图片描述
    提醒
    • 可根据你所需要的区域,替换region和zone
    • 当创建失败时,可能会是该可用区资源不足。这时候请不要自行解决,请提工单给阿里云让他们帮你查,然后根据他们的提示修改你的main.tf清单
    • 如果想编排多个实例,请根据语法自行扩展
    • 安全组你需要放行什么端口,模仿上方的写法,自己创建对应的规则
    • 按量付费的费用不高,这里只展示了最小规格服务的使用,你可以适当提高服务器资源
    • 按量付费生成的账单大概如下
      在这里插入图片描述
  • 相关阅读:
    刷爆力扣之矩阵中的幻方
    <一>类,对象,this指针
    在Java中访问并配置环境变量
    【机器学习】03. SMOTE算法实现数据集单个不平衡的样本扩充
    Java面向对象编程
    基于springboot会员制医疗预约服务管理信息系统springboot017
    寻找小竹!(DFS+素数筛变形筛不同质因数个数)
    Leetcode—121.买卖股票的最佳时机【简单】
    微服务集成redis并通过redis实现排行榜的功能
    制药企业固体制剂设备管理及维护要点
  • 原文地址:https://blog.csdn.net/qq_42938493/article/details/132781858