From 9a914a6e978cd2e2a5c9af5c88157afd87844e01 Mon Sep 17 00:00:00 2001 From: Jun-te Kim Date: Fri, 18 Jul 2025 10:10:16 +0000 Subject: [PATCH] added extractor and loader --- .../lambda/extractor_and_loader/docker/ecr.tf | 26 +++++++++++++++++++ .../extractor_and_loader/docker/provider.tf | 16 ++++++++++++ .../extractor_and_loader_lambda.tf | 6 ++--- .../lambda/extractor_and_loader/provider.tf | 2 +- .../lambda/lambda_example/docker/app.py | 8 +----- 5 files changed, 47 insertions(+), 11 deletions(-) create mode 100644 deployment/lambda/extractor_and_loader/docker/ecr.tf create mode 100644 deployment/lambda/extractor_and_loader/docker/provider.tf diff --git a/deployment/lambda/extractor_and_loader/docker/ecr.tf b/deployment/lambda/extractor_and_loader/docker/ecr.tf new file mode 100644 index 0000000..6b2f56a --- /dev/null +++ b/deployment/lambda/extractor_and_loader/docker/ecr.tf @@ -0,0 +1,26 @@ +# ECR repo +resource "aws_ecr_repository" "extractor_and_loader" { + name = "extractor_and_loader" +} + +# ECR policy to allow Lambda access +resource "aws_ecr_repository_policy" "extractor_loader_ecr_access" { + repository = aws_ecr_repository.extractor_and_loader.name + + policy = jsonencode({ + Version = "2008-10-17", + Statement = [{ + Sid = "AllowLambdaPull", + Effect = "Allow", + Principal = { + Service = "lambda.amazonaws.com" + }, + Action = [ + "ecr:GetDownloadUrlForLayer", + "ecr:BatchGetImage", + "ecr:BatchCheckLayerAvailability" + ] + }] + }) +} + diff --git a/deployment/lambda/extractor_and_loader/docker/provider.tf b/deployment/lambda/extractor_and_loader/docker/provider.tf new file mode 100644 index 0000000..d8a8f1f --- /dev/null +++ b/deployment/lambda/extractor_and_loader/docker/provider.tf @@ -0,0 +1,16 @@ +terraform { + required_providers { + aws = { + source = "hashicorp/aws" + version = "~> 6.3.0" + } + } + backend "s3" { + bucket = "survey-extractor-tf-state" + region = "eu-west-2" + profile = "domna.dev" # /home/vscode/aws/credentials + key = "env:/dev/lambda/ecr/extractor_and_loader.tfstate" + } + + required_version = ">= 1.2.0" +} diff --git a/deployment/lambda/extractor_and_loader/extractor_and_loader_lambda.tf b/deployment/lambda/extractor_and_loader/extractor_and_loader_lambda.tf index 71ff4d1..91b5755 100644 --- a/deployment/lambda/extractor_and_loader/extractor_and_loader_lambda.tf +++ b/deployment/lambda/extractor_and_loader/extractor_and_loader_lambda.tf @@ -37,7 +37,7 @@ resource "aws_iam_policy" "extractor_loader_policy" { "ecr:BatchGetImage", "ecr:BatchCheckLayerAvailability" ], - Resource = data.aws_ecr_repository.lambda_example.arn + Resource = data.aws_ecr_repository.extractor_and_loader.arn }, { Effect = "Allow", @@ -56,9 +56,9 @@ resource "aws_iam_role_policy_attachment" "extractor_loader_policy_attach" { # Lambda function resource "aws_lambda_function" "extractor_and_loader" { function_name = "extractor-and-loader" - role = aws_iam_role.lambda_exec_role.arn + role = data.aws_iam_role.lambda_exec_role.arn package_type = "Image" - mage_uri = "${data.aws_ecr_repository.extractor_and_loader.repository_url}:latest" + image_uri = "${data.aws_ecr_repository.extractor_and_loader.repository_url}:latest" timeout = 30 } diff --git a/deployment/lambda/extractor_and_loader/provider.tf b/deployment/lambda/extractor_and_loader/provider.tf index 0997e35..c5008c4 100644 --- a/deployment/lambda/extractor_and_loader/provider.tf +++ b/deployment/lambda/extractor_and_loader/provider.tf @@ -9,7 +9,7 @@ terraform { bucket = "survey-extractor-tf-state" region = "eu-west-2" profile = "domna.dev" # /home/vscode/aws/credentials - key = "env:/dev/extractor_and_loader_lambda.tfstate" + key = "env:/dev/lambda/eachlambda/extractor_and_loader_lambda.tfstate" } required_version = ">= 1.2.0" diff --git a/deployment/lambda/lambda_example/docker/app.py b/deployment/lambda/lambda_example/docker/app.py index 390fa63..4bd6ec9 100644 --- a/deployment/lambda/lambda_example/docker/app.py +++ b/deployment/lambda/lambda_example/docker/app.py @@ -4,13 +4,7 @@ A quick example of lambda working a function in python def handler(event, context): try: - s3_uri = event.get("file_location") - if not s3_uri: - return { - "statusCode": 400, - "body": "Missing 'file_location' in event" - } - print(f"s3 uri is {s3_uri}") + print("Printing from lambda example") return { "statusCode": 200,