首页 > 解决方案 > 在非默认 VPC 中创建 CfnDBCluster?

问题描述

我正在尝试使用 AWS CDK (1.19.0) 创建一个无服务器极光数据库。但是,它将始终在区域的默认 VPC 中创建。如果我指定 vpc_security_group_id,cloudformation 会失败,因为提供的安全组位于与 aurora db 相同的堆栈中创建的 vpc 中。

"数据库实例和 EC2 安全组位于不同的 VPC。 "

这是我的代码示例:

from aws_cdk import (
    core,
    aws_rds as rds,
    aws_ec2 as ec2
)


class CdkAuroraStack(core.Stack):

    def __init__(self, scope: core.Construct, id: str, **kwargs) -> None:
        super().__init__(scope, id, **kwargs)

        # The code that defines your stack goes here
        vpc = ec2.Vpc(self, "VPC")

        sg = ec2.SecurityGroup(self, "SecurityGroup",
            vpc = vpc,
            allow_all_outbound = True    
        )

        cluster = rds.CfnDBCluster(self, "AuroraDB",
            engine="aurora",
            engine_mode="serverless",
            master_username="admin",
            master_user_password="password",
            database_name="databasename",
            vpc_security_group_ids=[
                sg.security_group_id
            ]
        )

我是否错过了某些东西并且可以在特定的 vpc 中创建 CfnDbCluster 或者这只是不可能的 atm?

感谢您的任何帮助和建议。祝你今天过得愉快!

标签: aws-cdk

解决方案


您应该创建一个数据库子网组并仅包含您希望 Amazon RDS 启动实例的子网。如果未指定,Amazon RDS 在默认 VPC 中创建一个数据库子网组。

您可以使用db_subnet_group_name属性来指定子网,但最好使用高级构造。在这种情况下,有一个称为 DatabaseCluster。

cluster = DatabaseCluster(
    scope=self, 
    id="AuroraDB",
    engine=DatabaseClusterEngine.AURORA,
    master_user=rds.Login(
        username="admin",
        password="Do not put passwords in your CDK code directly"
    ),
    instance_props={
        "instance_type": ec2.InstanceType.of(ec2.InstanceClass.BURSTABLE2, ec2.InstanceSize.SMALL),
        "vpc_subnets": {
            "subnet_type": ec2.SubnetType.PRIVATE
        },
        "vpc": vpc,
        "security_group": sg
    }
)

不要为您的数据库指定密码属性,CDK 默认分配 Secrets Manager 生成的密码。

请注意,此构造仍处于实验阶段,这意味着将来可能会发生重大变化。


推荐阅读