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
39 changes: 39 additions & 0 deletions solution/tech-solution/elasticsearch-ai-assistant/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
## Introduction
<!-- DOCS_DESCRIPTION_CN -->
本示例用于实现解决方案[Elasticsearch 智能运维 AI 助手](https://www.aliyun.com/solution/tech-solution/elasticsearch-ai-assistant),涉及专有网络(VPC)、交换机(VSwitch)、检索分析服务 Elasticsearch(Elasticsearch)等资源的部署。
<!-- DOCS_DESCRIPTION_CN -->

<!-- DOCS_DESCRIPTION_EN -->
This example is used to implement solution [Elasticsearch AI Assistant for intelligent O&M](https://www.aliyun.com/solution/tech-solution/elasticsearch-ai-assistant), which involves the creation and deployment of resources such as Virtual Private Cloud (VPC), Virtual Switch (VSwitch), Alibaba Cloud Elasticsearch(Elasticsearch).
<!-- 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_elasticsearch_instance.elasticsearch](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/elasticsearch_instance) | resource |
| [alicloud_vpc.ecs_vpc](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vpc) | resource |
| [alicloud_vswitch.ecsvswitch](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/vswitch) | resource |
| [random_id.suffix](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/id) | resource |
| [alicloud_elasticsearch_zones.zones_ids](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/elasticsearch_zones) | data source |
| [alicloud_regions.current_region_ds](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/regions) | data source |

## Inputs

| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| <a name="input_elasticsearch_password"></a> [elasticsearch\_password](#input\_elasticsearch\_password) | elasticsearch\_password | `string` | n/a | yes |
| <a name="input_public_ip"></a> [public\_ip](#input\_public\_ip) | Kibana 公网访问白名单 IP,访问 https://ipinfo.io/ip 查看当前公网 IP,或者设置成0.0.0.0/0 | `string` | `"0.0.0.0/0"` | no |
<!-- END_TF_DOCS -->
61 changes: 61 additions & 0 deletions solution/tech-solution/elasticsearch-ai-assistant/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# ------------------------------------------------------------------------------
# 核心资源定义
#
# 本文件包含了模块的核心基础设施资源。
# 这里的代码负责根据输入变量来创建和配置所有云资源。
# ------------------------------------------------------------------------------

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

# 创建随机ID
resource "random_id" "suffix" {
byte_length = 8
}

# 定义本地变量
locals {
common_name = "es-${random_id.suffix.id}"
}

# 获取当前区域的信息
data "alicloud_regions" "current_region_ds" {
current = true
}

# 声明Elasticsearch可用区数据源
data "alicloud_elasticsearch_zones" "zones_ids" {
}

# 创建VPC
resource "alicloud_vpc" "ecs_vpc" {
cidr_block = "192.168.0.0/16"
vpc_name = "VPC_${local.common_name}"
}

# 创建交换机
resource "alicloud_vswitch" "ecsvswitch" {
vpc_id = alicloud_vpc.ecs_vpc.id
cidr_block = "192.168.1.0/24"
zone_id = data.alicloud_elasticsearch_zones.zones_ids.zones.0.id
vswitch_name = "vsw_001_${local.common_name}"
}

# 创建Elasticsearch实例
resource "alicloud_elasticsearch_instance" "elasticsearch" {
instance_charge_type = "PostPaid"
vswitch_id = alicloud_vswitch.ecsvswitch.id
version = "8.17.0_with_X-Pack"
zone_count = 1
data_node_disk_type = "cloud_essd"
data_node_disk_size = "20"
data_node_amount = "2"
data_node_spec = "elasticsearch.sn1ne.large.new"
kibana_whitelist = [var.public_ip]
kibana_node_spec = "elasticsearch.n4.small"
password = var.elasticsearch_password
description = "elasticsearch-test_${local.common_name}"
data_node_disk_performance_level = "PL1"
}
31 changes: 31 additions & 0 deletions solution/tech-solution/elasticsearch-ai-assistant/output.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# ------------------------------------------------------------------------------
# 模块输出值
#
# 本文件定义了模块执行成功后返回给调用方的值。
# 这些输出可以被其他 Terraform 配置引用,或在 apply 命令结束后显示给用户。
# ------------------------------------------------------------------------------

# 输出Elasticsearch实例的详情地址
output "elasticsearch_address" {
description = "Elasticsearch 实例详情地址"
value = format("https://elasticsearch.console.aliyun.com/%s/instances/%s/base", data.alicloud_regions.current_region_ds.regions.0.id, alicloud_elasticsearch_instance.elasticsearch.id)
}

# 输出Elasticsearch实例的访问密码
output "elasticsearch_password" {
sensitive = true
value = var.elasticsearch_password
description = "Elasticsearch 实例密码"
}

# 输出Elasticsearch实例的Kibana地址
output "kibana_domain" {
value = alicloud_elasticsearch_instance.elasticsearch.kibana_domain
description = "Elasticsearch 实例的 Kibana 地址"
}

# 输出Elasticsearch实例的ID
output "instance_id" {
value = alicloud_elasticsearch_instance.elasticsearch.id
description = "Elasticsearch 实例的ID"
}
25 changes: 25 additions & 0 deletions solution/tech-solution/elasticsearch-ai-assistant/variable.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# ------------------------------------------------------------------------------
# 模块输入变量
#
# 本文件定义了该 Terraform 模块所有可配置的输入变量。
# 每个变量都包含了详细的说明,以帮助用户正确配置模块。
# ------------------------------------------------------------------------------

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

# Elasticsearch实例的公共IP地址
variable "public_ip" {
type = string
description = "Kibana 公网访问白名单 IP,访问 https://ipinfo.io/ip 查看当前公网 IP,或者设置成0.0.0.0/0"
default = "0.0.0.0/0"
}
Loading