O Módulo Terraform, que cria quase todos os recursos da AWS Lambda, além de cuidar da construção e embalagem das dependências Lambda necessárias para funções e camadas.
Este módulo Terraform é a parte da estrutura sem servidor.tf, que visa simplificar todas as operações ao trabalhar com os sem servidores em Terraform:
serverless.tf
como o HTTP API Gateway (consulte Exemplos lá). 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 "
}
Se você deseja gerenciar o código da função e os recursos de infraestrutura (como permissões de IAM, políticas, eventos etc.) em fluxos separados (por exemplo, diferentes repositórios, equipes, pipelines de CI/CD).
Desative o rastreamento do código -fonte para desativar as implantações (e reversão) usando o módulo Configurando ignore_source_code_hash = true
e implante uma função dummy .
Quando a infraestrutura e a função fictícia são implantadas, você pode usar a ferramenta externa para atualizar o código -fonte da função (por exemplo, usando a AWS CLI) e continuar usando esse módulo via Terraform para gerenciar a infraestrutura.
Esteja ciente de que as alterações no valor local_existing_package
podem desencadear a implantação via 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
}
Observe que este módulo não copia pacotes pré -construídos no balde S3. Este módulo pode armazenar apenas os pacotes que ele constrói localmente e no balde 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 "
}
Certifique-se de implantar funções Lambda@Edge na região dos EUA leste (N. Virginia) ( us-east-1
). Consulte os requisitos e restrições às funções 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 " ]
}
Existem 6 maneiras suportadas de anexar políticas do IAM ao papel do IAM usado pela função Lambda:
policy_json
- String json ou heredoc, quando attach_policy_json = true
.policy_jsons
- Lista de Strings JSON ou Heredoc, quando attach_policy_jsons = true
e number_of_policy_jsons > 0
.policy
- ARN da política do IAM existente, quando attach_policy = true
.policies
- Lista de ARNs das políticas do IAM existentes, quando attach_policies = true
e number_of_policies > 0
.policy_statements
- Mapa de mapas para definir declarações IAM que serão geradas como política IAM. Requer attach_policy_statements = true
. Consulte examples/complete
para obter mais informações.assume_role_policy_statements
- mapa de mapas para definir declarações IAM que serão geradas como política do IAM para assumir a função da função Lambda (relação de confiança). Consulte examples/complete
para obter mais informações. As permissões lambda devem ser especificadas para permitir que certos recursos invocem a função 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 "
}
}
}
Às vezes, você precisa ter uma maneira de criar recursos condicionalmente, mas a Terraform não permite o uso da count
dentro do bloco module
, portanto a solução é especificar create
argumentos.
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
}
Esta é uma das partes mais complicadas feitas pelo módulo e, normalmente, você não precisa conhecer internos.
package.py
é script python que faz isso. Certifique -se de que o Python 3.6 ou mais recente esteja instalado. As principais funções do script são gerar um nome de arquivo de zip-archive com base no conteúdo dos arquivos, verifique se o zip-archive já foi criado e crie zip-arco apenas quando for necessário (durante apply
, não plan
) .
O hash de zip-archive criado com o mesmo conteúdo dos arquivos é sempre idêntico, o que impede que atualizam as atualizações de força desnecessárias dos recursos da Lambda, a menos que o conteúdo seja modificado. Se você precisar ter nomes de arquivos diferentes para o mesmo conteúdo, poderá especificar o argumento de string extra hash_extra
.
Ao ligar para este módulo várias vezes em uma execução para criar pacotes com o mesmo source_path
, as archas postais serão corrompidas devido a gravações simultâneas no mesmo arquivo. Existem duas soluções - Defina valores diferentes para hash_extra
para criar diferentes arquivos ou criar um pacote uma vez fora (usando este módulo) e depois passe o argumento local_existing_package
para criar outros recursos da Lambda.
A construção e a embalagem têm sido historicamente difíceis de depurar (especialmente com a Terraform), por isso fizemos um esforço para facilitar a consulta do usuário a ver informações de depuração. Existem 3 níveis diferentes de depuração: DEBUG
- para ver apenas o que está acontecendo durante a fase de planejamento e como uma filtragem de conteúdo de arquivo zip em caso de padrões aplicados, DEBUG2
- para ver mais saída de log, DEBUG3
- para ver todos os valores de registro, DUMP_ENV
- para Consulte todos os valores de registro e variáveis ENV (tenha cuidado, compartilhando suas variáveis Env, pois elas podem conter segredos!).
O usuário pode especificar o nível de depuração como este:
export TF_LAMBDA_PACKAGE_LOG_LEVEL=DEBUG2
terraform apply
O usuário pode ativar comentários em strings heredoc em patterns
que podem ser úteis em algumas situações. Para fazer isso, defina esta variável de ambiente:
export TF_LAMBDA_PACKAGE_PATTERN_COMMENTS=true
terraform apply
Você pode especificar source_path
de várias maneiras para alcançar a flexibilidade desejada ao criar pacotes de implantação localmente ou no Docker. Você pode usar caminhos absolutos ou relativos. Se você colocou arquivos TerraForm em subdiretos, observe que os caminhos relativos são especificados no diretório em que terraform plan
é executado e não a localização do seu arquivo Terraform.
Observe que, ao criar localmente, os arquivos não estão copiando em nenhum lugar dos diretórios de origem ao fazer pacotes, usamos expressões regulares rápidas do Python para encontrar arquivos e diretórios correspondentes, o que torna as embalagens muito rápidas e fáceis de entender.
Quando source_path
é definido como uma string, o conteúdo desse caminho será usado para criar o pacote de implantação AS-IS:
source_path = "src/function1"
Quando source_path
for definido como uma lista de diretórios, o conteúdo de cada um será levado e um arquivo será criado.
Esta é a maneira mais completa de criar um pacote de implantação de várias fontes com várias dependências. Este exemplo está mostrando algumas das opções disponíveis (consulte Exemplos/pacote de construção e exemplos/tempos de execução para mais):
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
}
]
Poucas notas:
python
ou nodejs
, o processo de compilação criará automaticamente as dependências do Python e do NodeJS se o arquivo requirements.txt
ou package.json
será encontrado na pasta de origem. Se você deseja personalizar esse comportamento, use a notação do objeto, conforme explicado abaixo.path
são opcionais.patterns
- Lista de nomes de arquivos Python Regex devem satisfazer. O valor padrão é "incluir tudo", que é igual a patterns = [".*"]
. Isso também pode ser especificado como string heredoc multilina (nenhum comentário permitido). Alguns exemplos de padrões válidos:commands
e acorrentar vários comandos, apenas o código de saída do último comando será verificado para o sucesso. Se você preferir falhar rapidamente, inicie os comandos com a opção Bash set -e
ou PowerShell opção $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
- Lista de comandos para executar. Se especificado, esse argumento substitui pip_requirements
e npm_requirements
.:zip [source] [destination]
é um comando especial que cria conteúdo do diretório de trabalho atual (primeiro argumento) e o coloca dentro do caminho (segundo argumento).pip_requirements
- Controla se deve executar pip install
. Defina como false
para desativar esse recurso, true
a executar pip install
com requirements.txt
encontrado no path
. Ou defina para outro nome de arquivo que você deseja usar. Quando source_path
é passado como uma string que contém um caminho (e não uma lista de mapas) e requirements.txt
está presente, pip install
é executada automaticamente.pip_tmp_dir
- Defina o diretório base para fazer o diretório temporário para instalações PIP. Pode ser útil para o Docker nas construções do Docker.poetry_install
- Controla se deve executar poetry export
e pip install
. Defina como false
para desativar esse recurso, true
a executar poetry export
com pyproject.toml
e poetry.lock
encontrado no path
. Quando source_path
é passado como uma string que contém um caminho (e não uma lista de mapas), e pyproject.toml
com uma poetry
do sistema de construção está presente, poetry export
e pip install
são executadas automaticamente.poetry_export_extra_args
- Uma lista de argumentos de poesia adicionais para adicionar ao comando de exportação de poesianpm_requirements
- Controla se deve executar npm install
. Defina como false
para desativar esse recurso, true
a executar npm install
com package.json
encontrado no path
. Ou defina para outro nome de arquivo que você deseja usar.npm_tmp_dir
- Defina o diretório base para fazer o diretório temporário para instalações de NPM. Pode ser útil para o Docker nas construções do Docker.prefix_in_zip
- se especificado, será usado como um prefixo dentro do zip -arco. Por padrão, tudo se instala na raiz do zip-archive.Se sua função ou camada lambda usar algumas dependências, você poderá construí -las no Docker e incluí -las no pacote de implantação. Aqui está como você pode fazer isso:
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.
Usando este módulo, você pode instalar dependências de hosts privados. Para fazer isso, você precisa do agente SSH avançado:
docker_with_ssh_agent = true
Observe que, por padrão, o docker_image
usado vem do registro public.ecr.aws/sam/
e será baseado no runtime
que você especificar. Em outras palavras, se você especificar um tempo de execução do python3.12
e não especificar docker_image
, o docker_image
resolverá para public.ecr.aws/sam/build-python3.12
. Isso garante que, por padrão, o runtime
esteja disponível no contêiner do Docker.
Se você substituir docker_image
, mantenha a imagem sincronizada com o seu runtime
. Durante a fase do plano, ao usar o Docker, não há verificação de que o runtime
está disponível para construir o pacote. Isso significa que, se você usar uma imagem que não tenha o tempo de execução, o plano ainda terá sucesso, mas o aplicativo falhará.
Para adicionar flexibilidade ao criar no Docker, você pode passar por qualquer número de opções adicionais necessárias (consulte Referência do Docker Run para opções disponíveis):
docker_additional_options = [
" -e " , " MY_ENV_VAR='My environment variable value' " ,
" -v " , " /local:/docker-vol " ,
]
Para substituir o ponto de entrada do Docker ao criar no Docker, defina docker_entrypoint
:
docker_entrypoint = " /entrypoint/entrypoint.sh "
O ponto de entrada deve mapear para um caminho dentro do seu contêiner, portanto, você precisa criar sua própria imagem que contém o ponto de entrada ou mapeie -o para um arquivo no host montando um volume (consulte Passando opções adicionais do docker).
Por padrão, este módulo cria pacote de implantação e o usa para criar ou atualizar a função Lambda ou a camada lambda.
Às vezes, convém separar a compilação do pacote de implantação (por exemplo, para compilar e instalar dependências) da implantação de um pacote em duas etapas separadas.
Ao criar o arquivo localmente fora deste módulo, você precisa definir create_package = false
e, em seguida, argumento local_existing_package = "existing_package.zip"
. Como alternativa, você pode preferir manter seus pacotes de implantação no balde S3 e fornecer uma referência a eles assim:
create_package = false
s3_existing_package = {
bucket = " my-bucket-with-lambda-builds "
key = " existing_package.zip "
}
Isso pode ser implementado em duas etapas: faça o download do arquivo localmente usando o CURL e passe o caminho para o pacote de implantação como argumento 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 " ]
}
O AWS SAM CLI é uma ferramenta de código aberto que ajuda os desenvolvedores a iniciar, criar, testar e implantar aplicativos sem servidor. A ferramenta SAM CLI suporta aplicativos Terraform.
A SAM CLI fornece duas maneiras de testar: testes e testes locais na nuvem (acelerar).
Usando o SAM CLI, você pode invocar as funções Lambda definidas no aplicativo Terraform localmente usando o comando Sam Local Invoke, fornecendo o endereço da função Terraform ou o nome da função e definir o hook-name
para terraform
para informar a Sam Cli que o projeto subjacente é um aplicativo Terraform.
Você pode executar o comando sam local invoke
do seu diretório raiz do aplicativo Terraform como seguinte:
sam local invoke --hook-name terraform module.hello_world_function.aws_lambda_function.this[0]
Você também pode passar um evento para sua função Lambda ou substituir suas variáveis de ambiente. Verifique aqui para obter mais informações.
Você também pode invocar sua função Lambda no modo de depuração e passo a passo o código-fonte da função Lambda localmente no seu editor preferido. Verifique aqui para obter mais informações.
Você pode usar a AWS SAM CLI para testar rapidamente seu aplicativo em sua conta de desenvolvimento da AWS. Usando o SAM Acelere, você poderá desenvolver suas funções Lambda localmente e, depois de salvar suas atualizações, a SAM CLI atualizará sua conta de desenvolvimento com as funções atualizadas do Lambda. Portanto, você pode testá -lo na nuvem e, se houver algum bug, poderá atualizar rapidamente o código, e o SAM CLI cuidará de empurrá -lo para a nuvem. Verifique aqui mais informações sobre o SAM acelerar.
Você pode executar o comando sam sync
do seu diretório raiz do aplicativo Terraform como seguinte:
sam sync --hook-name terraform --watch
Normalmente, as atualizações de recursos da função Lambda quando o código -fonte muda. Se publish = true
for especificado, uma nova versão da função Lambda também será criada.
A função Lambda publicada pode ser invocada usando o número da versão ou usando $LATEST
. Essa é a maneira mais simples de implantação que não exige nenhuma ferramenta ou serviço adicional.
Para fazer implantações controladas (rolando, canário, reversão) das funções Lambda, precisamos usar aliases da função Lambda.
Em termos simples, o alias do Lambda é como um ponteiro de uma versão da função Lambda (quando a implantação completa) ou para duas versões ponderadas da função Lambda (durante a implantação do rolamento ou do canário).
Uma função lambda pode ser usada em vários aliases. O uso de aliases fornece um grande controle de qual versão implantada ao ter vários ambientes.
Há módulo de alias, que simplifica o trabalho com alias (crie, gerencie configurações, atualizações etc.). Veja exemplos/alias para vários casos de uso como os aliases podem ser configurados e usados.
Existe um módulo de implantação, que cria recursos necessários para fazer implantações usando o AWS CodeDemploy. Ele também cria a implantação e aguarde a conclusão. Consulte Exemplos/Implante para obter um processo completo de construção/atualização/implantação de ponta a ponta.
O Terraform Cloud, a Terraform Enterprise e muitos outros SaaS para a execução do Terraform não têm o Python pré-instalado sobre os trabalhadores. Você precisará fornecer uma imagem alternativa do Docker com o Python instalado para poder usar este módulo lá.
Q1: Por que o pacote de implantação não recriou toda vez que eu mudo alguma coisa? Ou por que o pacote de implantação está sendo recriado toda vez, mas o conteúdo não foi alterado?
Resposta: Pode haver vários motivos relacionados a execuções simultâneas ou ao hash de conteúdo. Às vezes, as mudanças ocorreram dentro da dependência que não é usada no cálculo do hash de conteúdo. Ou vários pacotes estão criando ao mesmo tempo a partir das mesmas fontes. Você pode forçá -lo definindo o valor de
hash_extra
em valores distintos.
Q2: Como forçar o pacote de implantação?
Resposta: Exclua um arco zip existente do diretório
builds
ou faça uma alteração no seu código-fonte. Se não houver arco zip para o hash de conteúdo atual, ele será recriado duranteterraform apply
.
Q3: null_resource.archive[0] must be replaced
Resposta: Isso provavelmente significa que o zip-archive foi implantado, mas atualmente está ausente localmente e deve ser recriado localmente. Quando você se depara com esse problema durante o processo de CI/CD (onde o espaço de trabalho está limpo) ou de vários espaços de trabalho, você pode definir a variável de ambiente
TF_RECREATE_MISSING_LAMBDA_PACKAGE=false
ou Passrecreate_missing_package = false
como parâmetro para o módulo e executarterraform apply
. Como alternativa, você pode passartrigger_on_package_timestamp = false
como um parâmetro para ignorar o registro de data e hora ao decidir criar o arquivo ou não.
Q4: O que esse erro significa - "We currently do not support adding policies for $LATEST."
?
Resposta: Quando a função Lambda é criada com
publish = true
a nova versão é aumentada automaticamente e um identificador qualificado (número da versão) ficará disponível e será usado ao definir permissões de lambda.Quando
publish = false
(padrão), apenas o identificador não qualificado ($LATEST
) está disponível, o que leva ao erro.A solução é desativar a criação de permissões lambda para a versão atual, configurando
create_current_version_allowed_triggers = false
, ou para ativar a publicação da função lambda (publish = true
).
builds
geralmente está ausente.Nome | Versão |
---|---|
Terraform | > = 1.0 |
AWS | > = 5,70 |
externo | > = 1.0 |
local | > = 1.0 |
nulo | > = 2.0 |
Nome | Versão |
---|---|
AWS | > = 5,70 |
externo | > = 1.0 |
local | > = 1.0 |
nulo | > = 2.0 |
Sem módulos.
Nome | Tipo |
---|---|
aws_cloudwatch_log_group.lambda | recurso |
aws_iam_policy.additional_inline | recurso |
aws_iam_policy.additional_json | recurso |
aws_iam_policy.additional_jsons | recurso |
aws_iam_policy.async | recurso |
aws_iam_policy.dead_letter | recurso |
aws_iam_policy.logs | recurso |
aws_iam_policy.Tacing | recurso |
aws_iam_policy.vpc | recurso |
aws_iam_role.lambda | recurso |
aws_iam_role_policy_attachment.additional_inline | recurso |
aws_iam_role_policy_attachment.additional_json | recurso |
aws_iam_role_policy_attachment.additional_jsons | recurso |
aws_iam_role_policy_attachment.additional_many | recurso |
aws_iam_role_policy_attachment.additional_one | recurso |
aws_iam_role_policy_attachment.async | recurso |
aws_iam_role_policy_attachment.dead_letter | recurso |
aws_iam_role_policy_attachment.logs | recurso |
AWS_IAM_ROLE_POLICY_ATTACHMENT.TRACING | recurso |
aws_iam_role_policy_attachment.vpc | recurso |
aws_lambda_event_source_mapping.This | recurso |
aws_lambda_function.This | recurso |
aws_lambda_function_event_invoke_config.This | recurso |
aws_lambda_function_url.This | recurso |
aws_lambda_layer_version.This | recurso |
aws_lambda_permission.current_version_triggers | recurso |
aws_lambda_permission.unqualified_alias_triggers | recurso |
aws_lambda_provisioned_concurrency_config.current_version | recurso |
aws_s3_object.lambda_package | recurso |
LOCAL_FILE.ARCHIVE_PLAN | recurso |
null_resource.archive | recurso |
null_resource.sam_metadata_aws_lambda_function | recurso |
null_resource.sam_metadata_aws_lambda_layer_version | recurso |
aws_arn.log_group_arn | fonte de dados |
aws_caller_identity.current | fonte de dados |
aws_cloudwatch_log_group.lambda | fonte de dados |
aws_iam_policy.Tacing | fonte de dados |
aws_iam_policy.vpc | fonte de dados |
aws_iam_policy_document.additional_inline | fonte de dados |
aws_iam_policy_document.assume_role | fonte de dados |
aws_iam_policy_document.async | fonte de dados |
aws_iam_policy_document.dead_letter | fonte de dados |
aws_iam_policy_document.logs | fonte de dados |
aws_partition.current | fonte de dados |
aws_region.current | fonte de dados |
external_external.archive_prepare | fonte de dados |
Nome | Descrição | Tipo | Padrão | Obrigatório |
---|---|---|---|---|
permitido_triggers | Mapa de gatilhos permitidos para criar permissões de lambda | map(any) | {} | não |
arquiteturas | Arquitetura do conjunto de instruções para sua função lambda. Os valores válidos são ["x86_64"] e ["ARM64"]. | list(string) | null | não |
artefatos_dir | Nome do diretório onde os artefatos devem ser armazenados | string | "builds" | não |
assume_role_policy_statements | Mapa de declarações de políticas dinâmicas para assumir a função da função Lambda (relação de confiança) | any | {} | não |
APCT_ASYNC_EVENT_POLICY | Controla se a política de eventos assíncronos deve ser adicionada ao papel do IAM para a função Lambda | bool | false | não |
APCT_CLOUDWATCH_LOGS_POLICY | Controla se a política de logs do CloudWatch deve ser adicionada à função de IAM para a função Lambda | bool | true | não |
APCT_CREATE_LOG_GROUP_PERMISSION | Controla se deve adicionar a permissão do Create Log Group à Política de logs do CloudWatch | bool | true | não |
APCT_DEAD_LETTER_POLICY | Controla se a política de notificação de letra morta SNS/SQS deve ser adicionada ao papel de IAM para a função lambda | bool | false | não |
APCT_NETWORK_POLICY | Controla se a política de VPC/rede deve ser adicionada à função de IAM para a função lambda | bool | false | não |
anex_policies | Controla se a lista de políticas deve ser adicionada ao papel de IAM para a função lambda | bool | false | não |
anexe_policy | Controla se a política deve ser adicionada ao papel do IAM para a função Lambda | bool | false | não |
APCT_POLICY_JSON | Controla se Policy_Json deve ser adicionado ao papel IAM para a função Lambda | bool | false | não |
APCT_POLICY_JSONS | Controla se Policy_JSons deve ser adicionado ao papel de IAM para a função Lambda | bool | false | não |
APCT_POLICY_STATEMENTS | Controla se Policy_Statements devem ser adicionados à função de IAM para a função lambda | bool | false | não |
APCT_TRACACE_POLICY | Controla se a política de rastreamento de raios-X deve ser adicionada ao papel do IAM para a função Lambda | bool | false | não |
autorização_type | O tipo de autenticação que o URL da função lambda usa. Defina como 'AWS_IAM' para restringir o acesso apenas a usuários autenticados do IAM. Defina como 'nenhum' para ignorar a autenticação do IAM e criar um terminal público. | string | "NONE" | não |
build_in_docker | Se deve construir dependências no Docker | bool | false | não |
Cloudwatch_logs_kms_key_id | O ARN da tecla KMS a ser usada ao criptografar dados de log. | string | null | não |
Cloudwatch_logs_log_group_class | Especificou a classe de log do grupo de log. Os valores possíveis são: STANDARD ou INFREQUENT_ACCESS | string | null | não |
Cloudwatch_logs_retention_in_days | Especifica o número de dias que você deseja reter eventos de log no grupo de log especificado. Os valores possíveis são: 1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827 e 3653. | number | null | não |
Cloudwatch_logs_skip_destroy | Se deve manter o grupo de log (e qualquer toras que ele possa conter) no momento da destruição. | bool | false | não |
Cloudwatch_logs_tags | Um mapa de tags a serem atribuídas ao recurso. | map(string) | {} | não |
code_signing_config_arn | Nome do recurso da Amazon (ARN) para uma configuração de assinatura de código | string | null | não |
Compatible_architectures | Uma lista de arquiteturas da camada lambda é compatível com. Atualmente, x86_64 e ARM64 podem ser especificados. | list(string) | null | não |
Compatible_runtimes | Uma lista de tempos de execução com que essa camada é compatível com. Até 5 tempos de execução podem ser especificados. | list(string) | [] | não |
cors | Configurações do CORS a serem usadas pelo URL da função lambda | any | {} | não |
criar | Controla se os recursos devem ser criados | bool | true | não |
create_async_event_config | Controla se a configuração de eventos assíncronos para função/alias lambda deve ser criada | bool | false | não |
create_current_version_allowed_triggers | Se deve permitir gatilhos na versão atual da função lambda (isso revogará as permissões da versão anterior porque o Terraform gerencia apenas os recursos atuais) | bool | true | não |
create_current_version_async_event_config | Se deve permitir a configuração do evento assíncrono na versão atual da função lambda (isso revogará as permissões da versão anterior porque o Terraform gerencia apenas os recursos atuais) | bool | true | não |
create_function | Controla se o recurso de função lambda deve ser criado | bool | true | não |
create_lambda_function_url | Controla se o recurso de URL da função lambda deve ser criado | bool | false | não |
create_layer | Controla se o recurso da camada lambda deve ser criado | bool | false | não |
create_package | Controla se o pacote lambda deve ser criado | bool | true | não |
create_role | Controla se o papel do IAM para a função lambda deve ser criado | bool | true | não |
create_sam_metadata | Controla se o recurso nulo de metadados sam deve ser criado | bool | false | não |
create_unqualified_alias_allowed_triggers | Se deve permitir gatilhos em alias não qualificadas apontando para $ versão mais recente | bool | true | não |
create_unqualified_alias_async_event_config | Se deve permitir a configuração do evento assíncrono em alias não qualificadas apontando para $ versão mais recente | bool | true | não |
create_unqualified_alias_lambda_function_url | Se deve usar o alias não qualificado apontando para $ versão mais recente no URL da função lambda | bool | true | não |
Dead_letter_target_arn | O ARN de um tópico SNS ou fila SQS para notificar quando uma invocação falha. | string | null | não |
descrição | Descrição da sua função Lambda (ou camada) | string | "" | não |
destino_on_failure | Nome do recurso da Amazon (ARN) do recurso de destino para invocações assíncronas com falha | string | null | não |
destino_on_success | Nome do recurso da Amazon (ARN) do recurso de destino para invocações assíncronas bem -sucedidas | string | null | não |
Docker_additional_options | Opções adicionais para passar para o comando do Docker Run (por exemplo, para definir variáveis de ambiente, volumes, etc.) | list(string) | [] | não |
Docker_build_root | Dir da raiz onde construir no Docker | string | "" | não |
Docker_entryPoint | Caminho para o ponto de entrada do Docker para usar | string | null | não |
Docker_file | Caminho para um Dockerfile ao construir em Docker | string | "" | não |
Docker_image | Imagem do Docker para usar para a construção | string | "" | não |
Docker_pip_cache | Se deve montar uma pasta de cache de PIP compartilhada em um ambiente de docker ou não | any | null | não |
Docker_with_ssh_agent | Se deve passar por ssh_auth_sock para o ambiente do docker ou não | bool | false | não |
Environment_variables | Um mapa que define variáveis de ambiente para a função Lambda. | map(string) | {} | não |
ephemeral_storage_size | Quantidade de armazenamento efêmero (/TMP) em MB Sua função Lambda pode usar em tempo de execução. Valor válido entre 512 Mb e 10.240 Mb (10 GB). | number | 512 | não |
event_source_mapping | Mapeamento do mapa do evento de fontes de eventos | any | {} | não |
file_system_arn | O nome do recurso Amazon (ARN) do ponto de acesso Amazon EFS que fornece acesso ao sistema de arquivos. | string | null | não |
File_system_local_mount_path | O caminho em que a função pode acessar o sistema de arquivos, começando com /mnt /. | string | null | não |
function_name | Um nome único para sua função lambda | string | "" | não |
function_tags | Um mapa de tags para atribuir apenas à função Lambda | map(string) | {} | não |
manipulador | Ponto de entrada da função lambda em seu código | string | "" | não |
hash_extra | A string a ser adicionada à função de hash. Útil ao criar o mesmo caminho de origem para diferentes funções. | string | "" | não |
ignore_source_code_hash | Se deve ignorar as alterações no hash do código -fonte da função. Defina como true se você gerenciar a infraestrutura e as implantações de código separadamente. | bool | false | não |
Image_Config_Command | O CMD para a imagem do Docker | list(string) | [] | não |
image_config_entry_point | O ponto de entrada para a imagem do Docker | list(string) | [] | não |
image_config_working_directory | O diretório de trabalho para a imagem do Docker | string | null | não |
image_uri | O URI da imagem ECR contendo o pacote de implantação da função. | string | null | não |
Invoke_mode | Invoque o modo do URL da função lambda. Os valores válidos são buffers (padrão) e Response_stream. | string | null | não |
ipv6_allowed_for_dual_stack | Permite o tráfego IPv6 de saída nas funções VPC que estão conectadas a sub-redes de pilha dupla | bool | null | não |
kms_key_arn | A chave ARN do KMS a ser usada pela sua função Lambda | string | null | não |
lambda_at_edge | Defina isso como true se estiver usando lambda@edge, para ativar a publicação, limitar o tempo limite e permitir que Edgelambda.amazonaws.com invocar a função | bool | false | não |
lambda_at_edge_logs_all_regions | Se deve especificar um curinga na política de IAM usada por lambda@edge para permitir o registro em todas as regiões | bool | true | não |
lambda_role | O papel de Iam ARN anexado à função Lambda. Isso governa quem / o que pode invocar sua função Lambda, bem como a quais recursos nossa função Lambda tem acesso. Consulte o modelo de permissão da Lambda para obter mais detalhes. | string | "" | não |
camada_name | Nome da camada lambda para criar | string | "" | não |
camada_skip_destroy | Se deve reter a versão antiga de uma camada lambda previamente implantada. | bool | false | não |
camadas | Lista da versão da camada lambda ARNS (máximo de 5) para anexar à sua função Lambda. | list(string) | null | não |
licença_info | Informações da licença para sua camada lambda. Por exemplo, MIT ou URL completo de uma licença. | string | "" | não |
LOCAL_EXISTING_PACKAGE | O caminho absoluto para um zíper existente para usar | string | null | não |
logging_application_log_level | O nível de log do aplicativo da função Lambda. Os valores válidos são "rastrear", "depuração", "info", "avisar", "error" ou "fatal". | string | "INFO" | não |
logging_log_format | O formato de log da função Lambda. Os valores válidos são "json" ou "texto". | string | "Text" | não |
logging_log_group | O grupo de logs CloudWatch para enviar logs para. | string | null | não |
logging_system_log_level | O nível de log do sistema da função Lambda. Os valores válidos são "Debug", "Info" ou "Warn". | string | "INFO" | não |
MAXIMUM_EVENT_AGE_IN_SECONDS | A idade máxima de uma solicitação que o Lambda envia a uma função para processamento em segundos. Valores válidos entre 60 e 21600. | number | null | não |
Maximum_retry_attempts | Número máximo de vezes para tentar novamente quando a função retornar um erro. Valores válidos entre 0 e 2. Padrões para 2. | number | null | não |
memória_size | Quantidade de memória em MB Sua função Lambda pode usar em tempo de execução. Valor válido entre 128 Mb a 10.240 Mb (10 GB), em incrementos de 64 Mb. | number | 128 | não |
número_of_policies | Número de políticas a se apegar ao papel IAM para a função lambda | number | 0 | não |
número_of_policy_jsons | Número de políticas JSON para anexar ao papel IAM para a função lambda | number | 0 | não |
package_type | O tipo de pacote de implantação da Lambda. Opções válidas: zíper ou imagem | string | "Zip" | não |
políticas | Lista de declarações de política ARN para anexar à função da função lambda | list(string) | [] | não |
política | Um documento de política adicional ARN para anexar à função de função lambda | string | null | não |
Policy_Json | Um documento de política adicional como JSON para anexar à função de função lambda | string | null | não |
Policy_Jsons | Lista de documentos de política adicionais como JSON para anexar à função de função lambda | list(string) | [] | não |
Policy_Name | Nome da política do IAM. Ele substitui o valor padrão, o mesmo que Role_name | string | null | não |
Policy_Path | Caminho das políticas para isso deve ser adicionado ao papel de IAM para a função lambda | string | null | não |
Policy_statements | Mapa de declarações de política dinâmica a serem anexadas à função de função lambda | any | {} | não |
provisioned_concurrent_executions | Quantidade de capacidade de alocar. Defina como 1 ou mais para ativar ou definir como 0 para desativar a simultaneidade provisionada. | number | -1 | não |
publicar | Se deve publicar a criação/alteração como nova versão da função Lambda. | bool | false | não |
putin_khuylo | Você concorda que Putin não respeita a soberania ucraniana e a integridade territorial? Mais informações: https://en.wikipedia.org/wiki/putin_khuylo! | bool | true | não |
recrie_missing_package | Se deve recriar o pacote Lambda ausente se estiver faltando localmente ou não | bool | true | não |
substituir_security_groups_on_destroy | (Opcional) Quando True, todos os grupos de segurança definidos em VPC_Security_Group_Ids serão substituídos pelo grupo de segurança padrão após a destruição da função. Defina a variável substituta_security_group_ids para usar uma lista personalizada de grupos de segurança para substituição. | bool | null | não |
substituição_security_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 | não |
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 | não |
role_description | Description of IAM role to use for Lambda Function | string | null | não |
role_force_detach_policies | Specifies to force detaching any policies the IAM role has before destroying it. | bool | true | não |
role_maximum_session_duration | Maximum session duration, in seconds, for the IAM role | number | 3600 | não |
role_name | Name of IAM role to use for Lambda Function | string | null | não |
role_path | Path of IAM role to use for Lambda Function | string | null | não |
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 | não |
role_tags | A map of tags to assign to IAM role | map(string) | {} | não |
Tempo de execução | Lambda Function runtime | string | "" | não |
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" | não |
s3_bucket | S3 bucket to store artifacts | string | null | não |
s3_existing_package | The S3 bucket object with keys bucket, key, version pointing to an existing zip-file to use | map(string) | null | não |
s3_kms_key_id | Specifies a custom KMS key to use for S3 object encryption. | string | null | não |
s3_object_override_default_tags | Whether to override the default_tags from provider? NB: S3 objects support a maximum of 10 tags. | bool | false | não |
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" | não |
s3_object_tags | A map of tags to assign to S3 bucket object. | map(string) | {} | não |
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 | não |
s3_prefix | Directory name where artifacts should be stored in the S3 bucket. If unset, the path from artifacts_dir is used | string | null | não |
s3_server_side_encryption | Specifies server-side encryption of the object in S3. Valid values are "AES256" and "aws:kms". | string | null | não |
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 | não |
snap_start | (Optional) Snap start settings for low-latency startups | bool | false | não |
source_path | The absolute path to a local file or directory containing your Lambda source code | any | null | não |
store_on_s3 | Whether to store produced artifacts on S3 or locally. | bool | false | não |
tags | A map of tags to assign to resources. | map(string) | {} | não |
tempo esgotado | The amount of time your Lambda Function has to run in seconds. | number | 3 | não |
timeouts | Define maximum timeout for creating, updating, and deleting Lambda Function resources | map(string) | {} | não |
tracing_mode | Tracing mode of the Lambda Function. Valid value can be either PassThrough or Active. | string | null | não |
trigger_on_package_timestamp | Whether to recreate the Lambda package if the timestamp changes | bool | true | não |
trusted_entities | List of additional trusted entities for assuming Lambda Function role (trust relationship) | any | [] | não |
use_existing_cloudwatch_log_group | Whether to use an existing CloudWatch log group or create new | bool | false | não |
vpc_security_group_ids | List of security group ids when Lambda Function should run in the VPC. | list(string) | null | não |
vpc_subnet_ids | List of subnet ids when Lambda Function should run in the VPC. Usually private or intra subnets. | list(string) | null | não |
Nome | Descrição |
---|---|
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.