Skip to content

Commit a172afa

Browse files
author
root
committed
Add lambda & dynamodb; tied up all this
1 parent d654d44 commit a172afa

10 files changed

+172
-5
lines changed

access_lambda_s3_dynamodb.tf

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
resource "aws_iam_role" "parser_lambda_role" {
2+
name = "parser_lambda_role"
3+
4+
assume_role_policy = jsonencode({
5+
Version = "2012-10-17"
6+
Statement = [
7+
{
8+
Sid = ""
9+
Effect = "Allow"
10+
Action = "sts:AssumeRole"
11+
Principal = {
12+
Service = "lambda.amazonaws.com"
13+
}
14+
}
15+
]
16+
})
17+
}
18+
19+
resource "aws_iam_policy" "parser_s3_dynamodb_policy" {
20+
name = "AccessParserGetS3PutDynamodb"
21+
description = "A policy to allow get from S3 and put in DynamoDB"
22+
23+
policy = jsonencode({
24+
Version = "2012-10-17"
25+
Statement = [
26+
{
27+
"Effect" : "Allow",
28+
"Action" : [
29+
"s3:GetObject"
30+
],
31+
"Resource" : "arn:aws:s3:::bucket-patients-result-docs-1/*"
32+
},
33+
{
34+
"Effect" : "Allow",
35+
"Action" : [
36+
"dynamodb:PutItem"
37+
],
38+
"Resource" : "arn:aws:dynamodb:us-east-1:867673051707:table/Prepared"
39+
}
40+
41+
]
42+
})
43+
}
44+
45+
resource "aws_iam_role_policy_attachment" "lambda_s3_dynamodb_attachment" {
46+
policy_arn = aws_iam_policy.parser_s3_dynamodb_policy.arn
47+
role = aws_iam_role.parser_lambda_role.name
48+
}
49+
50+
resource "aws_iam_policy_attachment" "lambda_logs_policy" {
51+
name = "lambda_logs_policy_attachment"
52+
roles = [aws_iam_role.parser_lambda_role.name]
53+
policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole"
54+
}
55+
56+
resource "aws_iam_instance_profile" "lambda_s3_dynamodb_instance_profile" {
57+
name = "lambda_s3_dynamodb_instance_profile"
58+
role = aws_iam_role.parser_lambda_role.name
59+
}
60+

access_s3_lambda.tf

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
resource "aws_lambda_permission" "allow_s3" {
2+
statement_id = "AllowS3Invoke"
3+
action = "lambda:InvokeFunction"
4+
function_name = aws_lambda_function.parser_lambda_function.function_name
5+
principal = "s3.amazonaws.com"
6+
source_arn = aws_s3_bucket.bucket_patient_result_docs.arn
7+
}
8+

access_web_s3.tf

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ resource "aws_iam_policy" "web_ag_s3_policy" {
3939
"s3:GetObject"
4040
#"s3:*"
4141
]
42-
Resource = "${aws_s3_bucket.res_bucket.arn}/*"
42+
Resource = "${aws_s3_bucket.bucket_patient_result_docs.arn}/*"
4343
}]
4444
})
4545
}

dynamodb.tf

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
resource "aws_dynamodb_table" "prepared-dynamodb" {
2+
name = "Prepared"
3+
billing_mode = "PROVISIONED"
4+
read_capacity = 20
5+
write_capacity = 20
6+
hash_key = "EMail"
7+
range_key = "PacientName"
8+
9+
attribute {
10+
name = "EMail"
11+
type = "S"
12+
}
13+
14+
attribute {
15+
name = "PacientName"
16+
type = "S"
17+
}
18+
19+
# attribute {
20+
# name = "INR"
21+
# type = "S"
22+
# }
23+
24+
25+
# global_secondary_index {
26+
# name = "PacientName-index"
27+
# hash_key = "PacientName"
28+
# write_capacity = 10
29+
# read_capacity = 10
30+
# projection_type = "KEYS_ONLY" # Corrected projection_type
31+
# non_key_attributes = []
32+
# }
33+
34+
35+
# global_secondary_index {
36+
# name = "INR-index"
37+
# hash_key = "INR"
38+
# write_capacity = 10
39+
# read_capacity = 10
40+
# projection_type = "ALL"
41+
# non_key_attributes = []
42+
# }
43+
44+
45+
tags = {
46+
Name = "pacients-db"
47+
Environment = "Dev"
48+
}
49+
}
50+

lambda.tf

+45
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#resource "aws_lambda_layer_version" "parser_lambda_layer" {
2+
# layer_name = "parser_lambda_layer"
3+
# description = "A layer for PDF processing with pdfplumber and cryptography"
4+
# compatible_runtimes = ["python3.12"]
5+
#
6+
# filename = "lambda_layer.zip"
7+
#
8+
# source_code_hash = filebase64sha256("lambda_layer.zip")
9+
#}
10+
11+
resource "aws_lambda_function" "parser_lambda_function" {
12+
function_name = "parser_lambda_function"
13+
handler = "lambda_function.lambda_handler"
14+
runtime = "python3.12"
15+
role = aws_iam_role.parser_lambda_role.arn
16+
17+
#layers = [aws_lambda_layer_version.parser_lambda_layer.arn]
18+
timeout = 30
19+
20+
filename = "lambda_parser.zip"
21+
}
22+
23+
resource "aws_cloudwatch_log_group" "lambda_log_group" {
24+
name = "/aws/lambda/${aws_lambda_function.parser_lambda_function.function_name}"
25+
retention_in_days = 1
26+
}
27+
28+
resource "aws_lambda_permission" "allow_cloudwatch" {
29+
statement_id = "AllowExecutionFromCloudWatch"
30+
action = "lambda:InvokeFunction"
31+
function_name = aws_lambda_function.parser_lambda_function.function_name
32+
principal = "logs.amazonaws.com"
33+
source_arn = "${aws_cloudwatch_log_group.lambda_log_group.arn}:*"
34+
}
35+
36+
37+
resource "aws_s3_bucket_notification" "s3_notification" {
38+
bucket = aws_s3_bucket.bucket_patient_result_docs.id
39+
40+
lambda_function {
41+
lambda_function_arn = aws_lambda_function.parser_lambda_function.arn
42+
events = ["s3:ObjectCreated:*"]
43+
}
44+
depends_on = [aws_lambda_permission.allow_s3]
45+
}

lambda_parser.zip

706 KB
Binary file not shown.

outputs.tf

+4
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,7 @@ output "web_alb" {
1313
description = "Web Application Load Balancer URL"
1414

1515
}
16+
17+
#output "layer_arn" {
18+
# value = aws_lambda_layer_version.parser_lambda_layer.arn
19+
#}

s3.tf

+2-2
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
resource "aws_s3_bucket" "res_bucket" {
1+
resource "aws_s3_bucket" "bucket_patient_result_docs" {
22
bucket = var.bucket_name
33

44
tags = {
5-
Name = "My bucket"
5+
Name = "Patients Result Docs Bucket"
66
Environment = "Dev"
77
}
88
}

variables.tf

+1-1
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ variable "azs" {
3939
variable "bucket_name" {
4040
description = "Bucket to store patients results"
4141
type = string
42-
default = "bucket-results-doc-1"
42+
default = "bucket-patients-result-docs-1"
4343
}
4444

4545

web_script.sh

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ from flask import *
1919
import boto3
2020
from botocore.exceptions import NoCredentialsError
2121
22-
bucket_name = 'bucket-results-doc-1'
22+
bucket_name = 'bucket-patients-result-docs-1'
2323
path_to_htmls = '/var/www/web/templates'
2424
2525
def upload_to_s3(file_name, bucket, object_name=None):

0 commit comments

Comments
 (0)