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
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
## Introduction

<!-- DOCS_DESCRIPTION_CN -->
本示例用于实现解决方案[通过RocketMQ实现多智能体异步通信](https://www.aliyun.com/solution/tech-solution-deploy/2990228), 涉及到专有网络(VPC)、交换机(VSwitch)、云服务器(ECS)等资源的创建。
<!-- DOCS_DESCRIPTION_CN -->

<!-- DOCS_DESCRIPTION_EN -->
This example is used to implement solution [rocketmq-for-multi-agent-communication](https://www.aliyun.com/solution/tech-solution-deploy/2990228). It involves the creation, and deployment of resources such as Virtual Private Cloud (VPC), VSwitch, Elastic Compute Service (ECS).
<!-- 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_instance.ecs_instance](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/instance) | resource |
| [alicloud_security_group.security_group](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/security_group) | resource |
| [alicloud_vpc.vpc](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/vpc) | resource |
| [alicloud_vswitch.ecs_vswitch](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/resources/vswitch) | resource |
| [random_string.suffix](https://registry.terraform.io/providers/hashicorp/random/latest/docs/resources/string) | resource |
| [alicloud_images.default](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/data-sources/images) | data source |
| [alicloud_regions.current_region_ds](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/data-sources/regions) | data source |
| [alicloud_zones.ecs_zones](https://registry.terraform.io/providers/hashicorp/alicloud/latest/docs/data-sources/zones) | data source |

## Inputs

| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| <a name="input_ecs_instance_password"></a> [ecs\_instance\_password](#input\_ecs\_instance\_password) | 服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)` | `string` | n/a | yes |
| <a name="input_ecs_instance_type"></a> [ecs\_instance\_type](#input\_ecs\_instance\_type) | ECS实例规格 | `string` | `"ecs.t6-c1m2.large"` | no |
<!-- END_TF_DOCS -->
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
# ------------------------------------------------------------------------------
# 核心资源定义 (Main Resource Definitions)
#
# 本文件包含了模块的核心基础设施资源。
# 这里的代码负责根据输入变量来创建和配置所有云资源。
# ------------------------------------------------------------------------------

# 配置阿里云提供商 (Provider)
provider "alicloud" {
region = "cn-chengdu"
}

# 查询当前部署地域
data "alicloud_regions" "current_region_ds" {
current = true
}

# 查询支持指定ECS实例规格和磁盘类型的可用区
data "alicloud_zones" "ecs_zones" {
available_disk_category = "cloud_essd"
available_resource_creation = "VSwitch"
available_instance_type = var.ecs_instance_type
}

# 创建一个随机ID,用于生成唯一的资源名称后缀,避免命名冲突
resource "random_string" "suffix" {
length = 8
lower = true
upper = false
numeric = false
special = false
}

# 定义一个局部变量,将随机ID用作通用名称后缀
locals {
common_name = random_string.suffix.id
region = data.alicloud_regions.current_region_ds.regions.0.id
}

# 创建一个专有网络(VPC),为云资源提供一个隔离的网络环境
resource "alicloud_vpc" "vpc" {
cidr_block = "192.168.0.0/16"
vpc_name = "vpc-${local.common_name}"
}

# 创建一个交换机(VSwitch),用于在VPC内划分一个子网
resource "alicloud_vswitch" "ecs_vswitch" {
vpc_id = alicloud_vpc.vpc.id
cidr_block = "192.168.1.0/24"
zone_id = data.alicloud_zones.ecs_zones.zones[0].id
vswitch_name = "ecs-vswitch-${local.common_name}"
}

# 创建一个安全组,作为虚拟防火墙来控制ECS实例的网络访问
resource "alicloud_security_group" "security_group" {
vpc_id = alicloud_vpc.vpc.id
security_group_name = "sg-${local.common_name}"
}

# 查询可用的阿里云镜像
data "alicloud_images" "default" {
name_regex = "^aliyun_3_x64_20G_alibase_.*"
most_recent = true
owners = "system"
}

# 创建一台ECS实例(云服务器)
resource "alicloud_instance" "ecs_instance" {
instance_name = "ecs-${local.common_name}"
image_id = data.alicloud_images.default.images[0].id
instance_type = var.ecs_instance_type
system_disk_category = "cloud_essd"
security_groups = [alicloud_security_group.security_group.id]
vswitch_id = alicloud_vswitch.ecs_vswitch.id
password = var.ecs_instance_password
internet_max_bandwidth_out = 5
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# ------------------------------------------------------------------------------
# 模块输出值 (Module Outputs)
#
# 本文件定义了模块执行成功后返回给调用方的值。
# 这些输出可以被其他 Terraform 配置引用,或在 apply 命令结束后显示给用户。
# ------------------------------------------------------------------------------

output "ecs_login_address" {
description = "部署应用的ECS实例的登录地址。"
value = format("https://ecs-workbench.aliyun.com/?from=ecs&instanceType=ecs&regionId=%s&instanceId=%s&resourceGroupId=", local.region, alicloud_instance.ecs_instance.id)
}

output "vpc_id" {
description = "已创建的VPC ID"
value = alicloud_vpc.vpc.id
}

output "vswitch_id" {
description = "已创建的VSwitch ID"
value = alicloud_vswitch.ecs_vswitch.id
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# ------------------------------------------------------------------------------
# 模块输入变量 (Module Input Variables)
#
# 本文件定义了该 Terraform 模块所有可配置的输入变量。
# 每个变量都包含了详细的 'description',以说明其用途、格式和默认值逻辑。
# 请参考这些描述来正确配置模块。
# ------------------------------------------------------------------------------

# 指定创建的ECS云服务器的规格。
variable "ecs_instance_type" {
type = string
default = "ecs.t6-c1m2.large"
description = "ECS实例规格"
}

# 用于登录ECS实例的密码。
variable "ecs_instance_password" {
type = string
sensitive = true
description = "服务器登录密码,长度8-30,必须包含三项(大写字母、小写字母、数字、 ()`~!@#$%^&*_-+=|{}[]:;'<>,.?/ 中的特殊符号)"
# default = ""
}
Loading