#aws-lambda #terraform
#aws-lambda #terraform
Вопрос:
Я работаю над автоматизацией развертывания лямбда-функций с использованием Terraform. Цель состоит в том, чтобы иметь возможность развертывать либо одну лямбда-функцию, либо все функции в репозитории. Я могу развернуть ряд функций из структуры, которая выглядит как:
├── README.md
├── js
│ ├── README.md
│ ├── jsFunction1/
│ │ └── main.tf
│ └── jsFunction2/
│ └── main.tf
├── py
│ ├── README.md
│ ├── pyFunction1/
│ │ └── main.tf
│ └── pyFunction2/
│ └── main.tf
└── terraform
├── README.md
├── common/
├── global/
├── main.tf
├── modules/
├── prod/
└── stage/
Цель состоит в том, чтобы иметь возможность развертывать js/jsFunction1
независимо (без создания пакетов для каких-либо других функций), а также иметь terraform/main.tf
возможность развертывать все лямбда-функции в репозитории (после их сборки). Это делается для того, чтобы разработчик мог обновлять этап развертывания, внося изменения в отдельную функцию, не беспокоясь о том, что у них может быть неправильная версия функции, над которой разработчик не работает.
Что я надеялся сделать, так это создать серверную часть для каждой лямбда-функции, чтобы разработчик мог использовать terraform apply
ее из исходной папки. Я не вижу, как импортировать состояние лямбда-функций, которые были развернуты из terraform/
модуля. Можете ли вы сказать мне, является ли импорт состояния ресурсов разумным подходом или рекомендовать лучший способ добиться возможности развертывания одной из многих лямбда-функций?
Вот main.tf
из js/jsFunction1
module "jsFunction1" {
source = "../../terraform/modules/lambda"
source_path = "${path.module}/dist"
lambda_function_name = "jsFunction1"
lambda_handler = "lambdaAdapter.handler"
}
main.tf
В каждой из папок в разделе js
и есть аналогичное py
. Это main.tf
из terraform
папки
module "jsFunction1" {
source = "./../js/jsFunction1"
}
module "jsFunction2" {
source = "./../js/jsFunction2"
}
module "pyFunction1" {
source = "./../py/pyFunction1"
}
module "pyFunction2" {
source = "./../py/pyFunction2"
}
Ответ №1:
Вы можете использовать модуль lambda package для архивирования отдельных пакетов для конкретных лямбда-функций и их развертывания.
Модуль пакета имеет возможность создавать пакет, только если в соответствующих папках произошли изменения.
Таким образом, у вас может быть один main.tf и ссылка на выходные значения из модуля пакета.
Комментарии:
1. ДА. Это то
terraform/main.tf
, для чего нужно. Проблема заключается, скажем, в том, что разработчики работают над определенной функциейjsFunction1
. СборкаjsFunction2
может находиться за последней развернутой версией, но она будет развернута (перезаписывая более новую версию), поскольку она изменена относительно состояния в серверной части. По крайней мере, похоже, что это происходит.