โมดูล Terraform ซึ่งสร้างทรัพยากร AWS Lambda เกือบทั้งหมดที่รองรับรวมถึงการดูแลอาคารและบรรจุภัณฑ์ของการพึ่งพาแลมบ์ดาที่จำเป็นสำหรับฟังก์ชั่นและเลเยอร์
โมดูล Terraform นี้เป็นส่วนหนึ่งของ Serverless.tf Framework ซึ่งมีจุดมุ่งหมายเพื่อทำให้การทำงานทั้งหมดง่ายขึ้นเมื่อทำงานกับ Serverless ใน Terraform:
serverless.tf
อื่น ๆ เช่น HTTP API Gateway (ดูตัวอย่างที่นั่น) module "lambda_function" {
source = " terraform-aws-modules/lambda/aws "
function_name = " my-lambda1 "
description = " My awesome lambda function "
handler = " index.lambda_handler "
runtime = " python3.12 "
source_path = " ../src/lambda-function1 "
tags = {
Name = " my-lambda1 "
}
}
module "lambda_function" {
source = " terraform-aws-modules/lambda/aws "
function_name = " lambda-with-layer "
description = " My awesome lambda function "
handler = " index.lambda_handler "
runtime = " python3.12 "
publish = true
source_path = " ../src/lambda-function1 "
store_on_s3 = true
s3_bucket = " my-bucket-id-with-lambda-builds "
layers = [
module . lambda_layer_s3 . lambda_layer_arn ,
]
environment_variables = {
Serverless = " Terraform "
}
tags = {
Module = " lambda-with-layer "
}
}
module "lambda_layer_s3" {
source = " terraform-aws-modules/lambda/aws "
create_layer = true
layer_name = " lambda-layer-s3 "
description = " My amazing lambda layer (deployed from S3) "
compatible_runtimes = [ " python3.12 " ]
source_path = " ../src/lambda-layer "
store_on_s3 = true
s3_bucket = " my-bucket-id-with-lambda-builds "
}
module "lambda_function_existing_package_local" {
source = " terraform-aws-modules/lambda/aws "
function_name = " my-lambda-existing-package-local "
description = " My awesome lambda function "
handler = " index.lambda_handler "
runtime = " python3.12 "
create_package = false
local_existing_package = " ../existing_package.zip "
}
หากคุณต้องการจัดการรหัสฟังก์ชั่นและทรัพยากรโครงสร้างพื้นฐาน (เช่นการอนุญาต IAM นโยบายเหตุการณ์ ฯลฯ ) ในการไหลแยกต่างหาก (เช่นที่เก็บที่แตกต่างกัน, ทีม, ท่อ CI/CD)
ปิดการใช้งานการติดตามซอร์สโค้ดเพื่อปิดการปรับใช้ (และการย้อนกลับ) โดยใช้โมดูลโดยการตั้งค่า 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
}
โปรดทราบว่าโมดูลนี้ไม่ได้คัดลอกแพ็คเกจ prebuilt ลงในถัง 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 เข้าสู่ภูมิภาค US East (N. Virginia) ( us-east-1
) ดูข้อกำหนดและข้อ จำกัด เกี่ยวกับฟังก์ชั่นแลมบ์ดา
module "lambda_at_edge" {
source = " terraform-aws-modules/lambda/aws "
lambda_at_edge = true
function_name = " my-lambda-at-edge "
description = " My awesome lambda@edge function "
handler = " index.lambda_handler "
runtime = " python3.12 "
source_path = " ../fixtures/python-app1 "
tags = {
Module = " lambda-at-edge "
}
}
module "lambda_function_in_vpc" {
source = " terraform-aws-modules/lambda/aws "
function_name = " my-lambda-in-vpc "
description = " My awesome lambda function "
handler = " index.lambda_handler "
runtime = " python3.12 "
source_path = " ../fixtures/python-app1 "
vpc_subnet_ids = module . vpc . intra_subnets
vpc_security_group_ids = [ module . vpc . default_security_group_id ]
attach_network_policy = true
}
module "vpc" {
source = " terraform-aws-modules/vpc/aws "
name = " my-vpc "
cidr = " 10.10.0.0/16 "
# Specify at least one of: intra_subnets, private_subnets, or public_subnets
azs = [ " eu-west-1a " , " eu-west-1b " , " eu-west-1c " ]
intra_subnets = [ " 10.10.101.0/24 " , " 10.10.102.0/24 " , " 10.10.103.0/24 " ]
}
มี 6 วิธีที่ได้รับการสนับสนุนในการแนบนโยบายของ IAM กับบทบาท IAM ที่ใช้โดยฟังก์ชั่นแลมบ์ดา:
policy_json
- json string หรือ heredoc เมื่อ attach_policy_json = true
policy_jsons
- รายการสตริง JSON หรือ heredoc เมื่อ attach_policy_jsons = true
และ number_of_policy_jsons > 0
policy
- อาร์นของนโยบาย IAM ที่มีอยู่เมื่อ attach_policy = true
policies
- รายชื่อ ARNS ของนโยบาย IAM ที่มีอยู่เมื่อ attach_policies = true
และ number_of_policies > 0
policy_statements
- แผนที่ของแผนที่เพื่อกำหนดคำสั่ง IAM ซึ่งจะถูกสร้างขึ้นเป็นนโยบายของ IAM ต้องใช้ attach_policy_statements = true
ดู examples/complete
สำหรับข้อมูลเพิ่มเติมassume_role_policy_statements
- แผนที่ของแผนที่เพื่อกำหนดคำสั่ง IAM ซึ่งจะถูกสร้างขึ้นเป็นนโยบาย IAM สำหรับสมมติว่าบทบาทฟังก์ชั่นแลมบ์ดา (ความสัมพันธ์ที่เชื่อถือได้) ดู examples/complete
สำหรับข้อมูลเพิ่มเติม ควรระบุสิทธิ์ของแลมบ์ดาเพื่อให้ทรัพยากรบางอย่างเรียกใช้ฟังก์ชันแลมบ์ดา
module "lambda_function" {
source = " terraform-aws-modules/lambda/aws "
# ...omitted for brevity
allowed_triggers = {
Config = {
principal = " config.amazonaws.com "
principal_org_id = " o-abcdefghij "
}
APIGatewayAny = {
service = " apigateway "
source_arn = " arn:aws:execute-api:eu-west-1:135367859851:aqnku8akd0/*/*/* "
},
APIGatewayDevPost = {
service = " apigateway "
source_arn = " arn:aws:execute-api:eu-west-1:135367859851:aqnku8akd0/dev/POST/* "
},
OneRule = {
principal = " events.amazonaws.com "
source_arn = " arn:aws:events:eu-west-1:135367859851:rule/RunDaily "
}
}
}
บางครั้งคุณต้องมีวิธีสร้างทรัพยากรอย่างมีเงื่อนไข แต่ Terraform ไม่อนุญาตให้ใช้การ count
ภายในบล็อก module
ดังนั้นวิธีแก้ปัญหาคือการระบุ create
อาร์กิวเมนต์
module "lambda" {
source = " terraform-aws-modules/lambda/aws "
create = false # to disable all resources
create_package = false # to control build package process
create_function = false # to control creation of the Lambda Function and related resources
create_layer = false # to control creation of the Lambda Layer and related resources
create_role = false # to control creation of the IAM role and policies required for Lambda Function
attach_cloudwatch_logs_policy = false
attach_dead_letter_policy = false
attach_network_policy = false
attach_tracing_policy = false
attach_async_event_policy = false
# ... omitted
}
นี่เป็นหนึ่งในส่วนที่ซับซ้อนที่สุดที่ทำโดยโมดูลและโดยปกติคุณไม่จำเป็นต้องรู้ภายใน
package.py
เป็นสคริปต์ Python ซึ่งทำ ตรวจสอบให้แน่ใจว่ามีการติดตั้ง Python 3.6 หรือใหม่กว่า ฟังก์ชั่นหลักของสคริปต์คือการสร้างชื่อไฟล์ของ zip-archive ตามเนื้อหาของไฟล์ตรวจสอบว่า zip-archive ถูกสร้างขึ้นแล้วและสร้าง zip-archive เฉพาะเมื่อมีความจำเป็น (ระหว่าง apply
ไม่ใช่ plan
) .
แฮชของ zip-archive ที่สร้างขึ้นด้วยเนื้อหาเดียวกันของไฟล์นั้นเหมือนกันเสมอซึ่งป้องกันการอัปเดตแรงที่ไม่จำเป็นของทรัพยากรแลมบ์ดาเว้นแต่เนื้อหาจะปรับเปลี่ยน หากคุณต้องการมีชื่อไฟล์ที่แตกต่างกันสำหรับเนื้อหาเดียวกันคุณสามารถระบุอาร์กิวเมนต์สตริงเพิ่มเติม hash_extra
เมื่อเรียกโมดูลนี้หลายครั้งในการดำเนินการเดียวเพื่อสร้างแพ็คเกจที่มี source_path
เดียวกัน zip-archives จะเสียหายเนื่องจากการเขียนพร้อมกันในไฟล์เดียวกัน มีโซลูชันสองวิธี - ตั้งค่าที่แตกต่างกันสำหรับ hash_extra
เพื่อสร้างคลังเก็บที่แตกต่างกันหรือสร้างแพ็คเกจข้างนอก (ใช้โมดูลนี้) จากนั้นส่งอาร์กิวเมนต์ local_existing_package
เพื่อสร้างทรัพยากรแลมบ์ดาอื่น ๆ
การสร้างและบรรจุภัณฑ์นั้นยากที่จะแก้ไขข้อบกพร่อง (โดยเฉพาะกับ Terraform) ดังนั้นเราจึงพยายามทำให้ผู้ใช้ดูข้อมูลการดีบักง่ายขึ้น มี 3 ระดับการดีบักที่แตกต่างกัน: DEBUG
- เพื่อดูเฉพาะสิ่งที่เกิดขึ้นในระหว่างขั้นตอนการวางแผนและวิธีการกรองเนื้อหาไฟล์ไฟล์ ZIP ในกรณีของรูปแบบที่ใช้, DEBUG2
- เพื่อดูเอาต์พุตการบันทึกเพิ่มเติม DEBUG3
- เพื่อดูค่าการบันทึกทั้งหมด DUMP_ENV
- TO ดูค่าการบันทึกทั้งหมดและตัวแปร Env (ระวังการแบ่งปันตัวแปร Env ของคุณเนื่องจากอาจมีความลับ!)
ผู้ใช้สามารถระบุระดับการดีบักเช่นนี้:
export TF_LAMBDA_PACKAGE_LOG_LEVEL=DEBUG2
terraform apply
ผู้ใช้สามารถเปิดใช้งานความคิดเห็นในสตริง Heredoc ใน patterns
ซึ่งจะเป็นประโยชน์ในบางสถานการณ์ ในการทำสิ่งนี้ตั้งค่าตัวแปรสภาพแวดล้อมนี้:
export TF_LAMBDA_PACKAGE_PATTERN_COMMENTS=true
terraform apply
คุณสามารถระบุ source_path
ได้หลายวิธีในการบรรลุความยืดหยุ่นที่ต้องการเมื่อสร้างแพ็คเกจการปรับใช้ในพื้นที่หรือใน Docker คุณสามารถใช้เส้นทางสัมบูรณ์หรือแบบสัมพัทธ์ หากคุณวางไฟล์ Terraform ไว้ในไดเรกทอรีย่อยโปรดทราบว่าเส้นทางที่สัมพันธ์กันจะถูกระบุจากไดเรกทอรีที่ terraform plan
ทำงานและไม่ใช่ตำแหน่งของไฟล์ Terraform ของคุณ
โปรดทราบว่าเมื่อสร้างในพื้นที่ไฟล์จะไม่คัดลอกที่ใดก็ได้จากไดเรกทอรีต้นฉบับเมื่อสร้างแพ็คเกจเราใช้การแสดงออกปกติของ Python อย่างรวดเร็วเพื่อค้นหาไฟล์และไดเรกทอรีที่ตรงกันซึ่งทำให้บรรจุภัณฑ์ได้อย่างรวดเร็วและเข้าใจง่าย
เมื่อ source_path
ถูกตั้งค่าเป็นสตริงเนื้อหาของพา ธ นั้นจะถูกใช้เพื่อสร้างแพ็คเกจการปรับใช้ตาม AS-IS:
source_path = "src/function1"
เมื่อ source_path
ถูกตั้งค่าเป็นรายการของไดเรกทอรีเนื้อหาของแต่ละรายการจะถูกนำมาใช้และจะมีการสร้างไฟล์เก็บถาวรหนึ่งรายการ
นี่เป็นวิธีที่สมบูรณ์ที่สุดในการสร้างแพ็คเกจการปรับใช้จากหลายแหล่งที่มีการอ้างอิงหลายครั้ง ตัวอย่างนี้แสดงตัวเลือกที่มีอยู่ (ดูตัวอย่าง/build-package และตัวอย่าง/runtimes สำหรับข้อมูลเพิ่มเติม):
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 (ไม่อนุญาตให้มีความคิดเห็น) ตัวอย่างของรูปแบบที่ถูกต้อง:commands
และห่วงโซ่หลายคำสั่งเฉพาะรหัสออกของคำสั่งสุดท้ายจะถูกตรวจสอบเพื่อความสำเร็จ หากคุณต้องการที่จะล้มเหลวอย่างรวดเร็วให้เริ่มคำสั่งด้วย 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
เพื่อเรียกใช้ pip install
พร้อม requirements.txt
พบใน path
หรือตั้งค่าเป็นชื่อไฟล์อื่นที่คุณต้องการใช้แทน เมื่อ source_path
ถูกส่งผ่านเป็นสตริงที่มีเส้นทาง (และไม่ใช่รายการของแผนที่) และ requirements.txt
มีอยู่ pip install
จะถูกดำเนินการโดยอัตโนมัติpip_tmp_dir
- ตั้งค่าไดเรกทอรีพื้นฐานเพื่อสร้างไดเรกทอรีชั่วคราวสำหรับการติดตั้ง PIP สามารถเป็นประโยชน์สำหรับนักเทียบท่าใน Builds Dockerpoetry_install
- ควบคุมว่าจะดำเนินการ poetry export
และ pip install
หรือไม่ ตั้งค่าเป็น false
เพื่อปิดการใช้งานคุณสมบัตินี้ true
เพื่อเรียกใช้ poetry export
ด้วย pyproject.toml
และ poetry.lock
พบใน path
เมื่อ source_path
ถูกส่งผ่านเป็นสตริงที่มีเส้นทาง (และไม่ใช่รายการของแผนที่) และ pyproject.toml
พร้อมกับ poetry
ระบบบิลด์มีอยู่ poetry export
และ pip install
จะถูกดำเนินการโดยอัตโนมัติpoetry_export_extra_args
- รายการอาร์กิวเมนต์บทกวีเพิ่มเติมเพื่อเพิ่มคำสั่งส่งออกบทกวีnpm_requirements
- ควบคุมว่าจะดำเนินการ npm install
หรือไม่ ตั้งค่าเป็น false
เพื่อปิดการใช้งานคุณสมบัตินี้ true
เพื่อเรียกใช้ npm install
ด้วย package.json
ที่พบใน path
หรือตั้งค่าเป็นชื่อไฟล์อื่นที่คุณต้องการใช้แทนnpm_tmp_dir
- ตั้งค่าไดเรกทอรีพื้นฐานเพื่อสร้างไดเรกทอรีชั่วคราวสำหรับการติดตั้ง NPM สามารถเป็นประโยชน์สำหรับนักเทียบท่าใน Builds Dockerprefix_in_zip
- หากระบุจะถูกใช้เป็นคำนำหน้าภายใน zip -archive โดยค่าเริ่มต้นทุกอย่างจะติดตั้งลงในรูทของ zip-archiveหากฟังก์ชั่นแลมบ์ดาหรือเลเยอร์ของคุณใช้การอ้างอิงบางอย่างคุณสามารถสร้างได้ใน 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 Reference สำหรับตัวเลือกที่มีอยู่):
docker_additional_options = [
" -e " , " MY_ENV_VAR='My environment variable value' " ,
" -v " , " /local:/docker-vol " ,
]
หากต้องการแทนที่จุดเข้าใช้ Docker เมื่อสร้างใน Docker ให้ตั้งค่า docker_entrypoint
:
docker_entrypoint = " /entrypoint/entrypoint.sh "
จุดเข้าใช้งานจะต้องแมปไปยังเส้นทางภายในคอนเทนเนอร์ของคุณดังนั้นคุณต้องสร้างภาพของคุณเองที่มี entrypoint หรือแมปกับไฟล์บนโฮสต์โดยการติดตั้งระดับเสียง (ดูที่ตัวเลือก Docker เพิ่มเติม)
โดยค่าเริ่มต้นโมดูลนี้จะสร้างแพ็คเกจการปรับใช้และใช้เพื่อสร้างหรืออัปเดตฟังก์ชั่นแลมบ์ดาหรือเลเยอร์แลมบ์ดา
บางครั้งคุณอาจต้องการแยกแพ็คเกจการปรับใช้ (เช่นเพื่อรวบรวมและติดตั้งการพึ่งพา) จากการปรับใช้แพ็คเกจออกเป็นสองขั้นตอนแยกกัน
เมื่อสร้างเก็บถาวรในเครื่องนอกโมดูลนี้คุณต้องตั้งค่า 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 และ Pass Path ไปยังแพ็คเกจการปรับใช้เป็นอาร์กิวเมนต์ 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 เป็นเครื่องมือโอเพ่นซอร์สที่ช่วยให้นักพัฒนาเริ่มสร้างสร้างทดสอบและปรับใช้แอปพลิเคชัน Serverless เครื่องมือ SAM CLI รองรับแอปพลิเคชัน Terraform
SAM CLI ให้การทดสอบสองวิธี: การทดสอบในท้องถิ่นและการทดสอบบนคลาวด์ (เร่งความเร็ว)
การใช้ SAM CLI คุณสามารถเรียกใช้ฟังก์ชั่นแลมบ์ดาที่กำหนดไว้ในแอปพลิเคชัน Terraform โดยใช้คำสั่ง SAM Local Invoke โดยให้ฟังก์ชั่นที่อยู่ terraform
หรือ hook-name
ฟังก์ชั่น เป็นแอปพลิเคชั่น Terraform
คุณสามารถเรียกใช้คำสั่ง sam local invoke
จากไดเรกทอรี Root Terraform Application ของคุณดังต่อไปนี้:
sam local invoke --hook-name terraform module.hello_world_function.aws_lambda_function.this[0]
นอกจากนี้คุณยังสามารถส่งเหตุการณ์ไปยังฟังก์ชั่นแลมบ์ดาของคุณหรือเขียนทับตัวแปรสภาพแวดล้อม ตรวจสอบข้อมูลเพิ่มเติมที่นี่
นอกจากนี้คุณยังสามารถเรียกใช้ฟังก์ชั่นแลมบ์ดาของคุณในโหมดการดีบักและขั้นตอนการผ่านซอร์สโค้ดฟังก์ชั่นแลมบ์ดาของคุณในเครื่องแก้ไขที่คุณต้องการ ตรวจสอบข้อมูลเพิ่มเติมที่นี่
คุณสามารถใช้ AWS SAM CLI เพื่อทดสอบแอปพลิเคชันของคุณในบัญชี AWS Development ของคุณได้อย่างรวดเร็ว การใช้ SAM Accelerate คุณจะสามารถพัฒนาฟังก์ชั่นแลมบ์ดาของคุณในพื้นที่และเมื่อคุณบันทึกการอัปเดตของคุณ SAM CLI จะอัปเดตบัญชีการพัฒนาของคุณด้วยฟังก์ชั่นแลมบ์ดาที่อัปเดต ดังนั้นคุณสามารถทดสอบบนคลาวด์และหากมีข้อผิดพลาดใด ๆ คุณสามารถอัปเดตรหัสได้อย่างรวดเร็วและ Sam CLI จะดูแลการผลักดันไปยังคลาวด์ ตรวจสอบข้อมูลเพิ่มเติมที่นี่เกี่ยวกับ Sam Accelerate
คุณสามารถเรียกใช้คำสั่ง sam sync
จากไดเรกทอรีรากแอปพลิเคชัน Terraform ของคุณดังต่อไปนี้:
sam sync --hook-name terraform --watch
โดยทั่วไปแล้วการอัพเดททรัพยากรฟังก์ชั่นแลมบ์ดาเมื่อการเปลี่ยนแปลงซอร์สโค้ด หาก publish = true
ระบุเวอร์ชันฟังก์ชัน Lambda ใหม่จะถูกสร้างขึ้น
ฟังก์ชั่นแลมบ์ดาที่เผยแพร่สามารถเรียกใช้โดยใช้หมายเลขเวอร์ชันหรือใช้ $LATEST
นี่เป็นวิธีที่ง่ายที่สุดในการปรับใช้ซึ่งไม่จำเป็นต้องใช้เครื่องมือหรือบริการเพิ่มเติมใด ๆ
เพื่อที่จะทำการปรับใช้ควบคุม (กลิ้ง, นกขมิ้น, การย้อนกลับ) ของฟังก์ชั่นแลมบ์ดาเราต้องใช้นามแฝงฟังก์ชั่นแลมบ์ดา
กล่าวง่ายๆว่า Lambda นามแฝงเป็นเหมือนตัวชี้ไปยังฟังก์ชันแลมบ์ดารุ่นหนึ่ง (เมื่อการปรับใช้เสร็จสมบูรณ์) หรือฟังก์ชั่นแลมบ์ดาแบบถ่วงน้ำหนักสองรุ่น
หนึ่งฟังก์ชั่นแลมบ์ดาสามารถใช้ในนามแฝงหลายรายการ การใช้นามแฝงให้การควบคุมขนาดใหญ่ซึ่งรุ่นใดที่ปรับใช้เมื่อมีหลายสภาพแวดล้อม
มีโมดูลนามแฝงซึ่งทำให้การทำงานกับนามแฝงง่ายขึ้น (สร้างจัดการการกำหนดค่าการอัปเดต ฯลฯ ) ดูตัวอย่าง/นามแฝงสำหรับกรณีการใช้งานที่หลากหลายว่าสามารถกำหนดค่าและใช้งานได้อย่างไร
มีการปรับใช้โมดูลซึ่งสร้างทรัพยากรที่จำเป็นในการปรับใช้โดยใช้ AWS CodeDeploy นอกจากนี้ยังสร้างการปรับใช้และรอให้เสร็จสมบูรณ์ ดูตัวอย่าง/ปรับใช้สำหรับกระบวนการสร้าง/อัปเดต/ปรับใช้แบบครบวงจรที่สมบูรณ์
Terraform Cloud, Terraform Enterprise และ SaaS อื่น ๆ อีกมากมายที่ใช้งาน Terraform ไม่ได้ติดตั้ง Python ไว้ล่วงหน้ากับคนงาน คุณจะต้องจัดทำอิมเมจนักเทียบท่าทางเลือกที่ติดตั้ง Python เพื่อให้สามารถใช้โมดูลนี้ได้ที่นั่น
Q1: เหตุใดแพ็คเกจการปรับใช้จึงไม่สร้างใหม่ทุกครั้งที่ฉันเปลี่ยนอะไรบางอย่าง? หรือทำไมแพ็คเกจการปรับใช้จะถูกสร้างขึ้นใหม่ทุกครั้ง แต่เนื้อหายังไม่เปลี่ยนแปลง?
คำตอบ: อาจมีสาเหตุหลายประการที่เกี่ยวข้องกับการประหารชีวิตพร้อมกันหรือแฮชเนื้อหา บางครั้งการเปลี่ยนแปลงเกิดขึ้นภายในการพึ่งพาซึ่งไม่ได้ใช้ในการคำนวณแฮชเนื้อหา หรือหลายแพ็คเกจกำลังสร้างในเวลาเดียวกันจากแหล่งเดียวกัน คุณสามารถบังคับมันได้โดยการตั้งค่า
hash_extra
เป็นค่าที่แตกต่างกัน
Q2: จะบังคับใช้แพ็คเกจการปรับใช้ใหม่ได้อย่างไร?
คำตอบ: ลบ zip-archive ที่มีอยู่จากไดเรกทอรี
builds
หรือทำการเปลี่ยนแปลงในซอร์สโค้ดของคุณ หากไม่มี zip-archive สำหรับแฮชเนื้อหาปัจจุบันมันจะถูกสร้างขึ้นใหม่ในระหว่างterraform apply
Q3: null_resource.archive[0] must be replaced
คำตอบ: นี่อาจหมายความว่า zip-archive ได้รับการปรับใช้ แต่ในปัจจุบันขาดในท้องถิ่นและจะต้องสร้างใหม่ในท้องถิ่น เมื่อคุณพบปัญหานี้ในระหว่างกระบวนการ CI/CD (ที่เวิร์กสเปซสะอาด) หรือจากพื้นที่ทำงานหลายแห่งคุณสามารถตั้งค่าตัวแปรสภาพแวดล้อม tf_recreate_missing_lambda_package
terraform apply
TF_RECREATE_MISSING_LAMBDA_PACKAGE=false
หรือผ่านrecreate_missing_package = false
เป็นพารามิเตอร์ หรือคุณสามารถผ่านtrigger_on_package_timestamp = false
เป็นพารามิเตอร์ที่จะละเว้นไฟล์ timestamp ไฟล์เมื่อตัดสินใจที่จะสร้างที่เก็บถาวรหรือไม่
Q4: ข้อผิดพลาดนี้หมายถึงอะไร - "We currently do not support adding policies for $LATEST."
-
คำตอบ: เมื่อฟังก์ชั่นแลมบ์ดาถูกสร้างขึ้นด้วย
publish = true
เวอร์ชันใหม่จะเพิ่มขึ้นโดยอัตโนมัติและตัวระบุที่ผ่านการรับรอง (หมายเลขเวอร์ชัน) จะพร้อมใช้งานและจะใช้เมื่อตั้งค่าการอนุญาต Lambdaเมื่อ
publish = false
(ค่าเริ่มต้น) จะมีเฉพาะตัวระบุที่ไม่มีเงื่อนไข ($LATEST
) ซึ่งนำไปสู่ข้อผิดพลาดวิธีแก้ปัญหาคือการปิดใช้งานการสร้างสิทธิ์แลมบ์ดาสำหรับเวอร์ชันปัจจุบันโดยการตั้งค่า
create_current_version_allowed_triggers = false
หรือเพื่อเปิดใช้งานการเผยแพร่ฟังก์ชัน lambda (publish = true
)
builds
มักจะขาดหายไปชื่อ | รุ่น |
---|---|
รูปปั้น | > = 1.0 |
aws | > = 5.70 |
ภายนอก | > = 1.0 |
ท้องถิ่น | > = 1.0 |
โมฆะ | > = 2.0 |
ชื่อ | รุ่น |
---|---|
aws | > = 5.70 |
ภายนอก | > = 1.0 |
ท้องถิ่น | > = 1.0 |
โมฆะ | > = 2.0 |
ไม่มีโมดูล
ชื่อ | พิมพ์ |
---|---|
aws_cloudwatch_log_group.lambda | ทรัพยากร |
aws_iam_policy.additional_inline | ทรัพยากร |
aws_iam_policy.additional_json | ทรัพยากร |
AWS_IAM_POLICY.ADDITIONAL_JSONS | ทรัพยากร |
aws_iam_policy.async | ทรัพยากร |
aws_iam_policy.dead_letter | ทรัพยากร |
aws_iam_policy.logs | ทรัพยากร |
aws_iam_policy.dracing | ทรัพยากร |
aws_iam_policy.vpc | ทรัพยากร |
aws_iam_role.lambda | ทรัพยากร |
aws_iam_role_policy_attachment.additional_inline | ทรัพยากร |
aws_iam_role_policy_attachment.additional_json | ทรัพยากร |
AWS_IAM_ROLE_POLICY_ATTACHMENT.ADDITIONAL_JSONS | ทรัพยากร |
aws_iam_role_policy_attachment.additional_many | ทรัพยากร |
aws_iam_role_policy_attachment.additional_one | ทรัพยากร |
aws_iam_role_policy_attachment.async | ทรัพยากร |
aws_iam_role_policy_attachment.dead_letter | ทรัพยากร |
aws_iam_role_policy_attachment.logs | ทรัพยากร |
aws_iam_role_policy_attachment.tracing | ทรัพยากร |
aws_iam_role_policy_attachment.vpc | ทรัพยากร |
aws_lambda_event_source_mapping นี่ | ทรัพยากร |
aws_lambda_function.his | ทรัพยากร |
AWS_LAMBDA_FUNCTION_EVENT_INVOKE_CONFIG.HIS | ทรัพยากร |
aws_lambda_function_url.his | ทรัพยากร |
aws_lambda_layer_version.his | ทรัพยากร |
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.dracing | แหล่งข้อมูล |
aws_iam_policy.vpc | แหล่งข้อมูล |
aws_iam_policy_document.additional_inline | แหล่งข้อมูล |
aws_iam_policy_document.assume_role | แหล่งข้อมูล |
aws_iam_policy_document.async | แหล่งข้อมูล |
aws_iam_policy_document.dead_letter | แหล่งข้อมูล |
aws_iam_policy_document.logs | แหล่งข้อมูล |
aws_partition.current | แหล่งข้อมูล |
aws_region.current | แหล่งข้อมูล |
external_external.archive_prepare | แหล่งข้อมูล |
ชื่อ | คำอธิบาย | พิมพ์ | ค่าเริ่มต้น | ที่จำเป็น |
---|---|---|---|---|
ได้รับอนุญาต _triggers | แผนที่ของทริกเกอร์ที่อนุญาตในการสร้างสิทธิ์แลมบ์ดา | map(any) | {} | เลขที่ |
สถาปัตยกรรม | สถาปัตยกรรมชุดคำสั่งสำหรับฟังก์ชั่นแลมบ์ดาของคุณ ค่าที่ถูกต้องคือ ["x86_64"] และ ["ARM64"] | list(string) | null | เลขที่ |
Artifacts_dir | ชื่อไดเรกทอรีที่ควรจัดเก็บสิ่งประดิษฐ์ | string | "builds" | เลขที่ |
สมมติว่า _role_policy_statements | แผนที่ของคำสั่งนโยบายแบบไดนามิกสำหรับสมมติบทบาทฟังก์ชั่นแลมบ์ดา (ความสัมพันธ์ที่เชื่อถือได้) | any | {} | เลขที่ |
แนบ _async_event_policy | ควบคุมว่าควรเพิ่มนโยบายเหตุการณ์ async ลงในบทบาท IAM สำหรับฟังก์ชันแลมบ์ดา | bool | false | เลขที่ |
แนบ _cloudwatch_logs_policy | ควบคุมว่าควรเพิ่มนโยบายบันทึกการบันทึก CloudWatch ลงในบทบาท IAM สำหรับฟังก์ชันแลมบ์ดา | bool | true | เลขที่ |
attach_create_log_group_permission | ควบคุมว่าจะเพิ่มการอนุญาตกลุ่ม Log Groups ไปยังนโยบายบันทึก CloudWatch | bool | true | เลขที่ |
แนบ _dead_letter_policy | ควบคุมว่าควรเพิ่มนโยบายการแจ้งเตือนจดหมาย SNS/SQS ลงในบทบาท IAM สำหรับฟังก์ชันแลมบ์ดา | bool | false | เลขที่ |
แนบ _network_policy | ควบคุมว่าควรเพิ่มนโยบาย VPC/เครือข่ายลงในบทบาท IAM สำหรับฟังก์ชันแลมบ์ดา | bool | false | เลขที่ |
แนบ _policies | ควบคุมว่าควรเพิ่มรายการนโยบายลงในบทบาท IAM สำหรับฟังก์ชันแลมบ์ดา | bool | false | เลขที่ |
แนบ _policy | ควบคุมว่าควรเพิ่มนโยบายในบทบาท IAM สำหรับฟังก์ชันแลมบ์ดา | bool | false | เลขที่ |
แนบ _policy_json | ควบคุมว่าควรเพิ่ม policy_json ในบทบาท IAM สำหรับฟังก์ชันแลมบ์ดา | bool | false | เลขที่ |
แนบ _policy_jsons | ควบคุมว่าควรเพิ่ม policy_jsons ในบทบาท IAM สำหรับฟังก์ชันแลมบ์ดา | bool | false | เลขที่ |
แนบ _policy_statements | ควบคุมว่าควรเพิ่ม policy_statements ในบทบาท IAM สำหรับฟังก์ชันแลมบ์ดา | bool | false | เลขที่ |
แนบ _tracing_policy | ควบคุมว่าควรเพิ่มนโยบายการติดตามรังสีเอกซ์ลงในบทบาท IAM สำหรับฟังก์ชั่นแลมบ์ดา | bool | false | เลขที่ |
Authorization_type | ประเภทของการรับรองความถูกต้องที่ URL ฟังก์ชั่นแลมบ์ดาใช้ ตั้งค่าเป็น 'AWS_IAM' เพื่อ จำกัด การเข้าถึงผู้ใช้ IAM ที่ได้รับการรับรองความถูกต้องเท่านั้น ตั้งค่าเป็น 'ไม่มี' เพื่อข้ามการรับรองความถูกต้องของ IAM และสร้างจุดสิ้นสุดสาธารณะ | string | "NONE" | เลขที่ |
build_in_docker | ไม่ว่าจะสร้างการพึ่งพาใน Docker | bool | false | เลขที่ |
cloudwatch_logs_kms_key_id | ARN ของปุ่ม KMS ที่จะใช้เมื่อเข้ารหัสข้อมูลบันทึก | string | null | เลขที่ |
cloudwatch_logs_log_group_class | ระบุคลาสบันทึกของกลุ่มบันทึก ค่าที่เป็นไปได้คือ: STANDARD หรือ INFREQUENT_ACCESS | string | null | เลขที่ |
cloudwatch_logs_retention_in_days | ระบุจำนวนวันที่คุณต้องการเก็บบันทึกเหตุการณ์ในกลุ่มบันทึกที่ระบุ ค่าที่เป็นไปได้คือ: 1, 3, 5, 7, 14, 30, 60, 90, 120, 150, 180, 365, 400, 545, 731, 1827 และ 3653 | number | null | เลขที่ |
cloudwatch_logs_skip_destroy | ไม่ว่าจะให้กลุ่มบันทึก (และบันทึกใด ๆ ที่อาจมี) ในเวลาทำลาย | bool | false | เลขที่ |
CloudWatch_logs_tags | แผนที่ของแท็กเพื่อกำหนดทรัพยากร | map(string) | {} | เลขที่ |
code_signing_config_arn | Amazon Resource Name (ARN) สำหรับการกำหนดค่าการลงนามในรหัส | string | null | เลขที่ |
compatible_architectures | รายการสถาปัตยกรรม Lambda Layer เข้ากันได้กับ ปัจจุบัน X86_64 และ ARM64 สามารถระบุได้ | list(string) | null | เลขที่ |
compatible_runtimes | รายการ Runtimes เลเยอร์นี้เข้ากันได้กับ สามารถระบุได้สูงสุด 5 ครั้ง | list(string) | [] | เลขที่ |
ไม้กางเขน | CORS การตั้งค่าที่จะใช้โดย URL ฟังก์ชันแลมบ์ดา | any | {} | เลขที่ |
สร้าง | ควบคุมว่าควรสร้างทรัพยากรหรือไม่ | bool | true | เลขที่ |
create_async_event_config | ควรควบคุมการกำหนดค่าเหตุการณ์ async สำหรับฟังก์ชั่นแลมบ์ดา/นามแฝงหรือไม่ | bool | false | เลขที่ |
create_current_version_allowed_triggers | ไม่ว่าจะอนุญาตให้ทริกเกอร์ในฟังก์ชันแลมบ์ดาเวอร์ชันปัจจุบัน (จะเพิกถอนการอนุญาตจากเวอร์ชันก่อนหน้านี้เนื่องจาก Terraform จัดการทรัพยากรปัจจุบันเท่านั้น) | bool | true | เลขที่ |
create_current_version_async_event_config | ไม่ว่าจะอนุญาตให้กำหนดค่าเหตุการณ์ async ในฟังก์ชันแลมบ์ดาเวอร์ชันปัจจุบัน (จะเพิกถอนการอนุญาตจากเวอร์ชันก่อนหน้านี้เนื่องจาก Terraform จัดการทรัพยากรปัจจุบันเท่านั้น) | bool | true | เลขที่ |
create_function | ควบคุมว่าควรสร้างทรัพยากรฟังก์ชันแลมบ์ดาหรือไม่ | bool | true | เลขที่ |
create_lambda_function_url | ควบคุมว่าควรสร้างทรัพยากร URL ฟังก์ชัน Lambda หรือไม่ | bool | false | เลขที่ |
create_layer | ควบคุมว่าควรสร้างทรัพยากรเลเยอร์แลมบ์ดาหรือไม่ | bool | false | เลขที่ |
create_package | ควบคุมว่าควรสร้างแพ็คเกจ Lambda หรือไม่ | bool | true | เลขที่ |
create_role | ควบคุมว่าควรสร้างบทบาทของ IAM สำหรับฟังก์ชันแลมบ์ดาหรือไม่ | bool | true | เลขที่ |
create_sam_metadata | ควบคุมว่าควรสร้างทรัพยากร null metadata metadata หรือไม่ | bool | false | เลขที่ |
create_unqualified_alias_allowed_triggers | ไม่ว่าจะอนุญาตให้ทริกเกอร์ในนามแฝงที่ไม่มีคุณสมบัติชี้ไปที่ $ เวอร์ชันล่าสุด | bool | true | เลขที่ |
create_unqualified_alias_async_event_config | ไม่ว่าจะอนุญาตให้กำหนดค่าเหตุการณ์ async ในนามแฝงที่ไม่มีเงื่อนไขชี้ไปที่ $ เวอร์ชันล่าสุด | bool | true | เลขที่ |
create_unqualified_alias_lambda_function_url | ไม่ว่าจะใช้นามแฝงที่ไม่มีเงื่อนไขชี้ไปที่ $ ล่าสุดใน URL ฟังก์ชั่น Lambda | bool | true | เลขที่ |
Dead_letter_target_arn | ARN ของหัวข้อ SNS หรือคิว SQS เพื่อแจ้งให้ทราบเมื่อใดที่การร้องขอล้มเหลว | string | null | เลขที่ |
คำอธิบาย | คำอธิบายของฟังก์ชั่นแลมบ์ดาของคุณ (หรือเลเยอร์) | string | "" | เลขที่ |
ปลายทาง _on_failure | ชื่อทรัพยากร Amazon (ARN) ของทรัพยากรปลายทางสำหรับการเรียกร้องแบบอะซิงโครนัสที่ล้มเหลว | string | null | เลขที่ |
destination_on_success | Amazon Resource Name (ARN) ของทรัพยากรปลายทางสำหรับการเรียกร้องแบบอะซิงโครนัสที่ประสบความสำเร็จ | string | null | เลขที่ |
Docker_additional_options | ตัวเลือกเพิ่มเติมเพื่อส่งผ่านไปยังคำสั่ง Docker Run (เช่นเพื่อตั้งค่าตัวแปรสภาพแวดล้อมปริมาณและอื่น ๆ ) | list(string) | [] | เลขที่ |
Docker_build_root | รูท Dir ที่ไหนที่จะสร้างใน Docker | string | "" | เลขที่ |
Docker_entrypoint | เส้นทางไปยังจุดเข้าใช้ Docker ที่จะใช้ | string | null | เลขที่ |
Docker_file | เส้นทางสู่ Dockerfile เมื่อสร้างใน Docker | string | "" | เลขที่ |
Docker_image | Docker Image เพื่อใช้สำหรับการสร้าง | string | "" | เลขที่ |
Docker_pip_cache | ไม่ว่าจะติดตั้งโฟลเดอร์แคช PIP ที่ใช้ร่วมกันลงในสภาพแวดล้อม Docker หรือไม่ | any | null | เลขที่ |
Docker_with_ssh_agent | ไม่ว่าจะผ่าน ssh_auth_sock ไปยังสภาพแวดล้อม Docker หรือไม่ | bool | false | เลขที่ |
environment_variables | แผนที่ที่กำหนดตัวแปรสภาพแวดล้อมสำหรับฟังก์ชันแลมบ์ดา | map(string) | {} | เลขที่ |
EPHEMERAL_STORAGE_SIZE | จำนวนที่เก็บชั่วคราว (/TMP) ใน MB ฟังก์ชั่นแลมบ์ดาของคุณสามารถใช้งานได้ที่รันไทม์ ค่าที่ถูกต้องระหว่าง 512 MB ถึง 10,240 MB (10 GB) | number | 512 | เลขที่ |
event_source_mapping | แผนที่ของการทำแผนที่แหล่งเหตุการณ์ | any | {} | เลขที่ |
file_system_arn | ชื่อทรัพยากร Amazon (ARN) ของจุดเชื่อมต่อ Amazon EFS ที่ให้การเข้าถึงระบบไฟล์ | string | null | เลขที่ |
file_system_local_mount_path | เส้นทางที่ฟังก์ชั่นสามารถเข้าถึงระบบไฟล์เริ่มต้นด้วย /mnt / | string | null | เลขที่ |
function_name | ชื่อที่ไม่ซ้ำกันสำหรับฟังก์ชั่นแลมบ์ดาของคุณ | string | "" | เลขที่ |
function_tags | แผนที่ของแท็กเพื่อกำหนดเฉพาะฟังก์ชันแลมบ์ดา | map(string) | {} | เลขที่ |
ผู้ดูแล | Lambda Function entrypoint ในรหัสของคุณ | string | "" | เลขที่ |
hash_extra | สตริงที่จะเพิ่มลงในฟังก์ชั่นแฮช มีประโยชน์เมื่อสร้างเส้นทางต้นทางเดียวกันสำหรับฟังก์ชั่นที่แตกต่างกัน | string | "" | เลขที่ |
ไม่สนใจ _source_code_hash | ไม่ว่าจะเพิกเฉยต่อการเปลี่ยนแปลงของแฮชซอร์สโค้ดของฟังก์ชั่น ตั้งค่าเป็นจริงหากคุณจัดการโครงสร้างพื้นฐานและการปรับใช้รหัสแยกกัน | bool | false | เลขที่ |
image_config_command | CMD สำหรับภาพนักเทียบท่า | list(string) | [] | เลขที่ |
image_config_entry_point | จุดเข้าสำหรับภาพนักเทียบท่า | list(string) | [] | เลขที่ |
image_config_working_directory | ไดเรกทอรีการทำงานสำหรับภาพนักเทียบท่า | string | null | เลขที่ |
image_uri | ภาพ ECR URI ที่มีแพ็คเกจการปรับใช้ของฟังก์ชั่น | string | null | เลขที่ |
invoke_mode | โหมดเรียกใช้ URL ฟังก์ชันแลมบ์ดา ค่าที่ถูกต้องจะถูกบัฟเฟอร์ (ค่าเริ่มต้น) และ response_stream | string | null | เลขที่ |
ipv6_allowed_for_dual_stack | อนุญาตให้มีการรับส่งข้อมูล IPv6 ขาออกบนฟังก์ชั่น VPC ที่เชื่อมต่อกับ Subnets คู่สแต็ก | bool | null | เลขที่ |
kms_key_arn | คีย์ Arn of KMS ที่ใช้โดยฟังก์ชั่นแลมบ์ดาของคุณ | string | null | เลขที่ |
lambda_at_edge | ตั้งค่านี้เป็นจริงหากใช้ lambda@edge เพื่อเปิดใช้งานการเผยแพร่ จำกัด การหมดเวลาและอนุญาตให้ edgelambda.amazonaws.com เรียกใช้ฟังก์ชัน | bool | false | เลขที่ |
lambda_at_edge_logs_all_regions | ไม่ว่าจะระบุตัวแทนในนโยบาย IAM ที่ใช้โดย Lambda@Edge เพื่ออนุญาตให้เข้าสู่ระบบในทุกภูมิภาค | bool | true | เลขที่ |
lambda_role | IAM ROLE ARN ติดอยู่กับฟังก์ชั่นแลมบ์ดา สิ่งนี้ควบคุมทั้ง WHO / สิ่งที่สามารถเรียกใช้ฟังก์ชั่นแลมบ์ดาของคุณรวมถึงทรัพยากรที่ฟังก์ชั่นแลมบ์ดาของเรามีการเข้าถึง ดูรูปแบบการอนุญาตแลมบ์ดาสำหรับรายละเอียดเพิ่มเติม | string | "" | เลขที่ |
layer_name | ชื่อ Lambda Layer เพื่อสร้าง | string | "" | เลขที่ |
layer_skip_destroy | ไม่ว่าจะเป็นรุ่นเก่าของเลเยอร์แลมบ์ดาที่ติดตั้งไว้ก่อนหน้านี้ | bool | false | เลขที่ |
ชั้น | รายการ Lambda Layer เวอร์ชัน Arns (สูงสุด 5) เพื่อแนบกับฟังก์ชั่น Lambda ของคุณ | list(string) | null | เลขที่ |
ใบอนุญาต _info | ข้อมูลใบอนุญาตสำหรับเลเยอร์แลมบ์ดาของคุณ เช่น URL MIT หรือ URL เต็มรูปแบบของใบอนุญาต | string | "" | เลขที่ |
local_existing_package | เส้นทางที่แน่นอนไปยังไฟล์ซิปที่มีอยู่ที่จะใช้ | string | null | เลขที่ |
logging_application_log_level | ระดับบันทึกแอปพลิเคชันของฟังก์ชันแลมบ์ดา ค่าที่ถูกต้องคือ "ร่องรอย", "ดีบัก", "ข้อมูล", "เตือน", "ข้อผิดพลาด" หรือ "ร้ายแรง" | string | "INFO" | เลขที่ |
logging_log_format | รูปแบบบันทึกของฟังก์ชั่นแลมบ์ดา ค่าที่ถูกต้องคือ "JSON" หรือ "ข้อความ" | string | "Text" | เลขที่ |
logging_log_group | กลุ่มบันทึก CloudWatch เพื่อส่งบันทึกไปยัง | string | null | เลขที่ |
logging_system_log_level | ระดับบันทึกระบบของฟังก์ชันแลมบ์ดา ค่าที่ถูกต้องคือ "ดีบัก", "ข้อมูล" หรือ "เตือน" | string | "INFO" | เลขที่ |
maximum_event_age_in_seconds | อายุสูงสุดของคำขอที่แลมบ์ดาส่งไปยังฟังก์ชั่นสำหรับการประมวลผลในไม่กี่วินาที ค่าที่ถูกต้องระหว่าง 60 ถึง 21600 | number | null | เลขที่ |
maximum_retry_attempts | จำนวนครั้งสูงสุดที่จะลองอีกครั้งเมื่อฟังก์ชั่นส่งคืนข้อผิดพลาด ค่าที่ถูกต้องระหว่าง 0 ถึง 2 ค่าเริ่มต้นถึง 2 | number | null | เลขที่ |
หน่วยความจำ _size | จำนวนหน่วยความจำใน MB ฟังก์ชั่นแลมบ์ดาของคุณสามารถใช้เมื่อรันไทม์ ค่าที่ถูกต้องระหว่าง 128 MB ถึง 10,240 MB (10 GB) เพิ่มขึ้น 64 MB | number | 128 | เลขที่ |
number_of_policies | จำนวนนโยบายที่จะแนบไปกับบทบาท IAM สำหรับฟังก์ชันแลมบ์ดา | number | 0 | เลขที่ |
number_of_policy_jsons | จำนวนนโยบาย JSON ที่จะแนบไปกับบทบาท IAM สำหรับฟังก์ชั่นแลมบ์ดา | number | 0 | เลขที่ |
package_type | ประเภทแพ็คเกจการปรับใช้แลมบ์ดา ตัวเลือกที่ถูกต้อง: ซิปหรือรูปภาพ | string | "Zip" | เลขที่ |
นโยบาย | รายการคำสั่งนโยบาย ARN เพื่อแนบบทบาทฟังก์ชันแลมบ์ดา | list(string) | [] | เลขที่ |
นโยบาย | เอกสารนโยบายเพิ่มเติม ARN เพื่อแนบบทบาทฟังก์ชันแลมบ์ดา | string | null | เลขที่ |
policy_json | เอกสารนโยบายเพิ่มเติมเป็น JSON เพื่อแนบบทบาทฟังก์ชันแลมบ์ดา | string | null | เลขที่ |
policy_jsons | รายการเอกสารนโยบายเพิ่มเติมเป็น JSON เพื่อแนบบทบาทฟังก์ชันแลมบ์ดา | list(string) | [] | เลขที่ |
policy_name | ชื่อนโยบายของ IAM มันแทนที่ค่าเริ่มต้นซึ่งเหมือนกับ role_name | string | null | เลขที่ |
policy_path | เส้นทางของนโยบายที่ควรเพิ่มในบทบาท IAM สำหรับฟังก์ชั่นแลมบ์ดา | string | null | เลขที่ |
policy_statements | แผนที่คำสั่งนโยบายแบบไดนามิกเพื่อแนบบทบาทฟังก์ชันแลมบ์ดา | any | {} | เลขที่ |
Provisioned_concurrent_executions | จำนวนความสามารถในการจัดสรร ตั้งค่าเป็น 1 หรือมากกว่าที่จะเปิดใช้งานหรือตั้งค่าเป็น 0 เพื่อปิดการใช้งานพร้อมกัน | number | -1 | เลขที่ |
เผยแพร่ | ไม่ว่าจะเผยแพร่การสร้าง/เปลี่ยนเป็นเวอร์ชันฟังก์ชั่น Lambda ใหม่หรือไม่ | bool | false | เลขที่ |
putin_khuylo | คุณเห็นด้วยหรือไม่ว่าปูตินไม่เคารพอำนาจอธิปไตยของยูเครนและความสมบูรณ์ของดินแดน? ข้อมูลเพิ่มเติม: https://en.wikipedia.org/wiki/putin_khuylo! | bool | true | เลขที่ |
สร้างใหม่ _missing_package | ไม่ว่าจะสร้างแพ็คเกจแลมบ์ดาที่หายไปใหม่หากหายไปในท้องถิ่นหรือไม่ | bool | true | เลขที่ |
แทนที่ _security_groups_on_destroy | (ไม่บังคับ) เมื่อเป็นจริงกลุ่มความปลอดภัยทั้งหมดที่กำหนดไว้ใน VPC_Security_Group_IDS จะถูกแทนที่ด้วยกลุ่มความปลอดภัยเริ่มต้นหลังจากฟังก์ชั่นถูกทำลาย ตั้งค่าตัวแปร replacement_security_group_ids เพื่อใช้รายการที่กำหนดเองของกลุ่มความปลอดภัยสำหรับการเปลี่ยนแทน | bool | null | เลขที่ |
replacement_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 | เลขที่ |
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) | {} | เลขที่ |
timeout | The amount of time your Lambda Function has to run in seconds. | number | 3 | เลขที่ |
timeouts | Define maximum timeout for creating, updating, and deleting Lambda Function resources | map(string) | {} | เลขที่ |
tracing_mode | Tracing mode of the Lambda Function. Valid value can be either PassThrough or Active. | string | null | เลขที่ |
trigger_on_package_timestamp | Whether to recreate the Lambda package if the timestamp changes | bool | true | เลขที่ |
trusted_entities | List of additional trusted entities for assuming Lambda Function role (trust relationship) | any | [] | เลขที่ |
use_existing_cloudwatch_log_group | Whether to use an existing CloudWatch log group or create new | bool | false | เลขที่ |
vpc_security_group_ids | List of security group ids when Lambda Function should run in the VPC. | list(string) | null | เลขที่ |
vpc_subnet_ids | List of subnet ids when Lambda Function should run in the VPC. Usually private or intra subnets. | list(string) | null | เลขที่ |
ชื่อ | คำอธิบาย |
---|---|
lambda_cloudwatch_log_group_arn | The ARN of the Cloudwatch Log Group |
lambda_cloudwatch_log_group_name | The name of the Cloudwatch Log Group |
lambda_event_source_mapping_arn | The event source mapping ARN |
lambda_event_source_mapping_function_arn | The the ARN of the Lambda function the event source mapping is sending events to |
lambda_event_source_mapping_state | The state of the event source mapping |
lambda_event_source_mapping_state_transition_reason | The reason the event source mapping is in its current state |
lambda_event_source_mapping_uuid | The UUID of the created event source mapping |
lambda_function_arn | The ARN of the Lambda Function |
lambda_function_arn_static | The static ARN of the Lambda Function. Use this to avoid cycle errors between resources (eg, Step Functions) |
lambda_function_invoke_arn | The Invoke ARN of the Lambda Function |
lambda_function_kms_key_arn | The ARN for the KMS encryption key of Lambda Function |
lambda_function_last_modified | The date Lambda Function resource was last modified |
lambda_function_name | The name of the Lambda Function |
lambda_function_qualified_arn | The ARN identifying your Lambda Function Version |
lambda_function_qualified_invoke_arn | The Invoke ARN identifying your Lambda Function Version |
lambda_function_signing_job_arn | ARN of the signing job |
lambda_function_signing_profile_version_arn | ARN of the signing profile version |
lambda_function_source_code_hash | Base64-encoded representation of raw SHA-256 sum of the zip file |
lambda_function_source_code_size | The size in bytes of the function .zip file |
lambda_function_url | The URL of the Lambda Function URL |
lambda_function_url_id | The Lambda Function URL generated id |
lambda_function_version | Latest published version of Lambda Function |
lambda_layer_arn | The ARN of the Lambda Layer with version |
lambda_layer_created_date | The date Lambda Layer resource was created |
lambda_layer_layer_arn | The ARN of the Lambda Layer without version |
lambda_layer_source_code_size | The size in bytes of the Lambda Layer .zip file |
lambda_layer_version | The Lambda Layer version |
lambda_role_arn | The ARN of the IAM role created for the Lambda Function |
lambda_role_name | The name of the IAM role created for the Lambda Function |
lambda_role_unique_id | The unique id of the IAM role created for the Lambda Function |
local_filename | The filename of zip archive deployed (if deployment was from local) |
s3_object | The map with S3 object data of zip archive deployed (if deployment was from S3) |
During development involving modifying python files, use tox to run unit tests:
tox
This will try to run unit tests which each supported python version, reporting errors for python versions which are not installed locally.
If you only want to test against your main python version:
tox -e py
You can also pass additional positional arguments to pytest which is used to run test, eg to make it verbose:
tox -e py -- -vvv
Module managed by Anton Babenko. Check out serverless.tf to learn more about doing serverless with Terraform.
Please reach out to Betajob if you are looking for commercial support for your Terraform, AWS, or serverless project.
Apache 2 Licensed. See LICENSE for full details.