云系列和Terraform(十二)
阿里云应用与实践云计算基础虚拟机种类系统级别虚拟机 - kvm - 大规模场景下openstack应用级别虚拟化 - docker - 大规模场景下kubernetes云计算分类IaaS/PaaS/SaaSIaaS基础设施即服务交付虚拟化计算、存储、网络等基础设施资源用户自主部署系统与应用。 PaaS平台即服务提供应用开发、部署、运行的整套平台环境屏蔽底层基础设施运维。 SaaS软件即服务云端部署完整应用软件通过网络按需订阅使用。阿里云产品云服务器 ECS云网络 VPC 【Vroute、Vswitch】弹性公网ip EIP网络防火墙 安全组云数据库 RDS DMS云存储 OSS、NAS、ESSD云编排服务 OOS其他产品SLB、云解析、CEN、NAT网关、安全产品云平台产品安全 -- 认证、权限、账号、费用、分析等一、计算类 ECSElastic Compute Service弹性计算服务云服务器 ESSDEnhanced Solid State Drive增强型 SSD 云盘高性能块存储常和 ECS 搭配 二、网络类 VPCVirtual Private Cloud专有网络云上私有网络环境 EIPElastic IP Address弹性公网 IP可独立绑定 / 解绑的公网 IP SLBServer Load Balancer负载均衡 CLBClassic Load Balancer传统型负载均衡四层 七层 ALBApplication Load Balancer应用型负载均衡七层侧重 HTTP/HTTPS NLBNetwork Load Balancer网络型负载均衡四层侧重高性能、低延迟 三、存储类 OSSObject Storage Service对象存储服务海量文件存储 NASNetwork Attached Storage文件存储服务共享文件存储 四、数据库类 RDSRelational Database Service关系型数据库服务云数据库 DMSData Management Service数据管理服务数据库全生命周期管理平台 五、运维管理类 OOSOperation Orchestration Service运维编排服务自动化运维vpc实践ECS切换vpc、切换交换机、增加辅助网卡、NAT网关、SLB服务、云解析、CEN安全体系网络安全、主机安全、业务安全、管理安全网络安全防护网络链路、边界与传输拦截网络攻击。 主机安全加固服务器 / 终端防范系统入侵、恶意程序。 业务安全保障应用流程与数据规避业务漏洞、违规操作。 管理安全规范权限、人员、流程与审计规避人为风险。IaC 基础设施即代码terraform组成CLI、provider、state、backendCLI命令行工具执行初始化、部署、销毁等操作 Provider云厂商 / 服务插件对接对应平台接口 State状态文件记录云端资源当前拓扑与属性 Backend状态存储后端存放、同步 state 数据命令init、plan、apply、destroyinit初始化环境、加载插件、配置后端 plan预览资源变更不实际执行 apply执行配置创建 / 更新云资源 destroy销毁所有托管资源元素资源、数据源、变量、输出资源定义要创建的云服务 / 实例 数据源读取已有云上资源信息 变量外部传入参数灵活配置 输出执行后返回结果信息ECS环境定制的时候如何定制自己的环境1 user_date 类似于 普通linux的 /etc/rc.local2 为ECS定制环境null_resource 【依赖于ECS绑定EIP】3 如何为ECS传递文件1 base64加密2 如果文件里面需要ECS里面的其他资源数据不推荐使用呢base64state最好单独报错不允许手工修改记录 Terraform 托管资源的实时状态、拓扑与关联关系。出现异常会单独告警提示该文件由工具自动维护禁止人工编辑修改手动改动易引发资源错乱、部署失效。Terraform 模块设计原则复用性封装资源一处编写、多处调用 标准化统一配置规范避免环境差异 可维护性模块化管理问题定位与修改更清晰 可组合性模块可嵌套、组合构建复杂架构 可测试性支持独立测试降低变更风险 版本化支持版本管理便于回滚与迭代Terraform 模块中最常用的核心属性变量定义 (variable)type变量类型如 string/number/list/map/bool/object description变量用途说明 default变量默认值 validation自定义校验规则如正则、取值范围 sensitive是否标记为敏感数据日志中隐藏输出定义 (output)value要输出的值可引用资源属性或变量 description输出说明 sensitive是否标记为敏感数据 depends_on显式指定依赖关系资源 / 数据源 (resource/data)resource_type资源类型如 alicloud_instance resource_name资源名称 provider指定使用的 provider多环境 / 多账号场景 count/for_each批量创建资源循环控制 lifecycle生命周期控制 create_before_destroy prevent_destroy ignore_changes模块调用 (module)source模块路径 / 地址本地或远程模块仓库 version模块版本远程模块必填 自定义变量向模块传递的变量参数 providers为模块指定 provider本地值 (locals)用于在模块内部定义可复用的常量或计算值减少重复表达式。元参数通用depends_on显式依赖 count/for_each批量创建 provider指定 provider lifecycle...实践1以ECS为对象编写覆盖实例操作流程terraform代码安装 TerraformUbuntu24安装apt update apt install wget unzip -y wget https://releases.hashicorp.com/terraform/1.9.0/terraform_1.9.0_linux_amd64.zip unzip terraform_1.9.0_linux_amd64.zip mv terraform /usr/local/bin/ terraform version阿里云账号准备登录阿里云控制台 → 右上角头像 → AccessKey 管理 创建 AccessKey ID、AccessKey Secret复制保存只显示一次 本地生成 SSH 密钥用来登录 ECSssh-keygen -t rsacat ~/.ssh/id_rsa.pub创建独立工作目录mkdir ~/terraform-ecs-demo cd ~/terraform-ecs-demomain.tf核心资源VPC / 交换机 / 安全组 / 密钥 / ECS# 指定Terraform版本与阿里云插件 terraform { required_providers { alicloud { source aliyun/alicloud version 1.200.0 } } } # 阿里云连接配置 provider alicloud { access_key var.ali_ak secret_key var.ali_sk region var.region } # 1. 创建独立VPC resource alicloud_vpc ecs_vpc { vpc_name ecs-demo-vpc cidr_block 10.0.50.0/16 } # 2. 创建子网交换机 resource alicloud_vswitch ecs_vsw { vpc_id alicloud_vpc.ecs_vpc.id zone_id var.zone_id cidr_block 10.0.50.0/24 vswitch_name ecs-demo-switch } # 3. 创建安全组 resource alicloud_security_group ecs_sg { name ecs-demo-sg vpc_id alicloud_vpc.ecs_vpc.id description ECS实例放行22/80/8080端口 } # 放行SSH 22端口 resource alicloud_security_group_rule ssh_rule { security_group_id alicloud_security_group.ecs_sg.id type ingress cidr_ip 0.0.0.0/0 port_range 22/22 ip_protocol tcp priority 1 } # 放行80网页端口 resource alicloud_security_group_rule http_rule { security_group_id alicloud_security_group.ecs_sg.id type ingress cidr_ip 0.0.0.0/0 port_range 80/80 ip_protocol tcp priority 2 } # 放行SpringBoot 8080端口 resource alicloud_security_group_rule spring_rule { security_group_id alicloud_security_group.ecs_sg.id type ingress cidr_ip 0.0.0.0/0 port_range 8080/8080 ip_protocol tcp priority 3 } # 4. SSH密钥对免密登录ECS resource alicloud_key_pair ecs_ssh_key { key_pair_name ecs-demo-key public_key var.ssh_public_key } # 5. 核心ECS实例资源 resource alicloud_instance spring_server { instance_name spring-boot-ecs image_id var.ubuntu_image_id instance_type var.ecs_spec vswitch_id alicloud_vswitch.ecs_vsw.id security_groups [alicloud_security_group.ecs_sg.id] key_name alicloud_key_pair.ecs_ssh_key.key_pair_name # 公网配置 internet_max_bandwidth_out 10 internet_charge_type PayByTraffic # 系统盘配置 system_disk_category cloud_efficiency system_disk_size 40 # 主机名 hostname ubuntu24-server # 开机自动执行脚本预装JDK17 user_data -EOF #!/bin/bash apt update -y apt install openjdk-17-jdk -y EOF }variables.tf统一变量# 阿里云密钥 variable ali_ak { type string description 阿里云AccessKey ID } variable ali_sk { type string description 阿里云AccessKey Secret } # 地域可用区 variable region { type string default cn-huhehaote } variable zone_id { type string default cn-huhehaote-a } # Ubuntu24镜像ID variable ubuntu_image_id { type string default ubuntu_24_04_x64_20G_alibase_20250901.vhd } # ECS实例规格 variable ecs_spec { type string default ecs.t6.large } # SSH公钥 variable ssh_public_key { type string description 本地~/.ssh/id_rsa.pub完整内容 }terraform.tfvars填自己的信息ali_ak 填入你的阿里云AccessKey ID ali_sk 填入你的阿里云AccessKey Secret ssh_public_key cat ~/.ssh/id_rsa.pub输出的全部内容outputs.tf创建完成自动输出 ECS 关键信息# ECS内网IP output ecs_private_ip { value alicloud_instance.spring_server.private_ip } # ECS公网IP用来ssh连接 output ecs_public_ip { value alicloud_instance.spring_server.public_ip } # ECS实例ID output ecs_instance_id { value alicloud_instance.spring_server.id } # VPC网段 output vpc_cidr { value alicloud_vpc.ecs_vpc.cidr_block } # 安全组ID output sg_id { value alicloud_security_group.ecs_sg.id }1.确认 4 个文件都在当前目录ls main.tf variables.tf terraform.tfvars outputs.tf2 初始化自动下载阿里云插件terraform init3 预览要创建的所有资源terraform plan4 生成 ECS开始计费terraform apply -auto-approve5查看 ECS 信息terraform output6 SSH 登录 ECS 测试ssh root公网IP java -version7 修改 ECS 配置把实例规格从t6.large改成t6.medium编辑 variables.tf修改ecs_spec值预览terraform plan8 销毁所有资源terraform destroy -auto-approve注创建init → plan → apply 查询terraform output /terraform show 更新修改 HCL → plan → apply 删除terraform destroy 全程自动处理资源依赖无需手动管控创建 / 销毁顺序。实践2以“web服务和数据库”为例构建完整的”VPCECSRDSSLB“完整web服务架构的terraform代码计划1 个 VPC、2 个业务子网、2 台 Web ECS、1 台公网 SLB、1 套 RDS MySQL、两套隔离安全组装好 terraform 阿里云 AK/SK、本地 ssh 公钥 新建文件夹放 4 个 tf 文件main.tf# Terraform版本与阿里云插件声明 terraform { required_providers { alicloud { source aliyun/alicloud version 1.200.0 } } } # 阿里云身份认证 provider alicloud { access_key var.ak # 阿里云AK secret_key var.sk # 阿里云SK region var.region # 部署地域 } # 1. 顶层VPC私有网络 resource alicloud_vpc web_vpc { vpc_name web-vpc cidr_block 10.0.90.0/16 # VPC整体网段 } # 2. 双可用区业务子网放ECS/SLB # A区子网 resource alicloud_vswitch sub_a { vpc_id alicloud_vpc.web_vpc.id zone_id var.zone_a cidr_block 10.0.90.1.0/24 vswitch_name sub-a } # B区子网 resource alicloud_vswitch sub_b { vpc_id alicloud_vpc.web_vpc.id zone_id var.zone_b cidr_block 10.0.90.2.0/24 vswitch_name sub-b } # 3. Web服务安全组放行SSH、SpringBoot端口 resource alicloud_security_group web_sg { name web-sg vpc_id alicloud_vpc.web_vpc.id } # 放行22远程登录 resource alicloud_security_group_rule ssh { security_group_id alicloud_security_group.web_sg.id type ingress # 入方向规则 cidr_ip 0.0.0.0/0 port_range 22/22 ip_protocol tcp } # 放行8080业务端口 resource alicloud_security_group_rule web { security_group_id alicloud_security_group.web_sg.id type ingress cidr_ip 0.0.0.0/0 port_range 8080/8080 ip_protocol tcp } # 4. RDS数据库安全组仅内网网段访问3306 resource alicloud_security_group db_sg { name db-sg vpc_id alicloud_vpc.web_vpc.id } resource alicloud_security_group_rule mysql { security_group_id alicloud_security_group.db_sg.id type ingress cidr_ip 10.0.90.0/16 # 仅本VPC内网可连数据库 port_range 3306/3306 ip_protocol tcp } # 5. SSH密钥对免密登录ECS resource alicloud_key_pair ssh_key { key_pair_name web-key public_key var.pub_key # 本地生成的公钥 } # 6. 两台跨可用区Web ECS节点 # Web节点1A区 resource alicloud_instance web1 { instance_name web-01 image_id var.ubuntu_img # Ubuntu系统镜像 instance_type var.ecs_spec # ECS实例规格 vswitch_id alicloud_vswitch.sub_a.id security_groups [alicloud_security_group.web_sg.id] key_name alicloud_key_pair.ssh_key.key_pair_name internet_max_bandwidth_out 5 # 公网带宽 # 开机自动脚本安装JDK17运行SpringBoot user_data #!/bin/bash\napt update -y\napt install openjdk-17-jdk -y } # Web节点2B区高可用冗余 resource alicloud_instance web2 { instance_name web-02 image_id var.ubuntu_img instance_type var.ecs_spec vswitch_id alicloud_vswitch.sub_b.id security_groups [alicloud_security_group.web_sg.id] key_name alicloud_key_pair.ssh_key.key_pair_name internet_max_bandwidth_out 5 user_data #!/bin/bash\napt update -y\napt install openjdk-17-jdk -y } # 7. 公网SLB负载均衡对外统一入口 resource alicloud_slb web_lb { name web-slb internet true # 开启公网 vswitch_id alicloud_vswitch.sub_a.id } # 8. SLB后端服务器组存放两台Web节点 resource alicloud_slb_server_group web_group { load_balancer_id alicloud_slb.web_lb.id name web-group } # 将web1加入后端组转发8080端口 resource alicloud_slb_server_group_server s1 { server_group_id alicloud_slb_server_group.web_group.id server_id alicloud_instance.web1.id port 8080 } # 将web2加入后端组 resource alicloud_slb_server_group_server s2 { server_group_id alicloud_slb_server_group.web_group.id server_id alicloud_instance.web2.id port 8080 } # 9. SLB监听前端80端口转发后端8080 resource alicloud_slb_listener http { load_balancer_id alicloud_slb.web_lb.id backend_server_group_id alicloud_slb_server_group.web_group.id frontend_port 80 # 用户访问端口 backend_port 8080 # Web服务端口 protocol http } # 10. RDS MySQL数据库实例 resource alicloud_db_instance mysql { instance_name web-mysql engine MySQL engine_version 8.0 instance_class mysql.n2.small.2c # 数据库规格 instance_storage 20 # 存储20G zone_id var.zone_a vswitch_id alicloud_vswitch.sub_a.id security_ips [10.0.90.0/16] # 内网白名单 } # 11. 数据库账号、业务库、权限 # 业务账号 resource alicloud_db_account user { db_instance_id alicloud_db_instance.mysql.id account_name webuser account_password Root123456 } # 创建业务数据库webdb resource alicloud_db_database webdb { db_instance_id alicloud_db_instance.mysql.id db_name webdb } # 账号授予数据库全部权限 resource alicloud_db_account_privilege priv { db_instance_id alicloud_db_instance.mysql.id account_name alicloud_db_account.user.account_name db_names [alicloud_db_database.webdb.db_name] privilege All }variables.tf# 阿里云密钥ID variable ak {} # 阿里云密钥Secret variable sk {} # 地域 variable region { default cn-huhehaote } # 可用区A variable zone_a { default cn-huhehaote-a } # 可用区B variable zone_b { default cn-huhehaote-b } # Ubuntu24镜像ID variable ubuntu_img { default ubuntu_24_04_x64_20G_alibase_20250901.vhd } # ECS实例规格 variable ecs_spec { default ecs.t6.small } # SSH公钥文本 variable pub_key {}terraform.tfvars自己信息ak 你的阿里云AccessKey ID sk 你的阿里云AccessKey Secret pub_key ssh-rsa 你的公钥完整内容outputs.tf 输出资源访问信息# SLB公网访问IP浏览器直接访问 output slb公网ip { value alicloud_slb.web_lb.public_ip } # Web1内网IP output web1内网ip { value alicloud_instance.web1.private_ip } # Web2内网IP output web2内网ip { value alicloud_instance.web2.private_ip } # RDS内网连接地址SpringBoot配置数据库用 output rds内网地址 { value alicloud_db_instance.mysql.connection_string } # 数据库账号 output 数据库账号 { value webuser } # 数据库密码 output 数据库密码 { value Root123456 }初始化下载阿里云插件terraform init预览资源terraform plan创建整套 VPCECSSLBRDSterraform apply -auto-approve查看 SLB、数据库连接信息terraform output修改配置后更新资源terraform plan terraform apply -auto-approve销毁全部资源terraform destroy -auto-approve

相关新闻

LangChain 模型 I/O 深度解构:提示词、结构化输出与 LCEL 链式调用全解析

LangChain 模型 I/O 深度解构:提示词、结构化输出与 LCEL 链式调用全解析

目录 一、 提示词模板(Prompts):告别手动拼装的“填空题” 1. 为什么不用 Python 的 f-string? 2. 四大核心模板类型,分别用在哪? A. PromptTemplate(基础字符串模板) B. ChatP…

2026/7/4 3:13:08阅读更多 →
基于vue多维数据融合与混合推荐算法的智能旅行规划系统设计与实现

基于vue多维数据融合与混合推荐算法的智能旅行规划系统设计与实现

摘要 随着国内旅游市场的持续增长,用户面临信息过载、行程规划耗时、个性化推荐缺失等问题。本文设计并实现了 TripMaster Pro 智能旅行规划系统,以 Python Flask 为后端框架,Vue.js 3 Element Plus 为前端技术栈,整合全国景点数…

2026/7/4 3:13:08阅读更多 →
【干货】基础知识-图像处理

【干货】基础知识-图像处理

图像1、模拟图像模拟图像,又称连续图像,是指在二维坐标系中连续变化的图像,即图像的像点是无限稠密的,同时具有灰度值(即图像从暗到亮的变化值)。2、数字图像数字图像,又称数码图像或数位图像&a…

2026/7/4 3:08:08阅读更多 →
中央循环管式蒸发器结构与工作原理详解

中央循环管式蒸发器结构与工作原理详解

1. 中央循环管式蒸发器总图解析作为一名在化工设备领域工作多年的工程师,我经常需要处理各类蒸发器的设计与优化问题。中央循环管式蒸发器作为一种经典的高效蒸发设备,在化工、食品、制药等行业有着广泛应用。今天我想通过总图解析的方式,带大…

2026/7/4 5:03:23阅读更多 →
DeepChem分子指纹终极指南:ECFP与FCFP的快速实战对比

DeepChem分子指纹终极指南:ECFP与FCFP的快速实战对比

DeepChem分子指纹终极指南:ECFP与FCFP的快速实战对比 【免费下载链接】deepchem Democratizing Deep-Learning for Drug Discovery, Quantum Chemistry, Materials Science and Biology 项目地址: https://gitcode.com/GitHub_Trending/de/deepchem DeepChem…

2026/7/4 5:03:23阅读更多 →
Vibe Coding从零到上线:7天掌握情绪驱动开发核心方法论(含GitHub可运行模板库)

Vibe Coding从零到上线:7天掌握情绪驱动开发核心方法论(含GitHub可运行模板库)

更多请点击: https://intelliparadigm.com 第一章:Vibe Coding从零认知:什么是情绪驱动开发 Vibe Coding(情绪驱动开发)是一种新兴的编程范式,强调开发者在编码过程中对自身情绪状态的觉察、接纳与主动调用…

2026/7/4 5:03:23阅读更多 →
OSX-KVM音频延迟问题深度解析:三种高效解决方案对比

OSX-KVM音频延迟问题深度解析:三种高效解决方案对比

OSX-KVM音频延迟问题深度解析:三种高效解决方案对比 【免费下载链接】OSX-KVM Run macOS on QEMU/KVM. With OpenCore Monterey Ventura Sonoma support now! Only commercial (paid) support is available now to avoid spammy issues. No Mac system is requir…

2026/7/4 5:03:23阅读更多 →
Kali Linux 2023部署Fluxion:解决依赖冲突与无线网卡配置全攻略

Kali Linux 2023部署Fluxion:解决依赖冲突与无线网卡配置全攻略

1. 项目概述:当经典渗透工具遇上新系统环境最近在折腾Kali Linux 2023版本,想重温一下经典的无线钓鱼工具Fluxion,结果一上来就给我来了个下马威。相信不少朋友,尤其是刚接触渗透测试或者从老版本Kali迁移过来的同学,都…

2026/7/4 5:03:23阅读更多 →
U-Net 图像分割算法:从零开始的完全指南

U-Net 图像分割算法:从零开始的完全指南

1. 引言1.1 什么是图像分割?图像分割是计算机视觉的核心任务之一,目标是将图像划分为若干具有语义含义的区域。与图像分类(给整张图打标签)和目标检测(用边界框框出物体)不同,分割需要在像素级别…

2026/7/4 4:58:22阅读更多 →
AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

AI Coding 六个月真实ROI账本:产品经理的血泪教训,研发的冷静忠告

6个月前的2025年12月,Boris Cherny 公开宣布自己卸载了 IDE。一时间,Vibe Coding 成了全行业最热的话题。6个月后,当我们回过头来拉一份真实账本,发现事情远没有"一句话生成一个App"那么浪漫。本文从产品经理和研发两个…

2026/7/3 14:18:39阅读更多 →
审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

审计来了,数据权限全开——审计走了,怎么确保权限全部关掉?

引言:审计结束三个月了,审计员的权限还没关某城商行每年按照监管要求开展至少一次数据安全审计。审计期间,内审部门需要抽样检查各类业务数据——交易流水、客户信息、员工操作日志、权限配置记录。这些数据分布在不同系统中,审计…

2026/7/3 14:38:35阅读更多 →
端到端自动驾驶:从GTC‘26看工程可信落地的核心逻辑

端到端自动驾驶:从GTC‘26看工程可信落地的核心逻辑

1. 项目概述:当算法工程师走进GTC26展厅,看到的不是芯片,而是“端到端”的呼吸节奏“端到端”这三个字,在GTC’26现场出现的频率,高得像NVLink带宽测试时的峰值曲线——它不再是一个论文里的技术路径选项,而…

2026/7/4 0:02:48阅读更多 →
缺牙修复科普:常见义齿类型与选择参考

缺牙修复科普:常见义齿类型与选择参考

缺牙修复科普:常见义齿类型与选择参考牙齿缺失是中老年人群中较为常见的口腔问题,不仅会造成咀嚼不便、进食受影响,长期还可能对营养摄入与日常社交带来困扰。义齿是改善缺牙问题的常用方式,目前市面上的义齿种类较多,…

2026/7/4 0:02:48阅读更多 →
STM32F091RC与LTC6904实现高精度方波信号生成

STM32F091RC与LTC6904实现高精度方波信号生成

1. 项目概述:LTC6904与STM32F091RC的精准方波生成方案在嵌入式系统开发中,精确的时钟信号和定时控制往往是项目成败的关键。LTC6904作为一款低功耗、高精度的可编程振荡器芯片,与STM32F091RC这款ARM Cortex-M0内核微控制器的组合,…

2026/7/4 0:02:48阅读更多 →
YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

YOLOv8推理性能优化:从1.2FPS到35FPS的全链路加速实践

如果你在部署 YOLOv8 时,发现推理速度只有可怜的 1-2 FPS,而别人的演示视频却能跑到 30 FPS 以上,那么问题很可能不在模型本身,而在于你的整个处理链路。很多开发者拿到一个训练好的 YOLOv8 模型后,会直接使用官方示例…

2026/7/4 1:16:56阅读更多 →
Coze与Dify对比指南:低代码AI应用开发从入门到实战

Coze与Dify对比指南:低代码AI应用开发从入门到实战

1. 从零到一:为什么你需要了解 Coze 和 Dify?如果你对 AI 应用开发感兴趣,但一看到“大模型”、“智能体”、“工作流”这些词就头疼,觉得门槛太高,那这篇文章就是为你准备的。很多开发者,包括我自己&#…

2026/7/4 2:33:55阅读更多 →
AI生图工具怎么选?2026年6月版实测对比

AI生图工具怎么选?2026年6月版实测对比

做自媒体的朋友应该都有体会:配图一直是个让人头疼的问题。2026年,AI生图工具已经非常成熟了,但工具太多反而不知道怎么选。以下是截至2026年6月我对主流AI生图工具的实测对比。Midjourney V8.1:速度之王2026年6月11日&#xff0c…

2026/7/4 2:33:55阅读更多 →