【问题标题】:Terraform adding lambda layerTerraform 添加 lambda 层
【发布时间】:2021-11-17 23:03:26
【问题描述】:

我正在尝试让 terraform 创建一个 lambda 层,我得到“对未声明资源的引用” 这是我收到错误的 src 目录中的 main.tf 代码

module "name" {
  ...
  ...
  layer_arns = [aws_lambda_layer_version.mm_layer.arn]
  ...
  ...
}

这是我试图引用的 lambda-layer 文件夹中的 lambda-layer.tf 资源文件

locals {
  region = var.region
}

resource "aws_lambda_layer_version" "mm_layer" {
  layer_name = "common-layer"
  ...
  ...
  compatible_runtimes = ["nodejs12.x"]
}

编辑:继承人声明的模块

module "lambda-layer" {
  source = "./modules/lambda-layer"
  region = module.common.region[module.common.region]
  env = var.env
}

不知道为什么它找不到参考。我在资源中明确说明它是 mm_layer,我尝试将其称为“mm_layer”

【问题讨论】:

  • “lambda-layer 文件夹中的 lambda-layer.tf 资源文件”意味着资源在声明的模块中。如果是这样,请将该模块声明添加到问题中。
  • 在编辑中添加。
  • 假设aws_lambda_layer_version.mm_layer 不在lambda-layer 模块的声明输出中是否安全?
  • 所以我添加了一个 output.tf 并声明了这一点: output "aws_lambda_layer_version_mm_layer" { value = aws_lambda_layer_version.mm_layer.arn } 我仍然遇到同样的错误。很确定我正确地描述了它。

标签: terraform terraform-provider-aws


【解决方案1】:

在确定声明的资源在声明的模块中,并且模块声明的输出中不存在资源的导出属性后,我们可以通过将导出的属性声明为声明模块的输出来解决此问题。这是因为导出的资源属性只存在于同一个配置命名空间中,并且必须使用命名空间命名法来访问。

lambda-layer 模块源的配置中,您需要添加声明的输出:

output "mm_layer_arn" {
  description = "arn for the mm lambda layer"
  value       = aws_lambda_layer_version.mm_layer.arn
}

您可以类似地通过将aws_lambda_layer_version.mm_layer 分配给值来输出导出资源属性的整个对象,但如果您需要访问或以其他方式迭代该对象,这将非常有用。

现在可以从声明模块(在这种情况下为lambda-layer)的配置的命名空间访问此输出。由于模块 namelambda-layer 声明在相同的配置中声明,因此该模块声明现在可以访问适当命名空间中的输出:

module "name" {
  ...
  layer_arns = [module.lambda-layer.mm_layer_arn]
  ...
}

您可以在documentation 中阅读有关模块输出命名空间的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-04-01
    • 2021-11-14
    • 1970-01-01
    • 2021-10-09
    • 2021-09-15
    • 2020-09-07
    • 2017-07-27
    • 1970-01-01
    相关资源
    最近更新 更多