SubnetGroup.fromSomething () для DocDB?

Я пытаюсь добавить стек DocDB с cdk для внутреннего приложения. В моей организации мы не можем создавать новые группы подсетей. Ниже приведен код, который не удалось запустить. Я просматривал документы, но не вижу возможности получить существующую группу подсети из ARN / Name / 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);

person Parakoopa    schedule 27.05.2021    source источник
comment
Не могли бы вы добавить ошибку, возникающую при попытке обновить ресурсы с помощью предоставленного вами кода?   -  person miensol    schedule 29.05.2021


Ответы (1)


В итоге я использовал 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}`
                });
            }
        })

Похоже, что если вы создаете DBCluster с CDK, вам нужно только указать имя подсети.

person Parakoopa    schedule 01.06.2021