10分钟部署aws-lambda-redshift-loader:CloudFormation一键搭建Redshift自动加载器
【免费下载链接】aws-lambda-redshift-loaderawslabs/aws-lambda-redshift-loader: 一个基于 AWS Lambda 的 Amazon Redshift 数据加载工具,适合在需要将数据加载到 Redshift 数据库的场景中,可以实现高效的数据加载和导出。项目地址: https://gitcode.com/gh_mirrors/aw/aws-lambda-redshift-loader
aws-lambda-redshift-loader 是一个基于 AWS Lambda 的 Amazon Redshift 数据自动加载工具。只需把 CSV、JSON、AVRO 文件丢进 S3 指定前缀,它会自动分批、去重并执行 COPY 命令,将数据高效加载进一个或多个 Redshift 集群——全程零服务器运维。本文教你用 CloudFormation 在 10 分钟内一键完成部署。
💡 适合人群:需要在 S3 与 Redshift 之间做自动化数据入仓的初学者与数据工程师。
你将获得:
- ✅ 用 CloudFormation 模板一键搭建完整基础设施
- ✅ 通过
setup.js向导完成加载器配置 - ✅ 用 sample 样例数据验证端到端自动加载
- ✅ 掌握 VPC 内网连接与日常运维技巧
零运维的 Redshift 自动加载架构
传统做法需要自建服务器轮询文件系统、管理加载工作流;而 aws-lambda-redshift-loader 用事件驱动的 AWS Lambda 彻底取代了这些服务器:S3 每新增一个文件都会触发 Lambda,它借助 DynamoDB 记录待加载清单,确保每个文件只加载一次,并自动把文件缓冲成「批次」,再并行 COPY 到多个 Redshift 集群。
核心能力一览:
- 📦自动分批:按文件数量、字节大小或超时时间触发加载
- 🔄并行多集群:同一份数据可同时写入多个 Redshift 集群
- 🔐密钥加密:数据库密码与 S3 密钥经 KMS 加密后存入 DynamoDB
- 🔔SNS 通知:加载成功/失败可推送邮件、HTTP 或触发下游 Lambda
- 📄多格式支持:CSV(任意分隔符)、JSON、AVRO
一键部署:CloudFormation 快速开始
项目内置两套 CloudFormation 模板:非 VPC 环境用 deploy.yaml,VPC 环境用 deploy-vpc.yaml。下面走最快路径。
第一步:准备 KMS 密钥与 IAM 用户
- 在 KMS 中创建一枚密钥,并设置别名为
LambdaRedshiftLoaderKey(setup.js 通过这个别名识别密钥,用于加密数据库密码)。 - 创建一个具备操作权限的 IAM 用户,并记下它的 Access Key——创建堆栈时需作为输入参数。
第二步:创建 CloudFormation 堆栈
根据你的网络环境选择模板并填入参数:
KmsKeyArn:上一步 KMS 密钥的 ARN- (VPC 环境)子网 ID 与授予 Lambda 的安全组
⚠️ 模板创建时不会交叉校验输入参数,请确认所选子网可用区符合预期;堆栈会在你调用模板的区域内创建。
堆栈会自动创建 Lambda 触发函数LambdaRedshiftLoader、执行角色(含 DynamoDB、S3、KMS、SNS 权限)及触发器。注意:KMS 密钥与 Redshift 集群需你单独创建。
VPC 内网连接要点
如果 Redshift 集群在 VPC 内,Lambda 需部署到私有子网,并通过 NAT 网关访问公网、通过路由表连接 S3 与 DynamoDB。可参考 deploy-vpc.yaml 与完整网络指南 Networking.md。
配置加载器:setup.js 交互向导
堆栈只搭建基础设施,还需在你的本机或 EC2 上运行配置脚本(可用 deploy-admin-host.yaml 一键拉起配好环境的 EC2)。先克隆仓库并安装依赖:
git clone https://gitcode.com/gh_mirrors/aw/aws-lambda-redshift-loader cd aws-lambda-redshift-loader && npm install export AWS_REGION=eu-central-1运行交互式向导:
node setup.js向导会依次询问:监控的 S3 桶与前缀、Redshift 端点/端口/库名/表名、数据格式(CSV/JSON/AVRO)、Manifest 存储位置、批处理大小与超时等;提交前密码会经 KMS 加密。所有加载生命周期数据存于 3 张自动创建的 DynamoDB 表:
| 表名 | 作用 |
|---|---|
LambdaRedshiftBatchLoadConfig | 各 S3 前缀的加载配置 |
LambdaRedshiftBatches | 历史与进行中的批次状态 |
LambdaRedshiftProcessedFiles | 已处理文件清单(用于去重) |
💡 偏好脚本化?可用 setup-file.js 读取 config.json 完成无交互配置。
验证端到端自动加载
仓库的 sample/ 提供了完整示例:sample/scripts/configureSample.sh 会创建样例用户与表并跑通配置;把 sample/data/ 里的 CSV 同步到输入前缀即可看到自动加载:
aws s3 sync sample/data s3://<你的桶>/input --region <region>稍后到 Lambda 控制台查看 CloudWatch 日志,即可看到两个各含 2 个文件的已加载批次,以及 1 个开放批次。每个已处理文件都会记录在 DynamoDB 中,形成可追溯的加载档案:
日常运维与实用技巧
- 查看批次状态:
node queryBatches.js --region <region> --batchStatus error快速定位失败批次(queryBatches.js) - 重跑失败批次:
reprocessBatch.js会清除去重标记并触发 S3 事件重新加载(reprocessBatch.js) - 解锁卡死批次:批次被锁定但无进程时,用 unlockBatch.js 恢复为 open 状态
- 更新存储密码:用
encryptValue.js重新加密后更新 DynamoDB(encryptValue.js)
性能建议:把batchSize设为集群 CPU 核数的整数倍,使加载间隔落在 2–5 分钟;batchTimeoutSecs不建议低于 120 秒。稀疏前缀可结合 createS3TriggerFile.js 定时生成触发文件,强制周期性加载。
项目文件导览
| 文件 | 说明 |
|---|---|
| index.js | Lambda 主入口,事件处理与 COPY 加载逻辑 |
| deploy.yaml | 非 VPC 环境 CloudFormation 模板 |
| deploy-vpc.yaml | VPC 环境 CloudFormation 模板 |
| setup.js | 交互式配置向导 |
| common.js | 通用工具与 setup 核心逻辑 |
| constants.js | 表名、批次状态等常量定义 |
📌 说明:新项目可优先考虑 Redshift 原生 Auto COPY 能力;aws-lambda-redshift-loader 的独特价值在于多集群并行、灵活的批处理策略与细粒度工作流控制。
【免费下载链接】aws-lambda-redshift-loaderawslabs/aws-lambda-redshift-loader: 一个基于 AWS Lambda 的 Amazon Redshift 数据加载工具,适合在需要将数据加载到 Redshift 数据库的场景中,可以实现高效的数据加载和导出。项目地址: https://gitcode.com/gh_mirrors/aw/aws-lambda-redshift-loader
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考