From b80888cbd92b35732fae834b84d11b16881ec60f Mon Sep 17 00:00:00 2001 From: shenlan Date: Fri, 21 Nov 2025 07:38:13 +0800 Subject: [PATCH] Add Alibaba Cloud Terraform template and modules --- .../ali-cloud/README.md | 31 ++++++ .../ali-cloud/bootstrap-oss/main.tf | 29 +++++ .../ali-cloud/bootstrap-oss/variables.tf | 16 +++ .../ali-cloud/bootstrap-ots/main.tf | 35 ++++++ .../ali-cloud/bootstrap-ots/variables.tf | 17 +++ .../ali-cloud/bootstrap-ram/main.tf | 104 ++++++++++++++++++ .../ali-cloud/bootstrap-ram/variables.tf | 28 +++++ .../ali-cloud/config/backend.tf | 10 ++ .../ali-cloud/config/provider.tf | 23 ++++ .../ali-cloud/config/variables.tf | 54 +++++++++ .../ali-cloud/envs/dev/main.tf | 99 +++++++++++++++++ .../ali-cloud/envs/dev/variables.tf | 71 ++++++++++++ .../ali-cloud/modules/alb/main.tf | 49 +++++++++ .../ali-cloud/modules/alb/variables.tf | 41 +++++++ .../ali-cloud/modules/ecs/main.tf | 37 +++++++ .../ali-cloud/modules/ecs/variables.tf | 62 +++++++++++ .../ali-cloud/modules/nlb/main.tf | 34 ++++++ .../ali-cloud/modules/nlb/variables.tf | 39 +++++++ .../ali-cloud/modules/oss/main.tf | 16 +++ .../ali-cloud/modules/oss/variables.tf | 22 ++++ .../ali-cloud/modules/ram/main.tf | 45 ++++++++ .../ali-cloud/modules/ram/variables.tf | 31 ++++++ .../ali-cloud/modules/rds/main.tf | 33 ++++++ .../ali-cloud/modules/rds/variables.tf | 69 ++++++++++++ .../ali-cloud/modules/redis/main.tf | 17 +++ .../ali-cloud/modules/redis/variables.tf | 32 ++++++ .../ali-cloud/modules/vpc/main.tf | 20 ++++ .../ali-cloud/modules/vpc/variables.tf | 18 +++ 28 files changed, 1082 insertions(+) create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/README.md create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/bootstrap-oss/main.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/bootstrap-oss/variables.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/bootstrap-ots/main.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/bootstrap-ots/variables.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/bootstrap-ram/main.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/bootstrap-ram/variables.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/config/backend.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/config/provider.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/config/variables.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/envs/dev/main.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/envs/dev/variables.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/modules/alb/main.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/modules/alb/variables.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/modules/ecs/main.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/modules/ecs/variables.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/modules/nlb/main.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/modules/nlb/variables.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/modules/oss/main.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/modules/oss/variables.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/modules/ram/main.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/modules/ram/variables.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/modules/rds/main.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/modules/rds/variables.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/modules/redis/main.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/modules/redis/variables.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/modules/vpc/main.tf create mode 100644 iac-template/terraform-hcl-standard/ali-cloud/modules/vpc/variables.tf diff --git a/iac-template/terraform-hcl-standard/ali-cloud/README.md b/iac-template/terraform-hcl-standard/ali-cloud/README.md new file mode 100644 index 0000000..3dea3f3 --- /dev/null +++ b/iac-template/terraform-hcl-standard/ali-cloud/README.md @@ -0,0 +1,31 @@ +# Alibaba Cloud Terraform Standard + +该目录提供与 AWS 目录对应的阿里云版本,用于在阿里云上快速引导基础设施。结构与 AWS 模板保持一致,包含引导阶段 (bootstrap)、环境示例 (envs) 与模块库 (modules)。 + +## AWS → Alibaba Cloud 映射 +- **S3 → OSS**:`bootstrap-oss` 创建远端状态桶,开启版本化与服务器端加密。 +- **DynamoDB → TableStore (OTS)**:`bootstrap-ots` 创建状态锁表,用于 Terraform 后端锁定。 +- **IAM → RAM**:`bootstrap-ram` 建立基础访问控制(RAM 角色、策略与用户)。 +- **VPC**:`modules/vpc` 使用专有网络与交换机,替代 AWS VPC/Subnet。 +- **ALB / NLB**:`modules/alb` 和 `modules/nlb` 分别映射到应用型负载均衡 (ALB) 与传统负载均衡 (SLB/NLB)。 +- **EC2 → ECS**:`modules/ecs` 提供计算实例与安全组。 +- **S3 → OSS**:`modules/oss` 作为通用对象存储模块。 +- **IAM → RAM**:`modules/ram` 封装 RAM 角色与策略创建。 +- **RDS / Redis / MSK**:`modules/rds`、`modules/redis` 提供 ApsaraDB 数据库与缓存,Kafka 类似需求可通过云消息队列/中间件扩展。 + +## 使用方式 +1. 在 `config/backend.tf` 中配置远端状态(OSS 桶与可选 OTS 锁表)。 +2. 在 `config/provider.tf` 中设置 `region`、`access_key`、`secret_key` 或 RAM 角色扮演信息,可通过环境变量传入。 +3. 运行引导阶段: + ```bash + terraform -chdir=bootstrap-oss init && terraform -chdir=bootstrap-oss apply + terraform -chdir=bootstrap-ots init && terraform -chdir=bootstrap-ots apply + terraform -chdir=bootstrap-ram init && terraform -chdir=bootstrap-ram apply + ``` +4. 按需修改 `envs/dev` 下的示例,执行: + ```bash + terraform -chdir=envs/dev init + terraform -chdir=envs/dev apply + ``` + +本目录仅新增阿里云模板,不改动现有 AWS/GCP 代码。 diff --git a/iac-template/terraform-hcl-standard/ali-cloud/bootstrap-oss/main.tf b/iac-template/terraform-hcl-standard/ali-cloud/bootstrap-oss/main.tf new file mode 100644 index 0000000..f7b4371 --- /dev/null +++ b/iac-template/terraform-hcl-standard/ali-cloud/bootstrap-oss/main.tf @@ -0,0 +1,29 @@ +terraform { + required_providers { + alicloud = { + source = "aliyun/alicloud" + version = ">= 1.210.0" + } + } +} + +provider "alicloud" { + region = var.region +} + +resource "alicloud_oss_bucket" "state" { + bucket = var.state_bucket + acl = var.acl + + versioning { + status = "Enabled" + } + + server_side_encryption_rule { + sse_algorithm = "AES256" + } +} + +output "bucket" { + value = alicloud_oss_bucket.state.bucket +} diff --git a/iac-template/terraform-hcl-standard/ali-cloud/bootstrap-oss/variables.tf b/iac-template/terraform-hcl-standard/ali-cloud/bootstrap-oss/variables.tf new file mode 100644 index 0000000..4fe7ace --- /dev/null +++ b/iac-template/terraform-hcl-standard/ali-cloud/bootstrap-oss/variables.tf @@ -0,0 +1,16 @@ +variable "region" { + description = "Alibaba Cloud region for OSS" + type = string + default = "cn-hangzhou" +} + +variable "state_bucket" { + description = "Name of the OSS bucket used for remote state" + type = string +} + +variable "acl" { + description = "ACL for the OSS bucket" + type = string + default = "private" +} diff --git a/iac-template/terraform-hcl-standard/ali-cloud/bootstrap-ots/main.tf b/iac-template/terraform-hcl-standard/ali-cloud/bootstrap-ots/main.tf new file mode 100644 index 0000000..2146acd --- /dev/null +++ b/iac-template/terraform-hcl-standard/ali-cloud/bootstrap-ots/main.tf @@ -0,0 +1,35 @@ +terraform { + required_providers { + alicloud = { + source = "aliyun/alicloud" + version = ">= 1.210.0" + } + } +} + +provider "alicloud" { + region = var.region +} + +resource "alicloud_ots_instance" "this" { + instance_name = var.instance_name + description = "Terraform state locking" + accessed_by = "Any" +} + +resource "alicloud_ots_table" "lock" { + instance_name = alicloud_ots_instance.this.name + table_name = var.table_name + + time_to_live = -1 + max_version = 1 + + primary_key { + name = "LockID" + type = "STRING" + } +} + +output "lock_table" { + value = alicloud_ots_table.lock.table_name +} diff --git a/iac-template/terraform-hcl-standard/ali-cloud/bootstrap-ots/variables.tf b/iac-template/terraform-hcl-standard/ali-cloud/bootstrap-ots/variables.tf new file mode 100644 index 0000000..883f405 --- /dev/null +++ b/iac-template/terraform-hcl-standard/ali-cloud/bootstrap-ots/variables.tf @@ -0,0 +1,17 @@ +variable "region" { + description = "Alibaba Cloud region for OTS" + type = string + default = "cn-hangzhou" +} + +variable "instance_name" { + description = "Name of the OTS instance" + type = string + default = "terraform-locks" +} + +variable "table_name" { + description = "Name of the lock table" + type = string + default = "terraform-locks" +} diff --git a/iac-template/terraform-hcl-standard/ali-cloud/bootstrap-ram/main.tf b/iac-template/terraform-hcl-standard/ali-cloud/bootstrap-ram/main.tf new file mode 100644 index 0000000..2cc785f --- /dev/null +++ b/iac-template/terraform-hcl-standard/ali-cloud/bootstrap-ram/main.tf @@ -0,0 +1,104 @@ +terraform { + required_providers { + alicloud = { + source = "aliyun/alicloud" + version = ">= 1.210.0" + } + } +} + +provider "alicloud" { + region = var.region +} + +locals { + assume_principal = "acs:ram::${var.account_id}:root" +} + +resource "alicloud_ram_role" "terraform" { + name = var.role_name + document = < v.id } +} diff --git a/iac-template/terraform-hcl-standard/ali-cloud/modules/vpc/variables.tf b/iac-template/terraform-hcl-standard/ali-cloud/modules/vpc/variables.tf new file mode 100644 index 0000000..0ca7ac0 --- /dev/null +++ b/iac-template/terraform-hcl-standard/ali-cloud/modules/vpc/variables.tf @@ -0,0 +1,18 @@ +variable "name" { + description = "Name of the VPC" + type = string +} + +variable "cidr_block" { + description = "CIDR block for the VPC" + type = string + default = "10.0.0.0/16" +} + +variable "vswitches" { + description = "Map of vswitches with cidr and az, e.g. { a = { cidr = \"10.0.1.0/24\", az = \"cn-hangzhou-b\" } }" + type = map(object({ + cidr = string + az = string + })) +}