11locals {
2- enabled = module. this . enabled
3- iam_policy_enabled = local. enabled && (try (length (var. iam_policy ), 0 ) > 0 || var. policy_json != null )
4- s3_bucket_computed_name = var . s3_bucket_name != null ? format ( " %s-%s-%s-%s-%s " , module . this . namespace , module . this . tenant , module . this . environment , module . this . stage , var . s3_bucket_name ) : null
2+ enabled = module. this . enabled
3+ var_iam_policy_enabled = local. enabled && (try (length (var. iam_policy ), 0 ) > 0 || var. policy_json != null )
4+ iam_policy_enabled = local . enabled && local . var_iam_policy_enabled
55
6- s3_full_bucket_name = coalesce (var. s3_full_bucket_name , local. s3_bucket_computed_name , " none" ) == " none" ? null : coalesce (var. s3_full_bucket_name , local. s3_bucket_computed_name )
7- function_name = coalesce (var. function_name , module. label . id )
6+ s3_bucket_name = var. s3_bucket_name != null ? var. s3_bucket_name : one (module. s3_bucket [* ]. outputs . bucket_id )
87
9- cicd_s3_key_format = var. cicd_s3_key_format != null ? var. cicd_s3_key_format : " stage/${ module . this . stage } /lambda/${ local . function_name } /%s"
10- s3_key = var. s3_bucket_name == null ? null : (var. s3_key != null ? var. s3_key : format (local. cicd_s3_key_format , coalesce (one (data. aws_ssm_parameter . cicd_ssm_param [* ]. value ), " example" )))
8+ function_name = coalesce (var. function_name , module. this . id )
9+
10+ var_policy_json = local. var_iam_policy_enabled ? [var . policy_json ] : []
11+
12+ lambda_files = fileset (" ${ path . module } /lambdas/${ var . zip . input_dir == null ? " " : var . zip . input_dir } " , " *" )
13+ file_content_map = var. zip . enabled ? [
14+ for f in local . lambda_files : filebase64sha256 (" ${ path . module } /lambdas/${ coalesce (var. zip . input_dir , var. name )} /${ f } " )
15+ ] : []
16+ output_zip_file = local. enabled && var. zip . enabled ? " ${ path . module } /lambdas/${ random_pet . zip_recreator [0 ]. id } .zip" : null
1117
18+ cicd_s3_key_format = var. cicd_s3_key_format != null ? var. cicd_s3_key_format : " stage/${ module . this . stage } /lambda/${ local . function_name } /%s"
19+ s3_key = var. s3_key != null ? var. s3_key : format (local. cicd_s3_key_format , coalesce (one (data. aws_ssm_parameter . cicd_ssm_param [* ]. value ), " example" ))
1220}
1321
1422data "aws_ssm_parameter" "cicd_ssm_param" {
@@ -17,25 +25,15 @@ data "aws_ssm_parameter" "cicd_ssm_param" {
1725 name = var. cicd_ssm_param_name
1826}
1927
20- module "label" {
21- source = " cloudposse/label/null"
22- version = " 0.25.0"
23-
24- attributes = [var . function_name ]
25-
26- context = module. this . context
27- }
28-
2928module "iam_policy" {
3029 count = local. iam_policy_enabled ? 1 : 0
3130 source = " cloudposse/iam-policy/aws"
3231 version = " 1.0.1"
3332
3433 iam_policy_enabled = true
3534 iam_policy = var. iam_policy
36- iam_source_policy_documents = var. policy_json != null ? [var . policy_json ] : []
37-
38- context = module. this . context
35+ iam_source_policy_documents = local. var_policy_json != null ? local. var_policy_json : []
36+ context = module. this . context
3937}
4038
4139resource "aws_iam_role_policy_attachment" "default" {
@@ -46,15 +44,27 @@ resource "aws_iam_role_policy_attachment" "default" {
4644}
4745
4846data "archive_file" "lambdazip" {
49- count = var. zip . enabled ? 1 : 0
50- type = " zip"
51- output_path = " ${ path . module } /lambdas/${ var . zip . output } "
47+ count = local. enabled && var. zip . enabled ? 1 : 0
48+ type = " zip"
49+
50+ output_path = local. output_zip_file
5251 source_dir = " ${ path . module } /lambdas/${ var . zip . input_dir } "
52+
53+ depends_on = [random_pet . zip_recreator ]
54+ }
55+
56+ resource "random_pet" "zip_recreator" {
57+ count = local. enabled && var. zip . enabled ? 1 : 0
58+
59+ prefix = coalesce (module. this . name , " lambda" )
60+ keepers = {
61+ file_content = join (" ," , local. file_content_map )
62+ }
5363}
5464
5565module "lambda" {
5666 source = " cloudposse/lambda-function/aws"
57- version = " 0.4 .1"
67+ version = " 0.6 .1"
5868
5969 function_name = local. function_name
6070 description = var. description
@@ -63,37 +73,47 @@ module "lambda" {
6373 image_uri = var. image_uri
6474 image_config = var. image_config
6575
66- filename = var. filename
67- s3_bucket = local. s3_full_bucket_name
76+ filename = var. zip . enabled ? coalesce (data . archive_file . lambdazip [ 0 ] . output_path , var . filename ) : var . filename
77+ s3_bucket = local. s3_bucket_name
6878 s3_key = local. s3_key
6979 s3_object_version = var. s3_object_version
7080
71- architectures = var. architectures
72- cloudwatch_event_rules = var. cloudwatch_event_rules
73- cloudwatch_lambda_insights_enabled = var. cloudwatch_lambda_insights_enabled
74- cloudwatch_logs_retention_in_days = var. cloudwatch_logs_retention_in_days
75- cloudwatch_logs_kms_key_arn = var. cloudwatch_logs_kms_key_arn
76- cloudwatch_log_subscription_filters = var. cloudwatch_log_subscription_filters
77- ignore_external_function_updates = var. ignore_external_function_updates
78- event_source_mappings = var. event_source_mappings
79- kms_key_arn = var. kms_key_arn
80- lambda_at_edge_enabled = var. lambda_at_edge_enabled
81- layers = var. layers
82- memory_size = var. memory_size
83- package_type = var. package_type
84- permissions_boundary = var. permissions_boundary
85- publish = var. publish
86- reserved_concurrent_executions = var. reserved_concurrent_executions
87- runtime = var. runtime
88- sns_subscriptions = var. sns_subscriptions
89- source_code_hash = var. source_code_hash
90- ssm_parameter_names = var. ssm_parameter_names
91- timeout = var. timeout
92- tracing_config_mode = var. tracing_config_mode
93- vpc_config = var. vpc_config
94- custom_iam_policy_arns = var. custom_iam_policy_arns
95- dead_letter_config_target_arn = var. dead_letter_config_target_arn
96- iam_policy_description = var. iam_policy_description
81+ architectures = var. architectures
82+ cloudwatch_lambda_insights_enabled = var. cloudwatch_lambda_insights_enabled
83+ cloudwatch_logs_retention_in_days = var. cloudwatch_logs_retention_in_days
84+ cloudwatch_logs_kms_key_arn = var. cloudwatch_logs_kms_key_arn
85+ kms_key_arn = var. kms_key_arn
86+ lambda_at_edge_enabled = var. lambda_at_edge_enabled
87+ layers = var. layers
88+ memory_size = var. memory_size
89+ package_type = var. package_type
90+ permissions_boundary = var. permissions_boundary
91+ publish = var. publish
92+ reserved_concurrent_executions = var. reserved_concurrent_executions
93+ runtime = var. runtime
94+ source_code_hash = var. source_code_hash
95+ ssm_parameter_names = var. ssm_parameter_names
96+ timeout = var. timeout
97+ tracing_config_mode = var. tracing_config_mode
98+ vpc_config = var. vpc_config
99+ custom_iam_policy_arns = var. custom_iam_policy_arns
100+ dead_letter_config_target_arn = var. dead_letter_config_target_arn
101+ iam_policy_description = var. iam_policy_description
97102
98103 context = module. this . context
99104}
105+
106+ resource "aws_lambda_function_url" "lambda_url" {
107+ count = var. function_url_enabled ? 1 : 0
108+ function_name = module. lambda . function_name
109+ authorization_type = " AWS_IAM"
110+
111+ cors {
112+ allow_credentials = true
113+ allow_origins = [" *" ]
114+ allow_methods = [" *" ]
115+ allow_headers = [" date" , " keep-alive" ]
116+ expose_headers = [" keep-alive" , " date" ]
117+ max_age = 86400
118+ }
119+ }
0 commit comments