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

如何将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-data CLI执行扩展创建命令:

    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-data API):

    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:02:07