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-lambda
和 app-sandbox-submit-handler2-lambda
我的问题是关于 shared.js
文件的。存档文件包含 zip 中的所有 3 个 js 文件,并将使用它创建 terraform 函数。
它是否检测到那些文件中有一个 require
并自动将 shared.js
文件的副本放入每个函数中以便可以使用?
它没有使用层,所以我只是不确定在这种情况下需求是如何工作的。
问题:
terraform 是否在创建函数时检测 require 并使用 lambda 包含任何引用文件?
没有任何东西在查看您的 JavaScript 代码并检测到 require
正在引入某些依赖项。 Terraform 根本不会查看您的 Lambda 函数的代码。
正在发生的事情是整个目录都被压缩了,因为你给 archive_file
资源提供了 source_dir
。
我是 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-lambda
和 app-sandbox-submit-handler2-lambda
我的问题是关于 shared.js
文件的。存档文件包含 zip 中的所有 3 个 js 文件,并将使用它创建 terraform 函数。
它是否检测到那些文件中有一个 require
并自动将 shared.js
文件的副本放入每个函数中以便可以使用?
它没有使用层,所以我只是不确定在这种情况下需求是如何工作的。
问题:
terraform 是否在创建函数时检测 require 并使用 lambda 包含任何引用文件?
没有任何东西在查看您的 JavaScript 代码并检测到 require
正在引入某些依赖项。 Terraform 根本不会查看您的 Lambda 函数的代码。
正在发生的事情是整个目录都被压缩了,因为你给 archive_file
资源提供了 source_dir
。