Skip to content

Commit 42b256d

Browse files
committed
add tech-solution lindorm-data-process
1 parent 0a94252 commit 42b256d

File tree

4 files changed

+241
-0
lines changed

4 files changed

+241
-0
lines changed
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
## Introduction
2+
<!-- DOCS_DESCRIPTION_CN -->
3+
本示例用于实现解决方案[泛时序数据一站式分析与洞察](https://www.aliyun.com/solution/tech-solution/lindorm-data-process),涉及专有网络(VPC)、交换机(VSwitch)、云服务器(ECS)、云原生多模数据库 Lindorm(Lindorm)等资源的部署。
4+
<!-- DOCS_DESCRIPTION_CN -->
5+
6+
<!-- DOCS_DESCRIPTION_EN -->
7+
This example is used to implement solution [Unified Time-Series Data Analysis and Insights
8+
](https://www.aliyun.com/solution/tech-solution/lindorm-data-process), which involves the creation and deployment of resources such as Virtual Private Cloud (VPC), Virtual Switch (VSwitch), Elastic Compute Service (ECS), Lindorm Database(Lindorm).
9+
<!-- DOCS_DESCRIPTION_EN -->
10+
11+
<!-- BEGIN_TF_DOCS -->
12+
## Providers
13+
14+
| Name | Version |
15+
|------|---------|
16+
| <a name="provider_alicloud"></a> [alicloud](#provider\_alicloud) | n/a |
17+
| <a name="provider_random"></a> [random](#provider\_random) | n/a |
18+
19+
## Modules
20+
21+
No modules.
22+
23+
## Resources
24+
25+
| Name | Type |
26+
|------|------|
27+
| [alicloud_ecs_command.deploy_application_on_ecs_alicloud_ecs_command](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ecs_command) | resource |
28+
| [alicloud_ecs_invocation.deploy_application_on_ecs_alicloud_ecs_invocation](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ecs_invocation) | resource |
29+
| [alicloud_instance.ecs_instance](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/instance) | resource |
30+
| [alicloud_lindorm_instance.lindorm_instance](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/lindorm_instance) | resource |
31+
| [alicloud_security_group.security_group](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group) | resource |
32+
| [alicloud_vpc.vpc](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vpc) | resource |
33+
| [alicloud_vswitch.vswitch](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource |
34+
| [random_string.lowercase](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/string) | resource |
35+
| [alicloud_images.alinux3](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/images) | data source |
36+
| [alicloud_zones.default](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/zones) | data source |
37+
38+
## Inputs
39+
40+
| Name | Description | Type | Default | Required |
41+
|------|-------------|------|---------|:--------:|
42+
| <a name="input_instance_password"></a> [instance\_password](#input\_instance\_password) | ECS实例密码 | `string` | n/a | yes |
43+
| <a name="input_instance_type"></a> [instance\_type](#input\_instance\_type) | ECS实例类型 | `string` | `"ecs.e-c1m4.2xlarge"` | no |
44+
<!-- END_TF_DOCS -->
Lines changed: 134 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,134 @@
1+
# ------------------------------------------------------------------------------
2+
# 核心资源定义
3+
#
4+
# 本文件包含了模块的核心基础设施资源
5+
# 这里的代码负责根据输入变量来创建和配置所有云资源
6+
# ------------------------------------------------------------------------------
7+
8+
# 配置阿里云提供商
9+
provider "alicloud" {
10+
region = "cn-hangzhou"
11+
}
12+
13+
# 生成一个随机字符串
14+
# Generate a random string.
15+
resource "random_string" "lowercase" {
16+
length = 8
17+
special = false
18+
upper = false
19+
numeric = false
20+
}
21+
22+
# 定义本地变量
23+
locals {
24+
common_name = "lindorm-demo-${random_string.lowercase.result}"
25+
sorted_zone_ids = sort(data.alicloud_zones.default.ids)
26+
max_zone_id = local.sorted_zone_ids[length(local.sorted_zone_ids) - 1]
27+
28+
# 定义 ECS 启动命令
29+
ecs_command = <<-SHELL
30+
#!/bin/bash
31+
function log_info() {
32+
printf "%s [INFO] %s\n" "$(date '+%Y-%m-%d %H:%M:%S')" "$1"
33+
}
34+
function log_error() {
35+
printf "%s [ERROR] %s\n" "$(date '+%Y-%m-%d %H:%M:%S')" "$1"
36+
}
37+
function debug_exec(){
38+
local cmd="$@"
39+
log_info "$cmd"
40+
eval "$cmd"
41+
ret=$?
42+
echo ""
43+
log_info "$cmd, exit code: $ret"
44+
return $ret
45+
}
46+
function init_work(){
47+
yum upgrade & yum install -y python3 cryptography==3.4.8
48+
wget -O lindorm-cli-linux-latest.tar.gz https://tsdbtools.oss-cn-hangzhou.aliyuncs.com/lindorm-cli-linux-latest.tar.gz
49+
tar zxvf lindorm-cli-linux-latest.tar.gz
50+
}
51+
debug_exec init_work
52+
SHELL
53+
}
54+
55+
# 查询可用区
56+
data "alicloud_zones" "default" {
57+
available_disk_category = "cloud_essd"
58+
available_instance_type = var.instance_type
59+
}
60+
61+
# 创建专有网络VPC
62+
resource "alicloud_vpc" "vpc" {
63+
cidr_block = "192.168.0.0/16"
64+
vpc_name = "vpc-${local.common_name}"
65+
}
66+
67+
# 创建交换机VSwitch
68+
resource "alicloud_vswitch" "vswitch" {
69+
vpc_id = alicloud_vpc.vpc.id
70+
cidr_block = "192.168.0.0/24"
71+
zone_id = local.max_zone_id
72+
vswitch_name = "vsw-${local.common_name}"
73+
}
74+
75+
# 创建安全组
76+
resource "alicloud_security_group" "security_group" {
77+
vpc_id = alicloud_vpc.vpc.id
78+
security_group_name = "sg-${local.common_name}"
79+
}
80+
81+
# 查询最新的镜像
82+
data "alicloud_images" "alinux3" {
83+
name_regex = "^aliyun_3_x64_*"
84+
owners = "system"
85+
most_recent = true
86+
status = "Available"
87+
}
88+
89+
# 创建ECS实例
90+
resource "alicloud_instance" "ecs_instance" {
91+
availability_zone = local.max_zone_id
92+
vpc_id = alicloud_vpc.vpc.id
93+
vswitch_id = alicloud_vswitch.vswitch.id
94+
security_groups = [alicloud_security_group.security_group.id]
95+
password = var.instance_password
96+
instance_type = var.instance_type
97+
instance_name = "ecs-${local.common_name}"
98+
system_disk_category = "cloud_essd"
99+
image_id = data.alicloud_images.alinux3.images[0].id
100+
internet_max_bandwidth_out = 5
101+
}
102+
103+
# 创建Lindorm实例
104+
resource "alicloud_lindorm_instance" "lindorm_instance" {
105+
instance_storage = 160
106+
zone_id = local.max_zone_id
107+
payment_type = "PayAsYouGo"
108+
vswitch_id = alicloud_vswitch.vswitch.id
109+
vpc_id = alicloud_vpc.vpc.id
110+
search_engine_specification = "lindorm.g.xlarge"
111+
search_engine_node_count = 2
112+
table_engine_specification = "lindorm.g.xlarge"
113+
table_engine_node_count = 2
114+
disk_category = "cloud_efficiency"
115+
instance_name = "lindorm-${local.common_name}"
116+
}
117+
118+
# 定义ECS命令资源
119+
resource "alicloud_ecs_command" "deploy_application_on_ecs_alicloud_ecs_command" {
120+
type = "RunShellScript"
121+
timeout = 300
122+
command_content = base64encode(local.ecs_command)
123+
name = "auto-75ca2a13"
124+
working_dir = "/root"
125+
}
126+
127+
# 创建ECS命令调用
128+
resource "alicloud_ecs_invocation" "deploy_application_on_ecs_alicloud_ecs_invocation" {
129+
instance_id = [alicloud_instance.ecs_instance.id]
130+
command_id = alicloud_ecs_command.deploy_application_on_ecs_alicloud_ecs_command.id
131+
timeouts {
132+
create = "60m"
133+
}
134+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
# ------------------------------------------------------------------------------
2+
# 模块输出值
3+
#
4+
# 本文件定义了模块执行成功后返回给调用方的值
5+
# 这些输出可以被其他 Terraform 配置引用,或在 apply 命令结束后显示给用户
6+
# ------------------------------------------------------------------------------
7+
8+
# 输出 Lindorm 实例 ID
9+
output "lindorm_instance_id" {
10+
value = alicloud_lindorm_instance.lindorm_instance.id
11+
description = "Lindorm 实例 ID"
12+
}
13+
14+
# 输出 ECS 实例 ID
15+
output "ecs_instance_id" {
16+
value = alicloud_instance.ecs_instance.id
17+
description = "ECS 实例 ID"
18+
}
19+
20+
21+
# 输出 ECS 登录地址
22+
output "ecs_login_address" {
23+
description = "ECS登录地址"
24+
value = format("https://ecs-workbench.aliyun.com/?from=EcsConsole&instanceType=ecs&regionId=%s&instanceId=%s", "cn-hangzhou", alicloud_instance.ecs_instance.id)
25+
}
26+
27+
# 输出 ECS 实例用户名
28+
output "ecs_instance_username" {
29+
value = "root"
30+
description = "ECS 实例用户名"
31+
}
32+
33+
# 输出 ECS 实例密码
34+
output "ecs_instance_password" {
35+
value = var.instance_password
36+
sensitive = true
37+
description = "ECS 实例密码"
38+
}
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# ------------------------------------------------------------------------------
2+
# 模块输入变量
3+
#
4+
# 本文件定义了该 Terraform 模块所有可配置的输入变量
5+
# 每个变量都包含了详细的说明,以帮助用户正确配置模块
6+
# ------------------------------------------------------------------------------
7+
8+
# 指定ECS实例的规格型号
9+
variable "instance_type" {
10+
type = string
11+
description = "ECS实例类型"
12+
default = "ecs.e-c1m4.2xlarge"
13+
}
14+
15+
# ECS实例密码
16+
variable "instance_password" {
17+
type = string
18+
sensitive = true
19+
validation {
20+
condition = can(regex("^[0-9A-Za-z_!@#$%^&*()_+\\-=\\+]+$", var.instance_password)) && length(var.instance_password) >= 8 && length(var.instance_password) <= 30
21+
error_message = "长度8-30,必须包含三项(大写字母、小写字母、数字、 !@#$%^&*()_+-=中的特殊符号)"
22+
}
23+
description = "ECS实例密码"
24+
#default = ""
25+
}

0 commit comments

Comments
 (0)