Я пытаюсь найти все AWS vpcs и добавить к ним журналы потока vpc.Я развернул этот код на всех своих аккаунтах AWS, около 30 аккаунтов.4 из них не имеют VPC, поэтому он не работает на них.
этот модуль vpc запускается из модуля аккаунта (просто модуль, задающий модули для запуска), к сожалению, рассчитывать на модуль напрямую непока не работало в 0.12
Я попытался передать переменную bool vpc_exists = false в учетные записи, где нет VPC, и создать какое-то условие, чтобы он не работал на учетных записях без VPC, но я не смогt make it.
Работает, если у меня есть хотя бы один VPC, но не работает, если нет VPC:
data "aws_vpcs" "vpcs" {}
resource "aws_flow_log" "vpc_flow_log" {
count = length(data.aws_vpcs.vpcs.ids)
vpc_id = tolist(data.aws_vpcs.vpcs.ids)[count.index]
iam_role_arn = aws_iam_role.vpc_flow_logs.arn
log_destination = aws_cloudwatch_log_group.vpc_flow_logs[count.index].arn
traffic_type = "REJECT"
}
resource "aws_cloudwatch_log_group" "vpc_flow_logs" {
count = length(data.aws_vpcs.vpcs.ids)
name = "${var.prefix}-vpc-flow-logs-${tolist(data.aws_vpcs.vpcs.ids)[count.index]}"
}
count = var.vpc_exists ? length(data.aws_vpcs.vpcs.ids) : 0
Добавление условия в запрос ресурсовя:
on ../modules/vpc/vpc_flow_logs.tf line 32, in resource "aws_cloudwatch_log_group" "vpc_flow_logs":
32: name = "${var.prefix}-vpc-flow-logs-${tolist(data.aws_vpcs.vpcs.ids)[count.index]}"
Because data.aws_vpcs.vpcs has "count" set, its attributes must be accessed on
specific instances.
For example, to correlate with indices of a referring resource, use:
data.aws_vpcs.vpcs[count.index]
если я добавлю [count.index] в счетчик, он не сработает.
Не знаете, что делать дальше, есть идеи?
Редактировать:
, следуя некоторым советам, я добавил. *., Но все равно получаю ошибку:
data "aws_vpcs" "vpcs" {
count = var.vpc_exists ? 1 : 0
}
resource "aws_flow_log" "vpc_flow_log" {
count = var.vpc_exists ? length(data.aws_vpcs.vpcs.*.ids) : 0
vpc_id = tolist(data.aws_vpcs.vpcs.ids)[count.index]
iam_role_arn = aws_iam_role.vpc_flow_logs.arn
log_destination = aws_cloudwatch_log_group.vpc_flow_logs[count.index].arn
traffic_type = "REJECT"
}
resource "aws_cloudwatch_log_group" "vpc_flow_logs" {
count = var.vpc_exists ? length(data.aws_vpcs.vpcs.*.ids) : 0
name = "${var.prefix}-vpc-flow-logs-${tolist(data.aws_vpcs.vpcs.ids)[count.index]}"
}
on ../modules/vpc/vpc_flow_logs.tf line 32, in resource "aws_cloudwatch_log_group" "vpc_flow_logs":
32: name = "${var.prefix}-vpc-flow-logs-${tolist(data.aws_vpcs.vpcs.ids)[count.index]}"
Because data.aws_vpcs.vpcs has "count" set, its attributes must be accessed on
specific instances.
For example, to correlate with indices of a referring resource, use:
data.aws_vpcs.vpcs[count.index]
Если я добавлю. *.к строке имени и строке vpc_id я получу эту ошибку:
Error: Invalid template interpolation value
on ../modules/vpc/vpc_flow_logs.tf line 32, in resource "aws_cloudwatch_log_group" "vpc_flow_logs":
32: name = "${var.prefix}-vpc-flow-logs-${tolist(data.aws_vpcs.vpcs.*.ids)[count.index]}"
|----------------
| count.index is 0
| data.aws_vpcs.vpcs is tuple with 1 element
Cannot include the given value in a string template: string required.