Terraform lambda 具有依赖性(必需包含)而不使用层

Terraform lambda with dependencies (required includes) without using layers

我是 terraform 的新手,但我正在关注我试图支持的应用程序的一些文档,但我在理解其工作原理时遇到了一些困难。

Lambda 的示例 TF:

data "archive_file" "handler_lambda_archive_file" {
  type        = "zip"
  source_dir  = "../lambda/js/submit-handler"
  output_path = "${path.module}/submit-handler.zip"
}


resource "aws_lambda_function" "handler_lambda_function" {
  function_name = "app-${var.app_lifecycle}-submit-handler-lambda"

  filename         = data.archive_file.handler_lambda_archive_file.output_path
  source_code_hash = filebase64sha256(data.archive_file.handler_lambda_archive_file.output_path)

  handler = "main.handler"
  runtime = "nodejs14.x"
  timeout = 240

  role = aws_iam_role.handler_lambda_iam_role.arn

  environment {
    variables = {
      app_lifecycle                     = var.app_lifecycle
    }
  }

  vpc_config {
    subnet_ids         = var.subnets_for_lambda
    security_group_ids = [aws_security_group.handler_lambda_sg.id]
  }

  tags = var.tags
}

resource "aws_lambda_function" "handler_lambda_function2" {
    function_name = "zoom-${var.app_lifecycle}-submit-handler2-lambda"
  
    filename         = data.archive_file.handler_lambda_archive_file.output_path
    source_code_hash = filebase64sha256(data.archive_file.handler_lambda_archive_file.output_path)
  
    handler = "main.handler"
    runtime = "nodejs14.x"
    timeout = 240
  
    role = aws_iam_role.handler_lambda_iam_role.arn
  
    environment {
      variables = {
        app_lifecycle                     = var.app_lifecycle
      }
    }
  
    vpc_config {
      subnet_ids         = var.subnets_for_lambda
      security_group_ids = [aws_security_group.handler_lambda_sg.id]
    }
  
    tags = var.tags
  }

source_dir文件夹中,有以下文件:

main.js, auth.js, shared.js.

在主 JS 文件和 auth JS 文件中,顶部有一行需要包含: const someSharedFunction = require("./shared.js");

如果我理解,将创建两个具有以下名称的 lambda 函数:

app-sandbox-submit-handler-lambdaapp-sandbox-submit-handler2-lambda

我的问题是关于 shared.js 文件的。存档文件包含 zip 中的所有 3 个 js 文件,并将使用它创建 terraform 函数。

它是否检测到那些文件中有一个 require 并自动将 shared.js 文件的副本放入每个函数中以便可以使用?

它没有使用层,所以我只是不确定在这种情况下需求是如何工作的。

问题:

terraform 是否在创建函数时检测 require 并使用 lambda 包含任何引用文件?

没有任何东西在查看您的 JavaScript 代码并检测到 require 正在引入某些依赖项。 Terraform 根本不会查看您的 Lambda 函数的代码。

正在发生的事情是整个目录都被压缩了,因为你给 archive_file 资源提供了 source_dir