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,51 @@
## Introduction
<!-- DOCS_DESCRIPTION_CN -->
本示例用于实现解决方案[Flink CDC 实现企业级实时数据同步](https://www.aliyun.com/solution/tech-solution/flink-cdc-realize-data-synchronization),涉及专有网络(VPC)、交换机(VSwitch)、实时计算 Flink(Flink)、RDS数据库(RDS)、对象存储服务(OSS)等资源的部署。
<!-- DOCS_DESCRIPTION_CN -->

<!-- DOCS_DESCRIPTION_EN -->
This example is used to implement solution [Real-time data synchronization with Flink CDC](https://www.aliyun.com/solution/tech-solution/flink-cdc-realize-data-synchronization), which involves the creation and deployment of resources such as Virtual Private Cloud (VPC), Virtual Switch (VSwitch), Realtime Compute for Apache Flink (Flink), RDS Database (RDS), 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_db_database.db_base1](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/db_database) | resource |
| [alicloud_db_database.db_base2](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/db_database) | resource |
| [alicloud_db_database.db_base3](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/db_database) | resource |
| [alicloud_db_database.db_base4](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/db_database) | resource |
| [alicloud_db_instance.rdsdbinstance](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/db_instance) | resource |
| [alicloud_oss_bucket.bucket](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/oss_bucket) | resource |
| [alicloud_oss_bucket_object.directory_name](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/oss_bucket_object) | resource |
| [alicloud_rds_account.account](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/rds_account) | resource |
| [alicloud_realtime_compute_vvp_instance.flink_instance](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/resources/realtime_compute_vvp_instance) | 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_db_zones.zones_ids](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/db_zones) | data source |
| [alicloud_oss_service.open_oss](https://registry.terraform.io/providers/aliyun/alicloud/latest/docs/data-sources/oss_service) | data source |

## Inputs

| Name | Description | Type | Default | Required |
|------|-------------|------|---------|:--------:|
| <a name="input_bucket_name"></a> [bucket\_name](#input\_bucket\_name) | OSS存储空间名称 | `string` | `"flink-cdc"` | no |
| <a name="input_db_password"></a> [db\_password](#input\_db\_password) | RDS数据库密码 | `string` | n/a | yes |
| <a name="input_db_user_name"></a> [db\_user\_name](#input\_db\_user\_name) | RDS数据库账号 | `string` | `"db_user"` | no |
| <a name="input_dbinstance_class"></a> [dbinstance\_class](#input\_dbinstance\_class) | RDS实例规格 | `string` | `"mysql.n2.medium.1"` | no |
| <a name="input_directory_name"></a> [directory\_name](#input\_directory\_name) | Bucket 文件目录名称 | `string` | `"warehouse"` | no |
| <a name="input_flink_instance_name"></a> [flink\_instance\_name](#input\_flink\_instance\_name) | Flink实例名称 | `string` | `"flink-cdc-test"` | no |
<!-- END_TF_DOCS -->
129 changes: 129 additions & 0 deletions solution/tech-solution/flink-cdc-realize-data-synchronization/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,129 @@
# ------------------------------------------------------------------------------
# 核心资源定义
#
# 本文件包含了模块的核心基础设施资源
# 这里的代码负责根据输入变量来创建和配置所有云资源
# ------------------------------------------------------------------------------

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

resource "random_string" "lowercase" {
length = 8
special = false
upper = false
numeric = false
}

# 本地变量,资源名称前缀
locals {
common_name = "flink-cdc-${random_string.lowercase.result}"
}

# 查询可用区
data "alicloud_db_zones" "zones_ids" {
engine = "MySQL"
engine_version = "8.0"
instance_charge_type = "PostPaid"
category = "Basic"
db_instance_storage_type = "cloud_essd"
}

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

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

# 创建交换机VSwitch
resource "alicloud_vswitch" "vswitch" {
vpc_id = alicloud_vpc.vpc.id
cidr_block = "192.168.1.0/24"
vswitch_name = "test-vsw"
zone_id = data.alicloud_db_zones.zones_ids.ids.1
}

# 创建RDS实例
resource "alicloud_db_instance" "rdsdbinstance" {
zone_id = data.alicloud_db_zones.zones_ids.ids.1
vpc_id = alicloud_vpc.vpc.id
vswitch_id = alicloud_vswitch.vswitch.id
instance_type = var.dbinstance_class
instance_storage = 50
engine = "MySQL"
engine_version = "8.0"
category = "Basic"
db_instance_storage_type = "cloud_essd"
security_ips = ["192.168.0.0/16"]
released_keep_policy = "None"
}

# 创建RDS账户
resource "alicloud_rds_account" "account" {
db_instance_id = alicloud_db_instance.rdsdbinstance.id
account_type = "Super"
account_password = var.db_password
account_name = var.db_user_name
}

# 创建数据库
resource "alicloud_db_database" "db_base1" {
instance_id = alicloud_db_instance.rdsdbinstance.id
character_set = "utf8"
name = "tpc_ds"
}

resource "alicloud_db_database" "db_base2" {
instance_id = alicloud_db_instance.rdsdbinstance.id
character_set = "utf8"
name = "user_db1"
}

resource "alicloud_db_database" "db_base3" {
instance_id = alicloud_db_instance.rdsdbinstance.id
character_set = "utf8"
name = "user_db2"
}

resource "alicloud_db_database" "db_base4" {
instance_id = alicloud_db_instance.rdsdbinstance.id
character_set = "utf8"
name = "user_db3"
}

# 创建OSS存储桶
resource "alicloud_oss_bucket" "bucket" {
bucket = "${var.bucket_name}-${random_string.lowercase.result}"
force_destroy = true
}

# 创建OSS存储桶对象
resource "alicloud_oss_bucket_object" "directory_name" {
bucket = alicloud_oss_bucket.bucket.bucket
key = "${replace(trimspace(var.directory_name), "/$", "")}/"
content = "Directory placeholder. Managed by Terraform."
acl = "private"
}

# 创建Flink实例
resource "alicloud_realtime_compute_vvp_instance" "flink_instance" {
zone_id = data.alicloud_db_zones.zones_ids.ids.1
vpc_id = alicloud_vpc.vpc.id
vswitch_ids = [
alicloud_vswitch.vswitch.id
]
vvp_instance_name = var.flink_instance_name
payment_type = "PayAsYouGo"
storage {
oss {
bucket = alicloud_oss_bucket.bucket.bucket
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# ------------------------------------------------------------------------------
# 模块输出值
#
# 本文件定义了模块执行成功后返回给调用方的值
# 这些输出可以被其他 Terraform 配置引用,或在 apply 命令结束后显示给用户
# ------------------------------------------------------------------------------

# 输出 RDS 实例 ID
output "rds_instance_id" {
value = alicloud_db_instance.rdsdbinstance.id
description = "RDS 实例 ID"
}

# 输出RDS实例的内网连接地址
output "mysql_host" {
value = alicloud_db_instance.rdsdbinstance.connection_string
description = "内网连接地址"
}

# 输出数据库账号
output "db_username" {
value = var.db_user_name
description = "数据库账号"
}

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

# 输出 OSS 存储空间的名称
output "bucket_name" {
value = alicloud_oss_bucket.bucket.bucket
description = "OSS 存储空间的名称"
}

# 输出 OSS 文件目录名称
output "oss_prefix" {
value = var.directory_name
description = "OSS 文件目录名称"
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# ------------------------------------------------------------------------------
# 模块输入变量
#
# 本文件定义了该 Terraform 模块所有可配置的输入变量
# 每个变量都包含了详细的说明,以帮助用户正确配置模块
# ------------------------------------------------------------------------------

# RDS实例的规格型号
variable "dbinstance_class" {
type = string
description = "RDS实例规格"
default = "mysql.n2.medium.1"
}

# RDS数据库的账号名称
variable "db_user_name" {
type = string
default = "db_user"
nullable = false
description = "RDS数据库账号"
}

# RDS数据库的密码
variable "db_password" {
type = string
sensitive = true
description = "RDS数据库密码"
#default = ""
}

# OSS存储空间的名称
variable "bucket_name" {
type = string
description = "OSS存储空间名称"
default = "flink-cdc"
}

# OSS文件目录名称
variable "directory_name" {
type = string
default = "warehouse"
nullable = false
description = "Bucket 文件目录名称"
}

# Flink实例的名称
variable "flink_instance_name" {
type = string
description = "Flink实例名称"
default = "flink-cdc-test"
}
Loading