ALIYUN::REDIS::Instance

ALIYUN::REDIS::Instance类型用于创建Redis。

语法

 {
  "Type": "ALIYUN::REDIS::Instance",
  "Properties": {
    "VpcId": String,
    "EvictionPolicy": String,
    "BackupPolicy": Map,
    "ZoneId": String,
    "InstanceClass": String,
    "InstanceMaintainTime": Map,
    "Tags": List,
    "VpcPasswordFree": Boolean,
    "VSwitchId": String,
    "SecurityGroupId": String,
    "EngineVersion": String,
    "SSLEnabled": String,
    "Password": String,
    "InstanceName": String,
    "DeletionForce": Boolean,
    "Connections": Map,
    "ChargeType": String,
    "Period": Integer,
    "AutoRenewDuration": Integer,
    "ProductType": String,
    "SubscriptionDeletionForce": Boolean,
    "SecondaryZoneId": String,
    "ResourceGroupId": String,
    "PeriodUnit": String,
    "TairConfig": Map,
    "ShardCount": Integer,
    "NodeType": String,
    "DeletionProtection": Boolean,
    "ReadOnlyCount": Integer
  }
}

属性

属性名称

类型

必须

允许更新

描述

约束

EngineVersion

String

数据库版本。

取值:

  • 2.8

    说明

    已停售,请选择其他版本。

  • 4.0

  • 5.0

InstanceClass

String

实例规格。

更多信息,请参见实例规格

InstanceMaintainTime

Map

实例的可维护时间段。

Tags

List

标签。

每个实例最多可以绑定20个标签。

更多信息,请参见Tags属性

VpcPasswordFree

Boolean

是否启用免密码访问专有网络中的实例。

取值:

  • true:启用。

  • false(默认值):禁用。

VpcId

String

专有网络ID。

EvictionPolicy

String

数据逐出策略。

取值:

  • noeviction:不删除任何key,只是在写操作时返回错误。

  • allkeys-lru:优先删除掉最近最少使用的key。

  • volatile-lru:只从设置失效(expire set)的key中选择最近最少使用的key进行删除。

  • allkeys-random:随机选择删除key。

  • volatile-random:只从设置失效(expire set)的key中,随机选择一些key进行删除。

  • volatile-ttl:只从设置失效(expire set)的key中,选出存活时间(TTL)最短的key进行删除。

ZoneId

String

可用区ID。

当创建的实例属于专有网络时,该参数必须指定。

创建多可用区实例时,您可以调用DescribeZones - 查询支持的可用区接口查询支持的多可用区ID。

VSwitchId

String

专有网络下的交换机ID。

SecurityGroupId

String

安全组ID。

最多支持设置10ID,ID之间用半角逗号(,)分隔。

Password

String

密码。

长度为8~30个字符,必须同时包含大写英文字母、小写英文字母和数字。

SSLEnabled

String

SSL状态。

取值:

  • Disable:关闭。

  • Enable:开启。

  • Update:更新证书。

InstanceName

String

实例名称。

长度为2~128个字符。必须以英文字母或汉字开头,可包含英文字母、数字、汉字、下划线(_)、短划线(-)和半角句号(.)。

DeletionForce

Boolean

是否在回收时删除实例。

取值:

  • true:回收时删除实例。

  • false(默认值):回收时不删除实例。

SubscriptionDeletionForce

Boolean

该选项仅适用于包年包月实例。对于包年包月实例,如果此选项为 true,则在删除之前会将实例转换为按量付费实例;如果为 false,则不会执行强制删除。此操作会产生额外费用,请谨慎选择。

Connections

Map

连接地址。

更多信息,请参见Connections属性

BackupPolicy

Map

备份策略。

更多信息,请参见BackupPolicy属性

ChargeType

String

实例付费类型。

取值:

  • PostPaid(默认值):后付费,即按量付费。

  • PrePaid:预付费,即包年包月。

Period

Integer

付费周期。

取值:1~9、12、24、36、60。

单位:月。

AutoRenewDuration

Integer

自动续费时长。

取值范围:1~12。

单位:月。

当实例即将到期时,将根据该参数指定的时长自动续费。

说明

ChargeType取值为 PrePaid时该参数有效。

ProductType

String

产品类型。

取值:

  • Local:Redis 开源版实例(经典版)或内存型(经典版)。

  • Tair_rdb:内存型(云原生版)。

  • Tair_scm:持久内存型。

  • Tair_essd:磁盘型。

  • OnECS:Redis 开源版实例(云原生版)。

说明

建议设置 ProductType 属性,能加快参数查询的速度。

SecondaryZoneId

String

备可用区ID。

可调用DescribeZones - 查询支持的可用区接口查询。

说明

传入本参数可以实现主备数据节点分布在不同的可用区,实现跨可用区容灾,能够承受机房级别的故障。

ResourceGroupId

String

资源组ID。

PeriodUnit

String

时长单位。

取值:

  • Year:年。

  • Month:月。

TairConfig

Map

Tair配置。

更多信息,请参见TairConfig属性

ReadOnlyCount

Integer

主可用区的只读节点数。

说明

ReadOnlyCount 参数仅适用于云原生版、开启读写分离的实例。如果实例为集群架构,则上述参数分别表示单分片的(主、备可用区)只读节点数量。

ShardCount

Integer

分片数。

本参数仅适用于创建云盘版集群架构实例,您可以通过该参数实现自定义分片数量。

NodeType

String

节点类型。

取值:

  • MASTER_SLAVE:高可用(双副本)。

  • STAND_ALONE:单副本。

  • double:双副本。

  • single:单副本。

说明

云原生版实例请选择MASTER_SLAVESTAND_ALONE,经典版实例请选择doublesingle

DeletionProtection

Boolean

是否已开启释放保护功能。

取值:

  • true:已开启

  • false:未开启

BackupPolicy语法

"BackupPolicy": {
  "PreferredBackupPeriod": "String",
  "PreferredBackupTime": "String",
  "EnableBackupLog": "Integer"
}

BackupPolicy属性

属性名称

类型

必须

允许更新

描述

约束

PreferredBackupPeriod

String

备份周期。

取值:

  • Monday:星期一。

  • Tuesday:星期二。

  • Wednesday:星期三。

  • Thursday:星期四。

  • Friday:星期五。

  • Saturday:星期六。

  • Sunday:星期日。

PreferredBackupTime

String

备份时间。

格式:HH:mmZ-HH:mmZ

EnableBackupLog

Integer

开启或关闭增量备份。

取值:

  • 1:开启。

  • 0(默认值):关闭。

InstanceMaintainTime语法

"InstanceMaintainTime": {
  "MaintainStartTime": "String",
  "MaintainEndTime": "String"
}

InstanceMaintainTime属性

属性名称

类型

必须

允许更新

描述

约束

MaintainStartTime

String

可维护时间段的开始时间。

格式:HH:mmZ(UTC时间)。例如:需要在北京时间凌晨1点开始,应设置为17:00Z

MaintainEndTime

String

可维护时间段的结束时间。

格式:HH:mmZ(UTC时间)。例如:需要在北京时间凌晨2点结束,应设置为18:00Z

说明

开始时间和结束时间的间隔应为1小时,例如:MaintainStartTime17:00Z,MaintainEndTime18:00Z

Tags语法

"Tags": [
  {
    "Key": String,
    "Value": String
  }
]  

Tags属性

属性名称

类型

必须

允许更新

描述

约束

Key

String

标签键。

同账号同地域下标签键唯一。

Value

String

标签值。

Connections语法

"Connections": {
  "VpcPrivateConnection": "Map",
  "ClassicInnerConnection": "Map",
  "DirectConnection": "Map",
  "PublicConnection": "Map"
}

Connections属性

属性名称

类型

必须

允许更新

描述

约束

VpcPrivateConnection

Map

VPC内网地址。

更多信息,请参见VpcPrivateConnection属性

ClassicInnerConnection

Map

经典内网地址。

更多信息,请参见ClassicInnerConnection属性

DirectConnection

Map

直接连接地址。该实例是一个集群实例。您可以根据需要申请直接连接端点。

更多信息,请参见DirectConnection属性

PublicConnection

Map

公共地址。

更多信息,请参见PublicConnection属性

VpcPrivateConnection语法

"VpcPrivateConnection": {
  "ConnectionPort": Integer,
  "ConnectionString": String
}

VpcPrivateConnection属性

属性名称

类型

必须

允许更新

描述

约束

ConnectionPort

Integer

实例的ApsaraDB服务端口号。

取值范围:1024~65535。

ConnectionString

String

公共端点的前缀。

长度为8~64个字符,必须以小写英文字母开头。可包含小写英文字母和数字。

PublicConnection语法

"PublicConnection": {
  "ConnectionPort": Integer,
  "ConnectionString": String
}

PublicConnection属性

属性名称

类型

必须

允许更新

描述

约束

ConnectionPort

Integer

实例的ApsaraDB服务端口号。

取值范围:1024~65535。

ConnectionString

String

公共端点的前缀。

长度为8~64个字符,必须以小写英文字母开头。可包含小写英文字母和数字。

DirectConnection语法

"DirectConnection": {
  "ConnectionPort": Integer,
  "ConnectionString": String
}

DirectConnection属性

属性名称

类型

必须

允许更新

描述

约束

ConnectionPort

Integer

实例的ApsaraDB服务端口号。

取值范围:1024~65535。

ConnectionString

String

公共端点的前缀。

长度为8~64个字符,必须以小写英文字母开头。可包含小写英文字母和数字。

ClassicInnerConnection语法

"ClassicInnerConnection": {
  "ConnectionPort": Integer,
  "ConnectionString": String
}

ClassicInnerConnection属性

属性名称

类型

必须

允许更新

描述

约束

ConnectionPort

Integer

实例的ApsaraDB服务端口号。

取值范围:1024~65535。

ConnectionString

String

公共端点的前缀。

长度为8~64个字符,必须以小写英文字母开头。可包含小写英文字母和数字。

TairConfig语法

"TairConfig": {
  "Storage": "Integer",
  "StorageType": "String",
  "ShardCount": "Integer"
}

TairConfig属性

属性名称

类型

必须

允许更新

描述

约束

Storage

Integer

云盘的存储空间。

不同的规格取值范围有所区别。更多信息,请参见磁盘型实例规格

StorageType

String

存储类型。

取值:

  • essd_pl0

  • essd_pl1

  • essd_pl2

  • essd_pl3

ShardCount

Integer

实例中的数据节点个数。

取值:

  • 1:默认值,即表示创建的实例为标准架构,仅拥有1个数据节点。

  • 2~32:传入该范围的值,即表示创建的实例为集群架构,拥有指定数量的数据节点。

返回值

Fn::GetAtt

  • InstanceId:实例ID。

  • OrderId:实例订单ID。

  • ConnectionDomain:实例的私网连接地址。

  • Port:Redis服务端口。

  • InstanceName:实例名称。

  • InstanceClass:实例规格。

  • VpcId:专有网络ID。

  • Capacity:实例的存储容量。

  • InstanceType:实例的引擎版本。

  • ChargeType:实例的计费方式。

  • PackageType:计划类型。

  • Connections:实例支持的最大连接数。

  • ArchitectureType:架构类型。

  • NodeType:节点类型。

  • HasRenewChangeOrder:阿里云账号是否有待续订或扩容订单。

  • ResourceGroupId:资源组ID。

  • QPS:每秒访问次数,取值为当前规格实例的理论值。

  • ZoneId:实例所属的可用区ID。

  • Bandwidth:实例带宽。单位:Mbps。

  • EngineVersion:版本类型。

  • NetworkType:网络类型。

  • VSwitchId:交换机ID。

  • PrivateIp:实例的私网IP地址。

  • PublicConnectionString:实例的公共连接字符串。

  • VpcPrivateConnectionPort:VPC私有连接端口。

  • ClassicInnerConnectionString:实例的经典内部连接字符串。

  • VpcPrivateConnectionString:实例的VPC私有连接字符串。

  • PublicConnectionPort:实例的公共连接端口。

  • DirectConnectionString:实例的直接连接字符串。

  • DirectConnectionPort:实例的直接连接端口。

  • ClassicInnerConnectionPort:实例的经典内连接端口。

示例

场景 1 :创建Redis

ROSTemplateFormatVersion: '2015-09-01'
Description: {}
Parameters:
  VpcId:
    Type: String
    AssociationProperty: ALIYUN::ECS::VPC::VPCId
  ZoneId:
    Type: String
    Description:
      zh-cn: 创建实例前,请确认可用区是否支持Redis资源的规格。
      en: Before you create an instance, confirm that the Availability Zone supports the specifications of Redis resources.
    AssociationProperty: ALIYUN::ECS::Instance:ZoneId
    Label:
      en: Zone ID
      zh-cn: 可用区
  VSwitchId:
    Type: String
    AssociationProperty: ALIYUN::ECS::VSwitch::VSwitchId
    AssociationPropertyMetadata:
      VpcId: ${VpcId}
      ZoneId: ${ZoneId}
Resources:
  RedisInstance:
    Type: ALIYUN::REDIS::Instance
    Properties:
      VpcId:
        Ref: VpcId
      VSwitchId:
        Ref: VSwitchId
      InstanceClass: redis.master.small.default
      EvictionPolicy: noeviction
      ZoneId:
        Ref: ZoneId
      InstanceName: DefaultRedis
      Password: Admin@123!
Outputs:
  InstanceId:
    Value:
      Fn::GetAtt:
        - RedisInstance
        - InstanceId                     
{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Description": {
  },
  "Parameters": {
    "VpcId": {
      "Type": "String",
      "AssociationProperty": "ALIYUN::ECS::VPC::VPCId"
    },
    "ZoneId": {
      "Type": "String",
      "Description": {
        "zh-cn": "创建实例前,请确认可用区是否支持Redis资源的规格。",
        "en": "Before you create an instance, confirm that the Availability Zone supports the specifications of Redis resources."
      },
      "AssociationProperty": "ALIYUN::ECS::Instance:ZoneId",
      "Label": {
        "en": "Zone ID",
        "zh-cn": "可用区"
      }
    },
    "VSwitchId": {
      "Type": "String",
      "AssociationProperty": "ALIYUN::ECS::VSwitch::VSwitchId",
      "AssociationPropertyMetadata": {
        "VpcId": "${VpcId}",
        "ZoneId": "${ZoneId}"
      }
    }
  },
  "Resources": {
    "RedisInstance": {
      "Type": "ALIYUN::REDIS::Instance",
      "Properties": {
        "VpcId": {
          "Ref": "VpcId"
        },
        "VSwitchId": {
          "Ref": "VSwitchId"
        },
        "InstanceClass": "redis.master.small.default",
        "EvictionPolicy": "noeviction",
        "ZoneId": {
          "Ref": "ZoneId"
        },
        "InstanceName": "DefaultRedis",
        "Password": "Admin@123!"
      }
    }
  },
  "Outputs": {
    "InstanceId": {
      "Value": {
        "Fn::GetAtt": [
          "RedisInstance",
          "InstanceId"
        ]
      }
    }
  }
}

场景 2 :创建Redis,并添加 IP白名单

ROSTemplateFormatVersion: '2015-09-01'
Description: {}
Parameters:
  VpcId:
    Type: String
    AssociationProperty: ALIYUN::ECS::VPC::VPCId
  ZoneId:
    Type: String
    Description:
      zh-cn: 创建实例前,请确认可用区是否支持Redis资源的规格。
      en: Before you create an instance, confirm that the Availability Zone supports the specifications of Redis resources.
    AssociationProperty: ALIYUN::ECS::Instance:ZoneId
    Label:
      en: Zone ID
      zh-cn: 可用区
  VSwitchId:
    Type: String
    AssociationProperty: ALIYUN::ECS::VSwitch::VSwitchId
    AssociationPropertyMetadata:
      VpcId: ${VpcId}
      ZoneId: ${ZoneId}
Resources:
  RedisInstance:
    Type: ALIYUN::REDIS::Instance
    Properties:
      VpcId:
        Ref: VpcId
      VSwitchId:
        Ref: VSwitchId
      InstanceClass: redis.master.small.default
      EvictionPolicy: noeviction
      ZoneId:
        Ref: ZoneId
      InstanceName: DefaultRedis
      Password: Admin@123!
  REDISWhitelist:
    Type: ALIYUN::REDIS::Whitelist
    Properties:
      InstanceId:
        Ref: RedisInstance
      SecurityIps: 192.168.0.0/16
Outputs:
  InstanceId:
    Value:
      Fn::GetAtt:
        - RedisInstance
        - InstanceId                     
{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Description": {},
  "Parameters": {
    "VpcId": {
      "Type": "String",
      "AssociationProperty": "ALIYUN::ECS::VPC::VPCId"
    },
    "ZoneId": {
      "Type": "String",
      "Description": {
        "zh-cn": "创建实例前,请确认可用区是否支持Redis资源的规格。",
        "en": "Before you create an instance, confirm that the Availability Zone supports the specifications of Redis resources."
      },
      "AssociationProperty": "ALIYUN::ECS::Instance:ZoneId",
      "Label": {
        "en": "Zone ID",
        "zh-cn": "可用区"
      }
    },
    "VSwitchId": {
      "Type": "String",
      "AssociationProperty": "ALIYUN::ECS::VSwitch::VSwitchId",
      "AssociationPropertyMetadata": {
        "VpcId": "${VpcId}",
        "ZoneId": "${ZoneId}"
      }
    }
  },
  "Resources": {
    "RedisInstance": {
      "Type": "ALIYUN::REDIS::Instance",
      "Properties": {
        "VpcId": {
          "Ref": "VpcId"
        },
        "VSwitchId": {
          "Ref": "VSwitchId"
        },
        "InstanceClass": "redis.master.small.default",
        "EvictionPolicy": "noeviction",
        "ZoneId": {
          "Ref": "ZoneId"
        },
        "InstanceName": "DefaultRedis",
        "Password": "Admin@123!"
      }
    },
    "REDISWhitelist": {
      "Type": "ALIYUN::REDIS::Whitelist",
      "Properties": {
        "InstanceId": {
          "Ref": "RedisInstance"
        },
        "SecurityIps": "192.168.0.0/16"
      }
    }
  },
  "Outputs": {
    "InstanceId": {
      "Value": {
        "Fn::GetAtt": [
          "RedisInstance",
          "InstanceId"
        ]
      }
    }
  }
}

场景 3 :通过DTS实现MySQLRedis的缓存同步

ROSTemplateFormatVersion: '2015-09-01'
Description:
  zh-cn: 该模板通过DTS实现MySQL与Redis的缓存同步,包括VPC、ECS、RDS、Redis实例创建及安全配置,同时设置消费组确保数据一致性。
  en: This template achieves cache synchronization between MySQL and Redis via DTS,
    encompassing the creation and security configuration of VPC, ECS, RDS, and Redis
    instances, alongside the establishment of consumer groups to ensure data consistency.
Parameters:
  ZoneId:
    Type: String
    Label:
      en: VSwitch Availability Zone
      zh-cn: 交换机可用区
    AssociationProperty: ALIYUN::ECS::Instance::ZoneId
  RDSDBUser:
    Type: String
    Label:
      en: RDS DB Username
      zh-cn: RDS数据库账号
    Description:
      en: Username of database.
      zh-cn: RDS数据库账号。
    ConstraintDescription:
      en: Consist of 2 to 16 characters of lowercase letters, underline. Must begin
        with a letter and be end with an alphanumeric character.
      zh-cn: 由 2 到 16 个小写字母组成,下划线。必须以字母开头,以字母数字字符结尾。
    Default: demouser123
    MinLength: 2
    MaxLength: 16
  DbName:
    Type: String
    Label:
      en: RDS DB Name
      zh-cn: RDS数据库名称
    ConstraintDescription:
      en: Consist of 2 to 16 characters of lowercase letters, underline. Must begin with a letter and be end with an alphanumeric character.
      zh-cn: 由 2 到 16 个小写字母组成,下划线。必须以字母开头,以字母数字字符结尾。
    Default: demodb
    Required: true
    MinLength: 2
    MaxLength: 16
  RDSDBPassword:
    Type: String
    Label:
      en: RDS DB Password
      zh-cn: RDS数据库密码
    Description:
      en: RDS database password, consisting of letters, numbers, and underline(_),
        is 8 to 32 characters long,Must contain three different types of characters.
      zh-cn: RDS数据库密码,由字母、数字、下划线(_)组成,长度为8~32个字符,必须包含3种不同类型的字符。
    ConstraintDescription:
      en: Consisting of letters, numbers, and underline(_),
        is 8 to 32 characters long.
      zh-cn: 由字母、数字、下划线(_)组成,长度为8~32个字符。
    AssociationProperty: ALIYUN::RDS::Instance::AccountPassword
    MinLength: 8
    MaxLength: 32
    NoEcho: true
  DBInstanceClass:
    Type: String
    Label:
      en: Instance Class
      zh-cn: 实例规格
    AssociationProperty: ALIYUN::RDS::Instance::InstanceType
    AssociationPropertyMetadata:
      ZoneId: ${ZoneId}
      EngineVersion: "8.0"
      Engine: MySQL
      Category: HighAvailability
      DBInstanceStorageType: cloud_essd
      CommodityCode: bards
    Default: mysql.x4.medium.2c
  DtsJobName:
    Type: String
    Label:
      en: Dts Job Name
      zh-cn: 同步任务名称
    Description:
      en: You are advised to configure a name with service significance (without unique requirement) for easy identification.
      zh-cn: 建议配置具有业务意义的名称(无唯一性要求),便于后续识别。
    Default: mysql2redis_dts
  RedisInstanceClass:
    Type: String
    Label:
      en: Tair Specifications
      zh-cn: Tair 规格
    Description:
      en: <font color='blue'><b>Before selecting a model, please confirm whether the model is in stock in the current availability zone. To save testing costs, it is recommended to use a model with 2G memory, for example:tair.rdb.2g</b></font>, see detail:<a href='https://help.aliyun.com/zh/redis/product-overview/enhanced-performance' target='_blank'><b><font color='red'>Specification inquiry</font></b></a>.
      zh-cn: <font color='blue'><b>选择机型前请先确认当前可用区下该机型是否有库存,为节省测试成本,推荐使用2GB的规格,例如:tair.rdb.2g</b></font>,<a href='https://help.aliyun.com/zh/redis/product-overview/enhanced-performance' target='_blank'><b><font color='red'>规格查询</font></b></a>。
    AssociationProperty: ALIYUN::REDIS::Instance::InstanceClass
    AssociationPropertyMetadata:
      Engine: Redis
      ProductType: Tair_rdb
      InstanceChargeType: PostPaid
      ZoneId: ${ZoneId1}
      OrderType: BUY
    Default: tair.rdb.2g
  RedisPassword:
    Type: String
    Label:
      en: Instance Password
      zh-cn: 实例密码
    Description:
      en: 'Length 8-32 characters, can contain size letters, Numbers and special symbols,
        including:! @ # $ % ^ & * ( ) _ + - ='
      zh-cn: 长度8-32个字符,可包含大小字母、数字及特殊符号(包含:!@#$%^&*()_+-=)
    ConstraintDescription:
      en: '8-32 characters, can contain size letters, Numbers and special symbols,
        including:! @ # $ % ^ & * ( ) _ + - ='
      zh-cn: 8-32个字符,可包含大小字母、数字及特殊符号(包含:!@#$%^&*()_+-=)
    MinLength: '8'
    MaxLength: '32'
    NoEcho: true
Resources:
  Vpc:
    Type: ALIYUN::ECS::VPC
    Properties:
      CidrBlock: 192.168.0.0/16
  VSwitch:
    Type: ALIYUN::ECS::VSwitch
    Properties:
      ZoneId:
        Ref: ZoneId
      VpcId:
        Ref: Vpc
      VSwitchName:
        Fn::Join:
          - '-'
          - - VSwitch
            - StackId
            - Ref: ALIYUN::StackId
      CidrBlock: 192.168.0.0/24
  RdsDBInstance:
    Type: ALIYUN::RDS::DBInstance
    Properties:
      ZoneId:
        Ref: ZoneId
      VpcId:
        Ref: Vpc
      VSwitchId:
        Ref: VSwitch
      DBInstanceClass:
        Ref: DBInstanceClass
      DBInstanceStorage: 100
      Engine: MySQL
      EngineVersion: "8.0"
      MasterUserPassword:
        Ref: RDSDBPassword
      MasterUserType: Super
      MasterUsername:
        Ref: RDSDBUser
      DBMappings:
        - CharacterSetName: utf8mb4
          DBName:
            Ref: DbName
      Category: HighAvailability
      DBInstanceStorageType: cloud_essd
      SecurityIPList: 192.168.0.0/16
      SlaveZoneIds:
        - Ref: ZoneId
  RedisInstance:
    Type: ALIYUN::REDIS::Instance
    Properties:
      ZoneId:
        Ref: ZoneId
      VpcId:
        Ref: Vpc
      VSwitchId:
        Ref: VSwitch
      InstanceClass:
        Ref: RedisInstanceClass
      InstanceName: rds_mysql2redis_redis
      EvictionPolicy: noeviction
      EngineVersion: '6.0'
      Password:
        Ref: RedisPassword
  Whitelist:
    Type: ALIYUN::REDIS::Whitelist
    Properties:
      InstanceId:
        Ref: RedisInstance
      SecurityIps: 192.168.0.0/16
  MigrationJob:
    Type: ALIYUN::DTS::SynchronizationJob2
    Properties:
      DtsJobName:
        Ref: DtsJobName
      SourceEndpoint:
        InstanceType: RDS
        InstanceID:
          Ref: RdsDBInstance
        EngineName: MYSQL
        Region:
          Ref: ALIYUN::Region
        UserName:
          Ref: RDSDBUser
        Password:
          Ref: RDSDBPassword
      DestinationEndpoint:
        InstanceType: Redis
        InstanceID:
          Ref: RedisInstance
        EngineName: Redis
        Region:
          Ref: ALIYUN::Region
        Password:
          Ref: RedisPassword
      StructureInitialization: false
      DelayNotice: true
      ErrorNotice: true
      DelayRuleTime: 60
      DataInitialization: true
      DataSynchronization: true
      DbList:
        Fn::GetJsonValue:
          - DbList
          - Fn::Sub: '{ "DbList": { "${DbName}": {   "name": "0",   "all": true,   "customAttachedColumn": {     "__DTS_TP_TO_REDIS_KEY__": {       "name": "__DTS_TP_TO_REDIS_KEY__",       "syntacticType": "ADD",       "value": "__DB__+''.''+__TB__+''.''+pk_str_with_name_value(''.'',''.'')",       "type": "STRING",       "length": ""     },     "__DTS_TP_TO_REDIS_VALUE__": {       "name": "__DTS_TP_TO_REDIS_VALUE__",       "syntacticType": "ADD",       "value": "tp2redis_json_value()",       "type": "STRING",       "length": ""     }   } }}}'
  DtsInstance:
    Type: ALIYUN::DTS::Instance
    Properties:
      JobId:
        Fn::GetAtt:
          - MigrationJob
          - DtsJobId
      InstanceClass: small
      PayType: PostPaid
      AutoStart: true
      Type: SYNC
      SourceRegion:
        Ref: ALIYUN::Region
      DestinationRegion:
        Ref: ALIYUN::Region
      SourceEndpointEngineName: MySQL
      DestinationEndpointEngineName: Redis
Outputs:
  RdsInstanceAddress:
    Description:
      en: RDS Instance Address.
      zh-cn: RDS实例地址。
    Value:
      'Fn::Sub':
        - 'https://rdsnext.console.aliyun.com/detail/${InstanceID}/basicInfo?region=${Region}'
        - InstanceID:
            Ref: RdsDBInstance
          Region:
            Ref: ALIYUN::Region
  TairInstanceAddress:
    Description:
      en: Tair Instance Address.
      zh-cn: Tair实例地址。
    Value:
      'Fn::Sub':
        - 'https://kvstore.console.aliyun.com/Redis/instance/${Region}/${InstanceID}'
        - InstanceID:
            Ref: RedisInstance
          Region:
            Ref: ALIYUN::Region
Metadata:
  ALIYUN::ROS::Interface:
    ParameterGroups:
      - Parameters:
          - ZoneId
        Label:
          default:
            en: Infrastructure Configuration
            zh-cn: 基础资源配置(必填)
      - Parameters:
          - DBInstanceClass
          - DbName
          - RDSDBUser
          - RDSDBPassword
        Label:
          default: RDS
      - Parameters:
          - RedisInstanceClass
          - RedisPassword
        Label:
          default: Tair
      - Parameters:
          - DtsJobName
        Label:
          default: DTS
    TemplateTags:
      - acs:technical-solution:database:实时同步RDS与Redis构建缓存一致性-tech_solu_21
{
  "ROSTemplateFormatVersion": "2015-09-01",
  "Description": {
    "zh-cn": "该模板通过DTS实现MySQL与Redis的缓存同步,包括VPC、ECS、RDS、Redis实例创建及安全配置,同时设置消费组确保数据一致性。",
    "en": "This template achieves cache synchronization between MySQL and Redis via DTS, encompassing the creation and security configuration of VPC, ECS, RDS, and Redis instances, alongside the establishment of consumer groups to ensure data consistency."
  },
  "Parameters": {
    "ZoneId": {
      "Type": "String",
      "Label": {
        "en": "VSwitch Availability Zone",
        "zh-cn": "交换机可用区"
      },
      "AssociationProperty": "ALIYUN::ECS::Instance::ZoneId"
    },
    "RDSDBUser": {
      "Type": "String",
      "Label": {
        "en": "RDS DB Username",
        "zh-cn": "RDS数据库账号"
      },
      "Description": {
        "en": "Username of database.",
        "zh-cn": "RDS数据库账号。"
      },
      "ConstraintDescription": {
        "en": "Consist of 2 to 16 characters of lowercase letters, underline. Must begin with a letter and be end with an alphanumeric character.",
        "zh-cn": "由 2 到 16 个小写字母组成,下划线。必须以字母开头,以字母数字字符结尾。"
      },
      "Default": "demouser123",
      "MinLength": 2,
      "MaxLength": 16
    },
    "DbName": {
      "Type": "String",
      "Label": {
        "en": "RDS DB Name",
        "zh-cn": "RDS数据库名称"
      },
      "ConstraintDescription": {
        "en": "Consist of 2 to 16 characters of lowercase letters, underline. Must begin with a letter and be end with an alphanumeric character.",
        "zh-cn": "由 2 到 16 个小写字母组成,下划线。必须以字母开头,以字母数字字符结尾。"
      },
      "Default": "demodb",
      "Required": true,
      "MinLength": 2,
      "MaxLength": 16
    },
    "RDSDBPassword": {
      "Type": "String",
      "Label": {
        "en": "RDS DB Password",
        "zh-cn": "RDS数据库密码"
      },
      "Description": {
        "en": "RDS database password, consisting of letters, numbers, and underline(_), is 8 to 32 characters long,Must contain three different types of characters.",
        "zh-cn": "RDS数据库密码,由字母、数字、下划线(_)组成,长度为8~32个字符,必须包含3种不同类型的字符。"
      },
      "ConstraintDescription": {
        "en": "Consisting of letters, numbers, and underline(_), is 8 to 32 characters long.",
        "zh-cn": "由字母、数字、下划线(_)组成,长度为8~32个字符。"
      },
      "AssociationProperty": "ALIYUN::RDS::Instance::AccountPassword",
      "MinLength": 8,
      "MaxLength": 32,
      "NoEcho": true
    },
    "DBInstanceClass": {
      "Type": "String",
      "Label": {
        "en": "Instance Class",
        "zh-cn": "实例规格"
      },
      "AssociationProperty": "ALIYUN::RDS::Instance::InstanceType",
      "AssociationPropertyMetadata": {
        "ZoneId": "${ZoneId}",
        "EngineVersion": "8.0",
        "Engine": "MySQL",
        "Category": "HighAvailability",
        "DBInstanceStorageType": "cloud_essd",
        "CommodityCode": "bards"
      },
      "Default": "mysql.x4.medium.2c"
    },
    "DtsJobName": {
      "Type": "String",
      "Label": {
        "en": "Dts Job Name",
        "zh-cn": "同步任务名称"
      },
      "Description": {
        "en": "You are advised to configure a name with service significance (without unique requirement) for easy identification.",
        "zh-cn": "建议配置具有业务意义的名称(无唯一性要求),便于后续识别。"
      },
      "Default": "mysql2redis_dts"
    },
    "RedisInstanceClass": {
      "Type": "String",
      "Label": {
        "en": "Tair Specifications",
        "zh-cn": "Tair 规格"
      },
      "Description": {
        "en": "<font color='blue'><b>Before selecting a model, please confirm whether the model is in stock in the current availability zone. To save testing costs, it is recommended to use a model with 2G memory, for example:tair.rdb.2g</b></font>, see detail:<a href='https://help.aliyun.com/zh/redis/product-overview/enhanced-performance' target='_blank'><b><font color='red'>Specification inquiry</font></b></a>.",
        "zh-cn": "<font color='blue'><b>选择机型前请先确认当前可用区下该机型是否有库存,为节省测试成本,推荐使用2GB的规格,例如:tair.rdb.2g</b></font>,<a href='https://help.aliyun.com/zh/redis/product-overview/enhanced-performance' target='_blank'><b><font color='red'>规格查询</font></b></a>。"
      },
      "AssociationProperty": "ALIYUN::REDIS::Instance::InstanceClass",
      "AssociationPropertyMetadata": {
        "Engine": "Redis",
        "ProductType": "Tair_rdb",
        "InstanceChargeType": "PostPaid",
        "ZoneId": "${ZoneId1}",
        "OrderType": "BUY"
      },
      "Default": "tair.rdb.2g"
    },
    "RedisPassword": {
      "Type": "String",
      "Label": {
        "en": "Instance Password",
        "zh-cn": "实例密码"
      },
      "Description": {
        "en": "Length 8-32 characters, can contain size letters, Numbers and special symbols, including:! @ # $ % ^ & * ( ) _ + - =",
        "zh-cn": "长度8-32个字符,可包含大小字母、数字及特殊符号(包含:!@#$%^&*()_+-=)"
      },
      "ConstraintDescription": {
        "en": "8-32 characters, can contain size letters, Numbers and special symbols, including:! @ # $ % ^ & * ( ) _ + - =",
        "zh-cn": "8-32个字符,可包含大小字母、数字及特殊符号(包含:!@#$%^&*()_+-=)"
      },
      "MinLength": "8",
      "MaxLength": "32",
      "NoEcho": true
    }
  },
  "Resources": {
    "Vpc": {
      "Type": "ALIYUN::ECS::VPC",
      "Properties": {
        "CidrBlock": "192.168.0.0/16"
      }
    },
    "VSwitch": {
      "Type": "ALIYUN::ECS::VSwitch",
      "Properties": {
        "ZoneId": {
          "Ref": "ZoneId"
        },
        "VpcId": {
          "Ref": "Vpc"
        },
        "VSwitchName": {
          "Fn::Join": [
            "-",
            [
              "VSwitch",
              "StackId",
              {
                "Ref": "ALIYUN::StackId"
              }
            ]
          ]
        },
        "CidrBlock": "192.168.0.0/24"
      }
    },
    "RdsDBInstance": {
      "Type": "ALIYUN::RDS::DBInstance",
      "Properties": {
        "ZoneId": {
          "Ref": "ZoneId"
        },
        "VpcId": {
          "Ref": "Vpc"
        },
        "VSwitchId": {
          "Ref": "VSwitch"
        },
        "DBInstanceClass": {
          "Ref": "DBInstanceClass"
        },
        "DBInstanceStorage": 100,
        "Engine": "MySQL",
        "EngineVersion": "8.0",
        "MasterUserPassword": {
          "Ref": "RDSDBPassword"
        },
        "MasterUserType": "Super",
        "MasterUsername": {
          "Ref": "RDSDBUser"
        },
        "DBMappings": [
          {
            "CharacterSetName": "utf8mb4",
            "DBName": {
              "Ref": "DbName"
            }
          }
        ],
        "Category": "HighAvailability",
        "DBInstanceStorageType": "cloud_essd",
        "SecurityIPList": "192.168.0.0/16",
        "SlaveZoneIds": [
          {
            "Ref": "ZoneId"
          }
        ]
      }
    },
    "RedisInstance": {
      "Type": "ALIYUN::REDIS::Instance",
      "Properties": {
        "ZoneId": {
          "Ref": "ZoneId"
        },
        "VpcId": {
          "Ref": "Vpc"
        },
        "VSwitchId": {
          "Ref": "VSwitch"
        },
        "InstanceClass": {
          "Ref": "RedisInstanceClass"
        },
        "InstanceName": "rds_mysql2redis_redis",
        "EvictionPolicy": "noeviction",
        "EngineVersion": "6.0",
        "Password": {
          "Ref": "RedisPassword"
        }
      }
    },
    "Whitelist": {
      "Type": "ALIYUN::REDIS::Whitelist",
      "Properties": {
        "InstanceId": {
          "Ref": "RedisInstance"
        },
        "SecurityIps": "192.168.0.0/16"
      }
    },
    "MigrationJob": {
      "Type": "ALIYUN::DTS::SynchronizationJob2",
      "Properties": {
        "DtsJobName": {
          "Ref": "DtsJobName"
        },
        "SourceEndpoint": {
          "InstanceType": "RDS",
          "InstanceID": {
            "Ref": "RdsDBInstance"
          },
          "EngineName": "MYSQL",
          "Region": {
            "Ref": "ALIYUN::Region"
          },
          "UserName": {
            "Ref": "RDSDBUser"
          },
          "Password": {
            "Ref": "RDSDBPassword"
          }
        },
        "DestinationEndpoint": {
          "InstanceType": "Redis",
          "InstanceID": {
            "Ref": "RedisInstance"
          },
          "EngineName": "Redis",
          "Region": {
            "Ref": "ALIYUN::Region"
          },
          "Password": {
            "Ref": "RedisPassword"
          }
        },
        "StructureInitialization": false,
        "DelayNotice": true,
        "ErrorNotice": true,
        "DelayRuleTime": 60,
        "DataInitialization": true,
        "DataSynchronization": true,
        "DbList": {
          "Fn::GetJsonValue": [
            "DbList",
            {
              "Fn::Sub": "{ \"DbList\": { \"${DbName}\": {   \"name\": \"0\",   \"all\": true,   \"customAttachedColumn\": {     \"__DTS_TP_TO_REDIS_KEY__\": {       \"name\": \"__DTS_TP_TO_REDIS_KEY__\",       \"syntacticType\": \"ADD\",       \"value\": \"__DB__+'.'+__TB__+'.'+pk_str_with_name_value('.','.')\",       \"type\": \"STRING\",       \"length\": \"\"     },     \"__DTS_TP_TO_REDIS_VALUE__\": {       \"name\": \"__DTS_TP_TO_REDIS_VALUE__\",       \"syntacticType\": \"ADD\",       \"value\": \"tp2redis_json_value()\",       \"type\": \"STRING\",       \"length\": \"\"     }   } }}}"
            }
          ]
        }
      }
    },
    "DtsInstance": {
      "Type": "ALIYUN::DTS::Instance",
      "Properties": {
        "JobId": {
          "Fn::GetAtt": [
            "MigrationJob",
            "DtsJobId"
          ]
        },
        "InstanceClass": "small",
        "PayType": "PostPaid",
        "AutoStart": true,
        "Type": "SYNC",
        "SourceRegion": {
          "Ref": "ALIYUN::Region"
        },
        "DestinationRegion": {
          "Ref": "ALIYUN::Region"
        },
        "SourceEndpointEngineName": "MySQL",
        "DestinationEndpointEngineName": "Redis"
      }
    }
  },
  "Outputs": {
    "RdsInstanceAddress": {
      "Description": {
        "en": "RDS Instance Address.",
        "zh-cn": "RDS实例地址。"
      },
      "Value": {
        "Fn::Sub": [
          "https://rdsnext.console.aliyun.com/detail/${InstanceID}/basicInfo?region=${Region}",
          {
            "InstanceID": {
              "Ref": "RdsDBInstance"
            },
            "Region": {
              "Ref": "ALIYUN::Region"
            }
          }
        ]
      }
    },
    "TairInstanceAddress": {
      "Description": {
        "en": "Tair Instance Address.",
        "zh-cn": "Tair实例地址。"
      },
      "Value": {
        "Fn::Sub": [
          "https://kvstore.console.aliyun.com/Redis/instance/${Region}/${InstanceID}",
          {
            "InstanceID": {
              "Ref": "RedisInstance"
            },
            "Region": {
              "Ref": "ALIYUN::Region"
            }
          }
        ]
      }
    }
  },
  "Metadata": {
    "ALIYUN::ROS::Interface": {
      "ParameterGroups": [
        {
          "Parameters": [
            "ZoneId"
          ],
          "Label": {
            "default": {
              "en": "Infrastructure Configuration",
              "zh-cn": "基础资源配置(必填)"
            }
          }
        },
        {
          "Parameters": [
            "DBInstanceClass",
            "DbName",
            "RDSDBUser",
            "RDSDBPassword"
          ],
          "Label": {
            "default": "RDS"
          }
        },
        {
          "Parameters": [
            "RedisInstanceClass",
            "RedisPassword"
          ],
          "Label": {
            "default": "Tair"
          }
        },
        {
          "Parameters": [
            "DtsJobName"
          ],
          "Label": {
            "default": "DTS"
          }
        }
      ],
      "TemplateTags": [
        "acs:technical-solution:database:实时同步RDS与Redis构建缓存一致性-tech_solu_21"
      ]
    }
  }
}