aws-cdk - 在非默认 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?
感谢您的任何帮助和建议。祝你今天过得愉快!
解决方案
您应该创建一个数据库子网组并仅包含您希望 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 生成的密码。
请注意,此构造仍处于实验阶段,这意味着将来可能会发生重大变化。
推荐阅读
- reactjs - 无法从我的类组件的某些功能组件访问 this.state.value
- c++ - C++ 模板类头文件/实现 - 涉及模板类的函数
- sql - 使用 join 时出错,join 会产生错误
- java - 为什么我会收到 NoSuchElementException?
- ios - 异步任务后在 SwiftUI 中的正确导航方式
- file - 重新编辑现有游戏
- javascript - 获取负数组索引
- mysql - 选择具有关系的多对多数据并在结果中添加新列
- android - 应用程序:compileDebugJavaWithJavac'。> 找不到 tools.jar 无法启动模拟器。原因:没有找到模拟器作为 `emulator -list-avds` 的输出
- html - 将图片链接作为道具传递