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功能網絡接口。替換_security_groups_on_destroy必須設置為true以使用此屬性。 | list(string) | null | 不 |
RESEVER_CONCURRENT_EXECTICTS | 此lambda函數的保留並發執行量。值為0的值禁用lambda函數被觸發,-1消除了任何並發限制。默認為未保留的並發限制-1。 | number | -1 | 不 |
cool_description | IAM角色的描述用於Lambda功能 | string | null | 不 |
角色_FORCE_DETACH_POLICIS | 指定迫使IAM角色銷毀該政策之前的任何政策。 | bool | true | 不 |
角色_maximum_session_duration | IAM角色的最大會話持續時間為幾秒鐘 | number | 3600 | 不 |
角色_name | lambda功能的IAM角色名稱 | string | null | 不 |
角色_path | lambda功能的IAM角色的路徑 | string | null | 不 |
cole_permissions_boundary | 用於設置Lambda功能使用的IAM角色的權限邊界的策略的ARN | string | null | 不 |
角色_tags | 標籤地圖要分配給IAM角色 | map(string) | {} | 不 |
運行時 | lambda功能運行時 | string | "" | 不 |
s3_acl | 罐裝ACL申請。有效的值是私人,公共閱讀,公開閱讀文字,AWS-EXEC-READ,身份驗證的閱讀,Bucket Allower-Read和Bucket-athore-Full-Control。默認為私有。 | string | "private" | 不 |
s3_bucket | S3存儲工件的存儲桶 | string | null | 不 |
s3_existing_package | 帶有鍵桶的S3存儲桶對象,鑰匙,指向現有Zip-File的版本 | map(string) | null | 不 |
s3_kms_key_id | 指定用於S3對象加密的自定義KMS密鑰。 | string | null | 不 |
s3_object_override_default_tags | 是否要覆蓋提供商的default_tags? NB:S3對象最多支持10個標籤。 | bool | false | 不 |
S3_Object_storage_class | 指定上傳到S3的工件所需的存儲類。可以是標準的,降低的_redundancy,Onezone_ia,implitiont_tiering或standard_ia。 | string | "ONEZONE_IA" | 不 |
s3_object_tags | 標籤的地圖,要分配給S3存儲桶對象。 | map(string) | {} | 不 |
s3_object_tags_only | 設置為true不要將標籤與s3_object_tags合併。對於避免違反S3對象10標籤限制有用。 | bool | false | 不 |
s3_prefix | 目錄名稱,其中應將工件存儲在S3存儲桶中。如果尚不確定,則使用artifacts_dir 的路徑 | string | null | 不 |
s3_server_side_encryption | 指定S3中對象的服務器端加密。有效值是“ AES256”和“ AWS:KMS”。 | string | null | 不 |
skip_destroy | 如果您不希望在銷毀時間刪除該功能,則設置為TRUE,而只需從Terraform狀態中刪除該功能即可。對雲範圍分佈附加的lambda@edge函數有用。 | bool | null | 不 |
snap_start | (可選)SNAP開始設置低延遲啟動 | bool | false | 不 |
source_path | 包含Lambda源代碼的本地文件或目錄的絕對路徑 | any | null | 不 |
Store_on_s3 | 是在S3還是在本地存儲產生的工件。 | bool | false | 不 |
標籤 | 標籤地圖,以分配資源。 | map(string) | {} | 不 |
暫停 | 您的lambda功能必須在幾秒鐘內運行的時間。 | number | 3 | 不 |
超時 | 定義用於創建,更新和刪除lambda功能資源的最大超時 | map(string) | {} | 不 |
tracing_mode | lambda函數的跟踪模式。有效值可以是傳遞或活動性的。 | string | null | 不 |
trigger_on_package_timestamp | 如果時間戳更改,是否重新創建Lambda軟件包 | bool | true | 不 |
Trusted_entities | 假設Lambda功能角色(信任關係)的其他受信任實體列表 | any | [] | 不 |
use_existing_cloudwatch_log_group | 是使用現有的CloudWatch日誌組還是創建新的 | bool | false | 不 |
vpc_security_group_ids | lambda函數應在VPC中運行時,安全組ID的列表。 | list(string) | null | 不 |
vpc_subnet_ids | lambda函數應在VPC中運行時的子網ID列表。通常是私人或內部子網。 | list(string) | null | 不 |
姓名 | 描述 |
---|---|
lambda_cloudwatch_log_group_arn | CloudWatch日誌組的ARN |
lambda_cloudwatch_log_group_name | CloudWatch日誌組的名稱 |
lambda_event_source_mapping_arn | 事件源映射ARN |
lambda_event_source_mapping_function_arn | 事件源映射將事件發送到 |
lambda_event_source_mapping_state | 事件源映射的狀態 |
lambda_event_source_mapping_state_transition_reason | 事件源映射處於當前狀態的原因 |
lambda_event_source_mapping_uuid | 創建的事件源映射的UUID |
lambda_function_arn | lambda功能的ARN |
lambda_function_arn_static | lambda函數的靜態ARN。用它來避免資源之間的循環錯誤(例如,步驟功能) |
lambda_function_invoke_arn | lambda功能的調用 |
lambda_function_kms_key_arn | Lambda功能的KMS加密密鑰的ARN |
lambda_function_last_modified | 日期lambda功能資源是最後修改的 |
lambda_function_name | lambda功能的名稱 |
lambda_function_qualified_arn | ARN識別您的lambda功能版本 |
lambda_function_qualified_invoke_arn | 調用ARN識別您的lambda功能版本 |
lambda_function_signing_job_arn | 簽字工作 |
lambda_function_signing_profile_version_arn | 簽名配置文件版本 |
lambda_function_source_code_hash | base64編碼的RAW SHA-256 ZIP文件的總和 |
lambda_function_source_code_size | 函數.zip文件的字節大小 |
lambda_function_url | lambda功能URL的URL |
lambda_function_url_id | lambda函數URL生成的ID |
lambda_function_version | Lambda功能的最新發布版本 |
lambda_layer_arn | 帶有版本的lambda層的arn |
lambda_layer_created_date | 創建了日期lambda層資源 |
lambda_layer_layer_arn | 沒有版本的lambda層的arn |
lambda_layer_source_code_size | lambda層的字節大小.zip文件 |
lambda_layer_version | lambda層版本 |
lambda_role_arn | 為lambda功能創建的IAM角色的ARN |
lambda_role_name | 為lambda功能創建的IAM角色的名稱 |
lambda_role_unique_id | 為lambda功能創建的IAM角色的獨特ID |
local_filename | 部署了ZIP存檔的文件名(如果部署是本地的) |
S3_Object | 帶有ZIP存檔的S3對像數據的地圖已部署(如果部署是從S3部署) |
在涉及修改Python文件的開發過程中,請使用TOX運行單元測試:
tox
這將嘗試運行每個支持Python版本的單元測試,並報告未在本地安裝的Python版本的錯誤。
如果您只想對主要Python版本進行測試:
tox -e py
您還可以將其他位置參數傳遞給用於運行測試的Pytest,例如使其詳細:
tox -e py -- -vvv
由Anton Babenko管理的模塊。請查看無服務器.tf,以了解有關使用Terraform無服務器的更多信息。
如果您正在尋找對Terraform,AWS或無服務器項目的商業支持,請與Betajob聯繫。
Apache 2許可。有關詳細信息,請參見許可證。