Snowplow RS Loader Server无法将S3数据加载至Redshift集群
Snowplow Redshift加载异常排查:SQS消息未消费、Redshift无数据
问题背景
- 已基于Snowplow社区版快速入门指南在AWS部署完整数据管道
- 自定义Schema存储于EC2上的Iglu Server数据库,触发点击事件后,S3中可正常生成富集事件(截图:
) - Redshift集群中未出现对应事件数据,推测RS Loader Server未完成S3到Redshift的加载流程
- 已配置Redshift安全组允许RS Loader Server安全组的入站流量
RS Loader Server的IAM策略
{ "Statement": [ { "Action": [ "s3:ListBucket", "s3:PutObject", "s3:GetObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::dev-snowplow-terraform-sample-bucket/", "arn:aws:s3:::dev-snowplow-terraform-sample-bucket/*" ] }, { "Action": [ "s3:GetObject" ], "Effect": "Allow", "Resource": [ "arn:aws:s3:::dev-snowplow-terraform-sample-bucket/*/shredding_complete.json" ] }, { "Action": [ "sqs:DeleteMessage", "sqs:GetQueueUrl", "sqs:ListQueues", "sqs:ChangeMessageVisibility", "sqs:ReceiveMessage", "sqs:SendMessage" ], "Effect": "Allow", "Resource": [ "arn:aws:sqs:<region>:<account_id>:dev-snowplow-rs-loader.fifo" ] }, { "Action": [ "logs:PutLogEvents", "logs:CreateLogStream", "logs:DescribeLogStreams" ], "Effect": "Allow", "Resource": [ "arn:aws:logs:<region>:<account_id>:log-group:/aws/ec2/dev-snowplow-rs-loader-server:*" ] }, { "Action": [ "sts:AssumeRole" ], "Effect": "Allow", "Resource": [ "arn:aws:iam::<account_id>:role/dev-snowplow-rs-loader-server-sts-credentials" ] } ], "Version": "2012-10-17" }
(注:已替换为正确的region和account_id)
关键现象
触发测试点击事件后,SQS队列dev-snowplow-rs-loader.fifo内有1条可用消息但从未被消费(截图:
),使用Snowplow官方Terraform配置未做任何自定义修改,需排查部署流程中的遗漏步骤。
排查建议
- 检查RS Loader Server运行状态:登录EC2实例,查看Loader服务是否正常启动(如
systemctl status snowplow-rs-loader),同时查看CloudWatch日志组/aws/ec2/dev-snowplow-rs-loader-server中的错误日志,确认是否存在权限或连接异常。 - 验证STS角色权限:检查IAM角色
dev-snowplow-rs-loader-server-sts-credentials的信任策略,确认是否允许RS Loader的实例角色执行sts:AssumeRole;同时确认该STS角色具备Redshift写入权限(如redshift:CopyCommand、redshift:ExecuteStatement)以及S3数据访问权限。 - 检查SQS队列配置:确认SQS队列的访问策略允许RS Loader的IAM角色进行消息接收、删除操作;检查队列可见性超时设置,排除消息被锁定无法消费的情况。
- 测试Redshift连通性:在RS Loader Server的EC2实例上,尝试用
psql直接连接Redshift集群,验证网络和认证配置是否正确。 - 确认Shredding流程完整性:检查S3目标路径下是否生成
shredding_complete.json文件,该文件是触发Loader加载的必要条件;同时确认Shredder组件运行正常,自定义Schema的shredding过程未出错。
内容的提问来源于stack exchange,提问作者jahanzaib younis
相关产品推荐
相关产品推荐

