如何将S3数据迁移至Aurora Serverless v1 PostgreSQL?求最简方案
迁移S3 CSV至Aurora Serverless v1 PostgreSQL的可行方案
一、原生Aurora S3导入(无需额外代码)
AWS文档中的PostgreSQL S3导入功能完全兼容Aurora Serverless v1(只要集群运行PostgreSQL 10及以上版本,v1支持该版本范围)。针对你无法配置s3扩展的问题,按以下步骤操作:
步骤1:配置IAM角色权限
创建IAM角色,附加AmazonS3ReadOnlyAccess策略,通过RDS控制台或CLI将该角色关联到你的Aurora Serverless集群(需关联到集群而非单个实例)。步骤2:启用rds_s3扩展
通过aws rds-dataCLI执行扩展创建命令:aws rds-data execute-statement \ --resource-arn <你的Aurora集群ARN> \ --secret-arn <你的数据库凭证ARN> \ --database <目标数据库名> \ --sql "CREATE EXTENSION IF NOT EXISTS rds_s3;"步骤3:执行CSV导入
提前创建与CSV结构匹配的目标表,然后运行导入SQL:SELECT rds_s3.import_from_s3( 'your_target_table', '', -- 若CSV列顺序与表完全一致,留空即可;否则指定列名,如'col1,col2' 'DELIMITER '',''', -- CSV分隔符,根据实际调整 's3://your-bucket/path/to/file.csv', 'us-east-1' -- 存储桶所在区域 );
二、Lambda轻量迁移方案
如果原生导入受限于网络或权限配置,Lambda是快速落地的替代方案:
步骤1:配置Lambda权限
给Lambda函数附加两个IAM权限:S3只读访问权限、RDS Data API调用权限。步骤2:编写迁移代码
以下是简化的Python示例(适配aws rds-dataAPI):import boto3 import csv from io import StringIO s3_client = boto3.client('s3') rds_data_client = boto3.client('rds-data') def lambda_handler(event, context): # 从事件中获取S3桶和文件路径 bucket_name = event['bucket'] file_key = event['key'] # 读取S3中的CSV内容 s3_response = s3_client.get_object(Bucket=bucket_name, Key=file_key) csv_content = s3_response['Body'].read().decode('utf-8') csv_reader = csv.reader(StringIO(csv_content)) # 跳过表头(如果CSV包含表头) next(csv_reader) # 逐行插入数据库 for row in csv_reader: insert_sql = """ INSERT INTO your_target_table (col1, col2, col3) VALUES (:val1, :val2, :val3) """ rds_data_client.execute_statement( resourceArn='<你的Aurora集群ARN>', secretArn='<你的数据库凭证ARN>', database='<目标数据库名>', sql=insert_sql, parameters=[ {'name': 'val1', 'value': {'stringValue': row[0]}}, {'name': 'val2', 'value': {'stringValue': row[1]}}, {'name': 'val3', 'value': {'stringValue': row[2]}} ] ) return {'statusCode': 200, 'body': 'CSV导入完成'}步骤3:触发执行
可手动测试Lambda函数,或配置S3事件触发(当CSV文件上传到指定桶时自动执行迁移)。
内容的提问来源于stack exchange,提问作者Boris
相关产品推荐
相关产品推荐

