1+ provider "alicloud" {
2+ region = var. region_id
3+ }
4+
5+ resource "random_id" "suffix" {
6+ byte_length = 8
7+ }
8+ data "alicloud_mongodb_zones" "default" {
9+ }
10+
11+ data "alicloud_instance_types" "default" {
12+ system_disk_category = " cloud_essd"
13+ image_id = data. alicloud_images . default . images [0 ]. id
14+ instance_type_family = " ecs.c6"
15+ availability_zone = data. alicloud_mongodb_zones . default . zones [length (data. alicloud_mongodb_zones . default . zones ) - 1 ]. id
16+ }
17+
18+ data "alicloud_images" "default" {
19+ name_regex = " ^aliyun_3_x64_20G_alibase_*"
20+ most_recent = true
21+ owners = " system"
22+ }
23+
24+ locals {
25+ common_name = random_id. suffix . id
26+ ecs_command = << SHELL
27+ #!/bin/bash
28+ cat << INNER_EOF >> ~/.bash_profile
29+ export DB_NAME=${ var . db_name }
30+ export DB_USERNAME=${ var . db_user_name }
31+ export DB_PASSWORD=${ var . db_password }
32+ export ROS_DEPLOY=true
33+ INNER_EOF
34+
35+ source ~/.bash_profile
36+
37+ curl -fsSL https://help-static-aliyun-doc.aliyuncs.com/install-script/ecs-mongo-to-cloud/install_init.sh|bash
38+ SHELL
39+ }
40+
41+ # VPC Resources
42+ resource "alicloud_vpc" "vpc" {
43+ vpc_name = " VPC_HZ"
44+ cidr_block = " 192.168.0.0/16"
45+ }
46+
47+ resource "alicloud_vswitch" "vswitch" {
48+ vpc_id = alicloud_vpc. vpc . id
49+ cidr_block = " 192.168.1.0/24"
50+ zone_id = data. alicloud_mongodb_zones . default . zones [length (data. alicloud_mongodb_zones . default . zones ) - 1 ]. id
51+ vswitch_name = " vsw_001"
52+ }
53+
54+ # Security Group
55+ resource "alicloud_security_group" "security_group" {
56+ vpc_id = alicloud_vpc. vpc . id
57+ security_group_name = " sg-mongodb-${ local . common_name } "
58+ security_group_type = " normal"
59+ }
60+
61+ # Security Group Rules
62+ resource "alicloud_security_group_rule" "http" {
63+ type = " ingress"
64+ ip_protocol = " tcp"
65+ port_range = " 80/80"
66+ cidr_ip = " 0.0.0.0/0"
67+ security_group_id = alicloud_security_group. security_group . id
68+ }
69+
70+ resource "alicloud_security_group_rule" "rdp" {
71+ type = " ingress"
72+ ip_protocol = " tcp"
73+ port_range = " 3389/3389"
74+ cidr_ip = " 0.0.0.0/0"
75+ security_group_id = alicloud_security_group. security_group . id
76+ }
77+
78+ resource "alicloud_security_group_rule" "mongodb_ingress" {
79+ type = " ingress"
80+ ip_protocol = " tcp"
81+ port_range = " 27017/27017"
82+ cidr_ip = " 0.0.0.0/0"
83+ security_group_id = alicloud_security_group. security_group . id
84+ }
85+
86+ resource "alicloud_security_group_rule" "mongodb_egress" {
87+ type = " egress"
88+ ip_protocol = " tcp"
89+ port_range = " 27017/27017"
90+ cidr_ip = " 0.0.0.0/0"
91+ security_group_id = alicloud_security_group. security_group . id
92+ }
93+
94+ # MongoDB Resources
95+ resource "alicloud_mongodb_instance" "mongodb" {
96+ engine_version = " 8.0"
97+ db_instance_class = var. mongodb_instance_class
98+ db_instance_storage = 20
99+ name = " mongodb_test"
100+ account_password = var. mongodb_password
101+ security_ip_list = [" 192.168.1.0/24" ]
102+ vpc_id = alicloud_vpc. vpc . id
103+ vswitch_id = alicloud_vswitch. vswitch . id
104+ storage_engine = " WiredTiger"
105+ storage_type = " cloud_essd1"
106+ }
107+
108+ # ECS Resources
109+ resource "alicloud_instance" "mongodb_server" {
110+ instance_name = " mongodb-server-${ local . common_name } "
111+ system_disk_category = data. alicloud_instance_types . default . system_disk_category
112+ image_id = data. alicloud_images . default . images [0 ]. id
113+ vswitch_id = alicloud_vswitch. vswitch . id
114+ password = var. ecs_instance_password
115+ instance_type = data. alicloud_instance_types . default . instance_types [0 ]. id
116+ internet_max_bandwidth_out = 5
117+ security_groups = [alicloud_security_group . security_group . id ]
118+ }
119+
120+ resource "alicloud_ecs_command" "run_command" {
121+ name = " install-mongodb-${ local . common_name } "
122+ description = " install_mongodb_${ local . common_name } _description"
123+ enable_parameter = false
124+ type = " RunShellScript"
125+ command_content = base64encode (local. ecs_command )
126+ timeout = 3600
127+ working_dir = " /root"
128+ }
129+
130+ resource "alicloud_ecs_invocation" "install_mongodb" {
131+ instance_id = [alicloud_instance . mongodb_server . id ]
132+ command_id = alicloud_ecs_command. run_command . id
133+ depends_on = [alicloud_mongodb_instance . mongodb , alicloud_instance . mongodb_server ]
134+ timeouts {
135+ create = " 10m"
136+ }
137+ }
0 commit comments