我正在尝试使用AWS CDK(1.19.0)创建无服务器的Aurora数据库。但是,它将始终在该区域的默认VPC中创建。如果我指定了vpc_security_group_id,由于提供的安全组位于与aurora数据库位于同一堆栈中的vpc中,则cloudformation失败。
“ 数据库实例和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不可能?
感谢您的帮助和建议。祝你有美好的一天!
答案 0 :(得分:0)
您应该创建一个数据库子网组,并且仅包括您想要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生成的密码。
仅需注意,此构造仍处于实验阶段,这意味着将来可能会有重大变化。