如何在Terraform中通过Tag获取所有AWS Lambdas



我有一个标签为Name=production的Lambdas。

我想使用Terraform获得它们,看看aws_lambda_function,我只能通过function_name 获得单个lambda

data "aws_lambda_function" "existing" {
function_name = var.function_name
}

您可以使用aws_resourcegroupstaggingapi_resources来检索没有更具体数据源的几个AWS资源的信息。

对于您的用例,考虑到Name=production,您可以使用:

data "aws_resourcegroupstaggingapi_resources" "existing" {
resource_type_filters = ["lambda:function"]
tag_filter {
key    = "Name"
values = ["production"]
}
}
output "arns" {
value = data.aws_resourcegroupstaggingapi_resources.existing.resource_tag_mapping_list.*.resource_arn
}

更新:如注释中所述,上面的代码从resource_tag_mapping_list返回信息,这些信息大多是符合要求的信息和资源的ARN。但是,您可以将其与常规aws_lambda_function数据源配对,并使用for_each从Lambda函数中检索所有信息:

# continuation of the code above
data "aws_lambda_function" "existing" {
for_each = toset(data.aws_resourcegroupstaggingapi_resources.existing.resource_tag_mapping_list.*.resource_arn)
function_name = each.value
}
output "functions" {
value = data.aws_lambda_function.existing.*
}
# example of information available with this data source
output "functions_runtime" {
value = {for fn, result in data.aws_lambda_function.existing: fn => result.runtime}
}

最新更新