{"id":21693,"date":"2021-09-20T18:38:56","date_gmt":"2021-09-20T16:38:56","guid":{"rendered":"https:\/\/blog.mi.hdm-stuttgart.de\/?p=21693"},"modified":"2023-06-18T17:55:50","modified_gmt":"2023-06-18T15:55:50","slug":"recall-trainer-eine-serverless-web-app-mit-aws","status":"publish","type":"post","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/09\/20\/recall-trainer-eine-serverless-web-app-mit-aws\/","title":{"rendered":"Recall Trainer &#8211;  Eine serverless Web-App mit AWS"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Einleitung<\/h2>\n\n\n\n<p>Im Rahmen der Vorlesung \u201cSoftware Development for Cloud Computing\u201d habe ich im vergangenen Semester eine Einf\u00fchrung in die Welt des Cloud Computings incl. der relevanten Konzepte und Technologien erhalten. Einige dieser Konzepte habe ich versucht in meinem Abschlussprojekt umzusetzen, das ich im Nachfolgenden vorstellen m\u00f6chte.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Idee\/Projekt<\/h2>\n\n\n\n<p>Die Idee war es eine Webanwendung zu konzipieren und zu entwickeln, welche dem Nutzer beim pers\u00f6nlichen Wissensmanagement unterst\u00fctzt. Die Applikation hilft dem Lernenden sich jeden Tag mit seinen Wissensgebieten auseinander zu setzen, indem diese ihm t\u00e4glich eine Email mit einem Link zu seiner personalisierten Wissensabfrage sendet.<\/p>\n\n\n\n<p>Mit einem Klick auf den Link landet der Nutzer bei einer zuf\u00e4lligen Auswahl von bis zu 25 Fragen seiner bisher erfassten Lerninhalte. Die Anwendung zeigt nun eine Frage und einen Timer an. Der Nutzer soll nun innerhalb von 10 Sekunden sich die Antwort ins Ged\u00e4chtnis rufen. Wenn er eine Antwort im Kopf hat, klickt er den Button \u201eReveal\u201c, welcher die korrekte Antwort aufdeckt. Nun muss der Nutzer angeben, ob seine Antwort im Kopf mit der tats\u00e4chlichen Antwort \u00fcbereinstimmt. Schaft der Nutzer es nicht innerhalb von 10 Sekunden zu antworten wird automatisch eine neue Frage angezeigt.&nbsp;<\/p>\n\n\n\n<p>Das Ziel ist es das Ged\u00e4chtnis zu trainieren. Die jeweiligen Fragen werden so lange per Zufallsauswahl wiederholt, bis der User alle Fragen einmal richtig mental abgerufen hat.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Idee.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"547\" data-attachment-id=\"21696\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/09\/20\/recall-trainer-eine-serverless-web-app-mit-aws\/idee\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Idee.png\" data-orig-size=\"1448,773\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Idee\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Idee-1024x547.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Idee-1024x547.png\" alt=\"\" class=\"wp-image-21696\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Idee-1024x547.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Idee-300x160.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Idee-768x410.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Idee.png 1448w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Konzept Skizze<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Ziele f\u00fcr die Umsetzung<\/strong><\/h2>\n\n\n\n<p>Mein Ziel war es eine derartige fachliche Problemstellung als Serverless Architektur zu realisieren. Zugleich wollte ich erste Erfahrungen mit der AWS Infrastruktur sammeln. Um eine zentrale und automatisierte Verwaltung aller Ressourcen sicherzustellen, die L\u00f6sung skalierbar zu gestalten und um Cloud Ressourcen zu minimieren sowie das Risiko von versteckten Kosten zu reduzieren, war das Ziel das Projekt als Infrastructure as Code zu implementieren.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Implementierung<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Architektur.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"570\" data-attachment-id=\"21703\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/09\/20\/recall-trainer-eine-serverless-web-app-mit-aws\/architektur\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Architektur.png\" data-orig-size=\"1323,737\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Architektur\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Architektur-1024x570.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Architektur-1024x570.png\" alt=\"\" class=\"wp-image-21703\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Architektur-1024x570.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Architektur-300x167.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Architektur-768x428.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Architektur.png 1323w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption>Architektur<\/figcaption><\/figure>\n\n\n\n<p>Als Infrastructure as Code -Tool wurde AWS Sam (AWS Serverless Application Model) verwendet. Dieses baut auf Amazon\u2019s Cloudformation Infrastructure as Code Syntax auf und liefert zus\u00e4tzlich noch ein Command Line Interface, welches das Deployment und lokale Testing von Lambda Funktionen erm\u00f6glicht.<\/p>\n\n\n\n<p>Die Frontend-Applikation wurde mit Hilfe des Frontend-Frameworks Angular erstellt, in welchem ich im Rahmen dieses Projektes erste Erfahrungen sammeln konnte. Deployed wird das Frontend mithilfe einer&nbsp; AWS Amplify Build Pipeline, welche durch Commits auf den in SAM spezifizierten Branch ausgel\u00f6st wird.<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-3 is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/signup1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"481\" data-attachment-id=\"21699\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/09\/20\/recall-trainer-eine-serverless-web-app-mit-aws\/signup1\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/signup1.png\" data-orig-size=\"1919,901\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"signup1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/signup1-1024x481.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/signup1-1024x481.png\" alt=\"\" data-id=\"21699\" data-full-url=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/signup1.png\" data-link=\"https:\/\/blog.mi.hdm-stuttgart.de\/?attachment_id=21699\" class=\"wp-image-21699\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/signup1-1024x481.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/signup1-300x141.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/signup1-768x361.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/signup1-1536x721.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/signup1.png 1919w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"blocks-gallery-item__caption\">Signup Page<\/figcaption><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/signup2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"481\" data-attachment-id=\"21700\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/09\/20\/recall-trainer-eine-serverless-web-app-mit-aws\/signup2\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/signup2.png\" data-orig-size=\"1918,901\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"signup2\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/signup2-1024x481.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/signup2-1024x481.png\" alt=\"\" data-id=\"21700\" data-full-url=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/signup2.png\" data-link=\"https:\/\/blog.mi.hdm-stuttgart.de\/?attachment_id=21700\" class=\"wp-image-21700\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/signup2-1024x481.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/signup2-300x141.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/signup2-768x361.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/signup2-1536x722.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/signup2.png 1918w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"blocks-gallery-item__caption\">Signup Page<\/figcaption><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/trainer2.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"481\" data-attachment-id=\"21702\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/09\/20\/recall-trainer-eine-serverless-web-app-mit-aws\/trainer2\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/trainer2.png\" data-orig-size=\"1919,901\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"trainer2\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/trainer2-1024x481.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/trainer2-1024x481.png\" alt=\"\" data-id=\"21702\" data-full-url=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/trainer2.png\" data-link=\"https:\/\/blog.mi.hdm-stuttgart.de\/?attachment_id=21702\" class=\"wp-image-21702\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/trainer2-1024x481.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/trainer2-300x141.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/trainer2-768x361.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/trainer2-1536x721.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/trainer2.png 1919w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"blocks-gallery-item__caption\">Question Page<\/figcaption><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/trainer1.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"479\" data-attachment-id=\"21701\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/09\/20\/recall-trainer-eine-serverless-web-app-mit-aws\/trainer1\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/trainer1.png\" data-orig-size=\"1918,898\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"trainer1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/trainer1-1024x479.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/trainer1-1024x479.png\" alt=\"\" data-id=\"21701\" data-full-url=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/trainer1.png\" data-link=\"https:\/\/blog.mi.hdm-stuttgart.de\/?attachment_id=21701\" class=\"wp-image-21701\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/trainer1-1024x479.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/trainer1-300x140.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/trainer1-768x360.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/trainer1-1536x719.png 1536w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/trainer1.png 1918w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"blocks-gallery-item__caption\">Question Page<\/figcaption><\/figure><\/li><\/ul><\/figure>\n\n\n\n<p>Eine besondere Herausforderung hierbei war es,&nbsp; dass der Link, den die Angular Anwendung nutzt um auf das Backend zuzugreifen dem aktuellen Link des API Gateways entsprechen muss. Dazu wird dieser durch SAM der Amplify Ressource als Environmental Variablen \u00fcbergeben. Diese wird dann in der Build Pipeline verwendet um den Link in der Index.js des Angular Builds mit der Variablen zu substituieren.<\/p>\n\n\n\n<figure class=\"wp-block-gallery columns-2 is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex\"><ul class=\"blocks-gallery-grid\"><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-20-172000.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"553\" data-attachment-id=\"21697\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/09\/20\/recall-trainer-eine-serverless-web-app-mit-aws\/screenshot-2021-09-20-172000\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-20-172000.png\" data-orig-size=\"1086,586\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Screenshot-2021-09-20-172000\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-20-172000-1024x553.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-20-172000-1024x553.png\" alt=\"\" data-id=\"21697\" data-full-url=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-20-172000.png\" data-link=\"https:\/\/blog.mi.hdm-stuttgart.de\/?attachment_id=21697\" class=\"wp-image-21697\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-20-172000-1024x553.png 1024w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-20-172000-300x162.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-20-172000-768x414.png 768w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-20-172000.png 1086w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/a><figcaption class=\"blocks-gallery-item__caption\">SAM Template<\/figcaption><\/figure><\/li><li class=\"blocks-gallery-item\"><figure><a href=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-20-172253.png\"><img loading=\"lazy\" decoding=\"async\" width=\"978\" height=\"596\" data-attachment-id=\"21698\" data-permalink=\"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/09\/20\/recall-trainer-eine-serverless-web-app-mit-aws\/screenshot-2021-09-20-172253\/\" data-orig-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-20-172253.png\" data-orig-size=\"978,596\" data-comments-opened=\"1\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"Screenshot-2021-09-20-172253\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-20-172253.png\" src=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-20-172253.png\" alt=\"\" data-id=\"21698\" data-full-url=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-20-172253.png\" data-link=\"https:\/\/blog.mi.hdm-stuttgart.de\/?attachment_id=21698\" class=\"wp-image-21698\" srcset=\"https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-20-172253.png 978w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-20-172253-300x183.png 300w, https:\/\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Screenshot-2021-09-20-172253-768x468.png 768w\" sizes=\"auto, (max-width: 978px) 100vw, 978px\" \/><\/a><figcaption class=\"blocks-gallery-item__caption\">Amplify Build File<\/figcaption><\/figure><\/li><\/ul><\/figure>\n\n\n\n<p>Das Backend der Anwendung setzt basiert auf mehreren AWS Services.<\/p>\n\n\n\n<p>Der Zugriff des Frontends auf das Backend erfolgt \u00fcber API Gateway mit 2 Routen.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>post \/subscribe: Leitet den Request an SubscribeEndpoint Lambda weiter<\/li><li>get \/daily-prompt:&nbsp; Leitet den Request an DailyPromptsEnpoint Lambda weiter<\/li><\/ul>\n\n\n\n<p>Die Funktionalit\u00e4t der App ist \u00fcber 3 Lambda Funktionen realisiert.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>DailyEMailGenerator: Wird t\u00e4glich von einer CloudWatch Schedule aufgerufen und generiert f\u00fcr jeden registrierten Nutzer eine Selektion an t\u00e4glichen Fragen aus der Menge aller hinterlegten Fragen.<\/li><li>DailyPromptsEndpoint: Liefert die in der Datenbank hinterlegte Menge an t\u00e4glichen Fragen f\u00fcr einen Nutzer<\/li><li>SubscribeEndpoint: F\u00fcgt den Nutzer der Subscriber Tabelle hinzu und speichert das mitgelieferte Fragen \/ Antwort Paar<\/li><\/ul>\n\n\n\n<p>Die Datenbank ist als DynamoDb mit den 3 Tabellen Subscribers, SubscriberData und DailyPrompts realisiert.&nbsp;<\/p>\n\n\n\n<p>Alle Ressourcen und notwendigen Rollen und Policies sind in einem SAM Template File erfasst und k\u00f6nnen bequem per SAM CLI deployt werden. Dabei wurde Wert darauf gelegt sensible Daten wie den GitHub Access Token, den Amplify ben\u00f6tigt, als Environment Variables abzufragen, anstelle diese hart zu coden.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Probleme<\/h2>\n\n\n\n<p>Als Hauptproblem hat sich f\u00fcr mich der riesige Umfang von AWS herausgestellt, da es eine Vielzahl an Dokumentationen zu lesen gibt, so dass es f\u00fcr einen Einsteiger schwierig ist, sich direkt zurecht zu finden. Das Angebot an Informationen zu Cloud (Patterns, Best Practices, etc.) und Cloud Services ist gef\u00fchlt unendlich. Es ist deshalb schwierig das f\u00fcr die Problemstellung wirklich relevante Wissen zu finden und die Qualit\u00e4t der verf\u00fcgbaren Informationen ist stark unterschiedlich. Da das User Interface von AWS-Diensten von Service zu Service variiert, ist auch die Navigation innerhalb der Dienste nicht immer einfach.&nbsp;<\/p>\n\n\n\n<p>Urspr\u00fcnglich war geplant Terraform als plattformunabh\u00e4ngiges Infrastructure as Code-Tool einzusetzen. Jedoch stellte sich dessen Dokumentation bez\u00fcglich spezieller AWS Services teilweise als unvollst\u00e4ndig heraus und hat somit nach vielen erfolglosen Versuchen dazu gef\u00fchrt, dass AWS SAM als Infrastructure as Code-Tool adaptiert wurde.<\/p>\n\n\n\n<p>Des Weiteren gestaltet sich das Debugging schwieriger wie auf dem eigenen Rechner. Dies h\u00e4ngt mit dem komplexen Zusammenspiel der vielen AWS Services zusammen und macht eine Fehlersuche oft sehr schwierig. AWS bietet hierf\u00fcr CloudWatch als zentrale Logging-Plattform an. Es kann aber vorkommen, dass Fehler auftreten ohne dass diese erfasst werden. Ich hatte beispielsweise das Problem, dass eine Lambda-Funktion pl\u00f6tzlich nicht mehr in die Datenbank geschrieben hat, ohne Fehler zu loggen, obwohl andere Funktionen denselben Code ohne Probleme auf dieselbe Datenbank anwenden konnten. Der Fehler hat sich nach einigen Stunden von selbst erledigt, es blieb allerdings intransparent, wodurch die L\u00f6sung erfolgt ist.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Lessons Learned<\/strong><\/h2>\n\n\n\n<p>Ich habe in diesem Projekt sehr viel spannendes \u00fcber die Entwicklung f\u00fcr AWS und die Cloud gelernt, sodass ich durch diese Veranstaltung einiges an theoretischem als auch praktischem Wissen im Bereich Cloud Computing aufbauen konnte. Das Projekt war gezeichnet von sehr viel ausprobieren was sich h\u00e4ufig auch nicht in der finalen L\u00f6sung niedergeschlagen hat.<\/p>\n\n\n\n<p>Dar\u00fcber hinaus konnte ich praktische Erfahrungen in der Implementierung von Webanwendungen aufbauen. Ein weiteres Lessons Learned f\u00fcr mich ist, dass ich ein solches Projekt in einem komplexen Themengebiet, in welchem ich keinerlei Vorkenntnisse hatte zuk\u00fcnftig wohl nicht mehr alleine angehen w\u00fcrde da ich mir sicher bin das ich mir viele Stunden recherchieren und Trial und Error durch eine weitere Person h\u00e4tte ersparen k\u00f6nnen.&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Einleitung Im Rahmen der Vorlesung \u201cSoftware Development for Cloud Computing\u201d habe ich im vergangenen Semester eine Einf\u00fchrung in die Welt des Cloud Computings incl. der relevanten Konzepte und Technologien erhalten. Einige dieser Konzepte habe ich versucht in meinem Abschlussprojekt umzusetzen, das ich im Nachfolgenden vorstellen m\u00f6chte.&nbsp; Idee\/Projekt Die Idee war es eine Webanwendung zu konzipieren [&hellip;]<\/p>\n","protected":false},"author":1060,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[120,262,650],"tags":[],"ppma_author":[862],"class_list":["post-21693","post","type-post","status-publish","format-standard","hentry","category-cloud-technologies","category-rich-media-systems","category-scalable-systems"],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":25893,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2023\/09\/15\/entwickeln-einer-edge-anwendung-mit-cloudflare\/","url_meta":{"origin":21693,"position":0},"title":"Entwickeln einer Edge-Anwendung mit Cloudflare","author":"Jens Schlegel","date":"15. September 2023","format":false,"excerpt":"Einleitung Englisch spielt eine gro\u00dfe Rolle in meinem Beruf und Alltag, doch immer noch passieren mir Grammatikfehler. Um meine Englischkenntnisse zu verbessern, habe ich eine kleine Webseite entwickelt, auf der das Schreiben von englischen S\u00e4tzen ge\u00fcbt werden kann. Dem Nutzer wird ein Satz pr\u00e4sentiert, der dann in die festgelegte Sprache\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/SCR-20230817-rdek_1694731446844_0.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/SCR-20230817-rdek_1694731446844_0.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/SCR-20230817-rdek_1694731446844_0.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/SCR-20230817-rdek_1694731446844_0.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":28654,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2026\/02\/28\/multiplayer-arena-dynamische-game-sessions-mit-docker-fastapi\/","url_meta":{"origin":21693,"position":1},"title":"Multiplayer-Arena: Dynamische Game-Sessions mit Docker &amp; FastAPI","author":"Emre Kalkan","date":"28. February 2026","format":false,"excerpt":"Game: https:\/\/46.101.127.20.sslip.io\/ (online bis 31. M\u00e4rz 2026) (beachte Readme im Git!) Git Repo: https:\/\/github.com\/ek101-collab\/ArenaGame-with-ContainerSessions Einleitung und Motivation Im Rahmen der Vorlesung \"System Engineering und Management\" bestand die Kernaufgabe darin, ein Projekt zu konzipieren und umzusetzen, das moderne Web- und Cloud-Technologien nutzt. Zu Beginn der Projektphase lag mein Fokus auf einer\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/02\/mainmenu.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/02\/mainmenu.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/02\/mainmenu.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2026\/02\/mainmenu.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":11711,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2020\/09\/29\/perfekter-gluhwein-fur-zuhause-thermometer-mit-raspberry-pi-und-aws\/","url_meta":{"origin":21693,"position":2},"title":"Perfekter Gl\u00fchwein f\u00fcr Zuhause: Thermometer mit Raspberry Pi und AWS","author":"jg129","date":"29. September 2020","format":false,"excerpt":"Abstract Kein anderes Getr\u00e4nk ist mit Weihnachtsm\u00e4rkten so verbunden wie Gl\u00fchwein. Und so trinkt sich der ausschweifende Weihnachtsmarktbesucher im Laufe der Adventszeit von Stand zu Stand bis er schlie\u00dflich am Ende des Jahres seinen Lieblingsstand gefunden hat. Doch auch daheim kann der perfekte Gl\u00fchwein gelingen.\u00a0 Wir zeigen, wie man sich\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/lh3.googleusercontent.com\/rbu36fXExVo14XfyUicXbIFjAgh1bvNnXHlaUVRfqLevpyZx4KVyjeuYdgItPx6y39R8L9Ub_hug03LYM3AIAW_F14vhBiXOZlt92qIpN0Y2h0H-czZ65ERnn3qUoWVh7JfI5ihA","width":350,"height":200,"srcset":"https:\/\/lh3.googleusercontent.com\/rbu36fXExVo14XfyUicXbIFjAgh1bvNnXHlaUVRfqLevpyZx4KVyjeuYdgItPx6y39R8L9Ub_hug03LYM3AIAW_F14vhBiXOZlt92qIpN0Y2h0H-czZ65ERnn3qUoWVh7JfI5ihA 1x, https:\/\/lh3.googleusercontent.com\/rbu36fXExVo14XfyUicXbIFjAgh1bvNnXHlaUVRfqLevpyZx4KVyjeuYdgItPx6y39R8L9Ub_hug03LYM3AIAW_F14vhBiXOZlt92qIpN0Y2h0H-czZ65ERnn3qUoWVh7JfI5ihA 1.5x"},"classes":[]},{"id":25735,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2023\/09\/13\/fastchat-your-words-instantly-delivered\/","url_meta":{"origin":21693,"position":3},"title":"FastChat &#8211; Your Words, Instantly Delivered","author":"Michael Dick","date":"13. September 2023","format":false,"excerpt":"Einf\u00fchrung Herzlich willkommen zu unserem Blogbeitrag \u00fcber FastChat, einer neuen Web-Chat-Anwendung, die das Kommunizieren im Internet auf ein neues Level hebt. In diesem Beitrag m\u00f6chten wir euch die Hintergrundgeschichte zu diesem Projekt, unsere Ziele und die Funktionalit\u00e4ten vorstellen, welche wir erfolgreich umgesetzt haben. Tauchen wir ein!\u00a0 Unsere Idee f\u00fcr FastChat\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/W_QwicX4WJDR2dKB4QjdppG7EF6IIhCEhDAhLUwZVqX2aHDevpVSAuBbz3tV3zaTEtIeWbiE3At_usAvJ3fl5Fx3Rohme2aszYrChgGMn6oyTmHH9_6xo1xrIQwnjpvaZ_iFRnKrl0m9L_3o2H3j7wo.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/W_QwicX4WJDR2dKB4QjdppG7EF6IIhCEhDAhLUwZVqX2aHDevpVSAuBbz3tV3zaTEtIeWbiE3At_usAvJ3fl5Fx3Rohme2aszYrChgGMn6oyTmHH9_6xo1xrIQwnjpvaZ_iFRnKrl0m9L_3o2H3j7wo.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/W_QwicX4WJDR2dKB4QjdppG7EF6IIhCEhDAhLUwZVqX2aHDevpVSAuBbz3tV3zaTEtIeWbiE3At_usAvJ3fl5Fx3Rohme2aszYrChgGMn6oyTmHH9_6xo1xrIQwnjpvaZ_iFRnKrl0m9L_3o2H3j7wo.png?resize=525%2C300&ssl=1 1.5x, https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2023\/09\/W_QwicX4WJDR2dKB4QjdppG7EF6IIhCEhDAhLUwZVqX2aHDevpVSAuBbz3tV3zaTEtIeWbiE3At_usAvJ3fl5Fx3Rohme2aszYrChgGMn6oyTmHH9_6xo1xrIQwnjpvaZ_iFRnKrl0m9L_3o2H3j7wo.png?resize=700%2C400&ssl=1 2x"},"classes":[]},{"id":20593,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2021\/09\/25\/herzlichen-gluckwunsch-sie-haben-gewonnen\/","url_meta":{"origin":21693,"position":4},"title":"HERZLICHEN GL\u00dcCKWUNSCH &#8211; Sie haben gewonnen!","author":"Eric Prytulla","date":"25. September 2021","format":false,"excerpt":"\u00dcber Social Engineering und wie man sich sch\u00fctzen kann. Jeder kennt E-Mails mit Titeln wie diesem. Eine wildfremde Person verspricht Gewinne in Millionenh\u00f6he. Und alles, was daf\u00fcr ben\u00f6tigt wird, sind ein paar pers\u00f6nliche Daten. Ein Traum vieler Menschen wird wahr und man will dem Titel glauben. Doch was passiert, wenn\u2026","rel":"","context":"In &quot;Allgemein&quot;","block_context":{"text":"Allgemein","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/allgemein\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2021\/09\/Spam.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":23579,"url":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/2022\/08\/30\/google-geodata-visualizer\/","url_meta":{"origin":21693,"position":5},"title":"Google Geodata Visualizer","author":"sk331","date":"30. August 2022","format":false,"excerpt":"Ein Projekt von Kai Kustermann, Michael Litschko, Sarah Mauff und Sebastian K\u00f6pp Einleitung Im Sommersemester 2022 haben wir uns als 4-k\u00f6pfige Gruppe dazu entschlossen, einen Google Geodata Visualizer zu erstellen. Das Projekt ist aus der Idee einer McDonald\u2019s-Achievement-Card entstanden. Die Idee war eine Website, die dem Benutzer anzeigt, welche McDonald\u2019s\u2026","rel":"","context":"In &quot;Cloud Technologies&quot;","block_context":{"text":"Cloud Technologies","link":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/category\/scalable-systems\/cloud-technologies\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/blog.mi.hdm-stuttgart.de\/wp-content\/uploads\/2022\/08\/16.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]}],"jetpack_sharing_enabled":true,"authors":[{"term_id":862,"user_id":1060,"is_guest":0,"slug":"lr066","display_name":"lr066","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/fd0d29839798bfd86d1450bc4173a498b8b6e01a50693692da5a4292dc401863?s=96&d=mm&r=g","0":null,"1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":""}],"_links":{"self":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/21693","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/users\/1060"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/comments?post=21693"}],"version-history":[{"count":2,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/21693\/revisions"}],"predecessor-version":[{"id":21846,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/posts\/21693\/revisions\/21846"}],"wp:attachment":[{"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/media?parent=21693"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/categories?post=21693"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/tags?post=21693"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mi.hdm-stuttgart.de\/index.php\/wp-json\/wp\/v2\/ppma_author?post=21693"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}