如何构建 terraform 代码以在创建后获取 Lambda ARN?

2024-04-25

这是我之前问过的一个问题:如何使用 Terraform 获取 AWS Lambda ARN? https://stackoverflow.com/questions/65798783/how-to-get-aws-lambda-arn-using-terraform

这个问题得到了回答,但事实证明并没有真正解决我的问题,所以这是一个后续行动。

我编写的 terraform 代码提供了 Lambda 函数:

根模块:

terraform {
  required_providers {
    aws = {
      source = "hashicorp/aws"
    }
  }
}

provider "aws" {
   region = var.region
   profile = var.aws_profile
}

module "aws_lambda_function" {
   source = "./modules/lambda_function"
}

子模块:

resource "aws_lambda_function" "lambda_function" {
   function_name = "lambda_function"
   handler = "lambda_function.lambda_handler"
   runtime = "python3.8"
   filename = "./task/dist/package.zip"
   role = aws_iam_role.lambda_exec.arn
}

resource "aws_iam_role" "lambda_exec" {
   name = "aws_iam_lambda"
   assume_role_policy = file("policy.json")
}

我希望用户能够执行以下操作来获取 Lambda ARN:

terraform output

问题:我似乎无法在 terraform 代码中的任何位置包含以下代码,因为它会导致“ResourceNotFOundException:找不到函数...”错误。

data "aws_lambda_function" "existing" {
  function_name = "lambda_function"
}

output "arn" {
  value = data.aws_lambda_function.existing.arn
}

我需要在哪里或如何包含此信息才能获取 ARN,或者这是否可能?


你无法查找data对于您同时创建的资源。您需要从模块输出 ARN,然后从主 terraform 模板再次输出。

在您的 Lambda 模块中:

output "arn" {
  value = aws_lambda_function.lambda_function.arn
}

然后在你的主文件中:

output "arn" {
  value = module.aws_lambda_function.arn
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何构建 terraform 代码以在创建后获取 Lambda ARN? 的相关文章

随机推荐