我使用 k8 的 helm 图表创建了 ALB。现在我想使用 terraform 在其之上启用访问日志。我正在尝试使用数据源,但它似乎不起作用,而且我在计划时遇到错误。
data "aws_lb" "ecs_public_alb" {
name = "my-load-balancer-name"
}
resource "aws_lb" "example" {
arn = data.aws_lb.existing_lb.arn
load_balancer_type = "application"
access_logs {
bucket = "example-bucket"
prefix = "lb-access-logs"
enabled = true
}
tags = {
Terraform = "true"
Environment = "dev"
}
}
我得到的错误是
Can't configure a value for "arn": its value will be decided automatically based on the result of applying this configuration.
不确定这里出了什么问题
你必须先 import 你的 alb 到 TF,然后你才能使用 TF 修改它。你现在用
resource "aws_lb" "example"
做的是尝试创建新的白蛋白,而不是使用现有的白蛋白。
您的错误的近端原因是
arn
是一个只读属性,您不能写入它。 arn
将在资源创建后由 AWS 设置。
真正的问题是你需要决定用什么来管理负载均衡器,Helm 还是 Terraform。您不能同时使用两种方法,先使用 Helm 创建负载均衡器,然后使用 Terraform 对其进行修改。如果您尝试更新或协调 Helm 图表,它将删除日志记录配置。
这是我会做的:
如果你绝对不能重新创建负载均衡器,那么想办法阻止 Helm 将来管理它。
Source:我曾尝试让Kubernetes和Terraform分担资源的管理职责,但惨败。最好有明确的界限,只有一个系统管理资源。