Terraform模块几乎创建了所有支持的AWS Lambda资源,并照顾和包装所需的lambda依赖性功能和层。
此Terraform模块是server.tf框架的一部分,该框架旨在简化与Terraform中的无服务器时的所有操作:
serverless.tf
集成。TF模块(例如HTTP API网关)(请参阅那里的示例)。 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 "
}
如果您想在单独的流(例如,不同的存储库,团队,CI/CD管道)中管理功能代码和基础架构资源(例如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 "
}
确保您将lambda@edge功能部署到美国东部(N. Virginia)地区( 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策略与Lambda功能使用的IAM角色的支持方法:
policy_json
-json字符串或Heredoc,当attach_policy_json = true
时。policy_jsons
JSON字符串或HEREDOC列表时, attach_policy_jsons = true
and number_of_policy_jsons > 0
。policy
- 现有IAM策略的attach_policy = true
时。policies
- 现有IAM策略的ARN列表,当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不允许在module
块中使用count
,因此解决方案是指定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,并仅在必要时(在apply
期间,不plan
)时才创建zip-archive。 。
用相同的文件内容创建的zip-Archive的哈希始终是相同的,它可以防止lambda资源的不必要的力量更新,除非内容修改。如果您需要具有相同内容的不同文件名,则可以指定额外的字符串参数hash_extra
。
当在一个执行中多次调用此模块以创建具有相同source_path
软件包时,由于同时写入同一文件,zip-archives将损坏zip-archives。有两个解决方案 - 为hash_extra
设置不同的值以创建不同的档案,或者在外部创建一个软件包(使用此模块),然后传递local_existing_package
参数来创建其他lambda资源。
从历史上看,建筑和包装很难进行调试(尤其是与Terraform一起),因此我们努力使用户更容易查看调试信息。有3个不同的调试级别: DEBUG
- 仅查看计划阶段中正在发生的事情,以及在应用模式的情况下如何进行zip文件内容过滤, DEBUG2
查看更多日志记录输出, DEBUG3
查看所有记录值, DUMP_ENV
到查看所有记录值和ENV变量(请小心分享您的ENV变量,因为它们可能包含秘密!)。
用户可以像这样指定调试级别:
export TF_LAMBDA_PACKAGE_LOG_LEVEL=DEBUG2
terraform apply
用户可以在Heredoc字符串中以patterns
启用评论,这在某些情况下可能会有所帮助。为此设置此环境变量:
export TF_LAMBDA_PACKAGE_PATTERN_COMMENTS=true
terraform apply
您可以通过多种方式指定source_path
,以实现本地或在Docker中构建部署软件包时实现所需的灵活性。您可以使用绝对路径或相对路径。如果您将Terraform文件放置在子目录中,请注意,从运行terraform plan
的目录中指定相对路径,而不是Terraform文件的位置。
请注意,在本地构建时,文件在制作软件包时不会从源目录中复制任何地方,我们使用快速的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
}
]
几笔注:
python
或nodejs
开头,则构建过程将自动构建python和nodejs依赖项,如果requirements.txt
或package.json
文件将在源文件夹中找到。如果要自定义此行为,请使用如下所述的对象符号。path
以外的所有参数都是可选的。patterns
- Python Regex文件名的清单应满足。默认值为“包含所有内容”,等于patterns = [".*"]
。这也可以指定为Multiline Heredoc String(不允许评论)。有效模式的一些示例:commands
选项和链多个命令,则仅检查最后一个命令的退出代码以获得成功。如果您希望快速失败,请使用bash选项set -e
或powershell选项$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
在path
中找到的requirements.txt
运行pip install
。或设置为您要使用的另一个文件名。当source_path
作为包含路径的字符串传递(而不是映射列表),并且pip install
requirements.txt
。pip_tmp_dir
设置基本目录以使PIP安装的临时目录。对于Docker Builds中的Docker可能很有用。poetry_install
控制是否执行poetry export
和pip install
。设置为false
以禁用此功能, true
可以用pyproject.toml
和poetry.lock
path
poetry export
。当source_path
作为包含路径的字符串传递(而不是映射列表),而pyproject.toml
具有构建系统poetry
时, poetry export
和pip install
将自动执行。poetry_export_extra_args
添加到诗歌导出命令的其他诗歌参数列表npm_requirements
控制是否执行npm install
。设置为false
以禁用此功能, true
在path
中找到package.json
npm install
。或设置为您要使用的另一个文件名。npm_tmp_dir
设置基本目录,以制作NPM安装的临时目录。对于Docker Builds中的Docker可能很有用。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 Runa Refere):
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应用程序。
SAM CLI提供了两种测试方法:局部测试和测试云(加速)。
使用SAM CLI,您可以使用SAM Local Invoke命令在本地定义的lambda函数调用lambda函数,提供函数Terraform地址或函数名称,并将hook-name
设置为terraform
以告诉Sam Cli,请告诉Sam Cli基础项目是Terraform应用程序。
您可以从Terraform应用程序根目录执行sam local invoke
命令如下:
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加速的更多信息。
您可以从Terraform应用程序根目录执行sam sync
命令如下:
sam sync --hook-name terraform --watch
通常,lambda函数资源更新源代码更改时。如果指定了publish = true
也将创建新的Lambda功能版本。
可以使用版本号或使用$LATEST
lambda函数来调用lambda功能。这是最简单的部署方式,不需要任何其他工具或服务。
为了进行lambda功能的受控部署(滚动,金丝雀,回滚),我们需要使用lambda功能别名。
简而言之,Lambda别名就像指向Lambda函数的一个指针(部署完成时),或者指向Lambda功能的两个加权版本(在滚动或金丝雀部署期间)。
一个lambda函数可用于多个别名。使用别名可以大大控制具有多个环境时部署的版本。
有别名模块,可以简化使用别名(创建,管理配置,更新等)。有关各种用例,请参见示例/别名,如何配置和使用别名。
有部署模块,它创建了使用AWS CodeDeploy进行部署所需的资源。它还创建部署并等待完成。请参阅示例/部署以获取完整的端到端构建/更新/部署过程。
Terraform Cloud,Terraform Enterprise和许多其他用于运行Terraform的SaaS并未预先安装工人。您将需要在安装Python中提供替代的Docker映像,以便能够在那里使用此模块。
Q1:为什么每次更改某些东西时都不会部署软件包重新创建?还是为什么每次都重新创建部署软件包,但内容尚未更改?
答:可能有几个与并发执行或内容哈希有关的原因。有时,在依赖性内部发生了变化,而这些变化不用于计算内容哈希。或从同一来源同时创建多个软件包。您可以通过将
hash_extra
的值设置为不同的值来强制它。
问题2:如何强制重新创建部署包?
答:从
builds
目录中删除现有的zip-archive,或在源代码中进行更改。如果没有针对当前内容哈希的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
作为参数,以忽略文件时间戳在决定是否创建存档时。
问题4:此错误是什么意思 - "We currently do not support adding policies for $LATEST."
?
答案:当使用
publish = true
创建Lambda函数时,新版本将自动增加,并且可以使用合格的标识符(版本号),并在设置Lambda权限时使用。当
publish = false
(默认)时,只有无限制的标识符($LATEST
)可导致错误。解决方案是通过设置
create_current_version_allowed_triggers = false
来禁用当前版本的lambda权限,或启用lambda函数的发布(publish = true
)。
builds
目录。姓名 | 版本 |
---|---|
Terraform | > = 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.ASHNC | 资源 |
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_mapping.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_DOCUMEMER.ASHNC | 数据源 |
aws_iam_policy_document.dead_letter | 数据源 |
aws_iam_policy_document.logs | 数据源 |
aws_partition.current | 数据源 |
aws_region.current | 数据源 |
external_external.archive_prepare | 数据源 |
姓名 | 描述 | 类型 | 默认 | 必需的 |
---|---|---|---|---|
允许的_triggers | 允许触发器创建Lambda权限的地图 | map(any) | {} | 不 |
体系结构 | 指令设置lambda功能的体系结构。有效值为[“ X86_64”]和[“ ARM64”]。 | list(string) | null | 不 |
trifacts_dir | 目录名称应存储伪影 | string | "builds" | 不 |
假设_role_policy_statement | 假定Lambda功能角色(信任关系)的动态政策语句地图 | any | {} | 不 |
tacter_async_event_policy | 控制是否应将异步事件策略添加到lambda功能的IAM角色中 | bool | false | 不 |
tacter_cloudwatch_logs_policy | 控制是否应将CloudWatch Logs策略添加到Lambda功能的IAM角色 | bool | true | 不 |
tactecon_create_log_group_permission | 控制是否将创建日志组权限添加到CloudWatch日志策略 | bool | true | 不 |
tacte_dead_letter_policy | 控制是否应将SNS/SQS死信通知政策添加到lambda功能的IAM角色 | bool | false | 不 |
attach_network_policy | 控制是否应将VPC/网络策略添加到lambda功能的IAM角色中 | bool | false | 不 |
附_policies | 控制是否应将策略列表添加到lambda功能的IAM角色中 | bool | false | 不 |
tacte_policy | 控制是否应将策略添加到lambda功能的IAM角色中 | bool | false | 不 |
tacter_policy_json | 控制是否应将策略_json添加到lambda功能的IAM角色中 | bool | false | 不 |
tacte_policy_jsons | 控制是否应将策略_jsons添加到lambda功能的IAM角色中 | bool | false | 不 |
tacte_policy_statements | 控制是否应将策略_statements添加到lambda功能的IAM角色中 | bool | false | 不 |
tact_tracing_policy | 控制是否应将X射线跟踪策略添加到lambda功能的IAM角色 | bool | false | 不 |
授权_type | Lambda功能URL使用的身份验证类型。设置为“ AWS_IAM”,以限制对身份验证的IAM用户的访问。设置为“无”绕过IAM身份验证并创建一个公共端点。 | string | "NONE" | 不 |
build_in_docker | 是否在Docker中建立依赖关系 | bool | false | 不 |
cloudwatch_logs_kms_key_id | 加密日志数据时要使用的KMS密钥的ARN。 | 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 | 代码签名配置的亚马逊资源名称(ARN) | string | null | 不 |
compatible_architures | Lambda层的体系结构列表与。当前可以指定X86_64和ARM64。 | list(string) | null | 不 |
compatible_runtimes | 该层与此层兼容的列表。最多可以指定5个运行时间。 | list(string) | [] | 不 |
科尔斯 | lambda函数URL使用的CORS设置 | any | {} | 不 |
创造 | 控制是否应该创建资源 | bool | true | 不 |
create_async_event_config | 控制是否应创建lambda功能/别名的异步事件配置 | 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 | 控制是否应创建Lambda功能URL资源 | bool | false | 不 |
create_layer | 控制是否应创建Lambda层资源 | bool | false | 不 |
create_package | 控制是否应该创建Lambda软件包 | bool | true | 不 |
create_role | 控制是否应创建IAM角色 | bool | true | 不 |
create_sam_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 | 是否使用指向$最新版本的lambda函数URL的不合格别名 | bool | true | 不 |
dead_letter_target_arn | SNS主题或SQS队列的ARN何时通知调用。 | string | null | 不 |
描述 | Lambda功能的描述(或图层) | string | "" | 不 |
destination_on_failure | 失败异步调用的目标资源的亚马逊资源名称(ARN) | string | null | 不 |
destination_on_success | 成功异步调用的目标资源的亚马逊资源名称(ARN) | string | null | 不 |
docker_additional_options | 将传递到Docker Run命令的其他选项(例如设置环境变量,卷等) | list(string) | [] | 不 |
docker_build_root | root dir在docker中建造的地方 | string | "" | 不 |
docker_entrypoint | 通往使用Docker入口点的路径 | string | null | 不 |
docker_file | 在Docker建造时通往Dockerfile的途径 | string | "" | 不 |
docker_image | 用于构建的Docker映像 | string | "" | 不 |
docker_pip_cache | 是否将共享的PIP缓存文件夹安装到Docker环境中 | any | null | 不 |
docker_with_ssh_agent | 是否将ssh_auth_sock传递到Docker环境 | bool | false | 不 |
环境_variables | 定义lambda函数环境变量的地图。 | map(string) | {} | 不 |
ephemeral_storage_size | MB中的短暂存储量(/TMP)在运行时可以使用。有效值在512 MB至10,240 MB(10 GB)之间。 | number | 512 | 不 |
event_source_mapping | 事件源映射的地图 | any | {} | 不 |
file_system_arn | Amazon EFS接入点的Amazon Resource名称(ARN),可提供对文件系统的访问。 | string | null | 不 |
file_system_local_mount_path | 从 /mnt /开始的功能可以访问文件系统的路径。 | string | null | 不 |
function_name | 您的lambda功能的唯一名称 | string | "" | 不 |
function_tags | 标签的地图仅分配给lambda函数 | map(string) | {} | 不 |
处理程序 | 代码中的lambda函数入门点 | string | "" | 不 |
hash_extra | 添加到哈希功能中的字符串。在为不同功能构建相同的源路径时有用。 | string | "" | 不 |
ignore_source_code_hash | 是否忽略对函数源代码哈希的更改。如果您分别管理基础架构和代码部署,请设置为TRUE。 | bool | false | 不 |
image_config_command | Docker图像的CMD | list(string) | [] | 不 |
image_config_entry_point | Docker图像的入口点 | list(string) | [] | 不 |
image_config_working_directory | Docker图像的工作目录 | string | null | 不 |
Image_uri | 包含函数部署包的ECR图像URI。 | string | null | 不 |
Invoke_mode | lambda功能URL的调用模式。有效值被缓冲(默认值)和响应_Stream。 | string | null | 不 |
ipv6_allowed_for_dual_stack | 允许连接到双堆栈子网的VPC功能上的出站IPv6流量 | bool | null | 不 |
kms_key_arn | kms键的Arn键可通过您的lambda功能使用 | string | null | 不 |
lambda_at_edge | 如果使用lambda@edge,将其设置为true,以启用发布,限制超时,并允许edgelambda.amazonaws.com调用该函数 | bool | false | 不 |
lambda_at_edge_logs_all_rigions | 是否要在Lambda@Edge使用的IAM政策中指定通配符 | bool | true | 不 |
lambda_role | IAM角色附着在lambda函数上。这既控制谁 /什么可以调用您的lambda功能,也可以控制我们的lambda功能可以访问的资源。有关更多详细信息,请参见Lambda许可模型。 | string | "" | 不 |
layer_name | lambda层的名称 | string | "" | 不 |
layer_skip_destroy | 是否保留先前部署的lambda层的旧版本。 | bool | false | 不 |
层 | lambda层版本arns的列表(最多为5),以附加到您的lambda功能。 | list(string) | null | 不 |
linice_info | Lambda层的许可信息。例如,MIT或许可证的全部URL。 | string | "" | 不 |
local_existing_package | 通往现有邮政编码的绝对路径 | string | null | 不 |
logging_application_log_level | lambda功能的应用程序日志级别。有效值是“跟踪”,“调试”,“信息”,“警告”,“错误”或“致命”。 | string | "INFO" | 不 |
logging_log_format | lambda函数的日志格式。有效值是“ JSON”或“文本”。 | string | "Text" | 不 |
logging_log_group | 将日志发送到的CloudWatch日志组。 | string | null | 不 |
logging_system_log_level | LAMBDA功能的系统日志级别。有效值是“调试”,“信息”或“警告”。 | string | "INFO" | 不 |
maxtum_event_age_in_seconds | Lambda发送到函数以进行处理的最大要求。有效值在60到21600之间。 | number | null | 不 |
maxtum_retry_attempt | 当功能返回错误时,要重试的最大次数。有效值在0到2之间。默认值为2。 | number | null | 不 |
memory_size | MB中的内存量您的lambda功能可以在运行时使用。有效值在128 MB至10,240 MB(10 GB)之间,以64 MB增量为单位。 | number | 128 | 不 |
number_of_policies | lambda功能的IAM角色的政策数量 | number | 0 | 不 |
number_of_policy_jsons | lambda功能的IAM角色的策略数量 | number | 0 | 不 |
package_type | Lambda部署软件包类型。有效选项:邮政编码或图像 | string | "Zip" | 不 |
政策 | 策略声明列表,以附加到lambda功能角色 | list(string) | [] | 不 |
政策 | 附加到lambda功能角色的附加政策文件 | string | null | 不 |
policy_json | 附加的政策文件作为JSON,以附加到Lambda功能角色 | string | null | 不 |
policy_jsons | 其他政策文件的列表作为JSON,以附加到Lambda功能角色 | list(string) | [] | 不 |
policy_name | IAM政策名称。它覆盖默认值,该值与cole_name相同 | string | null | 不 |
policy_path | 政策的路径应添加到lambda功能的IAM角色中 | string | null | 不 |
policy_statements | 动态政策语句的地图,要附加到lambda功能角色 | any | {} | 不 |
provisioned_concurrent_exections | 分配的能力。设置为1或更高以启用或设置为0以禁用配置并发。 | number | -1 | 不 |
发布 | 是否将创建/更改作为新的lambda函数版本发布。 | bool | false | 不 |
putin_khuylo | 您是否同意普京不尊重乌克兰的主权和领土完整?更多信息:https://en.wikipedia.org/wiki/putin_khuylo! | bool | true | 不 |
retreate_missing_package | 如果本地缺少丢失的Lambda软件包,是否重新创建缺失的Lambda软件包 | bool | true | 不 |
repent_security_groups_on_destroy | (可选)当true时,在函数破坏后,将在VPC_Security_group_ids中定义的所有安全组被默认安全组替换。设置替换_security_group_ids变量,以使用自定义的安全组列表进行替换。 | bool | null | 不 |
replacement_security_group_ids | (可选)销毁时将安全组ID列表分配给孤立的Lambda功能网络接口。 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 | 不 |
超时 | 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.