目录
3.Windows创建Terraform项目的生产环境实例配置文件
5.Windows实例化Terraform项目调用封装模块实现 alicloud 资源管理
3.Terraform申请资源失败(instancetype)
4.Terraform申请资源失败(DiskCategory)
一、实验
1.环境
(1)主机
表1-1 主机
主机 | 系统 | 软件 | 工具 | 备注 |
jia | Windows | Terraform 1.6.6 | VS Code、 PowerShell、 Chocolatey | |
pipepoint | Linux | Terraform 1.6.6 | SSH |
2.Windows创建Terraform项目进行模块封装
(1)创建项目
terraform-module-example
(2)创建目录modules存放多个模块
查看目录
(3)ecs模块及配置文件
①主配置文件 main.tf
locals {
ecs_name = "myecs"
}
//查询alicloud_images 镜像
data "alicloud_images" "images_ds" {
owners = "system"
name_regex = "^centos_7"
architecture = "x86_64"
status = "Available"
os_type = "linux"
output_file = "./outputs.json"
}
//alicloud_instance 实例
resource "alicloud_instance" "myecs" {
availability_zone = var.region
security_groups = [var.secgroup_id]
instance_type = "ecs.t6-c4m1.large"
system_disk_category = "cloud_essd"
system_disk_name = "tf_system_disk_name"
system_disk_description = "tf_system_disk_description"
image_id = data.alicloud_images.images_ds.images[0].id
//引用局部变量
instance_name = local.ecs_name
vswitch_id = var.vsw_id
internet_max_bandwidth_out = 1
internet_charge_type = "PayByTraffic"
password = "root@123"
}
②输出配置文件 outputs.tf
output "ecs_ip" {
value = alicloud_instance.myecs.public_ip
}
③ 变量配置文件variables.tf
//变量 地域
variable "region" {
description = "阿里云地域"
type = string
default = "cn-nanjing"
}
variable "vsw_id" {
type = string
}
variable "secgroup_id" {
}
(4)vpc模块及配置文件
①主配置文件main.tf
//VPC 专有网络
resource "alicloud_vpc" "vpc" {
vpc_name = var.vpc_name
cidr_block = var.vpc_cidr_block
}
//switch 交换机
resource "alicloud_vswitch" "vsw" {
vpc_id = alicloud_vpc.vpc.id
cidr_block = var.vsw_cidr_block
zone_id = "cn-nanjing-a"
}
②输出配置文件 outputs.tf
output "vsw_id" {
value = alicloud_vswitch.vsw.id
}
output "vpc_id" {
value = alicloud_vpc.vpc.id
}
③ 变量配置文件variables.tf
variable "vpc_cidr_block" {
default = "172.16.0.0/12"
}
variable "vpc_name" {
default = "tf_test"
}
variable "vsw_cidr_block" {
default = "172.16.0.0/21"
}
(5)secgroup模块及配置文件
①主配置文件main.tf
//security_group 安全组
resource "alicloud_security_group" "group" {
name = "demo-group"
vpc_id = var.vpc_id
security_group_type = "normal" //普通类型
}
//security_group_rule 规则(80端口)
resource "alicloud_security_group_rule" "allow_80_tcp" {
type = "ingress"
ip_protocol = "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 规则(22端口)
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"
}
②输出配置文件 outputs.tf
output "secgroup_id" {
value = alicloud_security_group.group.id
}
③ 变量配置文件variables.tf
variable "vpc_id" {
}
(6)dns模块及配置文件
①主配置文件main.tf
# mytest.maojing.site DNS ,A记录 主机IP, C记录 主机域名
resource "alicloud_dns_record" "record" {
name = "maojing.site"
host_record = var.dns_record
type = "A"
value = var.ecs_ip
}
② 变量配置文件variables.tf
variable "ecs_ip" {
}
variable "dns_record" {
}
3.Windows创建Terraform项目的生产环境实例配置文件
(1)创建目录env存放实例的配置文件
查看目录
(2)创建实例的主配置文件
main.tf
# Configure the Alicloud Provider 默认供应商
provider "alicloud" {
access_key = var.access_key
secret_key = var.secret_key
region = "cn-nanjing"
}
locals {
region = "cn-nanjing-a"
vpc_cidr_block = "172.16.0.0/12"
vsw_cidr_block = "172.16.0.0/21"
vpc_name = "myvpc"
}
module "myvpc" {
// 模块代码路径
source = "../../modules/vpc"
vpc_cidr_block = local.vpc_cidr_block
vsw_cidr_block = local.vsw_cidr_block
vpc_name = local.vpc_name
}
module "mysecgroup" {
source = "../../modules/secgroup"
//引用VPC模块的输出变量
vpc_id = module.myvpc.vpc_id
}
module "myecs" {
// 模块代码路径
source = "../../modules/ecs"
region = local.region
//引用VPC模块的输出变量
vsw_id = module.myvpc.vsw_id
secgroup_id = module.mysecgroup.secgroup_id
}
module "mydns" {
source = "../../modules/dns"
dns_record = "maojing"
ecs_ip = module.myecs.ecs_ip
}
(3)创建实例的变量配置文件
variables.tf
variable "access_key" {
description = "access_key"
}
variable "secret_key" {
description = "secret_key"
}
variable "region" {
type = string
description = "region name"
default = "cn-nanjing"
sensitive = true
}
(4)创建实例的版本配置文件
versions.tf
terraform {
required_version = "1.6.6"
required_providers {
alicloud = {
source = "hashicorp/alicloud"
version = "1.214.1"
}
}
}
(5)创建实例的密钥配置文件
terraform.tfvars
access_key = "XXXXX"
secret_key = "XXXXX"
4.申请域名
(1)搜索域名
阿里云进入域名控制台搜索
(2)创建信息模板并进行实名认证
(3)创建完成查看域名列表
5.Windows实例化Terraform项目调用封装模块实现 alicloud 资源管理
(1)初始化
terraform init
(2)格式化代码
terraform fmt
terraform fmt -recursive
(3)验证代码
terraform validate
terraform validate -json
(4)计划与预览
terraform plan
(8)申请资源
terraform apply
输入yes
(9)展示资源
terraform show
(10)登录阿里云系统查看
①查看实例
② 域名解析
③ 实例详情
④ 监控
⑤ 安全组
⑥云盘
⑦弹性网卡
(11)远程登录实例
① 查看公网IP
② 远程连接
③ 立即登录
④ 登录实例
⑤ 确定
⑥登录成功
⑦ 查看IP
(12)远程操作实例
① Linux主机远程连接实例
ssh root@47.122.5.35
② 给实例安装nginx
yum -y install nginx
③ 给实例启动服务并监听端口
systemctl start nginx
netstat -anlpt | grep 80
(13)浏览器访问
①公网地址访问
http://47.122.5.35/
② 查看解析设置
③ 域名访问
http://maojing.maojing.site/
(14)销毁资源
terraform destroy
输入yes
(15)查看项目完整目录
(16)登录阿里云系统查看
ECS实例已删除
二、问题
1.Terraform申请资源失败(DNS)
(1)报错
(2)原因分析
RAM无DNS权限
(3)解决方法
① RAM用户添加DNS权限。
搜索DNS
授权成功
2.Terraform申请资源失败(debt)
(1)报错
403 InvalidAccountStatus.NotEnoughBalance
(2)原因分析
https://api.aliyun.com/document/Ecs/2014-05-26/errorCode
(3)解决方法
① 通过计算最低成本补充余额
3.Terraform申请资源失败(instancetype)
(1)报错
The specified zone does not support this instancetype
(2)原因分析
选择的地域中,没有相应的ECS规格,即有可能这个地域中的ECS配置类型,没货或不存在。
(3)解决方法
①ECS 实例规格可购买地域总览- 华东 5(南京)
② 修改ECS规格。
修改后:
修改后:
4.Terraform申请资源失败(DiskCategory)
(1)报错
InvalidDataDiskCategory.ValueNotSupported
(2)原因分析
选择的地域中,没有相应的磁盘类型,即指定的磁盘类型错误。
(3)解决方法
https://help.aliyun.com/zh/ecs/developer-reference/api-modifydiskspec
https://help.aliyun.com/zh/ecs/developer-reference/api-resizedisk
① 修改磁盘类型。
修改前:
修改后: