وحدة Terraform ، التي تنشئ جميع موارد AWS Lambda المدعومة تقريبًا بالإضافة إلى رعاية بناء وتغليف تبعيات Lambda المطلوبة للوظائف والطبقات.
وحدة Terraform هذه هي جزء من إطار عمل serverless.tf ، الذي يهدف إلى تبسيط جميع العمليات عند العمل مع الخادم في terraform:
serverless.tf
الأخرى مثل Gateway 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 "
}
إذا كنت ترغب في إدارة كود الوظائف وموارد البنية التحتية (مثل أذونات 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
}
لاحظ أن هذه الوحدة لا تنسخ الحزم المسبقة إلى دلو 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 في منطقة East (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 بالدور IAM المستخدمة من قبل وظيفة Lambda:
policy_json
- json string أو heredoc ، عند attach_policy_json = true
.policy_jsons
- قائمة سلاسل JSON أو Heredoc ، عند attach_policy_jsons = true
و number_of_policy_jsons > 0
.policy
- ARN من سياسة IAM الحالية ، عند attach_policy = true
.policies
- قائمة 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 لافتراض دور وظيفة Lambda (علاقة الثقة). انظر examples/complete
لمزيد من المعلومات. يجب تحديد أذونات Lambda للسماح ببعض الموارد لاستدعاء وظيفة Lambda.
module "lambda_function" {
source = " terraform-aws-modules/lambda/aws "
# ...omitted for brevity
allowed_triggers = {
Config = {
principal = " config.amazonaws.com "
principal_org_id = " o-abcdefghij "
}
APIGatewayAny = {
service = " apigateway "
source_arn = " arn:aws:execute-api:eu-west-1:135367859851:aqnku8akd0/*/*/* "
},
APIGatewayDevPost = {
service = " apigateway "
source_arn = " arn:aws:execute-api:eu-west-1:135367859851:aqnku8akd0/dev/POST/* "
},
OneRule = {
principal = " events.amazonaws.com "
source_arn = " arn:aws:events:eu-west-1:135367859851:rule/RunDaily "
}
}
}
في بعض الأحيان ، يجب أن يكون لديك طريقة لإنشاء الموارد بشكل مشروط ، لكن Terraform لا يسمح باستخدام count
داخل module
، وبالتالي فإن الحل هو create
الوسائط.
module "lambda" {
source = " terraform-aws-modules/lambda/aws "
create = false # to disable all resources
create_package = false # to control build package process
create_function = false # to control creation of the Lambda Function and related resources
create_layer = false # to control creation of the Lambda Layer and related resources
create_role = false # to control creation of the IAM role and policies required for Lambda Function
attach_cloudwatch_logs_policy = false
attach_dead_letter_policy = false
attach_network_policy = false
attach_tracing_policy = false
attach_async_event_policy = false
# ... omitted
}
هذا هو واحد من أكثر الأجزاء تعقيدًا من قبل الوحدة وعادة ما لا يتعين عليك معرفة الأجزاء الداخلية.
package.py
هو Python Script الذي يفعل ذلك. تأكد من تثبيت Python 3.6 أو الأحدث. تتمثل الوظائف الرئيسية في البرنامج النصي في إنشاء اسم ملف لـ Zip-Archive استنادًا إلى محتوى الملفات ، والتحقق مما إذا كان قد تم إنشاء Zip-Archive بالفعل ، وإنشاء Zip-Archive فقط عند الضرورة (أثناء apply
، وليس plan
) .
تجزئة من Zip-Archive التي تم إنشاؤها مع نفس المحتوى من الملفات متطابقة دائمًا مما يمنع تحديثات القوة غير الضرورية لموارد Lambda ما لم يتم تعديل المحتوى. إذا كنت بحاجة إلى الحصول على أسماء ملفات مختلفة لنفس المحتوى ، فيمكنك تحديد وسيطة String Extra hash_extra
.
عند استدعاء هذه الوحدة عدة مرات في تنفيذ واحد لإنشاء حزم مع نفس source_path
، سيتم تالف Zip-Archives بسبب الكتابة المتزامنة في نفس الملف. هناك حلان - قم بتعيين قيم مختلفة لـ hash_extra
لإنشاء أرشيفات مختلفة ، أو إنشاء حزمة مرة واحدة في الخارج (باستخدام هذه الوحدة) ثم تمرير وسيطة local_existing_package
لإنشاء موارد Lambda أخرى.
كان من الصعب تاريخياً بناء البناء والتعبئة (خاصة مع Terraform) ، لذلك بذلنا جهدًا لتسهيل للمستخدم رؤية معلومات التصحيح. هناك DEBUG3
مستويات مختلفة من تصحيح الأخطاء: DEBUG
- لمعرفة ما يحدث فقط أثناء مرحلة التخطيط وكيف تصفية DUMP_ENV
الملف zip في حالة الأنماط المطبقة ، DEBUG2
- لرؤية المزيد شاهد جميع قيم التسجيل ومتغيرات 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
على سلسلة ، سيتم استخدام محتوى هذا المسار لإنشاء حزمة النشر وفقًا لما يلي:
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 و package.json
إذا كانت requirements.txt
. إذا كنت ترغب في تخصيص هذا السلوك ، فيرجى استخدام تدوين الكائن كما هو موضح أدناه.path
اختياري.patterns
- يجب أن ترضي قائمة أسماء ملفات Python regex. القيمة الافتراضية هي "تشمل كل شيء" يساوي patterns = [".*"]
. يمكن أيضًا تحديد هذا كسلسلة متعددة الوراثة (لا يسمح بتعليقات). بعض الأمثلة على الأنماط الصالحة:commands
وسلسلة أوامر متعددة ، فسيتم فحص رمز الخروج من الأمر الأخير فقط للنجاح. إذا كنت تفضل الفشل بسرعة ، فابدأ الأوامر باستخدام set -e
أو PowerShell Option $ErrorActionPreference="Stop"
!. * /. * .txt # Filter all txt files recursively
node_modules/. * # Include empty dir or with a content if it exists
node_modules/.+ # Include full non empty node_modules dir with its content
node_modules/ # Include node_modules itself without its content
# It's also a way to include an empty dir if it exists
node_modules # Include a file or an existing dir only
!abc/. * # Filter out everything in an abc folder
abc/def/. * # Re-include everything in abc/def sub folder
!abc/def/hgk/. * # Filter out again in abc/def/hgk sub folder
commands
- قائمة الأوامر لتشغيل. إذا تم تحديدها ، فإن هذه الوسيطة تتجاوز pip_requirements
و npm_requirements
.:zip [source] [destination]
هو أمر خاص ينشئ محتوى من دليل العمل الحالي (الوسيطة الأولى) ويضعه داخل المسار (الوسيطة الثانية).pip_requirements
- تحكم ما إذا كان سيتم تنفيذ pip install
. قم بتعيين false
لتعطيل هذه الميزة ، true
pip install
مع requirements.txt
. txt وجدت في path
. أو تعيين إلى اسم ملف آخر تريد استخدامه بدلاً من ذلك. عند تمرير source_path
كسلسلة تحتوي على مسار (وليس قائمة بالخرائط) ، requirements.txt
موجودة ، يتم تنفيذ pip install
تلقائيًا.pip_tmp_dir
- قم بتعيين الدليل الأساسي لجعل الدليل المؤقت لتثبيتات PIP. يمكن أن تكون مفيدة ل Docker في Builds Docker.poetry_install
- يتحكم في تنفيذ poetry export
pip install
. تم تعيينه على false
لتعطيل هذه الميزة ، true
لتشغيل poetry export
باستخدام pyproject.toml
و poetry.lock
الموجودة في path
. عندما يتم تمرير source_path
كسلسلة تحتوي على مسار (وليس قائمة بالخرائط) ، و pyproject.toml
مع poetry
نظام البناء موجود ، يتم تنفيذ poetry export
pip install
تلقائيًا.poetry_export_extra_args
- قائمة من وسيطات الشعر الإضافية لإضافتها إلى أمر تصدير الشعرnpm_requirements
- تحكم ما إذا كان سيتم تنفيذ npm install
. قم بتعيين false
لتعطيل هذه الميزة ، true
npm install
مع package.json
الموجود في path
. أو تعيين إلى اسم ملف آخر تريد استخدامه بدلاً من ذلك.npm_tmp_dir
- اضبط الدليل الأساسي لإنشاء الدليل المؤقت لتثبيتات NPM. يمكن أن تكون مفيدة ل Docker في 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
المستخدم من registry 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 للخيارات المتاحة):
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 ، يمكنك استدعاء وظائف Lambda المحددة في تطبيق Terraform محليًا باستخدام أمر SAM Local Invoke ، وتوفير عنوان الوظيفة terraform ، أو اسم الوظيفة ، وتعيين hook-name
على terraform
لإخبار Sam Cli بأن المشروع الأساسي هو تطبيق terraform.
يمكنك تنفيذ أمر sam local invoke
من دليل جذر تطبيق Terraform على النحو التالي:
sam local invoke --hook-name terraform module.hello_world_function.aws_lambda_function.this[0]
يمكنك أيضًا تمرير حدث إلى وظيفة Lambda الخاصة بك ، أو الكتابة فوق متغيرات البيئة الخاصة بها. تحقق هنا لمزيد من المعلومات.
يمكنك أيضًا استدعاء وظيفة Lambda الخاصة بك في وضع تصحيح الأخطاء ، والخطوة من رمز مصدر وظيفة Lambda محليًا في المحرر المفضل لديك. تحقق هنا لمزيد من المعلومات.
يمكنك استخدام AWS SAM CLI لاختبار التطبيق الخاص بك بسرعة على حساب تطوير AWS الخاص بك. باستخدام SAM Accelerate ، ستتمكن من تطوير وظائف Lambda محليًا ، وبمجرد حفظ التحديثات الخاصة بك ، ستقوم Sam CLI بتحديث حساب التطوير الخاص بك باستخدام وظائف Lambda المحدثة. لذلك ، يمكنك اختباره على السحابة ، وإذا كان هناك أي خطأ ، فيمكنك تحديث الرمز بسرعة ، وسوف يهتم Sam Cli بدفعه إلى السحابة. تحقق هنا لمزيد من المعلومات حول تسريع SAM.
يمكنك تنفيذ أمر sam sync
من دليل جذر تطبيق Terraform على النحو التالي:
sam sync --hook-name terraform --watch
عادة ، يتم تحديثات موارد وظيفة Lambda عندما يتغير رمز المصدر. إذا تم تحديد publish = true
فسيتم إنشاء إصدار جديد من وظيفة Lambda.
يمكن استدعاء وظيفة Lambda المنشورة باستخدام إما حسب رقم الإصدار أو باستخدام $LATEST
. هذه هي أبسط طريقة للنشر التي لا تتطلب أي أداة أو خدمة إضافية.
من أجل القيام بعمليات النشر التي يتم التحكم فيها (المتداول ، الكناري ، التراجع) لوظائف Lambda ، نحتاج إلى استخدام أسماك الاسم المستعارة وظيفة Lambda.
بعبارات بسيطة ، يشبه Lambda Alias مؤشرًا لإما إصدار واحد من وظيفة Lambda (عند اكتمال النشر) ، أو إلى نسختين مرجحين من وظيفة Lambda (أثناء النشر المتداول أو الكناري).
يمكن استخدام وظيفة Lambda واحدة في الأسماء المستعارة المتعددة. يعطي استخدام المستعار تحكمًا كبيرًا في أي إصدار يتم نشره عند وجود بيئات متعددة.
هناك وحدة الاسم المستعارة ، والتي تبسط العمل مع الاسم المستعار (إنشاء ، إدارة التكوينات ، التحديثات ، إلخ). انظر الأمثلة/الاسم المستعار لمختلف حالات الاستخدام كيف يمكن تكوين الاسم المستعار واستخدامه.
هناك وحدة نشر ، والتي تنشئ موارد مطلوبة لإجراء عمليات النشر باستخدام AWS CodedEploy. كما أنه يخلق النشر ، وانتظر الانتهاء. راجع أمثلة/نشر لعملية الإنشاء/التحديث/النشر الكاملة.
Terraform Cloud و Terraform Enterprise والعديد من SaaS الأخرى لتشغيل Terraform لا يتمتعون بتثبيت Python مسبقًا على العمال. ستحتاج إلى توفير صورة Docker بديلة مع تثبيت Python لتتمكن من استخدام هذه الوحدة هناك.
س 1: لماذا لا تعيد حزمة النشر في كل مرة أقوم فيها بتغيير شيء ما؟ أو لماذا يتم إعادة إنشاء حزمة النشر في كل مرة ولكن لم يتم تغيير المحتوى؟
الإجابة: يمكن أن يكون هناك عدة أسباب تتعلق بإعدام المتزامنة ، أو إلى تجزئة المحتوى. في بعض الأحيان ، حدثت تغييرات داخل التبعية التي لا تستخدم في حساب تجزئة المحتوى. أو يتم إنشاء حزم متعددة في نفس الوقت من نفس المصادر. يمكنك فرضها عن طريق ضبط قيمة
hash_extra
على قيم مميزة.
س 2: كيف تجبر على إعادة إنشاء حزمة النشر؟
الإجابة: احذف حجماً حاليًا من الدليل
builds
، أو قم بإجراء تغيير في رمز المصدر الخاص بك. إذا لم يكن هناك Zip-Archive لجسم المحتوى الحالي ، فسيتم إعادة إنشاءه أثناءterraform apply
.
س 3: 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."
؟
الإجابة: عند إنشاء وظيفة Lambda باستخدام
publish = true
يتم زيادة الإصدار الجديد تلقائيًا ويتوفر معرف مؤهل (رقم الإصدار) وسيتم استخدامه عند تعيين أذونات Lambda.عند
publish = false
(افتراضي) ، يتوفر فقط المعرف غير المؤهل ($LATEST
) مما يؤدي إلى الخطأ.يتمثل الحل إما في تعطيل إنشاء أذونات Lambda للإصدار الحالي عن طريق إعداد
create_current_version_allowed_triggers = false
، أو لتمكين نشر وظيفة 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.TRIGANG | الموارد |
AWS_IAM_POLICY.VPC | الموارد |
AWS_IAM_ROLE.LAMBDA | الموارد |
AWS_IM_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.TRIGANG | الموارد |
AWS_IAM_ROLE_POLICY_ATTACHMENT.VPC | الموارد |
AWS_LAMBDA_EVENT_SOURCE_MAPPE.THIS | الموارد |
AWS_LAMBDA_FUNCTION. هذا | الموارد |
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_IDEDITY.Current | مصدر البيانات |
AWS_CLOUDWATCH_LOG_GROUP.LAMBDA | مصدر البيانات |
AWS_IAM_POLICY.TRIGANG | مصدر البيانات |
AWS_IAM_POLICY.VPC | مصدر البيانات |
AWS_IAM_POLICY_DOCUMANT.ADDITIONAL_INLINE | مصدر البيانات |
AWS_IAM_POLICY_DOCUMITE.ASSUME_ROLE | مصدر البيانات |
AWS_IAM_POLICY_DOCUMPH.ASYNC | مصدر البيانات |
AWS_IM_POLICY_DOCUMITY.DEAD_LETTER | مصدر البيانات |
AWS_IAM_POLICY_DOCUMANT.LOGS | مصدر البيانات |
AWS_PARTITION.Current | مصدر البيانات |
AWS_REGION.Current | مصدر البيانات |
external_external.archive_prepare | مصدر البيانات |
اسم | وصف | يكتب | تقصير | مطلوب |
---|---|---|---|---|
المسموح بها | خريطة للمشغلات المسموح بها لإنشاء أذونات Lambda | map(any) | {} | لا |
البنى | مجموعة التعليمات المعمارية لوظيفة Lambda الخاصة بك. القيم الصالحة هي ["x86_64"] و ["ARM64"]. | list(string) | null | لا |
Artifacts_dir | اسم الدليل حيث يجب تخزين القطع الأثرية | string | "builds" | لا |
isule_role_policy_statements | خريطة لبيانات السياسة الديناميكية لافتراض دور وظيفة Lambda (علاقة الثقة) | any | {} | لا |
encles_async_event_policy | يتحكم في ما إذا كان ينبغي إضافة سياسة حدث ASYNC إلى دور IAM لوظيفة Lambda | bool | false | لا |
excay_cloudwatch_logs_policy | تتحكم في ما إذا كان ينبغي إضافة سياسة سجلات السجلات السحابية إلى دور IAM لوظيفة Lambda | bool | true | لا |
acking_create_log_group_permission | يتحكم في ما إذا كنت تريد إضافة إذن Create Log Group إلى سياسة سجلات CloudWatch | bool | true | لا |
إرفاق _dead_letter_policy | يتحكم في ما إذا كان ينبغي إضافة سياسة إخطار الحرف الميت SNS/SQS إلى دور IAM لوظيفة Lambda | bool | false | لا |
إرفاق_network_policy | يتحكم في ما إذا كان ينبغي إضافة VPC/شبكة سياسة الشبكة إلى دور IAM لوظيفة Lambda | bool | false | لا |
إرفاق _policies | يتحكم في ما إذا كان ينبغي إضافة قائمة السياسات إلى دور IAM لوظيفة Lambda | bool | false | لا |
إرفاق _policy | يتحكم في ما إذا كان ينبغي إضافة السياسة إلى دور IAM لوظيفة Lambda | bool | false | لا |
إرفاق_policy_json | يتحكم في ما إذا كان ينبغي إضافة Policy_json إلى دور IAM لوظيفة Lambda | bool | false | لا |
إرفاق_policy_jsons | يتحكم في ما إذا كان ينبغي إضافة Policy_jsons إلى دور IAM لوظيفة Lambda | bool | false | لا |
إرفاق _policy_statements | يتحكم في ما إذا كان ينبغي إضافة Policy_statements إلى دور IAM لوظيفة Lambda | bool | false | لا |
إرفاق_tracing_policy | يتحكم في ما إذا كان ينبغي إضافة سياسة تتبع الأشعة السينية إلى دور IAM لوظيفة Lambda | bool | false | لا |
Eutlization_type | نوع المصادقة التي يستخدمها عنوان URL لدالة Lambda. ضبط على "AWS_IAM" لتقييد الوصول إلى مستخدمي IAM المصادقة فقط. ضبط على "لا شيء" لتجاوز المصادقة IAM وإنشاء نقطة نهاية عامة. | string | "NONE" | لا |
build_in_docker | ما إذا كان يجب بناء تبعيات في دوكر | bool | false | لا |
cloudwatch_logs_kms_key_id | ARN من مفتاح KMS لاستخدامه عند تشفير بيانات السجل. | string | null | لا |
cloudwatch_logs_log_group_class | حدد فئة السجل لمجموعة السجل. القيم الممكنة هي: STANDARD أو INFREQUENT_ACCESS | string | null | لا |
cloudwatch_logs_retention_in_days | يحدد عدد الأيام التي تريد الاحتفاظ بأحداث السجل في مجموعة السجل المحددة. القيم المحتملة هي: 1 ، 3 ، 5 ، 7 ، 14 ، 30 ، 60 ، 90 ، 120 ، 150 ، 180 ، 365 ، 400 ، 545 ، 731 ، 1827 ، و 3653. | number | null | لا |
cloudwatch_logs_skip_destroy | ما إذا كنت تريد الاحتفاظ بمجموعة السجل (وأي سجلات قد تحتوي عليها) في وقت التدمير. | bool | false | لا |
cloudwatch_logs_tags | خريطة العلامات لتعيين المورد. | map(string) | {} | لا |
code_signing_config_arn | اسم مورد Amazon (ARN) لتكوين توقيع الرمز | string | null | لا |
متوافق مع الهندسة المعمارية | قائمة بنيات طبقة Lambda متوافقة مع. حاليًا يمكن تحديد x86_64 و ARM64. | list(string) | null | لا |
متوافق مع وقت | قائمة من أوقات التشغيل هذه الطبقة متوافقة مع. يمكن تحديد ما يصل إلى 5 أوقات تشغيل. | list(string) | [] | لا |
كورس | إعدادات CORS لاستخدامها من قبل عنوان URL لدالة Lambda | any | {} | لا |
يخلق | يتحكم في ما إذا كان ينبغي إنشاء الموارد | bool | true | لا |
create_async_event_config | يتحكم في ما إذا كان ينبغي إنشاء تكوين حدث ASYNC لوظيفة Lambda/الاسم المستعار | bool | false | لا |
create_current_version_allowed_triggers | ما إذا كنت للسماح بمشغلات الإصدار الحالي من وظيفة Lambda (سيؤدي ذلك إلى إلغاء الأذونات من الإصدار السابق لأن Terraform يدير الموارد الحالية فقط) | bool | true | لا |
create_current_version_async_event_config | سواء كنت للسماح بتكوين حدث ASYNC على الإصدار الحالي من وظيفة Lambda (سيؤدي ذلك إلى إلغاء الأذونات من الإصدار السابق لأن Terraform يدير الموارد الحالية فقط) | bool | true | لا |
create_function | يتحكم في ما إذا كان ينبغي إنشاء مورد وظيفة Lambda | bool | true | لا |
create_lambda_function_url | يتحكم في ما إذا كان ينبغي إنشاء مورد عنوان URL لوظيفة Lambda | bool | false | لا |
create_layer | يتحكم في ما إذا كان ينبغي إنشاء مورد طبقة Lambda | bool | false | لا |
create_package | يتحكم في ما إذا كان ينبغي إنشاء حزمة Lambda | bool | true | لا |
create_role | يتحكم في ما إذا كان ينبغي إنشاء دور IAM لوظيفة Lambda | bool | true | لا |
create_sam_metadata | يتحكم في ما إذا كان ينبغي إنشاء مورد SAM NULL NULL | bool | false | لا |
create_unqualified_alias_allowed_triggers | ما إذا كنت للسماح للمشغلات على الاسم المستعار غير المؤهلة التي تشير إلى أحدث إصدار | bool | true | لا |
create_unqualified_alias_async_event_config | ما إذا كنت للسماح بتكوين حدث ASYNC على الاسم المستعار غير المؤهلة ، مما يشير إلى أحدث إصدار | bool | true | لا |
create_unqualified_alias_lambda_function_url | ما إذا كنت تريد استخدام الاسم المستعار غير المؤهل ، مما يشير إلى أحدث إصدار | bool | true | لا |
dead_letter_target_arn | arn of a sns topic أو Queue SQS لإخطار عند فشل الاحتجاج. | string | null | لا |
وصف | وصف وظيفة lambda الخاصة بك (أو الطبقة) | string | "" | لا |
الوجهة | اسم مورد الأمازون (ARN) لمورد الوجهة للدعوات غير المتزامنة الفاشلة | string | null | لا |
الوجهة _on_success | اسم مورد الأمازون (ARN) لمورد الوجهة للدعوات غير المتزامنة الناجحة | string | null | لا |
docker_additional_options | خيارات إضافية لتمريرها إلى أمر Docker Run (على سبيل المثال لتعيين متغيرات البيئة ، وحدات التخزين ، وما إلى ذلك) | list(string) | [] | لا |
docker_build_root | جذر الجذر حيث يتم البناء في Docker | string | "" | لا |
docker_entrypoint | المسار إلى نقطة دخول Docker للاستخدام | string | null | لا |
Docker_file | الطريق إلى Dockerfile عند البناء في Docker | 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 | كمية التخزين السري (/TMP) في MB يمكن استخدام وظيفة Lambda في وقت التشغيل. قيمة صالحة بين 512 ميغابايت إلى 10،240 ميغابايت (10 جيجابايت). | number | 512 | لا |
event_source_mapping | خريطة رسم الخرائط لمصدر الحدث | any | {} | لا |
file_system_arn | اسم مورد Amazon (ARN) لنقطة وصول Amazon EFS التي توفر الوصول إلى نظام الملفات. | string | null | لا |
file_system_local_mount_path | المسار الذي يمكن للدالة الوصول إليه في نظام الملفات ، بدءًا من /mnt /. | string | null | لا |
function_name | اسم فريد لوظيفة Lambda الخاصة بك | string | "" | لا |
function_tags | خريطة العلامات لتعيين وظيفة Lambda فقط | map(string) | {} | لا |
معالج | نقطة إدخال وظيفة Lambda في الكود الخاص بك | string | "" | لا |
hash_extra | السلسلة لإضافتها إلى وظيفة التجزئة. مفيد عند بناء نفس مسار المصدر لوظائف مختلفة. | string | "" | لا |
تجاهل _source_code_hash | ما إذا كان لتجاهل التغييرات على علامة رمز مصدر الوظيفة. قم بالتعيين إلى TRUE إذا كنت تدير عمليات نشر البنية التحتية والرمز بشكل منفصل. | bool | false | لا |
image_config_command | CMD لصورة Docker | list(string) | [] | لا |
image_config_entry_point | نقطة الدخول لصورة Docker | list(string) | [] | لا |
image_config_working_directory | دليل العمل لصورة Docker | string | null | لا |
Image_uri | صورة ECR URI التي تحتوي على حزمة نشر الوظيفة. | string | null | لا |
invoke_mode | استدعاء وضع عنوان URL وظيفة Lambda. يتم تخزين القيم الصالحة (الافتراضي) و Response_stream. | string | null | لا |
IPv6_allowed_for_dual_stack | يسمح بحركة مرور IPv6 الخارجية على وظائف VPC متصلة بشبكات فرعية مزدوجة المكجمات | bool | null | لا |
kms_key_arn | مفتاح arn of KMS لاستخدامه بواسطة وظيفة Lambda الخاصة بك | string | null | لا |
lambda_at_edge | قم بتعيين هذا إلى True إذا كان استخدام Lambda@Edge ، لتمكين النشر ، والحد من المهلة ، والسماح Edgelambda.amazonaws.com بالاستدعاء الوظيفة | bool | false | لا |
lambda_at_edge_logs_all_regions | ما إذا كنت تريد تحديد بطاقة Wildcard في سياسة IAM التي يستخدمها Lambda@Edge للسماح بتسجيل الدخول في جميع المناطق | bool | true | لا |
lambda_role | IAM دور ARN متصلة بوظيفة Lambda. هذا يحكم كل من / ما الذي يمكن أن يستدعي وظيفة Lambda ، وكذلك الموارد التي تتمتع بها وظيفة Lambda لدينا. انظر نموذج إذن Lambda لمزيد من التفاصيل. | string | "" | لا |
layer_name | اسم طبقة لامدا لإنشاء | string | "" | لا |
layer_skip_destroy | ما إذا كان للاحتفاظ بالنسخة القديمة من طبقة لامدا التي تم نشرها مسبقًا. | bool | false | لا |
طبقات | قائمة إصدار Lambda Layer Arns (كحد أقصى 5) لإرفاق وظيفة Lambda الخاصة بك. | list(string) | null | لا |
ترخيص _info | معلومات الترخيص لطبقة Lambda الخاصة بك. على سبيل المثال ، معهد ماساتشوستس للتكنولوجيا أو عنوان URL الكامل للترخيص. | string | "" | لا |
local_existing_package | المسار المطلق إلى ملف ziper الحالي للاستخدام | 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. القيم الصالحة هي "Debug" أو "Info" أو "Warn". | string | "INFO" | لا |
maximum_event_age_in_seconds | الحد الأقصى لعمر الطلب يرسله Lambda إلى وظيفة للمعالجة في ثوان. قيم صالحة بين 60 و 21600. | number | null | لا |
maximum_retry_attempts | الحد الأقصى لعدد المرات لإعادة إعادة المحاولة عندما تُرجع الوظيفة خطأ. قيم صالحة بين 0 و 2. الافتراضيات إلى 2. | number | null | لا |
Memory_size | مقدار الذاكرة في MB يمكن استخدام وظيفة Lambda في وقت التشغيل. قيمة صالحة بين 128 ميغابايت إلى 10،240 ميغابايت (10 جيجابايت) ، بزيادات 64 ميغابايت. | number | 128 | لا |
number_of_policies | عدد السياسات التي يجب إرفاقها بدور IAM لوظيفة Lambda | number | 0 | لا |
number_of_policy_jsons | عدد السياسات JSON التي تعلقها على دور IAM لوظيفة Lambda | number | 0 | لا |
package_type | نوع حزمة نشر Lambda. خيارات صالحة: الرمز البريدي أو الصورة | string | "Zip" | لا |
السياسات | قائمة بيانات السياسة ARN لإرفاقها بدور وظيفة Lambda | list(string) | [] | لا |
سياسة | مستند سياسي إضافي ARN لتوصيله بدور وظيفة Lambda | string | null | لا |
Policy_json | وثيقة سياسية إضافية مثل JSON لتوصيلها بدور وظيفة Lambda | string | null | لا |
Policy_jsons | قائمة مستندات السياسة الإضافية كـ JSON لإرفاقها بدور وظيفة Lambda | list(string) | [] | لا |
Policy_name | اسم السياسة. يتجاوز القيمة الافتراضية ، والتي هي نفس الدور _name | string | null | لا |
Policy_path | يجب إضافة مسار السياسات لذلك إلى دور IAM لوظيفة Lambda | string | null | لا |
Policy_statements | خريطة لبيانات السياسة الديناميكية لتوصيلها بدور وظيفة Lambda | any | {} | لا |
Supplyed_concurrent_executions | مقدار القدرة على تخصيص. تم تعيينه على 1 أو أكثر لتمكين ، أو تعيينه على 0 لتعطيل التزامن الموفر. | number | -1 | لا |
نشر | ما إذا كان يجب نشر إنشاء/تغيير كإصدار وظيفة Lambda الجديدة. | bool | false | لا |
بوتين_خويلو | هل توافق على أن بوتين لا يحترم السيادة الأوكرانية والنزاهة الإقليمية؟ مزيد من المعلومات: https://en.wikipedia.org/wiki/putin_khuylo! | bool | true | لا |
regreate_missing_package | ما إذا كنت تريد إعادة إنشاء حزمة Lambda المفقودة إذا كانت مفقودة محليًا أم لا | bool | true | لا |
استبدال_security_groups_on_destroy | (اختياري) عندما يكون صحيحًا ، سيتم استبدال جميع مجموعات الأمان المحددة في vpc_security_group_ids بمجموعة الأمان الافتراضية بعد تدمير الوظيفة. قم بتعيين متغير Replacement_security_group_ids لاستخدام قائمة مخصصة لمجموعات الأمان لاستبدالها بدلاً من ذلك. | bool | null | لا |
استبدال_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) | {} | لا |
نفذ الوقت | 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.