如何在AWS CDK项目/堆栈中导入现有Aurora MySQL集群
非Serverless Aurora MySQL集群导入CDK堆栈操作方法
完全可以实现,无需重新创建现有集群资源,通过CDK的资源导入功能即可完成操作,后续配置权限、S3导入属性均可基于导入后的资源对象直接配置。
核心导入步骤
通过aws-cdk-lib.aws_rds.DatabaseCluster.fromDatabaseClusterAttributes()静态方法导入现有集群,提前准备好以下必填参数:
- 集群所在VPC,可通过
ec2.Vpc.fromLookup()方法导入现有VPC - 集群安全组,可通过
ec2.SecurityGroup.fromSecurityGroupId()方法导入 - 集群唯一标识
clusterIdentifier,即你在AWS控制台看到的集群名称 - 集群对应引擎信息,明确指定为Aurora MySQL,版本匹配你实际运行的版本即可
S3导入功能配置
要开启Aurora MySQL从S3导入数据的能力,需要完成两项配置:
- 为集群绑定具备目标S3桶读取权限的IAM角色,信任实体设置为
rds.amazonaws.com,权限包含s3:ListBucket、s3:GetObject - 在集群关联的参数组中配置
aurora_load_from_s3_role参数,值为上述IAM角色的ARN
如果同时需要S3导出能力,可同步配置
aurora_select_into_s3_role参数,给角色添加对应S3写入权限即可
权限配置说明
- 如需给其他AWS资源(如EC2、Lambda)开放集群访问权限,直接修改导入集群关联的安全组入站规则即可
- 如需给集群开通访问其他AWS服务的权限,直接给集群绑定的IAM角色添加对应权限策略即可
参考代码示例(TypeScript)
import * as cdk from 'aws-cdk-lib'; import * as rds from 'aws-cdk-lib/aws-rds'; import * as ec2 from 'aws-cdk-lib/aws-ec2'; import * as iam from 'aws-cdk-lib/aws-iam'; const app = new cdk.App(); const stack = new cdk.Stack(app, 'ImportExistingAuroraStack', { env: { region: '你的集群所在区域', account: '你的AWS账号ID' } }); // 导入集群所在VPC const vpc = ec2.Vpc.fromLookup(stack, 'ExistingVpc', { vpcId: 'vpc-替换为你的VPCID' }); // 导入集群关联的安全组 const auroraSecurityGroup = ec2.SecurityGroup.fromSecurityGroupId(stack, 'AuroraSG', 'sg-替换为你的安全组ID' ); // 导入现有Aurora MySQL集群 const existingAurora = rds.DatabaseCluster.fromDatabaseClusterAttributes(stack, 'ImportedAurora', { clusterIdentifier: '替换为你的Aurora集群名称', engine: rds.DatabaseClusterEngine.auroraMysql({ version: rds.AuroraMysqlEngineVersion.VER_3_03_0 // 替换为你实际使用的版本 }), vpc: vpc, securityGroups: [auroraSecurityGroup] }); // 创建S3访问角色 const s3ImportRole = new iam.Role(stack, 'AuroraS3ImportRole', { assumedBy: new iam.ServicePrincipal('rds.amazonaws.com') }); // 给角色添加目标S3桶的读取权限 s3ImportRole.addToPolicy(new iam.PolicyStatement({ effect: iam.Effect.ALLOW, actions: ['s3:GetObject', 's3:ListBucket'], resources: [ 'arn:aws:s3:::替换为你的桶名称', 'arn:aws:s3:::替换为你的桶名称/*' ] })); // 将角色绑定到Aurora集群 existingAurora.addRole(s3ImportRole);
内容的提问来源于stack exchange,提问作者YoCollabStackoverFlow
相关产品推荐
相关产品推荐

