You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python CDK创建Aurora PostgreSQL实例报AllocatedStorage为空错误

问题描述

使用Python编写AWS CDK代码创建Aurora PostgreSQL集群与数据库实例时部署失败,运行代码抛出报错:

"db_instance (dbinstance) Property AllocatedStorage cannot be empty"
根据AWS官方文档说明,Amazon Aurora场景下AllocatedStorage属性并非必填项,手动补充该属性及其他关联配置后仍无法成功创建实例。额外测试确认:移除数据库实例创建逻辑后,集群可正常创建成功,期望最终创建的资源效果参考下图:
Aurora postgreSQL

复现代码
import json

from constructs import Construct
from aws_cdk import (
Stack,
aws_secretsmanager as asm,
aws_ssm as ssm,
aws_rds as rds,
)

from settings import settings


class DatabaseDeploymentStack(Stack):

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

    stage_name = settings.stage
    region = Stack.of(self).region
    account = Stack.of(self).account

    db_username = 'customdbuser' #settings.db_username
    db_name = f'netsol_{stage_name}_db'
    db_resource_prefix = f'netsol-{region}-{stage_name}'

    print(db_resource_prefix)

    is_staging: bool = stage_name == 'staging'

    generated_secret_string = asm.SecretStringGenerator(
        secret_string_template=json.dumps({"username": f"{db_username}"}),
        exclude_punctuation=True,
        include_space=False,            
        generate_string_key='password'
    )

    db_credentials_secret = asm.Secret(
        self, 'db_credentials_secret',
        secret_name=f'{db_resource_prefix}-credentials',
        generate_secret_string=generated_secret_string
    )

    ssm.StringParameter(
        self, 'db_credentials_arn',
        parameter_name=f'{db_resource_prefix}-credentials-arn',
        string_value=db_credentials_secret.secret_arn
    )

    scaling_configuration = rds.CfnDBCluster.ScalingConfigurationProperty(
        auto_pause=True,
        max_capacity=4 if is_staging else 384,
        min_capacity=2,
        seconds_until_auto_pause=900 if is_staging else 10800
    )

    db_cluster = rds.CfnDBCluster(
        self, 'db_cluster',
        db_cluster_identifier=f'{db_resource_prefix}-clusterabz',
        engine_mode='serverless',
        engine='aurora-postgresql',            
        engine_version='10.14',
        enable_http_endpoint=True,
        database_name=db_name,
        master_username='abz', 
        master_user_password='Password123',
        backup_retention_period=1 if is_staging else 30,
        scaling_configuration=scaling_configuration,
        deletion_protection=False if is_staging else False
        
    )

    db_cluster_arn = f'arn:aws:rds:{region}:{account}:cluster:{db_cluster.ref}'

    ssm.StringParameter(
        self, 'db_resource_arn',
        parameter_name=f'{db_resource_prefix}-resource-arn',
        string_value=db_cluster_arn
    )

    cfn_dBInstance = rds.CfnDBInstance(
        self, "db_instance",
        db_instance_class="db.t3.medium",
        
        )
问题根因
  • 代码中创建的是Aurora Serverless v1集群(指定engine_mode='serverless'、引擎版本为10.14,属于Serverless v1版本范畴),该类型集群不需要手动创建CfnDBInstance资源,Aurora服务会自动完成Serverless实例的拉起、扩缩容全生命周期管理。你额外手动添加的rds.CfnDBInstance没有关联到对应Aurora集群,会被CloudFormation识别为独立的普通RDS实例,而普通RDS实例强制要求传入AllocatedStorage参数,因此触发报错。
  • 即使是为Aurora预置版集群创建读写/只读实例,CfnDBInstance配置也必须补充db_cluster_identifier参数将实例挂载到目标集群下,缺失该参数同样会被判定为独立普通RDS实例。
  • 代码中配置的db.t3.medium是普通RDS实例规格,不适用于Aurora集群,Aurora有专属的实例规格族;同时Aurora Serverless v1不支持手动指定实例规格,容量完全由scaling_configuration中的ACU参数控制。
修复方案
  • 如果目标是创建和参考截图一致的Aurora Serverless v1集群:直接删除代码中cfn_dBInstance = rds.CfnDBInstance(...)的全部创建逻辑即可,集群创建完成后会自动生成对应的Serverless数据库实例,完全匹配预期效果。
  • 如果目标是创建Aurora预置版(非Serverless)集群:
    • 删除engine_mode='serverless'和scaling_configuration配置,选择支持预置模式的Aurora PostgreSQL引擎版本
    • 在CfnDBInstance配置中补充db_cluster_identifier=db_cluster.ref参数,将实例关联到目标集群
    • 配置Aurora支持的专属实例类(如db.r6g.large),此时不需要手动指定AllocatedStorage参数,Aurora会自动管理存储配置。

内容的提问来源于stack exchange,提问作者yaml learning

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 16:48:25