Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions solution/tech-solution/lindorm-data-process/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
## Introduction
<!-- DOCS_DESCRIPTION_CN -->
本示例用于实现解决方案[泛时序数据一站式分析与洞察](https://www.aliyun.com/solution/tech-solution/lindorm-data-process),涉及专有网络(VPC)、交换机(VSwitch)、云服务器(ECS)、云原生多模数据库 Lindorm(Lindorm)等资源的部署。
<!-- DOCS_DESCRIPTION_CN -->

<!-- DOCS_DESCRIPTION_EN -->
This example is used to implement solution [Unified Time-Series Data Analysis and Insights
](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).
<!-- DOCS_DESCRIPTION_EN -->

<!-- BEGIN_TF_DOCS -->
## Providers

| Name | Version |
|------|---------|
| <a name="provider_alicloud"></a> [alicloud](#provider\_alicloud) | n/a |
| <a name="provider_random"></a> [random](#provider\_random) | n/a |

## Modules

No modules.

## Resources

| Name | Type |
|------|------|
| [alicloud_ecs_command.deploy_application_on_ecs_alicloud_ecs_command](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ecs_command) | resource |
| [alicloud_ecs_invocation.deploy_application_on_ecs_alicloud_ecs_invocation](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/ecs_invocation) | resource |
| [alicloud_instance.ecs_instance](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/instance) | resource |
| [alicloud_lindorm_instance.lindorm_instance](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/lindorm_instance) | resource |
| [alicloud_security_group.security_group](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/security_group) | resource |
| [alicloud_vpc.vpc](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vpc) | resource |
| [alicloud_vswitch.vswitch](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource |
| [random_string.lowercase](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/string) | resource |
| [alicloud_images.alinux3](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/images) | data source |
| [alicloud_zones.default](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/zones) | data source |

## Inputs

| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| <a name="input_instance_password"></a> [instance\_password](#input\_instance\_password) | ECS实例密码 | `string` | n/a | yes |
| <a name="input_instance_type"></a> [instance\_type](#input\_instance\_type) | ECS实例类型 | `string` | `"ecs.e-c1m4.2xlarge"` | no |
<!-- END_TF_DOCS -->
134 changes: 134 additions & 0 deletions solution/tech-solution/lindorm-data-process/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
# ------------------------------------------------------------------------------
# 核心资源定义
#
# 本文件包含了模块的核心基础设施资源
# 这里的代码负责根据输入变量来创建和配置所有云资源
# ------------------------------------------------------------------------------

# 配置阿里云提供商
provider "alicloud" {
region = "cn-hangzhou"
}

# 生成一个随机字符串
# Generate a random string.
resource "random_string" "lowercase" {
length = 8
special = false
upper = false
numeric = false
}

# 定义本地变量
locals {
common_name = "lindorm-demo-${random_string.lowercase.result}"
sorted_zone_ids = sort(data.alicloud_zones.default.ids)
max_zone_id = local.sorted_zone_ids[length(local.sorted_zone_ids) - 1]

# 定义 ECS 启动命令
ecs_command = <<-SHELL
#!/bin/bash
function log_info() {
printf "%s [INFO] %s\n" "$(date '+%Y-%m-%d %H:%M:%S')" "$1"
}
function log_error() {
printf "%s [ERROR] %s\n" "$(date '+%Y-%m-%d %H:%M:%S')" "$1"
}
function debug_exec(){
local cmd="$@"
log_info "$cmd"
eval "$cmd"
ret=$?
echo ""
log_info "$cmd, exit code: $ret"
return $ret
}
function init_work(){
yum upgrade & yum install -y python3 cryptography==3.4.8
wget -O lindorm-cli-linux-latest.tar.gz https://tsdbtools.oss-cn-hangzhou.aliyuncs.com/lindorm-cli-linux-latest.tar.gz
tar zxvf lindorm-cli-linux-latest.tar.gz
}
debug_exec init_work
SHELL
}

# 查询可用区
data "alicloud_zones" "default" {
available_disk_category = "cloud_essd"
available_instance_type = var.instance_type
}

# 创建专有网络VPC
resource "alicloud_vpc" "vpc" {
cidr_block = "192.168.0.0/16"
vpc_name = "vpc-${local.common_name}"
}

# 创建交换机VSwitch
resource "alicloud_vswitch" "vswitch" {
vpc_id = alicloud_vpc.vpc.id
cidr_block = "192.168.0.0/24"
zone_id = local.max_zone_id
vswitch_name = "vsw-${local.common_name}"
}

# 创建安全组
resource "alicloud_security_group" "security_group" {
vpc_id = alicloud_vpc.vpc.id
security_group_name = "sg-${local.common_name}"
}

# 查询最新的镜像
data "alicloud_images" "alinux3" {
name_regex = "^aliyun_3_x64_*"
owners = "system"
most_recent = true
status = "Available"
}

# 创建ECS实例
resource "alicloud_instance" "ecs_instance" {
availability_zone = local.max_zone_id
vpc_id = alicloud_vpc.vpc.id
vswitch_id = alicloud_vswitch.vswitch.id
security_groups = [alicloud_security_group.security_group.id]
password = var.ecs_instance_password
instance_type = var.instance_type
instance_name = "ecs-${local.common_name}"
system_disk_category = "cloud_essd"
image_id = data.alicloud_images.alinux3.images[0].id
internet_max_bandwidth_out = 5
}

# 创建Lindorm实例
resource "alicloud_lindorm_instance" "lindorm_instance" {
instance_storage = 160
zone_id = local.max_zone_id
payment_type = "PayAsYouGo"
vswitch_id = alicloud_vswitch.vswitch.id
vpc_id = alicloud_vpc.vpc.id
search_engine_specification = "lindorm.g.xlarge"
search_engine_node_count = 2
table_engine_specification = "lindorm.g.xlarge"
table_engine_node_count = 2
disk_category = "cloud_efficiency"
instance_name = "lindorm-${local.common_name}"
}

# 定义ECS命令资源
resource "alicloud_ecs_command" "deploy_application_on_ecs_alicloud_ecs_command" {
type = "RunShellScript"
timeout = 300
command_content = base64encode(local.ecs_command)
name = "auto-75ca2a13"
working_dir = "/root"
}

# 创建ECS命令调用
resource "alicloud_ecs_invocation" "deploy_application_on_ecs_alicloud_ecs_invocation" {
instance_id = [alicloud_instance.ecs_instance.id]
command_id = alicloud_ecs_command.deploy_application_on_ecs_alicloud_ecs_command.id
timeouts {
create = "60m"
}
}
38 changes: 38 additions & 0 deletions solution/tech-solution/lindorm-data-process/output.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# ------------------------------------------------------------------------------
# 模块输出值
#
# 本文件定义了模块执行成功后返回给调用方的值
# 这些输出可以被其他 Terraform 配置引用,或在 apply 命令结束后显示给用户
# ------------------------------------------------------------------------------

# 输出 Lindorm 实例 ID
output "lindorm_instance_id" {
value = alicloud_lindorm_instance.lindorm_instance.id
description = "Lindorm 实例 ID"
}

# 输出 ECS 实例 ID
output "ecs_instance_id" {
value = alicloud_instance.ecs_instance.id
description = "ECS 实例 ID"
}


# 输出 ECS 登录地址
output "ecs_login_address" {
description = "ECS登录地址"
value = format("https://ecs-workbench.aliyun.com/?from=EcsConsole&instanceType=ecs&regionId=%s&instanceId=%s", "cn-hangzhou", alicloud_instance.ecs_instance.id)
}

# 输出 ECS 实例用户名
output "ecs_instance_username" {
value = "root"
description = "ECS 实例用户名"
}

# 输出 ECS 实例密码
output "ecs_instance_password" {
value = var.ecs_instance_password
sensitive = true
description = "ECS 实例密码"
}
25 changes: 25 additions & 0 deletions solution/tech-solution/lindorm-data-process/variable.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# ------------------------------------------------------------------------------
# 模块输入变量
#
# 本文件定义了该 Terraform 模块所有可配置的输入变量
# 每个变量都包含了详细的说明,以帮助用户正确配置模块
# ------------------------------------------------------------------------------

# 指定ECS实例的规格型号
variable "instance_type" {
type = string
description = "ECS实例类型"
default = "ecs.e-c1m4.2xlarge"
}

# ECS实例密码
variable "ecs_instance_password" {
type = string
sensitive = true
validation {
condition = can(regex("^[0-9A-Za-z_!@#$%^&*()_+\\-=\\+]+$", var.ecs_instance_password)) && length(var.ecs_instance_password) >= 8 && length(var.ecs_instance_password) <= 30
error_message = "长度8-30,必须包含三项(大写字母、小写字母、数字、 !@#$%^&*()_+-=中的特殊符号)"
}
description = "ECS实例密码"
#default = ""
}
Loading