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

通过Terraform修改非Terraform创建的已有ELB并启用访问日志

使用Terraform导入现有ELB并启用访问日志

核心需求

将非Terraform创建的现有Application Load Balancer纳入Terraform管理,仅为其启用访问日志,不创建新ELB。

原代码问题

直接定义resource "aws_lb"并指定ARN会触发Terraform尝试创建新ELB,而非关联现有资源。必须先通过terraform import将现有ELB导入Terraform状态,再编写匹配的资源配置。

正确操作步骤

1. 配置日志存储用S3桶

保留原代码中S3桶的配置,替换占位符为实际值:

data "aws_elb_service_account" "main" {}

resource "aws_s3_bucket" "elb_logs" {
  bucket = "<你的存储桶名称>"
  acl    = "private"

  policy = <<POLICY
{
  "Id": "Policy",
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "s3:PutObject"
      ],
      "Effect": "Allow",
      "Resource": "arn:aws:s3:::<你的存储桶名称>/AWSLogs/*",
      "Principal": {
        "AWS": [
          "${data.aws_elb_service_account.main.arn}"
        ]
      }
    }
  ]
}
POLICY
}

2. 导入现有ELB到Terraform状态

执行以下命令,将现有ELB关联到aws_lb.foobar资源:

terraform import aws_lb.foobar arn:aws:elasticloadbalancing:ap-northeast-1:<你的账号ID>:loadbalancer/app/<你的ELB名称>/7c6a359c72a9a02e

3. 编写ELB资源配置

导入后,编写aws_lb资源块,仅指定与现有ELB完全匹配的必要参数和access_logs配置:

resource "aws_lb" "foobar" {
  arn                = "arn:aws:elasticloadbalancing:ap-northeast-1:<你的账号ID>:loadbalancer/app/<你的ELB名称>/7c6a359c72a9a02e"
  name               = "<你的ELB名称>"
  internal           = false
  load_balancer_type = "application"
  subnets            = [
    "<子网ID1>",
    "<子网ID2>",
  ]

  access_logs {
    bucket  = aws_s3_bucket.elb_logs.bucket
    enabled = true # 必须显式启用日志功能,原代码缺失此参数
  }
}

关键注意事项

  • subnets必须使用子网ID而非名称,Terraform的aws_lb资源要求传入ID
  • access_logs块需添加enabled = true才能真正开启日志
  • 执行terraform plan验证配置,确认仅会添加访问日志规则,不会修改ELB的其他原有属性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:55:18