4
4
locals {
5
5
name = format (" %s-%s-%s" , var. prefix , var. environment , var. name )
6
6
7
- lambda_role_arn = var. is_create_lambda_role ? aws_iam_role. this [0 ]. arn : var. lambda_role_arn
8
-
9
- file_name = var. is_edge ? null : data. archive_file . this . output_path
10
- bucket_name = var. is_edge ? var. is_create_lambda_bucket ? module. s3 [0 ]. bucket_name : var. bucket_name : null
11
- object_key = var. is_edge ? aws_s3_object. this [0 ]. id : null
12
- object_version_id = var. is_edge ? aws_s3_object. this [0 ]. version_id : null
7
+ lambda_role_arn = var. is_create_lambda_role ? aws_iam_role. this [0 ]. arn : var. lambda_role_arn
8
+ bucket_name = var. is_upload_form_s3 ? var. bucket_name : var. is_create_lambda_bucket ? element (module. s3 [* ]. bucket_name , 0 ) : var. bucket_name
9
+ object_key = var. is_upload_form_s3 ? data. aws_s3_object . this [0 ]. key : aws_s3_object. this [0 ]. id
10
+ object_version_id = var. is_upload_form_s3 ? data. aws_s3_object . this [0 ]. version_id : aws_s3_object. this [0 ]. version_id
13
11
14
12
tags = merge (
15
13
{
@@ -23,15 +21,20 @@ locals {
23
21
locals {
24
22
raise_is_lambda_role_arn_empty = var. is_create_lambda_role == false && var. lambda_role_arn == " " ? file (" Variable `lambda_role_arn` is required when `is_create_lambda_role` is false" ) : " pass"
25
23
26
- raise_bucket_name_empty = var. is_edge && var. is_create_lambda_bucket == false && length (var. bucket_name ) == 0 ? file (" Variable `bucket_name` is required when `is_create_lambda_bucket` is false" ) : " pass"
27
- raise_local_file_dir_empty = length (var. compressed_local_file_dir ) == 0 ? file (" Variable `compressed_local_file_dir` is required" ) : " pass"
28
- raise_file_globs_empty = length (var. file_globs ) == 0 ? file (" Variable `file_globs` is required" ) : " pass"
24
+ raise_bucket_name_empty = var. is_upload_form_s3 && length (var. bucket_name ) == 0 ? file (" Variable `bucket_name` is required when `is_upload_form_s3` is true" ) : " pass"
25
+ raise_file_name_empty = var. is_upload_form_s3 && length (var. file_name ) == 0 ? file (" Variable `file_name` is required when `is_upload_form_s3` is true" ) : " pass"
26
+
27
+ raise_compressed_local_file_dir_empty = var. is_upload_form_s3 == false && length (var. compressed_local_file_dir ) == 0 ? file (" Variable `compressed_local_file_dir` is required when `is_upload_form_s3` is false" ) : " pass"
28
+ raise_file_globs_empty = var. is_upload_form_s3 == false && length (var. file_globs ) == 0 ? file (" Variable `file_globs` is required when `is_upload_form_s3` is false" ) : " pass"
29
29
}
30
30
31
31
/* -------------------------------------------------------------------------- */
32
- /* Zip File */
32
+ /* S3 */
33
33
/* -------------------------------------------------------------------------- */
34
- data "archive_file" "this" {
34
+ /* -------------------------------- ZIP File -------------------------------- */
35
+ data "archive_file" "zip_file" {
36
+ count = var. is_upload_form_s3 == false ? 1 : 0
37
+
35
38
type = " zip"
36
39
output_path = format (" %s/%s.zip" , var. compressed_local_file_dir , local. name )
37
40
@@ -60,13 +63,10 @@ data "archive_file" "this" {
60
63
}
61
64
}
62
65
63
- /* -------------------------------------------------------------------------- */
64
- /* S3 */
65
- /* -------------------------------------------------------------------------- */
66
66
module "s3" {
67
- count = var. is_edge && var. is_create_lambda_bucket ? 1 : 0
67
+ count = var. is_create_lambda_bucket && var. is_upload_form_s3 == false ? 1 : 0
68
68
69
- source = " git@github.com:oozou/terraform-aws-s3.git?ref=v1.0.4 "
69
+ source = " git@github.com:oozou/terraform-aws-s3.git?ref=v1.0.2 "
70
70
71
71
prefix = var. prefix
72
72
environment = var. environment
@@ -80,13 +80,20 @@ module "s3" {
80
80
tags = var. tags
81
81
}
82
82
83
+ data "aws_s3_object" "this" {
84
+ count = var. is_upload_form_s3 ? 1 : 0
85
+
86
+ bucket = local. bucket_name
87
+ key = var. file_name
88
+ }
89
+
83
90
resource "aws_s3_object" "this" {
84
- count = var. is_edge && var . is_create_lambda_bucket ? 1 : 0
91
+ count = var. is_upload_form_s3 == false ? 1 : 0
85
92
86
- bucket = element (module. s3 [* ]. bucket_name , 0 )
93
+ bucket = var . is_create_lambda_bucket ? element (module. s3 [* ]. bucket_name , 0 ) : var . bucket_name
87
94
key = format (" %s.zip" , local. name )
88
- source = data. archive_file . this . output_path
89
- etag = data. archive_file . this . output_md5
95
+ source = data. archive_file . zip_file [ 0 ] . output_path
96
+ etag = data. archive_file . zip_file [ 0 ] . output_md5
90
97
91
98
tags = merge (local. tags , { " Name" = format (" %s.zip" , local. name ) })
92
99
}
@@ -95,7 +102,7 @@ resource "aws_s3_object" "this" {
95
102
/* Resource Based Policy */
96
103
/* -------------------------------------------------------------------------- */
97
104
resource "aws_lambda_permission" "allow_serivce" {
98
- for_each = var. lambda_permission_configurations
105
+ for_each = var. lambda_permission_configuration
99
106
100
107
statement_id = format (" AllowExecutionFrom-%s" , each. key )
101
108
action = " lambda:InvokeFunction"
@@ -192,7 +199,7 @@ resource "aws_iam_role_policy" "logs_role_policy" {
192
199
}
193
200
194
201
resource "aws_iam_role_policy_attachment" "this" {
195
- for_each = var. is_create_lambda_role ? var. additional_lambda_role_policy_arns : {}
202
+ for_each = var. is_create_lambda_role ? toset ( var. additional_lambda_role_policy_arns ) : toset ([])
196
203
197
204
role = aws_iam_role. this [0 ]. name
198
205
policy_arn = each. value
@@ -212,7 +219,7 @@ resource "aws_ssm_parameter" "params" {
212
219
type = " SecureString"
213
220
tier = length (each. value ) > 4096 ? " Advanced" : " Standard"
214
221
215
- tags = local . tags
222
+ tags = var . tags
216
223
}
217
224
218
225
data "aws_iam_policy_document" "secret_access_policy_doc" {
@@ -254,27 +261,16 @@ resource "aws_lambda_function" "this" {
254
261
function_name = format (" %s-function" , local. name )
255
262
description = format (" Lambda function: %s" , local. name )
256
263
257
- # Read source code from s3
264
+ # Read the file from s3
258
265
s3_bucket = local. bucket_name
259
266
s3_key = local. object_key
260
267
s3_object_version = local. object_version_id
261
268
262
- # Read source code from local
263
- filename = local. file_name
264
- source_code_hash = filebase64sha256 (data. archive_file . this . output_path )
265
-
266
269
# Specification
267
270
timeout = var. timeout
268
271
memory_size = var. memory_size
269
272
reserved_concurrent_executions = var. reserved_concurrent_executions
270
273
271
- # Code Env
272
- publish = true # Force public new version
273
- runtime = var. runtime
274
- handler = var. handler
275
-
276
- role = local. lambda_role_arn
277
-
278
274
vpc_config {
279
275
security_group_ids = var. vpc_config . security_group_ids
280
276
subnet_ids = var. vpc_config . subnet_ids_to_associate
@@ -288,11 +284,17 @@ resource "aws_lambda_function" "this" {
288
284
}
289
285
}
290
286
291
- dynamic "tracing_config" {
292
- for_each = var. tracing_mode == null ? [] : [true ]
293
- content {
294
- mode = var. tracing_mode
295
- }
287
+ # Code Env
288
+ publish = true # Force public new version
289
+ runtime = var. runtime
290
+ handler = var. handler
291
+
292
+ role = local. lambda_role_arn
293
+
294
+ lifecycle {
295
+ ignore_changes = [
296
+ last_modified ,
297
+ ]
296
298
}
297
299
298
300
tags = merge (local. tags , { " Name" = format (" %s-function" , local. name ) })
0 commit comments