From 3d6fe9a02afa3a4c2e641117eccfde4c77106b2e Mon Sep 17 00:00:00 2001 From: TMajlu Date: Thu, 17 Oct 2024 10:45:51 +0200 Subject: [PATCH] Thomas Nielsen --- .gitignore | 1 + .idea/.gitignore | 3 + .idea/vcs.xml | 4 + Day 3.png | Bin 0 -> 53745 bytes Day 4.png | Bin 0 -> 105173 bytes todo-backend/.aws-sam/build.toml | 12 + todo-backend/.gitignore | 40 ++ todo-backend/.terraform.lock.hcl | 24 ++ todo-backend/build.gradle | 178 +++++++++ .../gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 43583 bytes .../gradle/wrapper/gradle-wrapper.properties | 7 + todo-backend/gradlew | 252 ++++++++++++ todo-backend/gradlew.bat | 94 +++++ todo-backend/main.tf | 134 +++++++ todo-backend/samconfig.toml | 10 + todo-backend/settings.gradle | 1 + .../src/main/java/com/booleanuk/Main.java | 16 + .../com/booleanuk/StreamLambdaHandler.java | 43 ++ .../TodoApp/controllers/TodoController.java | 64 +++ .../TodoApp/filter/CognitoIdentityFilter.java | 62 +++ .../com/booleanuk/TodoApp/models/Todo.java | 38 ++ .../TodoApp/repositories/TodoRepository.java | 7 + .../TodoApp/TodoAppApplicationTests.java | 13 + todo-backend/template.yml | 32 ++ todo-backend/terraform.tfstate | 368 ++++++++++++++++++ 25 files changed, 1403 insertions(+) create mode 100644 .idea/.gitignore create mode 100644 .idea/vcs.xml create mode 100644 Day 3.png create mode 100644 Day 4.png create mode 100644 todo-backend/.aws-sam/build.toml create mode 100644 todo-backend/.gitignore create mode 100644 todo-backend/.terraform.lock.hcl create mode 100644 todo-backend/build.gradle create mode 100644 todo-backend/gradle/wrapper/gradle-wrapper.jar create mode 100644 todo-backend/gradle/wrapper/gradle-wrapper.properties create mode 100644 todo-backend/gradlew create mode 100644 todo-backend/gradlew.bat create mode 100644 todo-backend/main.tf create mode 100644 todo-backend/samconfig.toml create mode 100644 todo-backend/settings.gradle create mode 100644 todo-backend/src/main/java/com/booleanuk/Main.java create mode 100644 todo-backend/src/main/java/com/booleanuk/StreamLambdaHandler.java create mode 100644 todo-backend/src/main/java/com/booleanuk/TodoApp/controllers/TodoController.java create mode 100644 todo-backend/src/main/java/com/booleanuk/TodoApp/filter/CognitoIdentityFilter.java create mode 100644 todo-backend/src/main/java/com/booleanuk/TodoApp/models/Todo.java create mode 100644 todo-backend/src/main/java/com/booleanuk/TodoApp/repositories/TodoRepository.java create mode 100644 todo-backend/src/test/java/com/booleanuk/TodoApp/TodoAppApplicationTests.java create mode 100644 todo-backend/template.yml create mode 100644 todo-backend/terraform.tfstate diff --git a/.gitignore b/.gitignore index 524f096..108e18e 100644 --- a/.gitignore +++ b/.gitignore @@ -22,3 +22,4 @@ # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* replay_pid* +/.terrfaform/ diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..d843f34 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Day 3.png b/Day 3.png new file mode 100644 index 0000000000000000000000000000000000000000..47cbf343a17679f7eb55bfa2a9e9d9c76c295035 GIT binary patch literal 53745 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�imuc)5EoiUG%*-p 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 literal 0 HcmV?d00001 diff --git a/todo-backend/.aws-sam/build.toml b/todo-backend/.aws-sam/build.toml new file mode 100644 index 0000000..1b29ed3 --- /dev/null +++ b/todo-backend/.aws-sam/build.toml @@ -0,0 +1,12 @@ +# This file is auto generated by SAM CLI build command + +[function_build_definitions.f7d5c8a2-7b1b-4457-a1a9-8083a308a8e4] +codeuri = "C:\\Users\\TMajlu\\Documents\\Java Workshop\\Week 10\\Day 2\\java-cloud-aws-day-3\\todo-backend" +runtime = "java21" +architecture = "x86_64" +handler = "com.booleanuk.TodoApp.StreamLambdaHandler::handleRequest" +manifest_hash = "" +packagetype = "Zip" +functions = ["ThomasNTodoFunction"] + +[layer_build_definitions] diff --git a/todo-backend/.gitignore b/todo-backend/.gitignore new file mode 100644 index 0000000..6cf7de4 --- /dev/null +++ b/todo-backend/.gitignore @@ -0,0 +1,40 @@ +HELP.md +.gradle +build/ +!gradle/wrapper/gradle-wrapper.jar +!**/src/main/**/build/ +!**/src/test/**/build/ + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans +.sts4-cache +bin/ +!**/src/main/**/bin/ +!**/src/test/**/bin/ + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +out/ +!**/src/main/**/out/ +!**/src/test/**/out/ + +### NetBeans ### +/nbproject/private/ +/nbbuild/ +/dist/ +/nbdist/ +/.nb-gradle/ + +### VS Code ### +.vscode/ + +application.yml +/.terrfaform/ diff --git a/todo-backend/.terraform.lock.hcl b/todo-backend/.terraform.lock.hcl new file mode 100644 index 0000000..2c8af10 --- /dev/null +++ b/todo-backend/.terraform.lock.hcl @@ -0,0 +1,24 @@ +# This file is maintained automatically by "terraform init". +# Manual edits may be lost in future updates. + +provider "registry.terraform.io/hashicorp/aws" { + version = "5.72.1" + hashes = [ + "h1:QXz1aAXcvnhljfQ75KRHE2lvXOOKaT4i5OUvaO8HV4U=", + "zh:0dea6843836e926d33469b48b948744079023816d16a2ff7666bcfb6aa3522d4", + "zh:195fa9513f75800a0d62797ebec75ee73e9b8c28d713fe9b63d3b1d1eec129b3", + "zh:1ed92f3961715bf0e024bcde3c12dfbdc50b00c1f8a43cc00802cfc45a256208", + "zh:2ac687e3a52606466cae4a6813e81d923042488df88d2424e28d3f8530f091bb", + "zh:32e7ca75f9314557daada3c44628fe1f3bf964a4f833bfb4b2295d833fe64b6f", + "zh:374ee0e6b4327cc6ef666908ce5d6450a3a56e90cd2b785e83c2bcfc100021d2", + "zh:5500fd6fdac44f96411fcf9c6d01691159ec35455ed127eb4c3a498e1cc92a64", + "zh:723a2dc4b064c12e7ee62ad4fbfd72fa5e025206ea47b735994ef53f3c373152", + "zh:89d97b87605f1d734f27e642567cbecf785b521af8ea81dac55c77ccde876221", + "zh:951ee1e5731e8d65d521d71b95927e55055b3c4656eef6d46fa580a63328befc", + "zh:9b12af85486a96aedd8d7984b0ff811a4b42e3d88dad1a3fb4c0b580d04fa425", + "zh:9b2b362470b64ec227b2da64762ab8bc4111c6b80365fd9d82fc5e1e33f44038", + "zh:aa6e57d0cb974ff0da5dee5d43ad2745cbbc4a2b507d4c799839b9fa96daf688", + "zh:ba0d14c4a6b7aa844a830d47c0bf995b632e37f0795394b5b60c638b62b7fc03", + "zh:c9764065a9c5d324db0b02bd201b9e3a2118e49c4960884acdeea377173302e9", + ] +} diff --git a/todo-backend/build.gradle b/todo-backend/build.gradle new file mode 100644 index 0000000..e37caea --- /dev/null +++ b/todo-backend/build.gradle @@ -0,0 +1,178 @@ +/* +plugins { + id 'java' + id 'org.springframework.boot' version '3.3.4' + id 'io.spring.dependency-management' version '1.1.6' +} + +group = 'com.booleanuk' +version = '0.0.7' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenLocal() + mavenCentral() + maven {url "https://repo.spring.io/milestone"} + maven {url "https://repo.spring.io/snapshot"} +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation('org.springframework.boot:spring-boot-starter-web:3.3.4') + compileOnly 'org.projectlombok:lombok' + developmentOnly 'org.springframework.boot:spring-boot-devtools' + runtimeOnly 'org.postgresql:postgresql' + annotationProcessor 'org.projectlombok:lombok' + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + + // https://mvnrepository.com/artifact/com.amazonaws.serverless/aws-serverless-java-container-springboot3 + implementation 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:2.0.3' +} + +task buildZip(type: Zip) { + from compileJava + from processResources + into('lib') { + from(configurations.compileClasspath) { + exclude 'tomcat-embed-*' + } + } +} + +build.dependsOn buildZip + + + +plugins { + id 'java' + id 'org.springframework.boot' version '3.3.4' + id 'io.spring.dependency-management' version '1.1.6' +} + +group = 'com.booleanuk' +version = '0.0.8' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + +configurations { + compileOnly { + extendsFrom annotationProcessor + } +} + +repositories { + mavenLocal() + mavenCentral() + maven {url "https://repo.spring.io/milestone"} + maven {url "https://repo.spring.io/snapshot"} +} + + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation('org.springframework.boot:spring-boot-starter-web') { + exclude group: 'org.springframework.boot', module: 'spring-boot-starter-tomcat' + } + compileOnly 'org.projectlombok:lombok' + developmentOnly 'org.springframework.boot:spring-boot-devtools' + runtimeOnly 'org.postgresql:postgresql' + annotationProcessor 'org.projectlombok:lombok' + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + + implementation 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:2.0.3' +} + +tasks.named('test') { + useJUnitPlatform() +} + + +task buildZip(type: Zip) { + from compileJava + from processResources + into('lib') { + from(configurations.compileClasspath) { + exclude 'tomcat-embed-*' + } + } +} + +build.dependsOn buildZip + + */ + +plugins { + id 'java' + id 'org.springframework.boot' version '3.3.4' + id 'io.spring.dependency-management' version '1.1.6' +} + +group = 'com.booleanuk' +version = '0.0.3' + +java { + toolchain { + languageVersion = JavaLanguageVersion.of(21) + } +} + +repositories { + mavenCentral() +} + +dependencies { + implementation 'org.springframework.boot:spring-boot-starter-data-jpa' + implementation 'org.springframework.boot:spring-boot-starter-web' + compileOnly 'org.projectlombok:lombok' + developmentOnly 'org.springframework.boot:spring-boot-devtools' + runtimeOnly 'org.postgresql:postgresql' + annotationProcessor 'org.projectlombok:lombok' + testImplementation 'org.springframework.boot:spring-boot-starter-test' + testRuntimeOnly 'org.junit.platform:junit-platform-launcher' + implementation 'com.amazonaws.serverless:aws-serverless-java-container-springboot3:2.0.3' +} + +tasks.named('test') { + useJUnitPlatform() +} + +jar { + duplicatesStrategy = DuplicatesStrategy.EXCLUDE + manifest { + attributes 'Main-Class': 'com.booleanuk.StreamLambdaHandler' + } + from { + configurations.runtimeClasspath.collect { it.isDirectory() ? it : zipTree(it) } + } +} + +tasks.register('createZip', Zip) { + dependsOn bootJar + from compileJava + from processResources + from bootJar.archiveFile + into('lib') { + from configurations.runtimeClasspath + } + archiveFileName = 'backend.zip' + destinationDirectory = layout.buildDirectory.dir('distributions') +} + +build.dependsOn createZip \ No newline at end of file diff --git a/todo-backend/gradle/wrapper/gradle-wrapper.jar b/todo-backend/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..a4b76b9530d66f5e68d973ea569d8e19de379189 GIT binary patch literal 43583 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 yu?e%!_ptzGB|8GrCfu%p?(_ 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 GZ~q4|mN%#X literal 0 HcmV?d00001 diff --git a/todo-backend/gradle/wrapper/gradle-wrapper.properties b/todo-backend/gradle/wrapper/gradle-wrapper.properties new file mode 100644 index 0000000..df97d72 --- /dev/null +++ b/todo-backend/gradle/wrapper/gradle-wrapper.properties @@ -0,0 +1,7 @@ +distributionBase=GRADLE_USER_HOME +distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip +networkTimeout=10000 +validateDistributionUrl=true +zipStoreBase=GRADLE_USER_HOME +zipStorePath=wrapper/dists diff --git a/todo-backend/gradlew b/todo-backend/gradlew new file mode 100644 index 0000000..f5feea6 --- /dev/null +++ b/todo-backend/gradlew @@ -0,0 +1,252 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# SPDX-License-Identifier: Apache-2.0 +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +# This is normally unused +# shellcheck disable=SC2034 +APP_BASE_NAME=${0##*/} +# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. + # shellcheck disable=SC2039,SC3045 + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Stop when "xargs" is not available. +if ! command -v xargs >/dev/null 2>&1 +then + die "xargs is not available" +fi + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/todo-backend/gradlew.bat b/todo-backend/gradlew.bat new file mode 100644 index 0000000..9d21a21 --- /dev/null +++ b/todo-backend/gradlew.bat @@ -0,0 +1,94 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem + +@if "%DEBUG%"=="" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%"=="" set DIRNAME=. +@rem This is normally unused +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if %ERRORLEVEL% equ 0 goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. 1>&2 +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2 +echo. 1>&2 +echo Please set the JAVA_HOME variable in your environment to match the 1>&2 +echo location of your Java installation. 1>&2 + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if %ERRORLEVEL% equ 0 goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +set EXIT_CODE=%ERRORLEVEL% +if %EXIT_CODE% equ 0 set EXIT_CODE=1 +if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE% +exit /b %EXIT_CODE% + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/todo-backend/main.tf b/todo-backend/main.tf new file mode 100644 index 0000000..4ff09be --- /dev/null +++ b/todo-backend/main.tf @@ -0,0 +1,134 @@ +/* + +provider "aws" { + region = "eu-north-1" + } + + resource "aws_iam_role" "lambda_role" { + name = "thomasmajnie@gmail.com" + assume_role_policy = jsonencode({ + Version = "2012-10-17", + Statement = [{ + Action = "sts:AssumeRole", + Effect = "Allow", + Principal = { + Service = "lambda.amazonaws.com" + } + }] + }) + } + + resource "aws_lambda_function" "backend" { + filename = "backend.zip" + function_name = "ThomasNielsenTerraform" + role = aws_iam_role.lambda_role.arn + handler = "Backend::Backend.Function::FunctionHandler" + runtime = "java" -- JAVAENVIRONMENT + source_code_hash = filebase64sha256("backend.zip") + } + + resource "aws_api_gateway_rest_api" "api" { + name = "ThomasNAPI" + } + + resource "aws_api_gateway_resource" "resource" { + rest_api_id = aws_api_gateway_rest_api.api.id + parent_id = aws_api_gateway_rest_api.api.root_resource_id + path_part = "register" + } + + resource "aws_api_gateway_method" "method" { + rest_api_id = aws_api_gateway_rest_api.api.id + resource_id = aws_api_gateway_resource.resource.id + http_method = "GET" + authorization = "NONE" + } + + resource "aws_api_gateway_integration" "integration" { + rest_api_id = aws_api_gateway_rest_api.api.id + resource_id = aws_api_gateway_resource.resource.id + http_method = aws_api_gateway_method.method.http_method + type = "AWS_PROXY" + integration_http_method = "POST" + uri = aws_lambda_function.backend.invoke_arn + } + */ +provider "aws" { + region = "eu-west-1" +} + +data "aws_caller_identity" "current" {} + +resource "aws_iam_role" "lambda_role" { + name = "thomasmajnie@gmail.com" + assume_role_policy = jsonencode({ + Version = "2012-10-17", + Statement = [{ + Action = "sts:AssumeRole", + Effect = "Allow", + Principal = { + Service = "lambda.amazonaws.com" + } + }] + }) +} + +resource "aws_iam_role_policy_attachment" "lambda_policy" { + role = aws_iam_role.lambda_role.name + policy_arn = "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole" +} + +resource "aws_lambda_permission" "api_gateway_invoke" { + statement_id = "AllowAPIGatewayInvoke" + action = "lambda:InvokeFunction" + function_name = aws_lambda_function.backend.function_name + principal = "apigateway.amazonaws.com" + source_arn = "arn:aws:execute-api:eu-west-1:${data.aws_caller_identity.current.account_id}:${aws_api_gateway_rest_api.api.id}/*/*" +} + +resource "aws_lambda_function" "backend" { + s3_bucket = "thomas-nielsen-test-bucket" + s3_key = "backend.zip" + function_name = "thomas-nielsen-terraform" + role = aws_iam_role.lambda_role.arn + handler = "com.booleanuk.StreamLambdaHandler::handleRequest" + runtime = "java21" + memory_size = 512 + timeout = 120 +} + +resource "aws_api_gateway_rest_api" "api" { + name = "thomas-nielsen-api" +} + +resource "aws_api_gateway_resource" "resource" { + rest_api_id = aws_api_gateway_rest_api.api.id + parent_id = aws_api_gateway_rest_api.api.root_resource_id + path_part = "todos" +} + +resource "aws_api_gateway_method" "method" { + rest_api_id = aws_api_gateway_rest_api.api.id + resource_id = aws_api_gateway_resource.resource.id + http_method = "GET" + authorization = "NONE" +} + +resource "aws_api_gateway_integration" "integration" { + rest_api_id = aws_api_gateway_rest_api.api.id + resource_id = aws_api_gateway_resource.resource.id + http_method = aws_api_gateway_method.method.http_method + type = "AWS_PROXY" + integration_http_method = "POST" + uri = aws_lambda_function.backend.invoke_arn +} + +resource "aws_api_gateway_deployment" "deployment" { + depends_on = [aws_api_gateway_integration.integration] + rest_api_id = aws_api_gateway_rest_api.api.id + stage_name = "prod" +} + +output "api_url" { + value = aws_api_gateway_deployment.deployment.invoke_url +} \ No newline at end of file diff --git a/todo-backend/samconfig.toml b/todo-backend/samconfig.toml new file mode 100644 index 0000000..062c8be --- /dev/null +++ b/todo-backend/samconfig.toml @@ -0,0 +1,10 @@ +version = 0.1 +[default.deploy.parameters] +stack_name = "thomasN-app" +resolve_s3 = true +s3_prefix = "thomasN-app" +region = "eu-west-1" +confirm_changeset = true +capabilities = "CAPABILITY_IAM" +disable_rollback = true +image_repositories = [] diff --git a/todo-backend/settings.gradle b/todo-backend/settings.gradle new file mode 100644 index 0000000..1003257 --- /dev/null +++ b/todo-backend/settings.gradle @@ -0,0 +1 @@ +rootProject.name = 'TodoApp' diff --git a/todo-backend/src/main/java/com/booleanuk/Main.java b/todo-backend/src/main/java/com/booleanuk/Main.java new file mode 100644 index 0000000..75b3b90 --- /dev/null +++ b/todo-backend/src/main/java/com/booleanuk/Main.java @@ -0,0 +1,16 @@ +package com.booleanuk; + +import com.booleanuk.TodoApp.controllers.TodoController; +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.Import; + +@SpringBootApplication +@Import({TodoController.class}) +public class Main { + + public static void main(String[] args) { + SpringApplication.run(Main.class, args); + } + +} diff --git a/todo-backend/src/main/java/com/booleanuk/StreamLambdaHandler.java b/todo-backend/src/main/java/com/booleanuk/StreamLambdaHandler.java new file mode 100644 index 0000000..e562a9e --- /dev/null +++ b/todo-backend/src/main/java/com/booleanuk/StreamLambdaHandler.java @@ -0,0 +1,43 @@ +package com.booleanuk; + +import com.amazonaws.serverless.exceptions.ContainerInitializationException; +import com.amazonaws.serverless.proxy.internal.testutils.Timer; +import com.amazonaws.serverless.proxy.model.AwsProxyRequest; +import com.amazonaws.serverless.proxy.model.AwsProxyResponse; +import com.amazonaws.serverless.proxy.spring.SpringBootLambdaContainerHandler; +import com.booleanuk.TodoApp.filter.CognitoIdentityFilter; +import com.amazonaws.services.lambda.runtime.Context; +import com.amazonaws.services.lambda.runtime.RequestStreamHandler; + +import jakarta.servlet.DispatcherType; +import jakarta.servlet.FilterRegistration; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.util.EnumSet; + + +public class StreamLambdaHandler implements RequestStreamHandler { + private static final SpringBootLambdaContainerHandler handler; + + static { + try { + handler = SpringBootLambdaContainerHandler.getAwsProxyHandler(Main.class); + handler.onStartup(servletContext -> { + FilterRegistration.Dynamic registration = servletContext.addFilter("CognitoIdentityFilter", CognitoIdentityFilter.class); + registration.addMappingForUrlPatterns(EnumSet.of(DispatcherType.REQUEST), true, "/*"); + }); + } catch (ContainerInitializationException e) { + + e.printStackTrace(); + throw new RuntimeException("Could not initialize Spring Boot application", e); + } + } + + @Override + public void handleRequest(InputStream inputStream, OutputStream outputStream, Context context) + throws IOException { + handler.proxyStream(inputStream, outputStream, context); + } +} \ No newline at end of file diff --git a/todo-backend/src/main/java/com/booleanuk/TodoApp/controllers/TodoController.java b/todo-backend/src/main/java/com/booleanuk/TodoApp/controllers/TodoController.java new file mode 100644 index 0000000..206aec3 --- /dev/null +++ b/todo-backend/src/main/java/com/booleanuk/TodoApp/controllers/TodoController.java @@ -0,0 +1,64 @@ +package com.booleanuk.TodoApp.controllers; + +import com.booleanuk.TodoApp.models.Todo; +import com.booleanuk.TodoApp.repositories.TodoRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.server.ResponseStatusException; + +import java.util.List; + +@CrossOrigin +@RestController +@RequestMapping("todos") +public class TodoController { + @Autowired + private TodoRepository todoRepository; + + @GetMapping + public ResponseEntity> getAllTodos() { + return ResponseEntity.ok(this.todoRepository.findAll()); + } + + @GetMapping("/{id}") + public ResponseEntity getOneTodo(@PathVariable int id) { + Todo todo = this.todoRepository.findById(id).orElseThrow( + () -> new ResponseStatusException(HttpStatus.NOT_FOUND, "No todo with that id exists")); + return ResponseEntity.ok(todo); + } + + @PostMapping + public ResponseEntity createTodo(@RequestBody Todo todo) { + Todo newTodo = null; + try { + newTodo = this.todoRepository.save(todo); + } catch (Exception e) { + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "No todo created the server said: " + e); + } + return new ResponseEntity<>(newTodo, HttpStatus.CREATED); + } + + @PutMapping("/{id}") + public ResponseEntity updateTodo(@PathVariable int id, @RequestBody Todo todo) { + Todo todoToUpdate = this.todoRepository.findById(id).orElseThrow( + () -> new ResponseStatusException(HttpStatus.NOT_FOUND, "No todo with that id exists")); + todoToUpdate.setCompleted(todo.isCompleted()); + todoToUpdate.setTitle(todo.getTitle()); + try { + todoToUpdate = this.todoRepository.save(todoToUpdate); + } catch (Exception e) { + throw new ResponseStatusException(HttpStatus.BAD_REQUEST, "No todo created the server said: " + e); + } + return new ResponseEntity<>(todoToUpdate, HttpStatus.CREATED); + } + + @DeleteMapping("/{id}") + public ResponseEntity deleteTodo(@PathVariable int id) { + Todo todoToDelete = this.todoRepository.findById(id).orElseThrow( + () -> new ResponseStatusException(HttpStatus.NOT_FOUND, "No todo with that id exists")); + this.todoRepository.delete(todoToDelete); + return ResponseEntity.ok(todoToDelete); + } + } diff --git a/todo-backend/src/main/java/com/booleanuk/TodoApp/filter/CognitoIdentityFilter.java b/todo-backend/src/main/java/com/booleanuk/TodoApp/filter/CognitoIdentityFilter.java new file mode 100644 index 0000000..2a8319e --- /dev/null +++ b/todo-backend/src/main/java/com/booleanuk/TodoApp/filter/CognitoIdentityFilter.java @@ -0,0 +1,62 @@ +package com.booleanuk.TodoApp.filter; + + +import com.amazonaws.serverless.proxy.RequestReader; +import com.amazonaws.serverless.proxy.model.AwsProxyRequestContext; +import jakarta.servlet.*; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; + + +/** + * Simple Filter implementation that looks for a Cognito identity id in the API Gateway request context + * and stores the value in a request attribute. The filter is registered with aws-serverless-java-container + * in the onStartup method from the {@link com.amazonaws.serverless.sample.springboot3.StreamLambdaHandler} class. + */ +public class CognitoIdentityFilter implements Filter { + public static final String COGNITO_IDENTITY_ATTRIBUTE = "com.amazonaws.serverless.cognitoId"; + + private static Logger log = LoggerFactory.getLogger(CognitoIdentityFilter.class); + + @Override + public void init(FilterConfig filterConfig) + throws ServletException { + // nothing to do in init + } + + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) + throws IOException, ServletException { + Object apiGwContext = servletRequest.getAttribute(RequestReader.API_GATEWAY_CONTEXT_PROPERTY); + if (apiGwContext == null) { + log.warn("API Gateway context is null"); + filterChain.doFilter(servletRequest, servletResponse); + return; + } + if (!AwsProxyRequestContext.class.isAssignableFrom(apiGwContext.getClass())) { + log.warn("API Gateway context object is not of valid type"); + filterChain.doFilter(servletRequest, servletResponse); + } + + AwsProxyRequestContext ctx = (AwsProxyRequestContext)apiGwContext; + if (ctx.getIdentity() == null) { + log.warn("Identity context is null"); + filterChain.doFilter(servletRequest, servletResponse); + } + String cognitoIdentityId = ctx.getIdentity().getCognitoIdentityId(); + if (cognitoIdentityId == null || "".equals(cognitoIdentityId.trim())) { + log.warn("Cognito identity id in request is null"); + } + servletRequest.setAttribute(COGNITO_IDENTITY_ATTRIBUTE, cognitoIdentityId); + filterChain.doFilter(servletRequest, servletResponse); + } + + + @Override + public void destroy() { + // nothing to do in destroy + } +} diff --git a/todo-backend/src/main/java/com/booleanuk/TodoApp/models/Todo.java b/todo-backend/src/main/java/com/booleanuk/TodoApp/models/Todo.java new file mode 100644 index 0000000..ece1609 --- /dev/null +++ b/todo-backend/src/main/java/com/booleanuk/TodoApp/models/Todo.java @@ -0,0 +1,38 @@ +package com.booleanuk.TodoApp.models; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +@Entity +@Table(name = "todos") +public class Todo { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private int id; + + @Column + private String title; + + @Column + private boolean completed; + + public Todo(int id){ + this.id = id; + } + + public Todo(String title) { + this.title = title; + this.completed = false; + } + public Todo(String title, boolean completed) { + this.title = title; + this.completed = completed; + } +} diff --git a/todo-backend/src/main/java/com/booleanuk/TodoApp/repositories/TodoRepository.java b/todo-backend/src/main/java/com/booleanuk/TodoApp/repositories/TodoRepository.java new file mode 100644 index 0000000..521af4d --- /dev/null +++ b/todo-backend/src/main/java/com/booleanuk/TodoApp/repositories/TodoRepository.java @@ -0,0 +1,7 @@ +package com.booleanuk.TodoApp.repositories; + +import com.booleanuk.TodoApp.models.Todo; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface TodoRepository extends JpaRepository { +} diff --git a/todo-backend/src/test/java/com/booleanuk/TodoApp/TodoAppApplicationTests.java b/todo-backend/src/test/java/com/booleanuk/TodoApp/TodoAppApplicationTests.java new file mode 100644 index 0000000..d032e41 --- /dev/null +++ b/todo-backend/src/test/java/com/booleanuk/TodoApp/TodoAppApplicationTests.java @@ -0,0 +1,13 @@ +package com.booleanuk.TodoApp; + +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +@SpringBootTest +class TodoAppApplicationTests { + + @Test + void contextLoads() { + } + +} diff --git a/todo-backend/template.yml b/todo-backend/template.yml new file mode 100644 index 0000000..5376b5b --- /dev/null +++ b/todo-backend/template.yml @@ -0,0 +1,32 @@ +AWSTemplateFormatVersion: '2010-09-09' +Transform: AWS::Serverless-2016-10-31 +Description: Example Todos API written with SpringBoot with the aws-serverless-java-container library + +Globals: + Api: + # API Gateway regional endpoints + EndpointConfiguration: REGIONAL + +Resources: + ThomasNTodoFunction: + Type: AWS::Serverless::Function + Properties: + Handler: com.booleanuk.StreamLambdaHandler::handleRequest + Runtime: java21 + CodeUri: . + MemorySize: 1512 + Policies: AWSLambdaBasicExecutionRole + Timeout: 60 + Events: + HttpApiEvent: + Type: HttpApi + Properties: + TimeoutInMillis: 20000 + PayloadFormatVersion: '1.0' + +Outputs: + ThomasNTodoApi: + Description: URL for application + Value: !Sub 'https://${ServerlessHttpApi}.execute-api.${AWS::Region}.amazonaws.com/todos' + Export: + Name: SpringBootThomasNTodosApi diff --git a/todo-backend/terraform.tfstate b/todo-backend/terraform.tfstate new file mode 100644 index 0000000..c5cf808 --- /dev/null +++ b/todo-backend/terraform.tfstate @@ -0,0 +1,368 @@ +{ + "version": 4, + "terraform_version": "1.9.7", + "serial": 10, + "lineage": "22b58ccb-97d1-b42f-d35d-98614b274f20", + "outputs": { + "api_url": { + "value": "https://wmktso7nk0.execute-api.eu-west-1.amazonaws.com/prod", + "type": "string" + } + }, + "resources": [ + { + "mode": "data", + "type": "aws_caller_identity", + "name": "current", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "account_id": "637423341661", + "arn": "arn:aws:iam::637423341661:user/thomasmajnie@gmail.com", + "id": "637423341661", + "user_id": "AIDAZI2LEKBOTZAODKQOV" + }, + "sensitive_attributes": [] + } + ] + }, + { + "mode": "managed", + "type": "aws_api_gateway_deployment", + "name": "deployment", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "canary_settings": [], + "created_date": "2024-10-17T06:26:35Z", + "description": "", + "execution_arn": "arn:aws:execute-api:eu-west-1:637423341661:wmktso7nk0/prod", + "id": "cfyphl", + "invoke_url": "https://wmktso7nk0.execute-api.eu-west-1.amazonaws.com/prod", + "rest_api_id": "wmktso7nk0", + "stage_description": null, + "stage_name": "prod", + "triggers": null, + "variables": null + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "aws_api_gateway_integration.integration", + "aws_api_gateway_method.method", + "aws_api_gateway_resource.resource", + "aws_api_gateway_rest_api.api", + "aws_iam_role.lambda_role", + "aws_lambda_function.backend" + ] + } + ] + }, + { + "mode": "managed", + "type": "aws_api_gateway_integration", + "name": "integration", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "cache_key_parameters": null, + "cache_namespace": "rimeyj", + "connection_id": "", + "connection_type": "INTERNET", + "content_handling": "", + "credentials": "", + "http_method": "GET", + "id": "agi-wmktso7nk0-rimeyj-GET", + "integration_http_method": "POST", + "passthrough_behavior": "WHEN_NO_MATCH", + "request_parameters": null, + "request_templates": null, + "resource_id": "rimeyj", + "rest_api_id": "wmktso7nk0", + "timeout_milliseconds": 29000, + "tls_config": [], + "type": "AWS_PROXY", + "uri": "arn:aws:apigateway:eu-west-1:lambda:path/2015-03-31/functions/arn:aws:lambda:eu-west-1:637423341661:function:thomas-nielsen-terraform/invocations" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "aws_api_gateway_method.method", + "aws_api_gateway_resource.resource", + "aws_api_gateway_rest_api.api", + "aws_iam_role.lambda_role", + "aws_lambda_function.backend" + ] + } + ] + }, + { + "mode": "managed", + "type": "aws_api_gateway_method", + "name": "method", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "api_key_required": false, + "authorization": "NONE", + "authorization_scopes": null, + "authorizer_id": null, + "http_method": "GET", + "id": "agm-wmktso7nk0-rimeyj-GET", + "operation_name": null, + "request_models": null, + "request_parameters": null, + "request_validator_id": null, + "resource_id": "rimeyj", + "rest_api_id": "wmktso7nk0" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "aws_api_gateway_resource.resource", + "aws_api_gateway_rest_api.api" + ] + } + ] + }, + { + "mode": "managed", + "type": "aws_api_gateway_resource", + "name": "resource", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "id": "rimeyj", + "parent_id": "bb78a2vfr8", + "path": "/todos", + "path_part": "todos", + "rest_api_id": "wmktso7nk0" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "aws_api_gateway_rest_api.api" + ] + } + ] + }, + { + "mode": "managed", + "type": "aws_api_gateway_rest_api", + "name": "api", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "api_key_source": "HEADER", + "arn": "arn:aws:apigateway:eu-west-1::/restapis/wmktso7nk0", + "binary_media_types": [], + "body": null, + "created_date": "2024-10-17T06:26:21Z", + "description": "", + "disable_execute_api_endpoint": false, + "endpoint_configuration": [ + { + "types": [ + "EDGE" + ], + "vpc_endpoint_ids": [] + } + ], + "execution_arn": "arn:aws:execute-api:eu-west-1:637423341661:wmktso7nk0", + "fail_on_warnings": null, + "id": "wmktso7nk0", + "minimum_compression_size": "", + "name": "thomas-nielsen-api", + "parameters": null, + "policy": "", + "put_rest_api_mode": null, + "root_resource_id": "bb78a2vfr8", + "tags": null, + "tags_all": {} + }, + "sensitive_attributes": [], + "private": "bnVsbA==" + } + ] + }, + { + "mode": "managed", + "type": "aws_iam_role", + "name": "lambda_role", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "arn": "arn:aws:iam::637423341661:role/thomasmajnie@gmail.com", + "assume_role_policy": "{\"Statement\":[{\"Action\":\"sts:AssumeRole\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"lambda.amazonaws.com\"}}],\"Version\":\"2012-10-17\"}", + "create_date": "2024-10-17T06:26:21Z", + "description": "", + "force_detach_policies": false, + "id": "thomasmajnie@gmail.com", + "inline_policy": [], + "managed_policy_arns": [], + "max_session_duration": 3600, + "name": "thomasmajnie@gmail.com", + "name_prefix": "", + "path": "/", + "permissions_boundary": "", + "tags": null, + "tags_all": {}, + "unique_id": "AROAZI2LEKBO63OU2IT5O" + }, + "sensitive_attributes": [], + "private": "bnVsbA==" + } + ] + }, + { + "mode": "managed", + "type": "aws_iam_role_policy_attachment", + "name": "lambda_policy", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "id": "thomasmajnie@gmail.com-20241017062625734500000001", + "policy_arn": "arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole", + "role": "thomasmajnie@gmail.com" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "aws_iam_role.lambda_role" + ] + } + ] + }, + { + "mode": "managed", + "type": "aws_lambda_function", + "name": "backend", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "architectures": [ + "x86_64" + ], + "arn": "arn:aws:lambda:eu-west-1:637423341661:function:thomas-nielsen-terraform", + "code_sha256": "yZibnc+hnmNA6vvXXPvQXDlN5s2a+KEXScZMAIukHG8=", + "code_signing_config_arn": "", + "dead_letter_config": [], + "description": "", + "environment": [], + "ephemeral_storage": [ + { + "size": 512 + } + ], + "file_system_config": [], + "filename": null, + "function_name": "thomas-nielsen-terraform", + "handler": "com.booleanuk.StreamLambdaHandler::handleRequest", + "id": "thomas-nielsen-terraform", + "image_config": [], + "image_uri": "", + "invoke_arn": "arn:aws:apigateway:eu-west-1:lambda:path/2015-03-31/functions/arn:aws:lambda:eu-west-1:637423341661:function:thomas-nielsen-terraform/invocations", + "kms_key_arn": "", + "last_modified": "2024-10-17T06:26:28.169+0000", + "layers": null, + "logging_config": [ + { + "application_log_level": "", + "log_format": "Text", + "log_group": "/aws/lambda/thomas-nielsen-terraform", + "system_log_level": "" + } + ], + "memory_size": 512, + "package_type": "Zip", + "publish": false, + "qualified_arn": "arn:aws:lambda:eu-west-1:637423341661:function:thomas-nielsen-terraform:$LATEST", + "qualified_invoke_arn": "arn:aws:apigateway:eu-west-1:lambda:path/2015-03-31/functions/arn:aws:lambda:eu-west-1:637423341661:function:thomas-nielsen-terraform:$LATEST/invocations", + "replace_security_groups_on_destroy": null, + "replacement_security_group_ids": null, + "reserved_concurrent_executions": -1, + "role": "arn:aws:iam::637423341661:role/thomasmajnie@gmail.com", + "runtime": "java21", + "s3_bucket": "thomas-nielsen-test-bucket", + "s3_key": "backend.zip", + "s3_object_version": null, + "signing_job_arn": "", + "signing_profile_version_arn": "", + "skip_destroy": false, + "snap_start": [], + "source_code_hash": "", + "source_code_size": 85850089, + "tags": null, + "tags_all": {}, + "timeout": 120, + "timeouts": null, + "tracing_config": [ + { + "mode": "PassThrough" + } + ], + "version": "$LATEST", + "vpc_config": [] + }, + "sensitive_attributes": [], + "private": "eyJlMmJmYjczMC1lY2FhLTExZTYtOGY4OC0zNDM2M2JjN2M0YzAiOnsiY3JlYXRlIjo2MDAwMDAwMDAwMDAsImRlbGV0ZSI6NjAwMDAwMDAwMDAwLCJ1cGRhdGUiOjYwMDAwMDAwMDAwMH19", + "dependencies": [ + "aws_iam_role.lambda_role" + ] + } + ] + }, + { + "mode": "managed", + "type": "aws_lambda_permission", + "name": "api_gateway_invoke", + "provider": "provider[\"registry.terraform.io/hashicorp/aws\"]", + "instances": [ + { + "schema_version": 0, + "attributes": { + "action": "lambda:InvokeFunction", + "event_source_token": null, + "function_name": "thomas-nielsen-terraform", + "function_url_auth_type": null, + "id": "AllowAPIGatewayInvoke", + "principal": "apigateway.amazonaws.com", + "principal_org_id": null, + "qualifier": "", + "source_account": null, + "source_arn": "arn:aws:execute-api:eu-west-1:637423341661:wmktso7nk0/*/*", + "statement_id": "AllowAPIGatewayInvoke", + "statement_id_prefix": "" + }, + "sensitive_attributes": [], + "private": "bnVsbA==", + "dependencies": [ + "aws_api_gateway_rest_api.api", + "aws_iam_role.lambda_role", + "aws_lambda_function.backend", + "data.aws_caller_identity.current" + ] + } + ] + } + ], + "check_results": null +}