Terraform Module, который создает почти все поддерживаемые ресурсы AWS Lambda, а также заботиться о создании и упаковке необходимых зависимостей Lambda для функций и слоев.
Этот модуль Terraform является частью Framework Serverless.tf, которая направлена на упрощение всех операций при работе с Server в Terraform:
serverless.tf
, такими как HTTP API Gateway (см. Примеры там). module "lambda_function" {
source = " terraform-aws-modules/lambda/aws "
function_name = " my-lambda1 "
description = " My awesome lambda function "
handler = " index.lambda_handler "
runtime = " python3.12 "
source_path = " ../src/lambda-function1 "
tags = {
Name = " my-lambda1 "
}
}
module "lambda_function" {
source = " terraform-aws-modules/lambda/aws "
function_name = " lambda-with-layer "
description = " My awesome lambda function "
handler = " index.lambda_handler "
runtime = " python3.12 "
publish = true
source_path = " ../src/lambda-function1 "
store_on_s3 = true
s3_bucket = " my-bucket-id-with-lambda-builds "
layers = [
module . lambda_layer_s3 . lambda_layer_arn ,
]
environment_variables = {
Serverless = " Terraform "
}
tags = {
Module = " lambda-with-layer "
}
}
module "lambda_layer_s3" {
source = " terraform-aws-modules/lambda/aws "
create_layer = true
layer_name = " lambda-layer-s3 "
description = " My amazing lambda layer (deployed from S3) "
compatible_runtimes = [ " python3.12 " ]
source_path = " ../src/lambda-layer "
store_on_s3 = true
s3_bucket = " my-bucket-id-with-lambda-builds "
}
module "lambda_function_existing_package_local" {
source = " terraform-aws-modules/lambda/aws "
function_name = " my-lambda-existing-package-local "
description = " My awesome lambda function "
handler = " index.lambda_handler "
runtime = " python3.12 "
create_package = false
local_existing_package = " ../existing_package.zip "
}
Если вы хотите управлять кодом функции и ресурсами инфраструктуры (например, разрешения IAM, политика, события и т. Д.)
Отключите отслеживание исходного кода, чтобы отключить развертывание (и откаты), используя модуль, установив ignore_source_code_hash = true
и развернуть фиктивную функцию .
Когда инфраструктура и фиктивная функция развернута, вы можете использовать внешний инструмент для обновления исходного кода функции (например, с использованием AWS CLI) и продолжать использовать этот модуль через Terraform для управления инфраструктурой.
Имейте в виду, что изменения в значении local_existing_package
могут вызвать развертывание через Terraform.
module "lambda_function_externally_managed_package" {
source = " terraform-aws-modules/lambda/aws "
function_name = " my-lambda-externally-managed-package "
description = " My lambda function code is deployed separately "
handler = " index.lambda_handler "
runtime = " python3.12 "
create_package = false
local_existing_package = " ./lambda_functions/code.zip "
ignore_source_code_hash = true
}
Обратите внимание, что этот модуль не копирует предварительно построенные пакеты в ведро S3. Этот модуль может хранить только пакеты, которые он строит локально и в ковше S3.
locals {
my_function_source = " ../path/to/package.zip "
}
resource "aws_s3_bucket" "builds" {
bucket = " my-builds "
acl = " private "
}
resource "aws_s3_object" "my_function" {
bucket = aws_s3_bucket . builds . id
key = " ${ filemd5 (local . my_function_source ) } .zip "
source = local . my_function_source
}
module "lambda_function_existing_package_s3" {
source = " terraform-aws-modules/lambda/aws "
function_name = " my-lambda-existing-package-local "
description = " My awesome lambda function "
handler = " index.lambda_handler "
runtime = " python3.12 "
create_package = false
s3_existing_package = {
bucket = aws_s3_bucket.builds.id
key = aws_s3_object.my_function.id
}
}
module "lambda_function_container_image" {
source = " terraform-aws-modules/lambda/aws "
function_name = " my-lambda-existing-package-local "
description = " My awesome lambda function "
create_package = false
image_uri = " 132367819851.dkr.ecr.eu-west-1.amazonaws.com/complete-cow:1.0 "
package_type = " Image "
}
module "lambda_layer_local" {
source = " terraform-aws-modules/lambda/aws "
create_layer = true
layer_name = " my-layer-local "
description = " My amazing lambda layer (deployed from local) "
compatible_runtimes = [ " python3.12 " ]
source_path = " ../fixtures/python-app1 "
}
module "lambda_layer_s3" {
source = " terraform-aws-modules/lambda/aws "
create_layer = true
layer_name = " my-layer-s3 "
description = " My amazing lambda layer (deployed from S3) "
compatible_runtimes = [ " python3.12 " ]
source_path = " ../fixtures/python-app1 "
store_on_s3 = true
s3_bucket = " my-bucket-id-with-lambda-builds "
}
Убедитесь, что вы развертываете функции лямбда@Edge в регион США (Н. Вирджиния) ( us-east-1
). См. Требования и ограничения на функции Lambda.
module "lambda_at_edge" {
source = " terraform-aws-modules/lambda/aws "
lambda_at_edge = true
function_name = " my-lambda-at-edge "
description = " My awesome lambda@edge function "
handler = " index.lambda_handler "
runtime = " python3.12 "
source_path = " ../fixtures/python-app1 "
tags = {
Module = " lambda-at-edge "
}
}
module "lambda_function_in_vpc" {
source = " terraform-aws-modules/lambda/aws "
function_name = " my-lambda-in-vpc "
description = " My awesome lambda function "
handler = " index.lambda_handler "
runtime = " python3.12 "
source_path = " ../fixtures/python-app1 "
vpc_subnet_ids = module . vpc . intra_subnets
vpc_security_group_ids = [ module . vpc . default_security_group_id ]
attach_network_policy = true
}
module "vpc" {
source = " terraform-aws-modules/vpc/aws "
name = " my-vpc "
cidr = " 10.10.0.0/16 "
# Specify at least one of: intra_subnets, private_subnets, or public_subnets
azs = [ " eu-west-1a " , " eu-west-1b " , " eu-west-1c " ]
intra_subnets = [ " 10.10.101.0/24 " , " 10.10.102.0/24 " , " 10.10.103.0/24 " ]
}
Существует 6 поддерживаемых способов привлечения политики IAM к роли IAM, используемой Lambda Function:
policy_json
- json String или Heredoc, когда attach_policy_json = true
.policy_jsons
- Список строк JSON или Heredoc, когда attach_policy_jsons = true
и number_of_policy_jsons > 0
.policy
- ARN существующей политики IAM, когда attach_policy = true
.policies
- список существующих политик IAM, когда attach_policies = true
и number_of_policies > 0
.policy_statements
- Карта карт для определения заявлений IAM, которые будут генерироваться как политика IAM. Требуется attach_policy_statements = true
. См. examples/complete
для получения дополнительной информации.assume_role_policy_statements
- Карта карт для определения утверждений IAM, которые будут генерироваться как политика IAM для получения роли функции Lambda (доверительные отношения). См. examples/complete
для получения дополнительной информации. Должны быть указаны разрешения Lambda, чтобы позволить определенным ресурсам вызывать функцию Lambda.
module "lambda_function" {
source = " terraform-aws-modules/lambda/aws "
# ...omitted for brevity
allowed_triggers = {
Config = {
principal = " config.amazonaws.com "
principal_org_id = " o-abcdefghij "
}
APIGatewayAny = {
service = " apigateway "
source_arn = " arn:aws:execute-api:eu-west-1:135367859851:aqnku8akd0/*/*/* "
},
APIGatewayDevPost = {
service = " apigateway "
source_arn = " arn:aws:execute-api:eu-west-1:135367859851:aqnku8akd0/dev/POST/* "
},
OneRule = {
principal = " events.amazonaws.com "
source_arn = " arn:aws:events:eu-west-1:135367859851:rule/RunDaily "
}
}
}
Иногда вам нужен способ условного создания ресурсов, но Terraform не позволяет использовать count
внутри блока module
, поэтому решение состоит в том, чтобы указать create
аргументов.
module "lambda" {
source = " terraform-aws-modules/lambda/aws "
create = false # to disable all resources
create_package = false # to control build package process
create_function = false # to control creation of the Lambda Function and related resources
create_layer = false # to control creation of the Lambda Layer and related resources
create_role = false # to control creation of the IAM role and policies required for Lambda Function
attach_cloudwatch_logs_policy = false
attach_dead_letter_policy = false
attach_network_policy = false
attach_tracing_policy = false
attach_async_event_policy = false
# ... omitted
}
Это одна из самых сложных части, сделанных модулем, и обычно вам не нужно знать внутренние.
package.py
- это сценарий Python, который делает это. Убедитесь, что Python 3.6 или более новый. Основные функции сценария-генерировать имя файла Zip-Archive на основе содержимого файлов, убедиться, что Zip-Archive уже создан, и создавать Zip-Archive только тогда, когда это необходимо (во время apply
, а не plan
) Полем
Хэш Zip-Archive, созданный с одним и тем же контентом в файлах, всегда идентичен, что предотвращает ненужные силы-наполнения ресурсов Lambda, если только контент не изменяется. Если вам нужно иметь разные имена файлов для одного и того же контента, вы можете указать дополнительный аргумент string hash_extra
.
При вызове этого модуля несколько раз в одном исполнении для создания пакетов с одним и тем же source_path
, Zip-Archives будет поврежден из-за одновременных записей в одном и том же файле. Существует два решения - установить разные значения для hash_extra
для создания разных архивов или создания пакета один раз снаружи (используя этот модуль), а затем пройти аргумент local_existing_package
, чтобы создать другие ресурсы Lambda.
Строительство и упаковку было исторически трудно отлаживать (особенно с Terraform), поэтому мы приложили усилия, чтобы упростить пользователю увидеть информацию отладки. Существует 3 различных уровня отладки: DEBUG
- чтобы увидеть только то, что происходит на этапе планирования, и как фильтрация содержимого файла Zip в случае примененных шаблонов, DEBUG2
- чтобы увидеть больше результатов ведения журнала, DEBUG3
- чтобы увидеть все значения ведения журнала, DUMP_ENV
- to Посмотрите все значения журнала и переменные ENV (будьте осторожны, поделитесь своими переменными ENV, поскольку они могут содержать секреты!).
Пользователь может указать уровень отладки, как это:
export TF_LAMBDA_PACKAGE_LOG_LEVEL=DEBUG2
terraform apply
Пользователь может включить комментарии в струнах Heredoc в patterns
, которые могут быть полезны в некоторых ситуациях. Чтобы сделать это, установить эту переменную среды:
export TF_LAMBDA_PACKAGE_PATTERN_COMMENTS=true
terraform apply
Вы можете указать source_path
различными способами для достижения желаемой гибкости при создании пакетов развертывания локально или в докере. Вы можете использовать абсолютные или относительные пути. Если вы разместили файлы Terraform в подкатализации, обратите внимание, что относительные пути указаны из каталога, где запускается terraform plan
, а не местоположение вашего файла Terraform.
Обратите внимание, что при создании локально файлы не копируют из исходных каталогов при изготовлении пакетов, мы используем Fast Python регулярные выражения, чтобы найти соответствующие файлы и каталоги, что делает упаковку очень быстрой и простой для понимания.
Когда source_path
устанавливается на строку, содержимое этого пути будет использоваться для создания пакета развертывания AS IS:
source_path = "src/function1"
Когда source_path
устанавливается в список каталогов, будет взят содержание каждого и будет создан один архив.
Это самый полный способ создания пакета развертывания из нескольких источников с несколькими зависимостями. Этот пример показывает некоторые из доступных вариантов (см. Примеры/пакетирование и примеры/примеры/время забега для получения дополнительной информации):
source_path = [
" src/main-source " ,
" src/another-source/index.py " ,
{
path = " src/function1-dep " ,
patterns = [
" !.*/.* \ .txt " , # Skip all txt files recursively
]
}, {
path = " src/python-app1 " ,
pip_requirements = true ,
pip_tmp_dir = " /tmp/dir/location "
prefix_in_zip = " foo/bar1 " ,
}, {
path = " src/python-app2 " ,
pip_requirements = " requirements-large.txt " ,
patterns = [
" !vendor/colorful-0.5.4.dist-info/RECORD " ,
" !vendor/colorful-.+.dist-info/.* " ,
" !vendor/colorful/__pycache__/?.* " ,
]
}, {
path = " src/nodejs14.x-app1 " ,
npm_requirements = true ,
npm_tmp_dir = " /tmp/dir/location "
prefix_in_zip = " foo/bar1 " ,
}, {
path = " src/python-app3 " ,
commands = [
" npm install " ,
" :zip "
],
patterns = [
" !.*/.* \ .txt " , # Skip all txt files recursively
" node_modules/.+ " , # Include all node_modules
],
}, {
path = " src/python-app3 " ,
commands = [ " go build " ],
patterns = << END
bin/.*
abc/def/.*
END
}
]
Несколько заметок:
package.json
начинается с python
или nodejs
, процесс сборки автоматически создаст зависимости Python и Nodejs, если в исходной папке будет найдено файл requirements.txt
. Если вы хотите настроить это поведение, используйте обозначение объекта, как описано ниже.path
являются необязательными.patterns
- Список имен файлов файлов питона должен удовлетворить. Значение по умолчанию - «включить все», что равно patterns = [".*"]
. Это также может быть указано как многослойная строка Heredoc (без комментариев). Некоторые примеры достоверных шаблонов:commands
и цепочку нескольких команд, только код выхода последней команды будет проверен на успех. Если вы предпочитаете быстро терпеть неудачу, запустите команды с set -e
или PowerShell Option $ErrorActionPreference="Stop"
!. * /. * .txt # Filter all txt files recursively
node_modules/. * # Include empty dir or with a content if it exists
node_modules/.+ # Include full non empty node_modules dir with its content
node_modules/ # Include node_modules itself without its content
# It's also a way to include an empty dir if it exists
node_modules # Include a file or an existing dir only
!abc/. * # Filter out everything in an abc folder
abc/def/. * # Re-include everything in abc/def sub folder
!abc/def/hgk/. * # Filter out again in abc/def/hgk sub folder
commands
- Список команд для запуска. Если указан, этот аргумент переопределяет pip_requirements
и npm_requirements
.:zip [source] [destination]
- это специальная команда, которая создает содержание текущего рабочего каталога (первый аргумент) и помещает его внутрь пути (второй аргумент).pip_requirements
- Управляет, следует ли выполнять pip install
. Установите false
, чтобы отключить эту функцию, true
для запуска pip install
с path
requirements.txt
. Или установите на другое имя файла, которое вы хотите использовать вместо этого. Когда source_path
передается в виде строки, содержащей pip install
(а не список карт), и requirements.txt
.pip_tmp_dir
- Установите базовый каталог, чтобы сделать временный каталог для установки PIP. Может быть полезен для Docker в Docker Builds.poetry_install
- Управляет, выполнять ли экспорт poetry export
и pip install
. Установите false
, чтобы отключить эту функцию, true
для poetry export
с помощью pyproject.toml
и poetry.lock
найденного в path
. Когда source_path
передается в виде строки, содержащей путь (а не список карт), и pyproject.toml
с poetry
системы сборки, poetry export
и pip install
выполняются автоматически.poetry_export_extra_args
- список дополнительных поэтических аргументов, чтобы добавить в команду экспорта поэзииnpm_requirements
- Управляет, следует ли выполнять npm install
. Установите на false
, чтобы отключить эту функцию, true
для запуска npm install
с package.json
найденным в path
. Или установите на другое имя файла, которое вы хотите использовать вместо этого.npm_tmp_dir
- установите базовый каталог, чтобы сделать временный каталог для установки NPM. Может быть полезен для Docker в Docker Builds.prefix_in_zip
- если указано, будет использоваться в качестве префикса внутри Zip -Archive. По умолчанию все устанавливается в корень Zip-Archive.Если ваша функция Lambda или уровень использует некоторые зависимости, вы можете построить их в Docker и включить их в пакет развертывания. Вот как вы можете это сделать:
build_in_docker = true
docker_file = "src/python-app1/docker/Dockerfile"
docker_build_root = "src/python-app1/docker"
docker_image = "public.ecr.aws/sam/build-python"
runtime = "python3.12" # Setting runtime is required when building package in Docker and Lambda Layer resource.
Используя этот модуль, вы можете установить зависимости от частных хостов. Чтобы сделать это, вам нужно для прямого агента SSH:
docker_with_ssh_agent = true
Обратите внимание, что по умолчанию используемый docker_image
поступает из реестра public.ecr.aws/sam/
и будет основан на определении runtime
. Другими словами, если вы указываете время выполнения python3.12
и не указываете docker_image
, то docker_image
будет разрешена public.ecr.aws/sam/build-python3.12
. Это гарантирует, что по умолчанию runtime
доступно в контейнере Docker.
Если вы переопределяете docker_image
, обязательно сохраните изображение синхронизировать со runtime
. На этапе плана при использовании Docker нет проверки, что runtime
доступна для создания пакета. Это означает, что если вы используете изображение, которое не имеет времени выполнения, план все равно будет успешным, но затем применение потерпит неудачу.
Чтобы добавить гибкость при строительстве в Docker, вы можете передать любое количество дополнительных вариантов, которые вам требуются (см. Справочник Docker Run для доступных параметров):
docker_additional_options = [
" -e " , " MY_ENV_VAR='My environment variable value' " ,
" -v " , " /local:/docker-vol " ,
]
Чтобы переопределить точку входа Docker при здании в Docker, установите docker_entrypoint
:
docker_entrypoint = " /entrypoint/entrypoint.sh "
Точка входа должна составить на карту путь в вашем контейнере, поэтому вам необходимо либо создать собственное изображение, которое содержит точку входа, либо отобразить его в файл на хосте, установив объем (см. Передача дополнительных параметров Docker).
По умолчанию этот модуль создает пакет развертывания и использует его для создания или обновления функции Lambda или Lambda.
Иногда вы можете отделить сборку пакета развертывания (например, для компиляции и установки зависимостей) от развертывания пакета на два отдельных шага.
При создании архива локально за пределами этого модуля вам необходимо установить create_package = false
, а затем аргумент local_existing_package = "existing_package.zip"
. В качестве альтернативы, вы можете предпочесть держать свои пакеты развертывания в ведре S3 и предоставить на них ссылку:
create_package = false
s3_existing_package = {
bucket = " my-bucket-with-lambda-builds "
key = " existing_package.zip "
}
Это может быть реализовано в двух шагах: загрузить файл локально с помощью Curl и пройти путь к развертыванию в качестве аргумента local_existing_package
.
locals {
package_url = " https://raw.githubusercontent.com/terraform-aws-modules/terraform-aws-lambda/master/examples/fixtures/python-zip/existing_package.zip "
downloaded = " downloaded_package_ ${ md5 (local . package_url ) } .zip "
}
resource "null_resource" "download_package" {
triggers = {
downloaded = local.downloaded
}
provisioner "local-exec" {
command = " curl -L -o ${ local . downloaded } ${ local . package_url } "
}
}
data "null_data_source" "downloaded_package" {
inputs = {
id = null_resource.download_package.id
filename = local.downloaded
}
}
module "lambda_function_existing_package_from_remote_url" {
source = " terraform-aws-modules/lambda/aws "
function_name = " my-lambda-existing-package-local "
description = " My awesome lambda function "
handler = " index.lambda_handler "
runtime = " python3.12 "
create_package = false
local_existing_package = data . n ull_data_source . downloaded_package . outputs [ " filename " ]
}
AWS SAM CLI - это инструмент с открытым исходным кодом, который помогает разработчикам инициировать, создавать, тестировать и развернуть без серверных приложений. Инструмент SAM CLI поддерживает Terraform Applications.
SAM CLI предоставляет два способа тестирования: локальное тестирование и тестирование на облаке (ускорение).
Используя SAM CLI, вы можете вызвать функции Lambda, определенные в приложении Terraform, используя команду SAM Local Invoke, предоставляя функцию Terraform Address или имя функции, и установить hook-name
terraform
чтобы сообщить SAM CLI, что основной проект это приложение Terraform.
Вы можете выполнить команду sam local invoke
из корневого каталога приложения TerraForm, следующим образом:
sam local invoke --hook-name terraform module.hello_world_function.aws_lambda_function.this[0]
Вы также можете передать событие вашей функции Lambda или перезаписать переменные окружающей среды. Проверьте здесь для получения дополнительной информации.
Вы также можете вызвать свою функцию Lambda в режиме отладки и пройти через исходный код функции Lambda локально в вашем предпочтительном редакторе. Проверьте здесь для получения дополнительной информации.
Вы можете использовать AWS SAM CLI, чтобы быстро проверить свое приложение в вашей учетной записи разработки AWS. Используя SAM Accelerate, вы сможете разрабатывать свои функции Lambda локально, и как только вы сохраняете свои обновления, Sam Cli обновит вашу учетную запись разработки с помощью обновленных функций Lambda. Таким образом, вы можете протестировать его в облаке, и если есть какая -либо ошибка, вы можете быстро обновить код, и Sam Cli позаботится о том, чтобы подтолкнуть его к облаку. Проверьте здесь для получения дополнительной информации о SAM Accelerate.
Вы можете выполнить команду sam sync
из корневого каталога приложения TerraForm, следующим образом:
sam sync --hook-name terraform --watch
Как правило, обновления ресурсов Function Lambda при изменении исходного кода. Если publish = true
указано, также будет создана новая версия функции Lambda.
Опубликованная функция Lambda может быть вызвана с помощью номера версии или с использованием $LATEST
Это самый простой способ развертывания, который не требует дополнительного инструмента или услуги.
Чтобы выполнять контролируемые развертывания (Rolling, Canary, откаты) функций Lambda, мы должны использовать псевдонимы Lambda функций.
Проще говоря, лямбда -псевдоним похож на указатель либо на одну версию функции Lambda (при завершении развертывания), либо на две взвешенные версии функции Lambda (во время прокатки или канарейского развертывания).
Одна функция Lambda может быть использована в нескольких псевдонимах. Использование псевдонимов дает большой контроль над какой версией, развернутой при наличии нескольких сред.
Существует модуль псевдонима, который упрощает работу с псевдонимом (создание, управление конфигурациями, обновлениями и т. Д.). См. Примеры/псевдоним для различных случаев использования, как можно настроить и использовать псевдонимы.
Существует модуль развертывания, который создает необходимые ресурсы для развертывания с использованием AWS Codedeploy. Это также создает развертывание и ждет завершения. См. Примеры/развертывание для полного процесса сквозного строительства/обновления/развертывания.
Terraform Cloud, Terraform Enterprise и многие другие SaaS для запуска Terraform не имеют предварительного установки Python. Вам нужно будет предоставить альтернативное изображение Docker с установленным Python для использования этого модуля там.
Q1: Почему пакет развертывания не воссоздает каждый раз, когда я что -то меняю? Или почему пакет развертывания воссоздается каждый раз, но контент не изменялся?
Ответ: может быть несколько причин, связанных с одновременными казнями или с хэш -контентом. Иногда изменения происходили внутри зависимости, которая не используется при расчете хэша содержания. Или несколько пакетов создают одновременно из тех же источников. Вы можете заставить его установить значение
hash_extra
на различные значения.
Q2: Как заставить воссозданный пакет развертывания?
Ответ: Удалите существующий Zip-Archive из каталога
builds
или внесите изменения в исходный код. Если для нынешнего хэша содержимого нет Zip-Archive, он будет воссоздан во времяterraform apply
.
Q3: null_resource.archive[0] must be replaced
Ответ: Это, вероятно, означает, что Zip-Archive был развернут, но в настоящее время отсутствует на местном уровне, и его нужно воссоздать на месте. Когда вы сталкиваетесь с этой проблемой во время процесса CI/CD (где рабочее пространство чисто) или из нескольких рабочих пространств, вы можете установить переменную среды
TF_RECREATE_MISSING_LAMBDA_PACKAGE=false
или пройтиrecreate_missing_package = false
в качестве параметра к модулю иterraform apply
. В качестве альтернативы, вы можете передатьtrigger_on_package_timestamp = false
в качестве параметра, чтобы игнорировать временную метку файла при принятии решения о создании архива или нет.
Q4: Что означает эта ошибка - "We currently do not support adding policies for $LATEST."
?
Ответ: Когда функция Lambda создается с помощью
publish = true
новая версия автоматически увеличивается, а квалифицированный идентификатор (номер версии) становится доступным и будет использоваться при установке разрешений Lambda.При
publish = false
(по умолчанию) доступен только Unkalified Identifier ($LATEST
), который приводит к ошибке.Решение состоит в том, чтобы либо отключить создание разрешений Lambda для текущей версии, установив
create_current_version_allowed_triggers = false
или включить публикацию функции Lambda (publish = true
).
builds
.Имя | Версия |
---|---|
терраформ | > = 1,0 |
AWS | > = 5,70 |
внешний | > = 1,0 |
местный | > = 1,0 |
нулевой | > = 2,0 |
Имя | Версия |
---|---|
AWS | > = 5,70 |
внешний | > = 1,0 |
местный | > = 1,0 |
нулевой | > = 2,0 |
Нет модулей.
Имя | Тип |
---|---|
aws_cloudwatch_log_group.lambda | ресурс |
aws_iam_policy.additional_inline | ресурс |
aws_iam_policy.additional_json | ресурс |
aws_iam_policy.additional_jsons | ресурс |
aws_iam_policy.async | ресурс |
aws_iam_policy.dead_letter | ресурс |
aws_iam_policy.logs | ресурс |
aws_iam_policy.tracing | ресурс |
aws_iam_policy.vpc | ресурс |
AWS_IAM_ROLE.LAMBDA | ресурс |
aws_iam_role_policy_attachment.additional_inline | ресурс |
aws_iam_role_policy_attachment.additional_json | ресурс |
aws_iam_role_policy_attachment.additional_jsons | ресурс |
aws_iam_role_policy_attachment.additional_many | ресурс |
aws_iam_role_policy_attachment.additional_one | ресурс |
aws_iam_role_policy_attachment.async | ресурс |
aws_iam_role_policy_attachment.dead_letter | ресурс |
aws_iam_role_policy_attachment.logs | ресурс |
aws_iam_role_policy_attachment.tracing | ресурс |
AWS_IAM_ROLE_POLICY_ATTACHMENT.VPC | ресурс |
AWS_LAMBDA_EVENT_SOURCE_MAPPANG.This | ресурс |
aws_lambda_function.this | ресурс |
aws_lambda_function_event_invoke_config.this | ресурс |
aws_lambda_function_url.this | ресурс |
aws_lambda_layer_version.this | ресурс |
aws_lambda_permission.current_version_triggers | ресурс |
aws_lambda_permission.unqualified_alias_triggers | ресурс |
aws_lambda_provisioned_concurrency_config.current_version | ресурс |
aws_s3_object.lambda_package | ресурс |
local_file.archive_plan | ресурс |
null_resource.archive | ресурс |
null_resource.sam_metadata_aws_lambda_function | ресурс |
null_resource.sam_metadata_aws_lambda_layer_version | ресурс |
aws_arn.log_group_arn | источник данных |
aws_caller_identity.current | источник данных |
aws_cloudwatch_log_group.lambda | источник данных |
aws_iam_policy.tracing | источник данных |
aws_iam_policy.vpc | источник данных |
aws_iam_policy_document.additional_inline | источник данных |
aws_iam_policy_document.assume_role | источник данных |
aws_iam_policy_document.async | источник данных |
aws_iam_policy_document.dead_letter | источник данных |
aws_iam_policy_document.logs | источник данных |
aws_partition.current | источник данных |
aws_region.current | источник данных |
External_external.archive_prepare | источник данных |
Имя | Описание | Тип | По умолчанию | Необходимый |
---|---|---|---|---|
Allion_triggers | Карта разрешенных триггеров для создания разрешений лямбды | map(any) | {} | нет |
архитектуры | Архитектура набора инструкций для вашей функции Lambda. Допустимые значения: ["x86_64"] и ["arm64"]. | list(string) | null | нет |
artifacts_dir | Название каталога, где следует хранить артефакты | string | "builds" | нет |
ampect_role_policy_statements | Карта динамических заявлений о политике для принятия роли функции Lambda (доверительные отношения) | any | {} | нет |
ATTH_ASYNC_EVENT_POLICY | Контролирует, следует ли добавить политику асинхронных событий в роль IAM для функции Lambda | bool | false | нет |
ATTH_CLOUDWATCH_LOGS_POLICY | Управляет, следует ли добавить политику журналов CloudWatch к роли IAM для функции Lambda | bool | true | нет |
ATTACE_CREATE_LOG_GROUP_PERMISSION | Управляет, следует ли добавить разрешение на группу создания журнала в политику журналов CloudWatch | bool | true | нет |
ATTH_DEAD_LETTER_POLICY | Управляет, следует ли добавить политику уведомления о уведомлении о погибших буквах SNS/кв. | bool | false | нет |
attle_network_policy | Контролирует, следует ли добавить VPC/сетевой политику в роли IAM для функции Lambda | bool | false | нет |
attach_policies | Контролирует, должен ли список политик быть добавлены в роль IAM для функции Lambda | bool | false | нет |
attach_policy | Контролирует, должна ли политика быть добавлена в роль IAM для функции Lambda | bool | false | нет |
ATTH_POLICY_JSON | Контролирует, следует ли добавлять Police_json в роль IAM для функции Lambda | bool | false | нет |
attach_policy_jsons | Контролирует, следует ли добавлять Police_jsons к роли IAM для функции Lambda | bool | false | нет |
attach_policy_statements | Контролирует, следует ли добавлять Police_statements к роли IAM для функции Lambda | bool | false | нет |
attach_trecing_policy | Контролирует, следует ли добавить политику трассировки рентгеновских лучей к роли IAM для функции Lambda | bool | false | нет |
Authorization_type | Тип аутентификации, которую использует URL -адрес функции Lambda. Установите в «AWS_IAM», чтобы ограничить доступ только аутентифицированным пользователям IAM. Установите, чтобы «нет», чтобы обойти аутентификацию IAM и создать публичную конечную точку. | string | "NONE" | нет |
build_in_docker | Строиться ли зависимости в докере | bool | false | нет |
Cloudwatch_logs_kms_key_id | ARN ключа KMS для использования при шифровании данных журнала. | string | null | нет |
Cloudwatch_logs_log_group_class | Указал класс журнала группы журналов. Возможные значения: STANDARD или INFREQUENT_ACCESS | string | null | нет |
Cloudwatch_logs_retention_in_days | Указывает количество дней, которые вы хотите сохранить события журнала в указанной группе журналов. Возможные значения: 1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827 и 3653. | number | null | нет |
Cloudwatch_logs_skip_destroy | Сохранять ли группы журналов (и любые журналы, которые она может содержать) во время уничтожения. | bool | false | нет |
Cloudwatch_logs_tags | Карта тегов для назначения ресурсу. | map(string) | {} | нет |
CODE_SIGNING_CONFIG_ARN | Имя ресурса Amazon (ARN) для конфигурации подписания кода | string | null | нет |
COMPATIBLE_ARCHICTURES | Список архитектурного слоя лямбда совместим. В настоящее время можно указать x86_64 и ARM64. | list(string) | null | нет |
compatible_runtimes | Список времени выполнения, с этим слоем совместим. Можно указать до 5 времени выполнения. | list(string) | [] | нет |
корр | Настройки CORS, которые будут использоваться URL функции Lambda | any | {} | нет |
создавать | Контролирует, должны быть созданы ресурсы | bool | true | нет |
create_async_event_config | Управляет, должна ли асинхронная конфигурация события для функции/псевдоним лямбда | bool | false | нет |
create_current_version_allowed_triggers | Допустить ли триггеры на текущей версии функции Lambda (это отменит разрешения из предыдущей версии, потому что Terraform управляет только текущими ресурсами) | bool | true | нет |
create_current_version_async_event_config | Разрешить ли асинхродиционная конфигурация событий в текущей версии функции Lambda (это отменит разрешения из предыдущей версии, потому что Terraform управляет только текущими ресурсами) | bool | true | нет |
create_function | Управляет, должен ли создавать ресурс функции Lambda | bool | true | нет |
create_lambda_function_url | Управляет, должен ли создавать ресурс URL -адреса URL -адреса Lambda | bool | false | нет |
create_layer | Управляет, следует ли создавать ресурс LAMBDA уровня | bool | false | нет |
create_package | Управляет, должен ли пакет Lambda быть созданным | bool | true | нет |
Create_Role | Контролирует, следует ли создавать роль IAM для функции Lambda | bool | true | нет |
CREATE_SAM_METADATA | Контролирует, следует ли создавать ресурс Null Metadata SAM | bool | false | нет |
create_unqualified_alias_allowed_triggers | Допустить ли триггеры на неквалифицированном псевдониме, указывающем на последнюю версию $ | bool | true | нет |
create_unqualified_alias_async_event_config | Допустить ли асинхронное конфигурацию события на неквалифицированном псевдониме, указывающем на последнюю версию $ | bool | true | нет |
create_unqualified_alias_lambda_function_url | Использовать ли неквалифицированный псевдоним, указывающий на последнюю версию $ в URL Function Lambda | bool | true | нет |
dead_letter_target_arn | ARN of SNS Тема или очередь SQS, чтобы уведомить, когда вызов не удается. | string | null | нет |
описание | Описание вашей функции лямбды (или слоя) | string | "" | нет |
destination_on_failure | Имя ресурса Amazon (ARN) ресурса назначения для неудачных асинхронных призывов | string | null | нет |
destine_on_success | Имя ресурса Amazon (ARN) ресурса назначения для успешных асинхронных призывов | string | null | нет |
docker_additional_options | Дополнительные параметры для передачи в команду Docker Run (например, для установки переменных среды, объемов и т. Д.) | list(string) | [] | нет |
docker_build_root | Root dir, где построить в Docker | string | "" | нет |
docker_entrypoint | Путь к точке входа Docker для использования | string | null | нет |
docker_file | Путь к докерфиле при строительстве в докере | string | "" | нет |
docker_image | Docker Image для использования для сборки | string | "" | нет |
docker_pip_cache | Сможет ли общий папку с кешем PIP в среду Docker или нет | any | null | нет |
docker_with_ssh_agent | Передать ли ssh_auth_sock в среду Docker или нет | bool | false | нет |
Environment_variables | Карта, которая определяет переменные среды для функции Lambda. | map(string) | {} | нет |
ephemeral_storage_size | Количество эфемерного хранения (/TMP) в MB Ваша функция Lambda может использовать во время выполнения. Допустимое значение от 512 МБ до 10 240 МБ (10 ГБ). | number | 512 | нет |
event_source_mapping | Карта карты источника событий | any | {} | нет |
file_system_arn | Имя ресурса Amazon (ARN) точки доступа Amazon EFS, которая обеспечивает доступ к файловой системе. | string | null | нет |
file_system_local_mount_path | Путь, в котором функция может получить доступ к файловой системе, начиная с /mnt /. | string | null | нет |
function_name | Уникальное имя для вашей функции лямбды | string | "" | нет |
function_tags | Карта тегов, чтобы назначить только функцию Lambda | map(string) | {} | нет |
обработчик | Lambda функция ввода в вашем коде | string | "" | нет |
hash_extra | Строка, чтобы добавить в функцию хэширования. Полезно при создании того же исходного пути для разных функций. | string | "" | нет |
Ignore_source_code_hash | Игнорировать ли изменения в хэш исходного кода функции. Установите True, если вы управляете инфраструктурой и развертываниями кода отдельно. | bool | false | нет |
image_config_command | CMD для изображения Docker | list(string) | [] | нет |
image_config_entry_point | Входная точка для изображения Docker | list(string) | [] | нет |
image_config_working_directory | Рабочий каталог для изображения Docker | string | null | нет |
Image_uri | ECR -изображение URI, содержащее пакет развертывания функции. | string | null | нет |
invoke_mode | Вызове режим функционального URL Lambda. Допустимые значения буферируются (по умолчанию) и response_stream. | string | null | нет |
ipv6_allowed_for_dual_stack | Позволяет исходящий трафик IPv6 на функциях VPC, которые подключены к двойным сэмплэк-подсетам | bool | null | нет |
kms_key_arn | Ключ ARN of KMS для использования вашей функцией лямбды | string | null | нет |
lambda_at_edge | Установите это на True, если использует лямбда@Edge, чтобы включить публикацию, ограничить тайм -аут и позволить Edgelambda.amazonaws.com вызвать функцию | bool | false | нет |
lambda_at_edge_logs_all_regions | Указывать ли подстановочный знак в политике IAM, используемой Lambda@Edge, чтобы разрешить регистрацию во всех регионах | bool | true | нет |
Lambda_Role | IAM Роль Арн привязан к функции Lambda. Это регулирует как, кто / что может вызвать вашу функцию Lambda, а также какие ресурсы, к которой у нашей функции Lambda есть доступ. См. Модель разрешения Lambda для получения более подробной информации. | string | "" | нет |
layer_name | Название Lambda Layer для создания | string | "" | нет |
layer_skip_destroy | Сохранять ли старая версия ранее развернутого уровня Lambda. | bool | false | нет |
слои | Список версии Lambda Layer Arns (максимум 5), чтобы прикрепить к вашей функции Lambda. | list(string) | null | нет |
Лицензия_INFO | Информация о лицензии для вашего уровня лямбда. Например, MIT или полный URL лицензии. | string | "" | нет |
local_existing_package | Абсолютный путь к существующему файлу Zip для использования | string | null | нет |
logging_application_log_level | Уровень журнала приложений функции Lambda. Допустимыми значениями являются «трассировка», «отладка», «информация», «Warn», «ошибка» или «фатальный». | string | "INFO" | нет |
logging_log_format | Формат журнала функции лямбда. Допустимые значения - «json» или «текст». | string | "Text" | нет |
logging_log_group | Группа журналов CloudWatch для отправки журналов. | string | null | нет |
logging_system_log_level | Системный журнал уровня функции лямбда. Допустимые значения - это «отладка», «информация» или «предупреждать». | string | "INFO" | нет |
maximum_event_age_in_seconds | Максимальный возраст запроса, который Lambda отправляет на функцию для обработки за считанные секунды. Допустимые значения от 60 до 21600. | number | null | нет |
maximum_retry_attempts | Максимальное количество раз повторно, когда функция возвращает ошибку. Допустимые значения от 0 до 2. По умолчанию до 2. | number | null | нет |
memory_size | Количество памяти в MB Ваша функция лямбда может использовать во время выполнения. Допустимое значение от 128 МБ до 10 240 МБ (10 ГБ), с шагом 64 МБ. | number | 128 | нет |
number_of_policies | Количество политик, которые прикрепляются к роли IAM для функции Lambda | number | 0 | нет |
№_of_policy_jsons | Количество политик JSON для прикрепления к роли IAM для функции Lambda | number | 0 | нет |
package_type | Тип пакета развертывания Lambda. Допустимые параметры: ZIP или изображение | string | "Zip" | нет |
политики | Список заявлений о политике ARN, чтобы присоединиться к роли функции Lambda | list(string) | [] | нет |
политика | Дополнительный политический документ ARN для привязанности к функциональной роли Lambda | string | null | нет |
POLIGE_JSON | Дополнительный политический документ как JSON для прикрепления к функции Lambda | string | null | нет |
POLIGE_JSONS | Список дополнительных политических документов в качестве JSON для присоединения к функциональной роли Lambda | list(string) | [] | нет |
Police_Name | IAM Policy Name. Он переопределяет значение по умолчанию, которое такое же, как ROLE_NAME | string | null | нет |
Police_path | Путь политики к этому должен быть добавлен к роли IAM для функции Lambda | string | null | нет |
Политика_statements | Карта динамических заявлений о политике, чтобы присоединиться к роли функции Lambda | any | {} | нет |
provisioned_concurrent_exections | Сумма емкости для распределения. Установите на 1 или более, чтобы включить или установить на 0, чтобы отключить предоставленный параллелизм. | number | -1 | нет |
публиковать | Опубликовать ли создание/изменение в качестве новой версии функции Lambda. | bool | false | нет |
PUTIN_KHUYLO | Согласны ли вы с тем, что Путин не уважает украинский суверенитет и территориальную целостность? Более подробная информация: https://en.wikipedia.org/wiki/putin_khuylo! | bool | true | нет |
Recrete_missing_package | Возникает ли воссоздать отсутствующий пакет лямбда, если он не хватает локально или нет | bool | true | нет |
replace_security_groups_on_destroy | (Необязательно) Когда TRUE, все группы безопасности, определенные в VPC_SECURTION_GROUP_IDS, будут заменены на группу безопасности по умолчанию после уничтожения функции. Установите переменную замену_security_group_ids, чтобы использовать пользовательский список групп безопасности для замены. | bool | null | нет |
SPEECTSION_SECURTION_GROUP_IDS | (Optional) List of security group IDs to assign to orphaned Lambda function network interfaces upon destruction. replace_security_groups_on_destroy must be set to true to use this attribute. | list(string) | null | нет |
reserved_concurrent_executions | The amount of reserved concurrent executions for this Lambda Function. A value of 0 disables Lambda Function from being triggered and -1 removes any concurrency limitations. Defaults to Unreserved Concurrency Limits -1. | number | -1 | нет |
role_description | Description of IAM role to use for Lambda Function | string | null | нет |
role_force_detach_policies | Specifies to force detaching any policies the IAM role has before destroying it. | bool | true | нет |
role_maximum_session_duration | Maximum session duration, in seconds, for the IAM role | number | 3600 | нет |
role_name | Name of IAM role to use for Lambda Function | string | null | нет |
role_path | Path of IAM role to use for Lambda Function | string | null | нет |
role_permissions_boundary | The ARN of the policy that is used to set the permissions boundary for the IAM role used by Lambda Function | string | null | нет |
role_tags | A map of tags to assign to IAM role | map(string) | {} | нет |
время выполнения | Lambda Function runtime | string | "" | нет |
s3_acl | The canned ACL to apply. Valid values are private, public-read, public-read-write, aws-exec-read, authenticated-read, bucket-owner-read, and bucket-owner-full-control. Defaults to private. | string | "private" | нет |
s3_bucket | S3 bucket to store artifacts | string | null | нет |
s3_existing_package | The S3 bucket object with keys bucket, key, version pointing to an existing zip-file to use | map(string) | null | нет |
s3_kms_key_id | Specifies a custom KMS key to use for S3 object encryption. | string | null | нет |
s3_object_override_default_tags | Whether to override the default_tags from provider? NB: S3 objects support a maximum of 10 tags. | bool | false | нет |
s3_object_storage_class | Specifies the desired Storage Class for the artifact uploaded to S3. Can be either STANDARD, REDUCED_REDUNDANCY, ONEZONE_IA, INTELLIGENT_TIERING, or STANDARD_IA. | string | "ONEZONE_IA" | нет |
s3_object_tags | A map of tags to assign to S3 bucket object. | map(string) | {} | нет |
s3_object_tags_only | Set to true to not merge tags with s3_object_tags. Useful to avoid breaching S3 Object 10 tag limit. | bool | false | нет |
s3_prefix | Directory name where artifacts should be stored in the S3 bucket. If unset, the path from artifacts_dir is used | string | null | нет |
s3_server_side_encryption | Specifies server-side encryption of the object in S3. Valid values are "AES256" and "aws:kms". | string | null | нет |
skip_destroy | Set to true if you do not wish the function to be deleted at destroy time, and instead just remove the function from the Terraform state. Useful for Lambda@Edge functions attached to CloudFront distributions. | bool | null | нет |
snap_start | (Optional) Snap start settings for low-latency startups | bool | false | нет |
source_path | The absolute path to a local file or directory containing your Lambda source code | any | null | нет |
store_on_s3 | Whether to store produced artifacts on S3 or locally. | bool | false | нет |
теги | A map of tags to assign to resources. | map(string) | {} | нет |
тайм -аут | The amount of time your Lambda Function has to run in seconds. | number | 3 | нет |
timeouts | Define maximum timeout for creating, updating, and deleting Lambda Function resources | map(string) | {} | нет |
tracing_mode | Tracing mode of the Lambda Function. Valid value can be either PassThrough or Active. | string | null | нет |
trigger_on_package_timestamp | Whether to recreate the Lambda package if the timestamp changes | bool | true | нет |
trusted_entities | List of additional trusted entities for assuming Lambda Function role (trust relationship) | any | [] | нет |
use_existing_cloudwatch_log_group | Whether to use an existing CloudWatch log group or create new | bool | false | нет |
vpc_security_group_ids | List of security group ids when Lambda Function should run in the VPC. | list(string) | null | нет |
vpc_subnet_ids | List of subnet ids when Lambda Function should run in the VPC. Usually private or intra subnets. | list(string) | null | нет |
Имя | Описание |
---|---|
lambda_cloudwatch_log_group_arn | The ARN of the Cloudwatch Log Group |
lambda_cloudwatch_log_group_name | The name of the Cloudwatch Log Group |
lambda_event_source_mapping_arn | The event source mapping ARN |
lambda_event_source_mapping_function_arn | The the ARN of the Lambda function the event source mapping is sending events to |
lambda_event_source_mapping_state | The state of the event source mapping |
lambda_event_source_mapping_state_transition_reason | The reason the event source mapping is in its current state |
lambda_event_source_mapping_uuid | The UUID of the created event source mapping |
lambda_function_arn | The ARN of the Lambda Function |
lambda_function_arn_static | The static ARN of the Lambda Function. Use this to avoid cycle errors between resources (eg, Step Functions) |
lambda_function_invoke_arn | The Invoke ARN of the Lambda Function |
lambda_function_kms_key_arn | The ARN for the KMS encryption key of Lambda Function |
lambda_function_last_modified | The date Lambda Function resource was last modified |
lambda_function_name | The name of the Lambda Function |
lambda_function_qualified_arn | The ARN identifying your Lambda Function Version |
lambda_function_qualified_invoke_arn | The Invoke ARN identifying your Lambda Function Version |
lambda_function_signing_job_arn | ARN of the signing job |
lambda_function_signing_profile_version_arn | ARN of the signing profile version |
lambda_function_source_code_hash | Base64-encoded representation of raw SHA-256 sum of the zip file |
lambda_function_source_code_size | The size in bytes of the function .zip file |
lambda_function_url | The URL of the Lambda Function URL |
lambda_function_url_id | The Lambda Function URL generated id |
lambda_function_version | Latest published version of Lambda Function |
lambda_layer_arn | The ARN of the Lambda Layer with version |
lambda_layer_created_date | The date Lambda Layer resource was created |
lambda_layer_layer_arn | The ARN of the Lambda Layer without version |
lambda_layer_source_code_size | The size in bytes of the Lambda Layer .zip file |
lambda_layer_version | The Lambda Layer version |
lambda_role_arn | The ARN of the IAM role created for the Lambda Function |
lambda_role_name | The name of the IAM role created for the Lambda Function |
lambda_role_unique_id | The unique id of the IAM role created for the Lambda Function |
local_filename | The filename of zip archive deployed (if deployment was from local) |
s3_object | The map with S3 object data of zip archive deployed (if deployment was from S3) |
During development involving modifying python files, use tox to run unit tests:
tox
This will try to run unit tests which each supported python version, reporting errors for python versions which are not installed locally.
If you only want to test against your main python version:
tox -e py
You can also pass additional positional arguments to pytest which is used to run test, eg to make it verbose:
tox -e py -- -vvv
Module managed by Anton Babenko. Check out serverless.tf to learn more about doing serverless with Terraform.
Please reach out to Betajob if you are looking for commercial support for your Terraform, AWS, or serverless project.
Apache 2 Licensed. See LICENSE for full details.