blob: 986170fff1efa99d567c50c535e560aa08ea2301 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
|
# Extract Lambda Function
data "archive_file" "extract_lambda_zip" {
type = "zip"
source_file = "${path.module}/../src/extract_lambda.py"
output_path = "${path.module}/../extract_function.zip"
}
resource "aws_s3_object" "extract_lambda_code" {
bucket = aws_s3_bucket.lambda_code_bucket.bucket
key = "${var.extract_lambda_name}/extract_function.zip"
source = data.archive_file.extract_lambda_zip.output_path
etag = filemd5(data.archive_file.extract_lambda_zip.output_path)
}
resource "aws_lambda_function" "extract_lambda" {
function_name = var.extract_lambda_name
s3_bucket = aws_s3_bucket.lambda_code_bucket.bucket
s3_key = aws_s3_object.extract_lambda_code.key
layers = [aws_lambda_layer_version.lambda_layer.arn]
role = aws_iam_role.multi_service_role.arn
handler = "extract_lambda.lambda_handler"
runtime = "python3.11"
source_code_hash = data.archive_file.extract_lambda_zip.output_base64sha256
lifecycle {
create_before_destroy = true
}
depends_on = [aws_s3_object.extract_lambda_code]
}
# Transform Lambda Function
data "archive_file" "transform_lambda_zip" {
type = "zip"
source_file = "${path.module}/../src/transform_lambda.py"
output_path = "${path.module}/../transform_function.zip"
}
resource "aws_s3_object" "transform_lambda_code" {
bucket = aws_s3_bucket.lambda_code_bucket.bucket
key = "${var.transform_lambda_name}/transform_function.zip"
source = data.archive_file.transform_lambda_zip.output_path
etag = filemd5(data.archive_file.transform_lambda_zip.output_path)
}
resource "aws_lambda_function" "transform_lambda" {
function_name = var.transform_lambda_name
s3_bucket = aws_s3_bucket.lambda_code_bucket.bucket
s3_key = aws_s3_object.transform_lambda_code.key
layers = [aws_lambda_layer_version.lambda_layer.arn]
role = aws_iam_role.multi_service_role.arn
handler = "transform_lambda.lambda_handler"
runtime = "python3.11"
source_code_hash = data.archive_file.transform_lambda_zip.output_base64sha256
lifecycle {
create_before_destroy = true
}
depends_on = [aws_s3_object.transform_lambda_code]
}
# Load Lambda Function
data "archive_file" "load_lambda_zip" {
type = "zip"
source_file = "${path.module}/../src/load_lambda.py"
output_path = "${path.module}/../load_function.zip"
}
resource "aws_s3_object" "load_lambda_code" {
bucket = aws_s3_bucket.lambda_code_bucket.bucket
key = "${var.load_lambda_name}/load_function.zip"
source = data.archive_file.load_lambda_zip.output_path
etag = filemd5(data.archive_file.load_lambda_zip.output_path)
}
resource "aws_lambda_function" "load_lambda" {
function_name = var.load_lambda_name
s3_bucket = aws_s3_bucket.lambda_code_bucket.bucket
s3_key = aws_s3_object.load_lambda_code.key
layers = [aws_lambda_layer_version.lambda_layer.arn]
role = aws_iam_role.multi_service_role.arn
handler = "load_lambda.lambda_handler"
runtime = "python3.11"
source_code_hash = data.archive_file.load_lambda_zip.output_base64sha256
lifecycle {
create_before_destroy = true
}
depends_on = [aws_s3_object.load_lambda_code]
}
# Lambda Layer Specification
locals {
layer_dir = "../"
requirements = "requirements.txt"
layer_zip = "layer.zip"
layer_name = "lambda_layer_dev"
script_dir = "../scripts"
}
resource "null_resource" "prepare_layer" {
provisioner "local-exec" {
command = "bash ${local.script_dir}/make_layer_zip.sh"
}
}
resource "aws_s3_object" "lambda_layer_zip" {
bucket = aws_s3_bucket.lambda_code_bucket.id #bucket instead of id
key = "lambda_layer/${local.layer_name}/${local.layer_zip}"
source = "${local.layer_dir}/${local.layer_zip}"
depends_on = [null_resource.prepare_layer]
}
resource "aws_lambda_layer_version" "lambda_layer" {
layer_name = local.layer_name
compatible_runtimes = ["python3.11"]
s3_bucket = aws_s3_bucket.lambda_layer_bucket.id #bucket instead of id
s3_key = aws_s3_object.lambda_layer_zip.key
skip_destroy = true
depends_on = [aws_s3_object.lambda_layer_zip]
}
|