amazon-web-services - 自定义 VPC 子网的 RDS 问题
问题描述
我正在尝试使用 CDK 定义无服务器 Postgres Aurora 集群,但一直遇到关于 VPC 子网“无效”或“不存在”的问题,具体取决于我尝试使用的数据库集群构造。在我的设置中,我有 2 个堆栈:1 个用于 VPC,1 个用于 RDS。
这是我的 Vpc 堆栈的内容:
const vpc = new Vpc(this, 'Vpc');
const privateSubnetIds = vpc.selectSubnets({
subnetType: SubnetType.PRIVATE
}).subnetIds;
const rdsSecurityGroup = new SecurityGroup(this, 'RdsSecurityGroup', {
securityGroupName: 'rds-security-group',
allowAllOutbound: true,
description: `RDS cluster security group`,
vpc: vpc
});
...
// The rest of the file defines exports.
情况1:
最初,我尝试使用CfnDBCluster
asDatabaseCluster
不允许您直接定义engineMode: 'serverless'
and enableHttpEndpoint: true
。以下是使用该CfnDBCluster
构造的 RDS 堆栈的内容:
// The beginning of the file imports all the VPC exports from the VPC Stack:
// subnetIds (for the private subnet), securityGroupId
...
const databaseSecret = new DatabaseSecret(this, 'secret', {
username: 'admin'
});
const secretArn = databaseSecret.secretArn;
const dbSubnetGroup = new CfnDBSubnetGroup(this, "DbSubnetGroup", {
dbSubnetGroupDescription: `Database cluster subnet group`,
subnetIds: subnetIds
});
const dbCluster = new CfnDBCluster(this, 'DbCluster', {
dbClusterIdentifier: 'aurora-cluster',
engine: 'aurora-postgresql',
engineMode: 'serverless',
databaseName: DB_NAME,
masterUsername: databaseSecret.secretValueFromJson('username').toString(),
masterUserPassword: databaseSecret.secretValueFromJson('password').toString(),
enableHttpEndpoint: true,
scalingConfiguration: {
autoPause: true,
minCapacity: 1,
maxCapacity: 16,
secondsUntilAutoPause: 300
},
vpcSecurityGroupIds: [securityGroupId],
dbSubnetGroupName: dbSubnetGroup.dbSubnetGroupName
});
使用该CfnDBCluster
构造,我收到以下错误:
Some input subnets in :[subnet-044631b3e615d752c,subnet-05c2881d9b13195ef,subnet-03c63ec89ae49a748] are invalid. (Service: AmazonRDS; Status Code: 400; Error Code: InvalidParameterValue; Request ID: 5c4e6237-6527-46a6-9ed4-1bc46c38dce0)
我能够在 RDS 堆栈运行之前验证这些子网确实存在。
案例二:
在无法使CfnDBCluster
上面的示例正常工作后,我尝试使用DatabaseCluster
带有原始覆盖的构造。以下是使用该DatabaseCluster
构造的 RDS 堆栈的内容:
// The beginning of the file imports all the VPC exports from the VPC Stack:
// subnetIds (for the private subnet), securityGroupId, vpcId, AZs, vpc (using Vpc.fromAttributes)
...
const dbCluster = new DatabaseCluster(this, 'DbCluster', {
engine: DatabaseClusterEngine.auroraPostgres({
version: AuroraPostgresEngineVersion.VER_10_7
}),
masterUser: {
username: databaseSecret.secretValueFromJson('username').toString(),
password: databaseSecret.secretValueFromJson('password')
},
instanceProps: {
vpc: vpc,
vpcSubnets: {
subnetType: SubnetType.PRIVATE
}
},
});
const cfnDbCluster = dbCluster.node.defaultChild as CfnDBCluster;
cfnDbCluster.addPropertyOverride('DbClusterIdentifier', 'rds-cluster');
cfnDbCluster.addPropertyOverride('EngineMode', 'serverless');
cfnDbCluster.addPropertyOverride('DatabaseName', DB_NAME);
cfnDbCluster.addPropertyOverride('EnableHttpEndpoint', true);
cfnDbCluster.addPropertyOverride('ScalingConfiguration.AutoPause', true);
cfnDbCluster.addPropertyOverride('ScalingConfiguration.MinCapacity', 1);
cfnDbCluster.addPropertyOverride('ScalingConfiguration.MaxCapacity', 16);
cfnDbCluster.addPropertyOverride('ScalingConfiguration.SecondsUntilAutoPause', 300);
cfnDbCluster.addPropertyOverride('VpcSecurityGroupIds', subnetIds);
使用该DatabaseCluster
构造,我收到以下错误:
There are no 'Private' subnet groups in this VPC. Available types:
我能够验证 VPC 确实有一个私有子网,我还验证了它是否已正确导入并且子网都具有预期的标签,即 key: 'aws-cdk:subnet-type' value: 'Private'
这个问题让我感到困惑和困惑,我无法弄清楚为什么会出现这些问题,并且希望能提供帮助解决此问题的任何指导。
参考:
笔记:
- 我正在使用
1.56.0
带有 Typescript 的CDK 版本
解决方案
如果您在获得后访问此页面 -
Some input subnets in :[subnet-XXXX,subnet-YYYY,subnet-ZZZZ] are invalid.
您可能检查并确认这些子网不存在,并努力寻找这些子网的来源。
CDK 仍然指向这些子网的原因cdk.context.json
是它仍然包含上次部署的值。
从文档-
上下文值是可以与堆栈或构造相关联的键值对。AWS CDK 使用上下文缓存来自您的 AWS 账户的信息,例如您账户中的可用区或用于启动您的实例的 Amazon 系统映像 (AMI) ID。
将所有 JSON 内容替换为有效内容 ( {}
) 并重新部署堆栈。
推荐阅读
- vb.net - How to one file copy to all subfolders
- .htaccess - 如何在 CodeIgniter(HMVC) 中将旧的动态 url 重定向到新的动态 url
- python-3.x - TypeError: init() 得到了一个意外的关键字参数“n_iter”
- python - 从右到左更改 Jupyter 笔记本
- python - 在python中,当我在bitestreams中读取jpeg文件时,我希望jpeg文件只有十六进制值,但我发现所有特殊字符(,!,#,$等
- android - 从现有 Room 数据库迁移到 Sqlcipher
- python - Windows / Python:执行键入序列的键盘快捷键
- wordpress - Header menu navigates from another page to another to a specific section
- sql - Got integer result when printed return numeric
- ionic-framework - 更新到 ionic 5 和 Angular 9 后,错误 TS2698: Spread types may only be created from object types