Redshift UNLOAD至S3报错咨询:端点与区域授权问题
解决Redshift UNLOAD到S3的区域端点与授权头错误问题
我来帮你搞定这个UNLOAD的问题——我之前处理过几乎一模一样的场景,核心问题出在Redshift UNLOAD命令的区域指定和S3路径格式上,咱们一步步来解决:
正确的UNLOAD命令写法
你不需要修改S3路径的格式(保持官方文档的s3://mybucket/即可),只需要在命令里添加REGION参数,强制指定你的桶所在的eu-west-2区域。修正后的命令如下:
UNLOAD ('select * from mytable') TO 's3://mybucket/' IAM_ROLE 'arn:aws:iam::0123456789:role/aws-service-role/redshift.amazonaws.com/AWSServiceRoleForRedshift' REGION 'eu-west-2';
为什么之前会报错?
咱们拆解下两个错误的原因:
- 301永久重定向错误:当你只写
s3://mybucket/却没指定REGION时,Redshift默认会用us-east-1的S3端点去请求,但你的桶在eu-west-2,S3会拒绝并要求你使用对应区域的端点,所以返回301错误。 - 授权头格式错误:你手动把路径改成带域名的格式(比如
s3://mybucket.s3.eu-west-2.amazonaws.com/),这不符合Redshift UNLOAD的路径规则——Redshift会把整个mybucket.s3.eu-west-2.amazonaws.com当成桶名,然后还是用默认的us-east-1区域去生成授权头,自然就出现了“期望区域为us-east-1”的错误。
额外检查点
确保这两个配置没问题,避免后续踩坑:
- 确认IAM角色权限:该角色必须拥有
s3:PutObject权限到目标S3桶,并且信任关系里正确添加了Redshift服务的信任策略。 - 再次核对区域:确保Redshift集群和S3桶确实都在
eu-west-2,别出现拼写错误(比如把eu-west-2写成eu-west-1)。
内容的提问来源于stack exchange,提问作者Thierry J
相关产品推荐
相关产品推荐

