From e6399c8d3038142d549157b18f44eceaeec7551f Mon Sep 17 00:00:00 2001
From: Santiago Lo Coco <slococo@itba.edu.ar>
Date: Sat, 29 Oct 2022 09:17:44 -0300
Subject: [PATCH] Add apigw method and update frontend

---
 terraform/modules/apigw/main.tf               |  75 +++++-
 terraform/modules/apigw/variables.tf          |  14 +-
 terraform/organization/apigw.tf               |  17 +-
 terraform/organization/datasources.tf         |   9 +-
 terraform/organization/html/index.html        | 241 +++++++++++++-----
 terraform/organization/lambda.tf              |   4 +-
 terraform/organization/locals.tf              |  15 +-
 terraform/organization/sqs.tf                 |   2 +-
 terraform/organization/vpc.tf                 |  57 +----
 terraform/resources/html/index.html           |  47 ----
 terraform/resources/lambda/lambdaDB.zip       | Bin 0 -> 481 bytes
 .../lambda/lambdaDB/lambda_handler.py         |  26 ++
 .../lambda/{lambda.zip => lambdaSQS.zip}      | Bin
 .../lambda/{ => lambdaSQS}/lambda_handler.py  |   0
 14 files changed, 312 insertions(+), 195 deletions(-)
 delete mode 100644 terraform/resources/html/index.html
 create mode 100644 terraform/resources/lambda/lambdaDB.zip
 create mode 100644 terraform/resources/lambda/lambdaDB/lambda_handler.py
 rename terraform/resources/lambda/{lambda.zip => lambdaSQS.zip} (100%)
 rename terraform/resources/lambda/{ => lambdaSQS}/lambda_handler.py (100%)

diff --git a/terraform/modules/apigw/main.tf b/terraform/modules/apigw/main.tf
index 3a6bc13..ed2906a 100644
--- a/terraform/modules/apigw/main.tf
+++ b/terraform/modules/apigw/main.tf
@@ -9,11 +9,18 @@ resource "aws_api_gateway_rest_api" "this" {
 }
 
 resource "aws_api_gateway_resource" "this" {
-  path_part   = "resource"
+  path_part   = "products"
   parent_id   = aws_api_gateway_rest_api.this.root_resource_id
   rest_api_id = aws_api_gateway_rest_api.this.id
 }
 
+resource "aws_api_gateway_method" "stock_get" {
+  rest_api_id   = aws_api_gateway_rest_api.this.id
+  resource_id   = aws_api_gateway_resource.this.id
+  http_method   = "GET"
+  authorization = "NONE"
+}
+
 resource "aws_api_gateway_method" "this" {
   rest_api_id   = aws_api_gateway_rest_api.this.id
   resource_id   = aws_api_gateway_resource.this.id
@@ -28,6 +35,15 @@ resource "aws_api_gateway_method" "options" {
   authorization = "NONE"
 }
 
+resource "aws_api_gateway_integration" "stock_get" {
+  rest_api_id             = aws_api_gateway_rest_api.this.id
+  resource_id             = aws_api_gateway_resource.this.id
+  http_method             = aws_api_gateway_method.stock_get.http_method
+  integration_http_method = "POST"
+  type                    = "AWS_PROXY"
+  uri                     = var.lambda[1].lambda_function_arn
+}
+
 resource "aws_api_gateway_integration" "this" {
   rest_api_id             = aws_api_gateway_rest_api.this.id
   resource_id             = aws_api_gateway_resource.this.id
@@ -67,7 +83,6 @@ resource "aws_api_gateway_integration" "options" {
   rest_api_id             = aws_api_gateway_rest_api.this.id
   resource_id             = aws_api_gateway_resource.this.id
   http_method             = aws_api_gateway_method.options.http_method
-  # integration_http_method = "OPTIONS"
   type                    = "MOCK"
 
   request_parameters = {}
@@ -90,8 +105,10 @@ resource "aws_api_gateway_deployment" "this" {
       aws_api_gateway_resource.this.id,
       aws_api_gateway_method.this.id,
       aws_api_gateway_method.options.id,
+      aws_api_gateway_method.stock_get.id,
       aws_api_gateway_integration.this.id,
       aws_api_gateway_integration.options.id,
+      aws_api_gateway_integration.stock_get.id,
     ]))
   }
 
@@ -102,8 +119,16 @@ resource "aws_api_gateway_deployment" "this" {
   depends_on = [
     aws_api_gateway_integration.options,
     aws_api_gateway_integration.this,
+    aws_api_gateway_integration.stock_get,
     aws_api_gateway_method.options,
-    aws_api_gateway_method.this
+    aws_api_gateway_method.this,
+    aws_api_gateway_method.stock_get,
+    aws_api_gateway_method_response.options200,
+    aws_api_gateway_method_response.http200,
+    aws_api_gateway_method_response.stock200,
+    aws_api_gateway_integration_response.options200,
+    aws_api_gateway_integration_response.http200,
+    aws_api_gateway_integration_response.stock200,
   ]
 }
 
@@ -120,12 +145,25 @@ resource "aws_api_gateway_method_response" "http200" {
   status_code = 200
 
   response_parameters = {
-    "method.response.header.Access-Control-Allow-Origin" = "false"
+    "method.response.header.Access-Control-Allow-Origin" = "true"
   }
 
   depends_on = [aws_api_gateway_method.this]
 }
 
+resource "aws_api_gateway_method_response" "stock200" {
+  rest_api_id = aws_api_gateway_rest_api.this.id
+  resource_id = aws_api_gateway_resource.this.id
+  http_method = aws_api_gateway_method.stock_get.http_method
+  status_code = 200
+
+  response_parameters = {
+    "method.response.header.Access-Control-Allow-Origin" = "true"
+  }
+
+  depends_on = [aws_api_gateway_method.stock_get]
+}
+
 resource "aws_api_gateway_method_response" "options200" {
   rest_api_id = aws_api_gateway_rest_api.this.id
   resource_id = aws_api_gateway_resource.this.id
@@ -136,9 +174,9 @@ resource "aws_api_gateway_method_response" "options200" {
   }
 
   response_parameters = {
-    "method.response.header.Access-Control-Allow-Headers" = false,
-    "method.response.header.Access-Control-Allow-Methods" = false,
-    "method.response.header.Access-Control-Allow-Origin"  = false
+    "method.response.header.Access-Control-Allow-Headers" = true,
+    "method.response.header.Access-Control-Allow-Methods" = true,
+    "method.response.header.Access-Control-Allow-Origin"  = true
   }
 
   depends_on = [aws_api_gateway_method.options]
@@ -157,6 +195,19 @@ resource "aws_api_gateway_integration_response" "http200" {
   depends_on = [aws_api_gateway_method_response.http200]
 }
 
+resource "aws_api_gateway_integration_response" "stock200" {
+  rest_api_id       = aws_api_gateway_rest_api.this.id
+  resource_id       = aws_api_gateway_resource.this.id
+  http_method       = aws_api_gateway_method.stock_get.http_method
+  status_code       = aws_api_gateway_method_response.stock200.status_code
+  selection_pattern = "^2[0-9][0-9]"
+  response_parameters = {
+    "method.response.header.Access-Control-Allow-Origin" = "'*'"
+  }
+
+  depends_on = [aws_api_gateway_method_response.stock200]
+}
+
 resource "aws_api_gateway_integration_response" "options200" {
   rest_api_id = aws_api_gateway_rest_api.this.id
   resource_id = aws_api_gateway_resource.this.id
@@ -164,9 +215,17 @@ resource "aws_api_gateway_integration_response" "options200" {
   status_code = aws_api_gateway_method_response.http200.status_code
   response_parameters = {
     "method.response.header.Access-Control-Allow-Headers" = "'Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token'",
-    "method.response.header.Access-Control-Allow-Methods" = "'OPTIONS,POST'",
+    "method.response.header.Access-Control-Allow-Methods" = "'GET,OPTIONS,POST'",
     "method.response.header.Access-Control-Allow-Origin"  = "'*'"
   }
 
   depends_on = [aws_api_gateway_method_response.options200]
 }
+
+resource "aws_lambda_permission" "this" {
+  statement_id  = "AllowExecutionFromAPIGateway"
+  action        = "lambda:InvokeFunction"
+  function_name = var.lambda[1].lambda_function_name
+  principal     = "apigateway.amazonaws.com"
+  source_arn    = "${var.lambda[1].lambda_source_arn}:${aws_api_gateway_rest_api.this.id}/*/${aws_api_gateway_method.stock_get.http_method}${aws_api_gateway_resource.this.path}"
+}
diff --git a/terraform/modules/apigw/variables.tf b/terraform/modules/apigw/variables.tf
index 300157c..b4b9cc0 100644
--- a/terraform/modules/apigw/variables.tf
+++ b/terraform/modules/apigw/variables.tf
@@ -28,16 +28,6 @@ variable "role_arn" {
   type = string
 }
 
-variable "lambda_function_arn" {
-  description = "The ARN of the Lambda function."
-  type        = string
-}
-
-variable "lambda_source_arn" {
-  type = string
-}
-
-variable "lambda_function_name" {
-  description = "Name of the lambda function"
-  type        = string
+variable "lambda" {
+  type = list(any)
 }
diff --git a/terraform/organization/apigw.tf b/terraform/organization/apigw.tf
index 49204f1..f51485f 100644
--- a/terraform/organization/apigw.tf
+++ b/terraform/organization/apigw.tf
@@ -11,11 +11,20 @@ module "apigw" {
 
   name                 = "AWSAPIGateway-g3"
   description          = "..."
-  lambda_function_arn  = module.lambda["lambda"].lambda_function_arn
-  lambda_function_name = module.lambda["lambda"].lambda_function_name
-  lambda_source_arn    = "arn:aws:execute-api:${data.aws_region.current.name}:${data.aws_caller_identity.current.account_id}"
+  lambda = [
+    {
+      lambda_function_arn  = module.lambda["lambdaSQS"].lambda_function_arn
+      lambda_function_name = module.lambda["lambdaSQS"].lambda_function_name
+      lambda_source_arn    = "arn:aws:execute-api:${data.aws_region.current.name}:${data.aws_caller_identity.current.account_id}"
+    },
+    {
+      lambda_function_arn  = module.lambda["lambdaDB"].lambda_function_arn
+      lambda_function_name = module.lambda["lambdaDB"].lambda_function_name
+      lambda_source_arn    = "arn:aws:execute-api:${data.aws_region.current.name}:${data.aws_caller_identity.current.account_id}"
+    }
+  ]
+  
   role_arn             = "arn:aws:iam::${data.aws_caller_identity.current.account_id}:role/LabRole"
-  # sqs_arn              = "arn:aws:sqs:${data.aws_region.current.name}:${data.aws_caller_identity.current.account_id}:AWS-SQS-g3"
   sqs_arn                = "arn:aws:apigateway:${data.aws_region.current.name}:sqs:path/AWS-SQS-g3"
 
   tags = {
diff --git a/terraform/organization/datasources.tf b/terraform/organization/datasources.tf
index ead099e..60cfc70 100644
--- a/terraform/organization/datasources.tf
+++ b/terraform/organization/datasources.tf
@@ -20,11 +20,16 @@ data "template_file" "userdata" {
 data "aws_iam_policy_document" "this" {
   statement {
     effect  = "Allow"
-    actions = ["dynamodb:PutItem"]
+    actions = [
+      "dynamodb:PutItem",
+      "dynamodb:Scan",
+      "dynamodb:GetItem",
+      "dynamodb:UpdateItem"
+    ]
     principals {
       type        = "AWS"
       identifiers = ["*"]
     }
-    resources = ["arn:aws:dynamodb:us-east-1:478157316333:table/AWSDynamoDB-g3"]
+    resources = ["arn:aws:dynamodb:${data.aws_region.current.name}:${data.aws_caller_identity.current.account_id}:table/AWSDynamoDB-g3"]
   }
 }
diff --git a/terraform/organization/html/index.html b/terraform/organization/html/index.html
index d64fc05..6eed00e 100644
--- a/terraform/organization/html/index.html
+++ b/terraform/organization/html/index.html
@@ -1,35 +1,39 @@
 <!DOCTYPE html>
 <meta charset="UTF-8">
 <html>
-    <head>
-        <title>BSMSapp</title>
-        <div align="center">
-    </head>
-    <div class="d-flex flex-column justify-content-center w-100 h-100">
+
+<head>
+    <title>BSMSapp</title>
+    <div align="center">
+</head>
+<div class="d-flex flex-column justify-content-center w-100 h-100">
+    <br><br>
+    <body bgcolor="#FFFFFF" text="Black">
+        <header>
+            <h1><span id="replace">BSMSapp</span></h1>
+        </header>
+
+        <form id="myForm" class="form-style">
+            <ul>
+                <li>
+                    <input value="0" name="id" type="number" />
+                    <span>Enter the product identifier.</span>
+                </li>
+                <li>
+                    <input value="0" name="stock" type="number" />
+                    <span>Enter the new stock number.</span>
+                </li>
+                <li>
+                    <input type="submit" value="Upload" />
+                </li>
+            </ul>
+        </form>
+
+        <button class="style" onclick="get_table()">Get table</button>
         <br><br>
-        <body bgcolor="#FFFFFF" text="Black">
-            <header>
-                <h1><span id="replace">BSMSapp</span></h1>
-            </header>
-
-
-            <form id="myForm" class="form-style">
-                <ul>
-                    <li>
-                        <input value="0" name="id" type="number"/>
-                        <span>Enter the product identifier.</span>
-                    </li>
-                    <li>
-                        <input value="0" name="stock" type="number"/>
-                        <span>Enter the new stock number.</span>
-                    </li>
-                    <li>
-                        <input type="submit" value="Upload"/>
-                    </li>
-                </ul>
-            </form>
-        </body>
-    </div>
+        <table id="table" align="center" border="1px"></table>
+    </body>
+</div>
 
 </html>
 
@@ -39,46 +43,86 @@
         e.preventDefault();
         const formData = new FormData(thisForm).entries()
         const str = JSON.stringify(Object.fromEntries(formData))
-        console.log(str.replace(/\"/g, ''))
-        const response = await fetch("${ENDPOINT}/resource", {
+        const response = await fetch("${ENDPOINT}/products", {
             method: 'POST',
-            headers: { 
+            headers: {
                 'Content-Type': 'application/json'
             },
             body: str.replace(/\"/g, '')
         });
 
         const result = await response.json();
-        console.log(result)
     });
 
     function adjust_textarea(h) {
         h.style.height = "20px";
-        h.style.height = (h.scrollHeight)+"px";
+        h.style.height = (h.scrollHeight) + "px";
     }
+
+    async function get_table() {
+        const request = await fetch("${ENDPOINT}/products", {
+            method: 'GET',
+            headers: {
+                'Content-Type': 'application/json'
+            }
+        });
+
+        const list = await request.json();
+
+        var cols = [];
+        for (var i = 0; i < list.length; i++) {
+            for (var k in list[i]) {
+                if (cols.indexOf(k) === -1) {
+                    cols.push(k);
+                }
+            }
+        }
+
+        var table = document.createElement("table");
+        var tr = table.insertRow(-1);
+        for (var i = 0; i < cols.length; i++) {
+            var theader = document.createElement("th");
+            theader.innerHTML = cols[i];
+            tr.appendChild(theader);
+        }
+
+        for (var i = 0; i < list.length; i++) {
+            trow = table.insertRow(-1);
+            for (var j = 0; j < cols.length; j++) {
+                var cell = trow.insertCell(-1);
+                cell.innerHTML = list[i][cols[j]];
+            }
+        }
+
+        var el = document.getElementById("table");
+        el.innerHTML = "";
+        el.appendChild(table);
+    }
+
 </script>
 
 <style type="text/css">
     body {
         background: linear-gradient(-45deg, #ee7752, #df6493, #23a6d5, #23d5ab);
-        /* background-color: rgba(0, 0, 0, 0.1); */
         background-size: 400% 400%;
         animation: gradient 15s ease infinite;
         height: 100vh;
     }
+
     @keyframes gradient {
         0% {
             background-position: 0% 50%;
         }
-    
+
         50% {
             background-position: 100% 50%;
         }
-    
+
         100% {
             background-position: 0% 50%;
         }
     }
+
     header h1 {
         font-size: 70px;
         font-weight: 600;
@@ -87,40 +131,46 @@
         background-clip: text;
         -webkit-background-clip: text;
     }
-    .form-style{
-        max-width:400px;
-        margin:50px auto;
-        background:#fff;
-        border-radius:2px;
-        padding:20px;
+
+    .form-style {
+        max-width: 400px;
+        margin: 50px auto;
+        background: #fff;
+        border-radius: 2px;
+        padding: 20px;
         font-family: Georgia, "Times New Roman", Times, serif;
     }
-    .form-style h1{
+
+    .form-style h1 {
         display: block;
         text-align: center;
         padding: 0;
         margin: 0px 0px 20px 0px;
         color: #5C5C5C;
-        font-size:x-large;
+        font-size: x-large;
     }
-    .form-style ul{
-        list-style:none;
-        padding:0;
-        margin:0;	
+
+    .form-style ul {
+        list-style: none;
+        padding: 0;
+        margin: 0;
     }
-    .form-style li{
+
+    .form-style li {
         display: block;
         padding: 9px;
-        border:1px solid #DDDDDD;
+        border: 1px solid #DDDDDD;
         margin-bottom: 30px;
         border-radius: 3px;
     }
-    .form-style li:last-child{
-        border:none;
+
+    .form-style li:last-child {
+        border: none;
         margin-bottom: 0px;
         text-align: center;
     }
-    .form-style li > label{
+
+    .form-style li>label {
         display: block;
         float: left;
         margin-top: -19px;
@@ -132,6 +182,7 @@
         overflow: hidden;
         font-family: Arial, Helvetica, sans-serif;
     }
+
     .form-style input[type="text"],
     .form-style input[type="date"],
     .form-style input[type="datetime"],
@@ -142,8 +193,7 @@
     .form-style input[type="url"],
     .form-style input[type="password"],
     .form-style textarea,
-    .form-style select 
-    {
+    .form-style select {
         box-sizing: border-box;
         -webkit-box-sizing: border-box;
         -moz-box-sizing: border-box;
@@ -157,6 +207,7 @@
         padding: 0;
         font-family: Georgia, "Times New Roman", Times, serif;
     }
+
     .form-style input[type="text"]:focus,
     .form-style input[type="date"]:focus,
     .form-style input[type="datetime"]:focus,
@@ -167,24 +218,25 @@
     .form-style input[type="url"]:focus,
     .form-style input[type="password"]:focus,
     .form-style textarea:focus,
-    .form-style select:focus 
-    {
-    }
-    .form-style li > span{
+    .form-style select:focus {}
+
+    .form-style li>span {
         background: #F3F3F3;
         display: block;
         padding: 3px;
         margin: 0 -9px -9px -9px;
         text-align: center;
-        color: #C0C0C0;
+        color: #838383;
         font-family: Arial, Helvetica, sans-serif;
         font-size: 11px;
     }
-    .form-style textarea{
-        resize:none;
+
+    .form-style textarea {
+        resize: none;
     }
+
     .form-style input[type="submit"],
-    .form-style input[type="button"]{
+    .form-style input[type="button"] {
         background: #2471FF;
         border: none;
         padding: 10px 20px 10px 20px;
@@ -192,11 +244,36 @@
         border-radius: 3px;
         color: #D2E2FF;
     }
-    .form-style input[type="submit"]:hover,
-    .form-style input[type="button"]:hover{
-        background: #6B9FFF;
-        color:#fff;
+
+    /* .style {
+        max-width: 400px;
+        margin: 50px auto;
+        background: #fff;
+        border-radius: 2px;
+        padding: 20px;
+        font-family: Georgia, "Times New Roman", Times, serif;
+    } */
+
+    .style {
+        background: #2471FF;
+        border: none;
+        padding: 10px 20px 10px 20px;
+        border-bottom: 3px solid #5994FF;
+        border-radius: 3px;
+        color: #D2E2FF;
     }
+
+    .style:hover {
+        background: #6B9FFF;
+        color: #fff;
+    }
+
+    .form-style input[type="submit"]:hover,
+    .form-style input[type="button"]:hover {
+        background: #6B9FFF;
+        color: #fff;
+    }
+
     input::-webkit-outer-spin-button,
     input::-webkit-inner-spin-button {
         -webkit-appearance: none;
@@ -206,4 +283,34 @@
     input[type=number] {
         -moz-appearance: textfield;
     }
+
+    table {
+        border-collapse: collapse;
+        font-family: Georgia, "Times New Roman", Times, serif;
+    }
+
+    table td {
+        padding: 15px;
+    }
+
+    table thead td {
+        background-color: #54585d;
+        color: #ffffff;
+        font-weight: bold;
+        font-size: 13px;
+        border: 1px solid #54585d;
+    }
+
+    table tbody td {
+        color: #636363;
+        border: 1px solid #dddfe1;
+    }
+
+    table tbody tr {
+        background-color: #f9fafb;
+    }
+
+    table tbody tr:nth-child(odd) {
+        background-color: #ffffff;
+    }
 </style>
\ No newline at end of file
diff --git a/terraform/organization/lambda.tf b/terraform/organization/lambda.tf
index 5ce1bc9..4f2ddf2 100644
--- a/terraform/organization/lambda.tf
+++ b/terraform/organization/lambda.tf
@@ -16,6 +16,6 @@ module "lambda" {
   package       = each.value.package
   iam_role      = each.value.role
 
-  vpc_subnet_ids         = module.vpc.public_subnets
-  vpc_security_group_ids = [module.vpc.default_security_group_id]
+  vpc_subnet_ids         = module.vpc.private_subnets
+  vpc_security_group_ids = [aws_security_group.dynamodb_sg.id]
 }
diff --git a/terraform/organization/locals.tf b/terraform/organization/locals.tf
index 976b902..6563032 100644
--- a/terraform/organization/locals.tf
+++ b/terraform/organization/locals.tf
@@ -1,5 +1,5 @@
 locals {
-  bucket_name = "b123123123123-itba-cloud-computing-g3-test"
+  bucket_name = "bsmsapp-itba-cloud-computing-g3-test"
   path        = "../resources"
 
   s3 = {
@@ -33,9 +33,16 @@ locals {
   }
 
   lambdas = {
-    lambda = {
-      package       = "${local.path}/lambda/lambda.zip"
-      function_name = "AWSLambdaHandler-${replace(local.bucket_name, "-", "")}"
+    lambdaSQS = {
+      package       = "${local.path}/lambda/lambdaSQS.zip"
+      function_name = "AWSLambdaHandlerAPISQSDBg3test"
+      role          = "arn:aws:iam::${data.aws_caller_identity.current.account_id}:role/LabRole"
+      handler       = "lambda_handler.main"
+      runtime       = "python3.9"
+    },
+    lambdaDB = {
+      package       = "${local.path}/lambda/lambdaDB.zip"
+      function_name = "AWSLambdaHandlerAPIDBg3test"
       role          = "arn:aws:iam::${data.aws_caller_identity.current.account_id}:role/LabRole"
       handler       = "lambda_handler.main"
       runtime       = "python3.9"
diff --git a/terraform/organization/sqs.tf b/terraform/organization/sqs.tf
index fe7a009..52c705a 100644
--- a/terraform/organization/sqs.tf
+++ b/terraform/organization/sqs.tf
@@ -10,7 +10,7 @@ module "sqs" {
   ]
 
   name = "AWS-SQS-g3"
-  lambda_name = "AWSLambdaHandler-${replace(local.bucket_name, "-", "")}"
+  lambda_name = module.lambda["lambdaSQS"].lambda_function_name
 
   tags = {
     name = "SQS"
diff --git a/terraform/organization/vpc.tf b/terraform/organization/vpc.tf
index e21583d..ea71b4b 100644
--- a/terraform/organization/vpc.tf
+++ b/terraform/organization/vpc.tf
@@ -3,19 +3,11 @@ locals {
       {
         rule_number = 100
         rule_action = "allow"
-        from_port   = 80
-        to_port     = 80
+        from_port   = 1024
+        to_port     = 65535
         protocol    = "tcp"
-        cidr_block  = "10.0.1.0/24"
-      },
-      {
-        rule_number = 110
-        rule_action = "allow"
-        from_port   = 80
-        to_port     = 80
-        protocol    = "tcp"
-        cidr_block  = "10.0.2.0/24"
-      },
+        cidr_block  = "0.0.0.0/0"
+      }
   ]
   private_outbound = [
       {
@@ -24,16 +16,8 @@ locals {
         from_port   = 443
         to_port     = 443
         protocol    = "tcp"
-        cidr_block  = "10.0.1.0/24"
-      },
-      {
-        rule_number = 110
-        rule_action = "allow"
-        from_port   = 443
-        to_port     = 443
-        protocol    = "tcp"
-        cidr_block  = "10.0.2.0/24"
-      },
+        cidr_block  = "0.0.0.0/0"
+      }
   ]
 }
 
@@ -142,32 +126,6 @@ resource "aws_security_group" "dynamodb_sg" {
   }
 }
 
-# resource "aws_network_acl" "private_nacl" {
-#   vpc_id = module.vpc.vpc_id
-
-#   egress {
-#     protocol   = "tcp"
-#     rule_no    = 200
-#     action     = "allow"
-#     cidr_block = ["10.0.1.0/24", "10.0.2.0/24"]
-#     from_port  = 443
-#     to_port    = 443
-#   }
-
-#   ingress {
-#     protocol   = "tcp"
-#     rule_no    = 100
-#     action     = "allow"
-#     cidr_block = ["10.0.1.0/24", "10.0.2.0/24"]
-#     from_port  = 80
-#     to_port    = 80
-#   }
-
-#   tags = {
-#     Name = "vpc-g3-bsmsapp"
-#   }
-# }
-
 data "aws_iam_policy_document" "dynamodb_endpoint_policy" {
   statement {
     effect    = "Deny"
@@ -226,3 +184,6 @@ resource "aws_security_group" "vpc_tls" {
   }
 }
 
+# output "aws_security_group_dynamodb" {
+#   value       = aws_security_group.dynamodb_sg.id
+# }
diff --git a/terraform/resources/html/index.html b/terraform/resources/html/index.html
deleted file mode 100644
index 73eec9e..0000000
--- a/terraform/resources/html/index.html
+++ /dev/null
@@ -1,47 +0,0 @@
-<!DOCTYPE html>
-<meta charset="UTF-8">
-<html>
-    <head>
-        <title>BSMSapp</title>
-        <div align="center">
-    </head>
-        <br><br>
-        <body bgcolor="#FFFFFF" text="Black">
-            <h1><span id="replace">BSMSapp</span></h1>
-
-            <form id="myForm">
-                <input value="0" name="id"/>
-                <br>
-                <input value="0" name="stock"/>
-                <br><br>
-                <input type="submit" value="Upload"/>
-            </form>
-        </body>
-    </div>
-
-</html>
-
-<script>
-    const thisForm = document.getElementById('myForm');
-    thisForm.addEventListener('submit', async function (e) {
-        e.preventDefault();
-        const formData = new FormData(thisForm).entries()
-        const str = JSON.stringify(Object.fromEntries(formData))
-        console.log(str.replace(/\"/g, ''))
-        // let test = {
-        //     id: 212311111,
-        //     stock: 131211
-        // }
-        const response = await fetch("${ENDPOINT}/resource", {
-            method: 'POST',
-            headers: { 
-                'Content-Type': 'application/json'
-            },
-            body: str.replace(/\"/g, '')
-            // body: JSON.stringify(test)
-        });
-
-        const result = await response.json();
-        console.log(result)
-    });
-</script>
\ No newline at end of file
diff --git a/terraform/resources/lambda/lambdaDB.zip b/terraform/resources/lambda/lambdaDB.zip
new file mode 100644
index 0000000000000000000000000000000000000000..b897c88ad8e9c90f9abceb457a044c13ec76c27d
GIT binary patch
literal 481
zcmWIWW@Zs#U|`^2sGb-d8vDh&Rg;l{;W`itGRQFGB<3ciB*teX=B4DM7U>mKhK6u5
zFiU-jN(SN53T_5QmKV$n3}C`Hz}uf$QNZr-dWD#>>{H8bMNgKy_APIbnp{?LgoJim
zt7ybl!@uwO*7VPt@iWf2=Ow$mP<8LUK;x@({p&n6uYNdFl_|6Op=``7<EODr=S`vm
zjZQ578noF|`;O&@;I}_?HRMa4{Jxvy@A>@e$2n(h{~!N+nMGnvNI-c1x>=i7&H8(>
za=)5%@?1fcdu|;2k7@d*2)YF=T61tIS7-de8!wJeDE@l!<h|E?mziaH%KdK~p4A`N
z(Bm0X<m0z#bHg*ur902(p1s|^JGU@@{n5mkrBgCys&I8L?DX1I)poh?PQwdv)t2Kb
zmnF>OnBzCDKAJS|p!ftSCl{4$j{K=j5=Yt2OYad~yY-**9hPDPKGQ!<>DO0AoW2@%
z+49Q`{*C9X9~dn+vgkdy(dNH&fHxzP95b#^mjK2F0|PJu7?w1GSXknK6%q$%;UD15
R$_CQF2!!E4x&&kf0|56_ygmQ`

literal 0
HcmV?d00001

diff --git a/terraform/resources/lambda/lambdaDB/lambda_handler.py b/terraform/resources/lambda/lambdaDB/lambda_handler.py
new file mode 100644
index 0000000..5e83579
--- /dev/null
+++ b/terraform/resources/lambda/lambdaDB/lambda_handler.py
@@ -0,0 +1,26 @@
+import json
+import boto3
+from decimal import *
+
+class DecimalEncoder(json.JSONEncoder):
+	def default(self, obj):
+		if isinstance(obj, Decimal):
+			return str(obj)
+		return json.JSONEncoder.default(self, obj)
+
+
+def main (event, context):
+	client = boto3.resource('dynamodb', region_name="us-east-1")
+	table = client.Table("AWSDynamoDB-g3")
+	
+	data = table.scan()["Items"]
+
+	resp = {
+		"statusCode": 200,
+		"headers": {
+			"Access-Control-Allow-Origin": "*",
+		},
+		"body": json.dumps(data, cls=DecimalEncoder)
+	}
+
+	return resp
\ No newline at end of file
diff --git a/terraform/resources/lambda/lambda.zip b/terraform/resources/lambda/lambdaSQS.zip
similarity index 100%
rename from terraform/resources/lambda/lambda.zip
rename to terraform/resources/lambda/lambdaSQS.zip
diff --git a/terraform/resources/lambda/lambda_handler.py b/terraform/resources/lambda/lambdaSQS/lambda_handler.py
similarity index 100%
rename from terraform/resources/lambda/lambda_handler.py
rename to terraform/resources/lambda/lambdaSQS/lambda_handler.py