【问题标题】:How to get AWS Lambda ARN using Terraform?如何使用 Terraform 获取 AWS Lambda ARN?
【发布时间】:2021-04-24 04:23:21
【问题描述】:

我正在尝试定义一个返回 Lambda 函数的 ARN 的 terraform 输出块。 Lambda 在子模块中定义。根据文档,似乎 lambda 应该已经有一个 ARN 属性:https://registry.terraform.io/providers/hashicorp/aws/latest/docs/data-sources/lambda_function#arn

使用它作为来源,我认为我应该能够做到以下几点:

output "lambda_arn" {
  value = module.aws_lambda_function.arn
}

这会产生以下错误:

Error: Unsupported attribute

  on main.tf line 19, in output "lambda_arn":
  19:   value = module.aws_lambda_function.arn

This object does not have an attribute named "arn".

如果有任何意见,我将不胜感激,谢谢。

【问题讨论】:

    标签: aws-lambda terraform


    【解决方案1】:

    文档是正确的。数据源 data.aws_lambda_function 具有 arn 属性。但是,您正在尝试从自定义模块 module.aws_lambda_function 访问 arn。为此,您必须在模块中定义输出 arn

    所以在你的模块中你应该有这样的东西:

    data "aws_lambda_function" "existing" {
      function_name = "function-to-get"
    }
    
    output "arn" {
      value = data.aws_lambda_function.existing.arn
    }
    

    如果你的模块名为aws_lambda_function:

    module "aws_lambda_function" {
       source = "path-to-module"   
    }
    

    您将能够访问arn

    module.aws_lambda_function.arn
    

    【讨论】:

    • 我刚刚意识到我已经将我的 lambda 定义为资源而不是数据。当我将其更改为数据时,我可以访问 ARN,但我无法指定 lambda zip 的文件名。您的回答解决了最初的问题,但您能否提供有关如何解决此问题的任何信息?
    • @Michael 数据源data 仅获取有关现有函数的信息。要创建新的并指定其 zip,您必须使用资源 aws_lambda_function。不能使用data修改现有函数,只能获取其信息。
    • 我能够弄清楚这一点,但似乎无法做到我想要的。我想创建函数并让用户能够运行 terrarform output 以查看函数 ARN。尽管这似乎不可能,因为它不能成为生成它的 terraform 代码的一部分。我错过了什么吗?
    • @Michael 不知道你是什么意思?您可以通过新的代码示例和您想要实现的目标的描述提出新问题。
    • 如果您有兴趣查看,我已经创建了一个后续问题:stackoverflow.com/questions/65812853/…
    猜你喜欢
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 2020-02-06
    • 2023-03-09
    • 1970-01-01
    • 2022-09-27
    • 2020-03-13
    • 1970-01-01
    相关资源
    最近更新 更多