1+ # ------------------------------------------------------------------------------
2+ # 核心资源定义
3+ #
4+ # 本文件包含了模块的核心基础设施资源
5+ # 这里的代码负责根据输入变量来创建和配置所有云资源
6+ # ------------------------------------------------------------------------------
7+
8+ # 配置阿里云提供商
9+ provider "alicloud" {
10+ region = " cn-hangzhou"
11+ }
12+
13+ # 创建一个随机ID
14+ resource "random_id" "suffix" {
15+ byte_length = 8
16+ }
17+
18+ # 定义本地变量
19+ locals {
20+ common_name = " rdsmysql2ck-${ random_id . suffix . id } "
21+ # 选择第一个共同可用区(或根据逻辑选择)
22+ database_class = {
23+ RDS = {
24+ " 8C32G" = " mysql.x4.xlarge.2c"
25+ " 16C64G" = " mysql.x4.2xlarge.2c"
26+ " 32C128G" = " mysql.x4.4xlarge.2c"
27+ " 64C256G" = " mysql.x4.8xlarge.2c"
28+ }
29+ ClickHouse = {
30+ " 8C32G" = " S8"
31+ " 16C64G" = " S16"
32+ " 32C128G" = " S32"
33+ " 64C256G" = " S64"
34+ }
35+ }
36+ ecs_command = << SHELL
37+ #!/bin/bash
38+ echo "export RDS_URL=${ alicloud_db_instance . rds_instance . connection_string } " >> ~/.bash_profile
39+ echo "export RDS_USERNAME=${ var . rds_db_user } " >> ~/.bash_profile
40+ echo "export RDS_PASSWORD=${ var . db_password } " >> ~/.bash_profile
41+ echo "export ROS_DEPLOY=true" >> ~/.bash_profile
42+ source ~/.bash_profile
43+ curl -fsSL https://help-static-aliyun-doc.aliyuncs.com/install-script/rdsclickhouse-htap/install_htap.sh|sh
44+ SHELL
45+ }
46+
47+ # 查询满足条件的可用区
48+ data "alicloud_db_zones" "zones_ids" {
49+ engine = " MySQL"
50+ engine_version = " 8.0"
51+ instance_charge_type = " PostPaid"
52+ category = " Basic"
53+ db_instance_storage_type = " cloud_essd"
54+ }
55+
56+ # 创建专有网络VPC
57+ resource "alicloud_vpc" "vpc" {
58+ vpc_name = " vpc_${ local . common_name } "
59+ cidr_block = " 192.168.0.0/16"
60+ }
61+
62+ # 创建交换机VSwitch
63+ resource "alicloud_vswitch" "vswitch" {
64+ vpc_id = alicloud_vpc. vpc . id
65+ zone_id = data. alicloud_db_zones . zones_ids . ids . 1
66+ cidr_block = " 192.168.0.0/24"
67+ vswitch_name = " vswitch_${ local . common_name } "
68+ }
69+
70+ # 创建安全组
71+ resource "alicloud_security_group" "security_group" {
72+ vpc_id = alicloud_vpc. vpc . id
73+ }
74+
75+ # 创建RDS数据库实例
76+ resource "alicloud_db_instance" "rds_instance" {
77+ instance_name = " rdsmysql_${ local . common_name } "
78+ engine = " MySQL"
79+ instance_storage = 100
80+ engine_version = " 8.0"
81+ category = " HighAvailability"
82+ db_instance_storage_type = " cloud_essd"
83+ security_ips = [" 0.0.0.0/0" ]
84+ vpc_id = alicloud_vpc. vpc . id
85+ zone_id = data. alicloud_db_zones . zones_ids . ids . 1
86+ vswitch_id = alicloud_vswitch. vswitch . id
87+ instance_charge_type = " Postpaid"
88+ instance_type = lookup (local. database_class [" RDS" ], var. db_instance_class , " rds.mysql.s1.small" )
89+ }
90+
91+ # 创建数据库
92+ resource "alicloud_db_database" "database" {
93+ character_set = " utf8mb4"
94+ instance_id = alicloud_db_instance. rds_instance . id
95+ name = " tpcc"
96+ description = " tpcc_${ local . common_name } "
97+ }
98+
99+ # 创建数据库账号
100+ resource "alicloud_db_account" "default" {
101+ db_instance_id = alicloud_db_instance. rds_instance . id
102+ account_name = var. rds_db_user
103+ account_password = var. db_password
104+ account_type = " Super"
105+ }
106+
107+ # 创建ClickHouse数据库集群
108+ resource "alicloud_click_house_db_cluster" "click_house" {
109+ db_cluster_version = " 23.8"
110+ category = " Basic"
111+ db_cluster_class = lookup (local. database_class [" ClickHouse" ], var. db_instance_class , " rds.mysql.s1.small" )
112+ db_cluster_network_type = " vpc"
113+ db_node_group_count = " 1"
114+ payment_type = " PayAsYouGo"
115+ db_node_storage = " 100"
116+ storage_type = " cloud_essd"
117+ vswitch_id = alicloud_vswitch. vswitch . id
118+ vpc_id = alicloud_vpc. vpc . id
119+ zone_id = data. alicloud_db_zones . zones_ids . ids . 1
120+ db_cluster_description = " ck_${ local . common_name } "
121+ }
122+
123+ # 创建ClickHouse数据库账号
124+ resource "alicloud_click_house_account" "default" {
125+ db_cluster_id = alicloud_click_house_db_cluster. click_house . id
126+ account_name = var. click_house_user
127+ account_password = var. db_password
128+ type = " Super"
129+ }
130+
131+ # 获取最新的CentOS 7.9系统镜像
132+ data "alicloud_images" "centos_7_9" {
133+ name_regex = " ^centos_7_9_x64_*"
134+ owners = " system" # 官方镜像
135+ most_recent = true # 获取最新版本
136+ }
137+
138+ # 创建ECS实例
139+ resource "alicloud_instance" "ecs_instance" {
140+ availability_zone = data. alicloud_db_zones . zones_ids . ids . 1
141+ vpc_id = alicloud_vpc. vpc . id
142+ vswitch_id = alicloud_vswitch. vswitch . id
143+ internet_max_bandwidth_out = 5
144+ security_groups = [alicloud_security_group . security_group . id ]
145+ password = var. ecs_instance_password
146+ instance_type = var. ecs_instance_type
147+ system_disk_category = " cloud_essd"
148+ image_id = data. alicloud_images . centos_7_9 . images [0 ]. id
149+ }
150+
151+ # 创建ECS命令资源
152+ resource "alicloud_ecs_command" "run_tpcc_alicloud_ecs_command" {
153+ name = " commond_install"
154+ description = " commond_install_description"
155+ type = " RunShellScript"
156+ command_content = base64encode (local. ecs_command )
157+ timeout = 3600
158+ working_dir = " /root"
159+ }
160+
161+ # 创建ECS命令调用资源
162+ resource "alicloud_ecs_invocation" "run_tpcc_alicloud_ecs_invocation" {
163+ instance_id = [alicloud_instance . ecs_instance . id ]
164+ command_id = alicloud_ecs_command. run_tpcc_alicloud_ecs_command . id
165+ depends_on = [alicloud_db_instance . rds_instance ]
166+ timeouts {
167+ create = " 60m"
168+ }
169+ }
0 commit comments