IaC基础设施即代码:Terraform 通过模块封装实现 alicloud 资源管理

目录

一、实验

1.环境

2.Windows创建Terraform项目进行模块封装

3.Windows创建Terraform项目的生产环境实例配置文件

4.申请域名

5.Windows实例化Terraform项目调用封装模块实现 alicloud 资源管理

二、问题

1.Terraform申请资源失败(DNS)

2.Terraform申请资源失败(debt)

3.Terraform申请资源失败(instancetype)

4.Terraform申请资源失败(DiskCategory)


一、实验

1.环境

(1)主机

表1-1 主机

主机系统软件工具备注
jia

Windows 

Terraform 1.6.6VS Code、 PowerShell、 Chocolatey
pipepointLinuxTerraform 1.6.6SSH

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

① 修改磁盘类型。

修改前:

修改后:

  • 24
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值