diff --git a/solution/tech-solution/flink-cdc-realize-data-synchronization/README.md b/solution/tech-solution/flink-cdc-realize-data-synchronization/README.md new file mode 100644 index 000000000..084444741 --- /dev/null +++ b/solution/tech-solution/flink-cdc-realize-data-synchronization/README.md @@ -0,0 +1,51 @@ +## Introduction + +本示例用于实现解决方案[Flink CDC 实现企业级实时数据同步](https://www.aliyun.com/solution/tech-solution/flink-cdc-realize-data-synchronization),涉及专有网络(VPC)、交换机(VSwitch)、实时计算 Flink(Flink)、RDS数据库(RDS)、对象存储服务(OSS)等资源的部署。 + + + +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). + + + +## Providers + +| Name | Version | +|------|---------| +| [alicloud](#provider\_alicloud) | n/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 | +|------|-------------|------|---------|:--------:| +| [bucket\_name](#input\_bucket\_name) | OSS存储空间名称 | `string` | `"flink-cdc"` | no | +| [db\_password](#input\_db\_password) | RDS数据库密码 | `string` | n/a | yes | +| [db\_user\_name](#input\_db\_user\_name) | RDS数据库账号 | `string` | `"db_user"` | no | +| [dbinstance\_class](#input\_dbinstance\_class) | RDS实例规格 | `string` | `"mysql.n2.medium.1"` | no | +| [directory\_name](#input\_directory\_name) | Bucket 文件目录名称 | `string` | `"warehouse"` | no | +| [flink\_instance\_name](#input\_flink\_instance\_name) | Flink实例名称 | `string` | `"flink-cdc-test"` | no | + \ No newline at end of file diff --git a/solution/tech-solution/flink-cdc-realize-data-synchronization/main.tf b/solution/tech-solution/flink-cdc-realize-data-synchronization/main.tf new file mode 100644 index 000000000..6220eba7e --- /dev/null +++ b/solution/tech-solution/flink-cdc-realize-data-synchronization/main.tf @@ -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 + } + } +} \ No newline at end of file diff --git a/solution/tech-solution/flink-cdc-realize-data-synchronization/output.tf b/solution/tech-solution/flink-cdc-realize-data-synchronization/output.tf new file mode 100644 index 000000000..0ef2ebec3 --- /dev/null +++ b/solution/tech-solution/flink-cdc-realize-data-synchronization/output.tf @@ -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 文件目录名称" +} \ No newline at end of file diff --git a/solution/tech-solution/flink-cdc-realize-data-synchronization/variable.tf b/solution/tech-solution/flink-cdc-realize-data-synchronization/variable.tf new file mode 100644 index 000000000..ab991304d --- /dev/null +++ b/solution/tech-solution/flink-cdc-realize-data-synchronization/variable.tf @@ -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" +} \ No newline at end of file