能否通过Terraform将AWS Redshift日志同时发送至CloudWatch和S3?
AWS Redshift能否通过Terraform同时将日志发送到S3和CloudWatch?
问题描述
我们计划通过Terraform在AWS账户中部署Redshift,查阅Terraform Registry文档后发现,redshift_cluster资源的log_destination_type仅支持选择s3或cloudwatch其中一种。我们想知道是否可以将日志同时发送至这两个服务?如果可以,能否通过Terraform实现?
补充:尝试添加两个logging块时无法生效,执行terraform validate时出现如下错误:
│ Error: Attribute redefined
│
│ on redshift.tf line 36, in module "redshift":
│ 36: logging = {
│
│ The argument "logging" was already set at redshift.tf:30,3-10. Each argument may be set only once.
回答
- 无法直接通过Terraform的
redshift_cluster资源同时将日志发送到S3和CloudWatch。核心原因是AWS Redshift本身不支持同时配置两种日志目标类型,Terraform的redshift_cluster资源只是对AWS原生API的封装,自然受限于这个底层限制。 - 你遇到的
Attribute redefined错误,是Terraform的语法规则导致的:logging参数属于单值配置项,重复设置会触发参数重复定义的校验错误,和Redshift本身的功能限制是两回事。 - 可行的替代方案:
- CloudWatch转S3:先将Redshift日志配置到CloudWatch,再通过CloudWatch Logs的订阅过滤器,把日志转发到指定S3存储桶。需要额外配置
aws_cloudwatch_log_subscription_filter资源,以及对应的IAM权限(允许CloudWatch向S3写入日志)。 - S3转CloudWatch:先配置S3作为Redshift日志目标,再通过S3事件通知触发Lambda函数,将日志同步到CloudWatch Logs。这种方式步骤更多,复杂度更高,一般优先选第一种方案。
- CloudWatch转S3:先将Redshift日志配置到CloudWatch,再通过CloudWatch Logs的订阅过滤器,把日志转发到指定S3存储桶。需要额外配置
内容的提问来源于stack exchange,提问作者philMarius
相关产品推荐
相关产品推荐

