typescript - DocDB 的 SubnetGroup.fromSomething()?
问题描述
我正在尝试为内部应用程序添加带有 cdk 的 DocDB 堆栈。在我的组织中,我们无法创建新的子网组。下面是运行失败的代码。我一直在查看文档,但我没有看到从 ARN/名称/ID 等获取现有子网组的选项...此功能是否存在或者我是否会出错?
// We are unauthorized to create subnet groups
const subnetGroup = new docdb.CfnDBSubnetGroup(this, `${ProjectSettings.PROJECT_NAME}-Subnet-Group`, {
subnetIds: [subnet1.subnetId, subnet2.subnetId],
dbSubnetGroupName: `${ProjectSettings.PROJECT_NAME}-Subnet-Group`,
dbSubnetGroupDescription: `${ProjectSettings.PROJECT_NAME} Subnet Group for DocumentDB`
});
const dbCluster = new docdb.CfnDBCluster(this, `${ProjectSettings.PROJECT_NAME}-Db-Cluster`, {
storageEncrypted: true,
availabilityZones: [ProjectSettings.AZ1_SLUG, ProjectSettings.AZ2_SLUG],
dbClusterIdentifier: `${ProjectSettings.PROJECT_NAME}Docdb`,
masterUsername: `${ProjectSettings.PROJECT_NAME}dbuser`,
masterUserPassword: ProjectSettings.DB_MASTER_PASS,
vpcSecurityGroupIds: [sg.securityGroupName],
dbSubnetGroupName: subnetGroup.dbSubnetGroupName, //How do I query for an existing subnetgroup?
port
});
dbCluster.addDependsOn(subnetGroup) //How do I query for an existing subnetgroup?
const dbInstance = new docdb.CfnDBInstance(this, `${ProjectSettings.PROJECT_NAME}-Db-Instance`, {
dbClusterIdentifier: dbCluster.ref,
autoMinorVersionUpgrade: true,
dbInstanceClass: "db.t3.medium",
//TODO: Change me to something else
dbInstanceIdentifier: "development",
});
dbInstance.addDependsOn(dbCluster);
解决方案
我最终使用 SDK 来查询现有的 SubnetGroup 名称,并在回调中使用 CDK 包装集群创建。
docDbSDK.describeDBSubnetGroups({}, (err, resp) => {
if (err) throw err;
if (resp.DBSubnetGroups) {
let subnetGroup = resp.DBSubnetGroups[0]
const dbCluster = new docdb.CfnDBCluster(this, `${ProjectSettings.PROJECT_NAME}-Db-Cluster`, {
storageEncrypted: true,
availabilityZones: [ProjectSettings.AZ1_SLUG, ProjectSettings.AZ2_SLUG],
dbClusterIdentifier: `${ProjectSettings.PROJECT_NAME}Docdb`,
masterUsername: `${ProjectSettings.PROJECT_NAME}dbuser`,
masterUserPassword: ProjectSettings.DB_MASTER_PASS,
vpcSecurityGroupIds: [sg.securityGroupName],
dbSubnetGroupName: subnetGroup.DBSubnetGroupName,
port
});
const dbInstance = new docdb.CfnDBInstance(this, `${ProjectSettings.PROJECT_NAME}-Db-Instance`, {
dbClusterIdentifier: dbCluster.ref,
autoMinorVersionUpgrade: true,
dbInstanceClass: "db.t3.medium",
//TODO: Change me to something else
dbInstanceIdentifier: "development",
});
dbInstance.addDependsOn(dbCluster);
// Add a ingress rule for the VPC CIDR
// TODO: Might not need to give access to the WHOLE VPC for the account...
sg.addIngressRule(ec2.Peer.ipv4(defaultVpc.vpcCidrBlock), ec2.Port.tcp(port));
// Found this in a how-to, testing output
new cdk.CfnOutput(this, `${ProjectSettings.PROJECT_NAME}-Db-URL`, {
value: `mongodb://${dbCluster.masterUsername}:${dbCluster.masterUserPassword}@${dbCluster.attrEndpoint}:${dbCluster.attrPort}`
});
}
})
看起来如果您使用 CDK 创建 DBCluster,您只需要引用子网组的名称。
推荐阅读
- r - verbatimTextOutput()不显示文本
- lyx - Lyx编译时的中文文件名
- list - 如何将 2 个列表与每个结果中的 2 个元素进行比较并返回第 3 个
- swift - UICollectionViewController 中的 UINavigationController
- sql - LARAVEL:使用购物车数量更新库存值
- azure-active-directory - Azure AD 中的 B2B、B2C 租户
- xamarin.android - 如何在 xamarin Android 中隐藏系统导航栏?
- android-studio - Android Studio - 扩展一个函数/方法中的所有内容
- generics - 使用特征和泛型重载类似行为
- javascript - 你可以在猫鼬字符串上使用 (max / min) 吗?