AWS CDK TypeScript配置RDS集群时InstanceProps类型报错如何解决
AWS CDK TypeScript RDS集群engine/engineVersion类型报错修复方案
错误根因
rds.DatabaseCluster构造函数的engine参数要求传入IClusterEngine类型的单个实例,engineVersion要求传入对应引擎的版本实例,你给两个参数都额外添加了数组包裹符[],导致类型匹配失败。
修复方法
- 去掉
engine和engineVersion参数外层的数组包裹符[] - 有两种合法配置方式,二选一即可:
- 方式一:将版本参数直接传入
auroraPostgres工厂方法的配置项中,无需单独声明engineVersion参数 - 方式二:单独声明
engine和engineVersion两个参数,都不要加数组包裹
- 方式一:将版本参数直接传入
正确代码示例
方式一(推荐写法)
import * as cdk from 'aws-cdk-lib'; import * as rds from 'aws-cdk-lib/aws-rds'; import * as ec2 from 'aws-cdk-lib/aws-ec2'; export class RdsStack extends cdk.Stack { constructor(scope: cdk.App, id: string, props?: cdk.StackProps) { super(scope, id, props); // 替换为你业务中使用的VPC实例 const vpc = ec2.Vpc.fromLookup(this, 'ExistingVpc', { isDefault: true }); // 你之前创建的安全组实例 const dbClusterSecurityGroup = new ec2.SecurityGroup(this, 'DbClusterSG', { vpc, description: 'Aurora Postgres集群访问安全组' }); // 集群声明完整示例 const auroraCluster = new rds.DatabaseCluster(this, 'AuroraPostgresCluster', { // 去掉数组包裹,调用工厂方法传入版本配置 engine: rds.DatabaseClusterEngine.auroraPostgres({ version: rds.AuroraPostgresEngineVersion.VER_13_3 }), vpc, instanceProps: { instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.MEDIUM), vpcSubnets: { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS }, // 安全组要求数组类型,你之前的调整是正确的 securityGroups: [dbClusterSecurityGroup] }, // 其他业务参数按需补充 backup: { retention: cdk.Duration.days(7) } }); } }
方式二(单独声明engineVersion)
const auroraCluster = new rds.DatabaseCluster(this, 'AuroraPostgresCluster', { // 去掉数组包裹 engine: rds.DatabaseClusterEngine.auroraPostgres(), // 去掉数组包裹 engineVersion: rds.AuroraPostgresEngineVersion.VER_13_3, // 其他参数和方式一保持一致 vpc, instanceProps: { instanceType: ec2.InstanceType.of(ec2.InstanceClass.T3, ec2.InstanceSize.MEDIUM), vpcSubnets: { subnetType: ec2.SubnetType.PRIVATE_WITH_EGRESS }, securityGroups: [dbClusterSecurityGroup] } })
内容的提问来源于stack exchange,提问作者Ashish Karpe
相关产品推荐
相关产品推荐

