From b0282caa62e25644586b83d43239d7285f41f6cc Mon Sep 17 00:00:00 2001 From: CodeArtisanX Date: Mon, 1 Dec 2025 14:45:07 +0800 Subject: [PATCH] add tech-solution elasticsearch-ai-assistant --- .../elasticsearch-ai-assistant/README.md | 39 ++++++++++++ .../elasticsearch-ai-assistant/main.tf | 61 +++++++++++++++++++ .../elasticsearch-ai-assistant/output.tf | 31 ++++++++++ .../elasticsearch-ai-assistant/variable.tf | 25 ++++++++ 4 files changed, 156 insertions(+) create mode 100644 solution/tech-solution/elasticsearch-ai-assistant/README.md create mode 100644 solution/tech-solution/elasticsearch-ai-assistant/main.tf create mode 100644 solution/tech-solution/elasticsearch-ai-assistant/output.tf create mode 100644 solution/tech-solution/elasticsearch-ai-assistant/variable.tf diff --git a/solution/tech-solution/elasticsearch-ai-assistant/README.md b/solution/tech-solution/elasticsearch-ai-assistant/README.md new file mode 100644 index 000000000..2ec61dbd0 --- /dev/null +++ b/solution/tech-solution/elasticsearch-ai-assistant/README.md @@ -0,0 +1,39 @@ +## Introduction + +本示例用于实现解决方案[Elasticsearch 智能运维 AI 助手](https://www.aliyun.com/solution/tech-solution/elasticsearch-ai-assistant),涉及专有网络(VPC)、交换机(VSwitch)、检索分析服务 Elasticsearch(Elasticsearch)等资源的部署。 + + + +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). + + + +## Providers + +| Name | Version | +|------|---------| +| [alicloud](#provider\_alicloud) | n/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 | +|------|-------------|------|---------|:--------:| +| [elasticsearch\_password](#input\_elasticsearch\_password) | elasticsearch\_password | `string` | n/a | yes | +| [public\_ip](#input\_public\_ip) | Kibana 公网访问白名单 IP,访问 https://ipinfo.io/ip 查看当前公网 IP,或者设置成0.0.0.0/0 | `string` | `"0.0.0.0/0"` | no | + \ No newline at end of file diff --git a/solution/tech-solution/elasticsearch-ai-assistant/main.tf b/solution/tech-solution/elasticsearch-ai-assistant/main.tf new file mode 100644 index 000000000..9c037e491 --- /dev/null +++ b/solution/tech-solution/elasticsearch-ai-assistant/main.tf @@ -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" +} \ No newline at end of file diff --git a/solution/tech-solution/elasticsearch-ai-assistant/output.tf b/solution/tech-solution/elasticsearch-ai-assistant/output.tf new file mode 100644 index 000000000..ec3e26a36 --- /dev/null +++ b/solution/tech-solution/elasticsearch-ai-assistant/output.tf @@ -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" +} \ No newline at end of file diff --git a/solution/tech-solution/elasticsearch-ai-assistant/variable.tf b/solution/tech-solution/elasticsearch-ai-assistant/variable.tf new file mode 100644 index 000000000..762f24198 --- /dev/null +++ b/solution/tech-solution/elasticsearch-ai-assistant/variable.tf @@ -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" +} \ No newline at end of file