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
47 changes: 47 additions & 0 deletions solution/tech-solution/polardb-ai-search/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
## Introduction
<!-- DOCS_DESCRIPTION_CN -->
本示例用于实现解决方案[原生 SQL 轻松实现多模态智能检索](https://www.aliyun.com/solution/tech-solution/polardb-ai-search),涉及专有网络(VPC)、交换机(VSwitch)、PolarDB数据库(PolarDB)、对象存储服务(OSS)等资源的部署。
<!-- DOCS_DESCRIPTION_CN -->

<!-- DOCS_DESCRIPTION_EN -->
This example is used to implement solution [Native SQL enables effortless multimodal intelligent search](https://www.aliyun.com/solution/tech-solution/polardb-ai-search), which involves the creation and deployment of resources such as Virtual Private Cloud (VPC), Virtual Switch (VSwitch), PolarDB Database (PolarDB), Object Storage Service (OSS).
<!-- 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_oss_bucket.ossbucket](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/oss_bucket) | resource |
| [alicloud_polardb_account.account](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/polardb_account) | resource |
| [alicloud_polardb_cluster.polardb_cluster](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/polardb_cluster) | resource |
| [alicloud_polardb_database.polardb_database](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/polardb_database) | resource |
| [alicloud_polardb_endpoint_address.dbcluster_endpoint_address](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/polardb_endpoint_address) | 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_id.suffix](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/id) | resource |
| [random_string.lowercase](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/string) | resource |
| [alicloud_oss_service.open_oss](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/oss_service) | data source |
| [alicloud_polardb_endpoints.polardb_endpoints](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/polardb_endpoints) | data source |
| [alicloud_polardb_node_classes.default](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/polardb_node_classes) | data source |

## Inputs

| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| <a name="input_account_name"></a> [account\_name](#input\_account\_name) | account\_name | `string` | `"polar_ai"` | no |
| <a name="input_bucket_name"></a> [bucket\_name](#input\_bucket\_name) | bucket\_name,在同一可用区下请保持唯一 | `string` | `"test-bucket-polar"` | no |
| <a name="input_db_password"></a> [db\_password](#input\_db\_password) | account\_password | `string` | n/a | yes |
| <a name="input_dbname"></a> [dbname](#input\_dbname) | dbname | `string` | `"db-test"` | no |
<!-- END_TF_DOCS -->
110 changes: 110 additions & 0 deletions solution/tech-solution/polardb-ai-search/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,110 @@
# ------------------------------------------------------------------------------
# 核心资源定义
#
# 本文件包含了模块的核心基础设施资源
# 这里的代码负责根据输入变量来创建和配置所有云资源
# ------------------------------------------------------------------------------

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

# 创建随机字符串用于命名
resource "random_string" "lowercase" {
length = 8
special = false
upper = false
numeric = false
}

# 创建随机ID用于命名
resource "random_id" "suffix" {
byte_length = 8
}

# 定义本地变量用于统一命名
locals {
common_name = "SmartSearch-${random_id.suffix.id}"
}

# 查询可用区
data "alicloud_polardb_node_classes" "default" {
db_type = "PostgreSQL"
pay_type = "PostPaid"
category = "SENormal"
}

# 创建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.1.0/24"
zone_id = data.alicloud_polardb_node_classes.default.classes[0].zone_id
vswitch_name = "vsw_001_${local.common_name}"
}

# 创建PolarDB集群
resource "alicloud_polardb_cluster" "polardb_cluster" {
vpc_id = alicloud_vpc.vpc.id
db_type = "PostgreSQL"
vswitch_id = alicloud_vswitch.vswitch.id
db_version = "14"
creation_category = "SENormal"
storage_space = 20
hot_standby_cluster = "OFF"
db_node_class = "polar.pg.g2.2xlarge.c"
pay_type = "PostPaid"
storage_type = "ESSDPL1"
security_ips = ["0.0.0.0/0"]
db_node_num = 2
}

# 创建PolarDB账户
resource "alicloud_polardb_account" "account" {
db_cluster_id = alicloud_polardb_cluster.polardb_cluster.id
account_name = var.account_name
account_password = var.db_password
account_type = "Super"
}

# 查询PolarDB端点信息
data "alicloud_polardb_endpoints" "polardb_endpoints" {
db_cluster_id = alicloud_polardb_cluster.polardb_cluster.id
}

# 创建PolarDB端点地址
# Create PolarDB endpoint address
resource "alicloud_polardb_endpoint_address" "dbcluster_endpoint_address" {
db_endpoint_id = data.alicloud_polardb_endpoints.polardb_endpoints.endpoints[0].db_endpoint_id
db_cluster_id = alicloud_polardb_cluster.polardb_cluster.id
net_type = "Public"
depends_on = [
alicloud_polardb_account.account
]
}

# 创建PolarDB数据库
resource "alicloud_polardb_database" "polardb_database" {
db_cluster_id = alicloud_polardb_cluster.polardb_cluster.id
db_name = var.dbname
character_set_name = "utf8"
account_name = var.account_name
}

# 启用OSS服务
data "alicloud_oss_service" "open_oss" {
enable = "On"
}

# 创建OSS存储桶
resource "alicloud_oss_bucket" "ossbucket" {
bucket = "${var.bucket_name}-${random_string.lowercase.result}"
force_destroy = true
redundancy_type = "ZRS"
}
37 changes: 37 additions & 0 deletions solution/tech-solution/polardb-ai-search/output.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# ------------------------------------------------------------------------------
# 模块输出值
#
# 本文件定义了模块执行成功后返回给调用方的值
# 这些输出可以被其他 Terraform 配置引用,或在 apply 命令结束后显示给用户
# ------------------------------------------------------------------------------

# 输出OSS存储桶名
output "bucket_name" {
value = alicloud_oss_bucket.ossbucket.bucket
description = "对象存储存储桶名"
}

# 输出PolarDB数据库用户名
output "account_name" {
value = var.account_name
description = "PolarDB 数据库用户名"
}

# 输出PolarDB数据库密码
output "account_password" {
value = var.db_password
sensitive = true
description = "PolarDB 数据库密码"
}

# 输出PolarDB数据库名称
output "dbname" {
value = var.dbname
description = "PolarDB 数据库名称"
}

# 输出PolarDB数据库公网地址
output "connection_string" {
value = format("%s:5432", alicloud_polardb_endpoint_address.dbcluster_endpoint_address.connection_string)
description = "PolarDB 数据库的公网地址"
}
47 changes: 47 additions & 0 deletions solution/tech-solution/polardb-ai-search/variable.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# ------------------------------------------------------------------------------
# 模块输入变量
#
# 本文件定义了该 Terraform 模块所有可配置的输入变量
# 每个变量都包含了详细的说明,以帮助用户正确配置模块
# ------------------------------------------------------------------------------

# OSS存储桶名称
variable "bucket_name" {
type = string
description = "bucket_name,在同一可用区下请保持唯一"
default = "test-bucket-polar"
}

# PolarDB数据库用户名
variable "account_name" {
type = string
default = "polar_ai"
description = "account_name"
validation {
condition = can(regex("^[a-z][a-z0-9_]{0,30}[a-z0-9]$", var.account_name))
error_message = "数据库用户名必须以字母开头,以字母或数字结尾,只能包含字母、数字和下划线最多32个字符"
}
}

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

# PolarDB数据库名称
variable "dbname" {
type = string
default = "db-test"
description = "dbname"
validation {
condition = can(regex("^[a-z][a-z0-9_-]{0,62}[a-z0-9]$", var.dbname))
error_message = "由小写字母、数字、中划线(-)、下划线(_)组成,小写字母或数字结尾,以字母开头,以字母或数字结尾,最长 64 个字符"
}
}
Loading