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

使用Terraform+AWS Firelens将ECS日志路由到S3失败求助

解决AWS Firelens无法向S3推送日志的凭证与配置问题

从错误日志能明确看到核心问题:Firelens日志路由容器无法获取AWS凭证,导致调用S3的PutObject接口失败。以下是具体修复步骤:


1. 给ECS任务执行角色添加S3访问权限

当前ecs_task_execution_role缺少向目标S3桶写入日志的权限,需要附加IAM策略:

resource "aws_iam_policy" "firelens_s3_access" {
  name        = "firelens-s3-log-access"
  description = "授权Firelens向S3桶写入日志"
  policy = jsonencode({
    Version = "2012-10-17"
    Statement = [
      {
        Action   = ["s3:PutObject"]
        Effect   = "Allow"
        Resource = "arn:aws:s3:::xxx-logs-bucket/*"
      }
    ]
  })
}

resource "aws_iam_role_policy_attachment" "firelens_s3_attach" {
  role       = aws_iam_role.ecs_task_execution_role.name
  policy_arn = aws_iam_policy.firelens_s3_access.arn
}

2. 修正Firelens配置文件加载方式

Fargate环境无法直接读取本地./firelens.config文件,改用inline嵌入配置的方式:
修改log_router容器的firelensConfiguration:

firelensConfiguration = {
  "type" : "fluentbit",
  "config-file-type" : "inline",
  "config-file-value" : <<EOC
[OUTPUT]
    Name                         s3
    Match                        *
    bucket                       xxx-logs-bucket
    region                       ${var.aws_region}
    total_file_size              50M
    use_put_object               on
    compression                  gzip
    s3_key_format                /$TAG/%Y/%m/%d/%H_%M_%S/$UUID.gz
    s3_key_format_tag_delimiters .-
EOC
}

3. 移除重复的S3输出配置

你同时在app容器的日志驱动和Firelens全局配置里定义了S3输出,导致冲突。保留Firelens全局配置,修改app容器的日志配置:

logConfiguration = {
  "logDriver" : "awsfirelens",
  "options" : {
    "Name" : "firelens"
  }
}

4. 确认Fargate任务IMDS状态

错误中提到unable to evaluate IMDS version,确保Fargate任务未禁用IMDS(默认开启),保证容器能通过IMDS获取凭证。


内容的提问来源于stack exchange,提问作者Juzzn

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:43:25