{"id":597,"date":"2025-01-26T07:22:25","date_gmt":"2025-01-26T07:22:25","guid":{"rendered":"https:\/\/datadandies.nl\/?p=597"},"modified":"2025-06-05T06:30:17","modified_gmt":"2025-06-05T06:30:17","slug":"using-aws-cdk-to-create-a-cloud-reservation-system","status":"publish","type":"post","link":"https:\/\/datadandies.nl\/index.php\/2025\/01\/26\/using-aws-cdk-to-create-a-cloud-reservation-system\/","title":{"rendered":"Using AWS CDK to create a cloud reservation system"},"content":{"rendered":"\n<p>Some time ago I developed a reservation system using AWS CDK. Potential customers can visit a website that contains a calendar, click on a date, click on a time and finally, enter their email address. A confirmation email will be sent to their address right after the reservation.<\/p>\n\n\n\n<p>I built this infrastructure using an S3 bucket (static hosting), a Lambda Function, a DynamoDB table, an API Gateway and Simple Email Service. CloudFormation is used for the deployment of the mentioned constructs and CloudWatch is used for monitoring and logging.<\/p>\n\n\n\n<p>The flow of a reservation submission is as follows:<\/p>\n\n\n\n<ol class=\"wp-block-list\" type=\"1\">\n<li>User accesses the static website hosted on S3.&nbsp;<\/li>\n\n\n\n<li>User submits a reservation through the website.<\/li>\n\n\n\n<li>The submission is sent to the API Gateway endpoint.&nbsp;<\/li>\n\n\n\n<li>API Gateway triggers the Lambda function.<\/li>\n\n\n\n<li>The Lambda function processes the reservation, writes it to DynamoDB, and sends a confirmation email via SES.<\/li>\n<\/ol>\n\n\n\n<p>This entire solution only costs a few cents a month at this point.<\/p>\n\n\n\n<p>Below you can find an overview of the architecture.<\/p>\n\n\n\n<p>I am sharing this partly because I\u2019d like you to see how relatively easy and cheap it can be to build a complete solution like this reservation system. With only a few AWS resources you can create an entire system from scratch that is always available. No infrastructure to maintain.<\/p>\n\n\n\n<p>It wasn\u2019t all unicorns and rainbows though. The thing that bugged me the most during this project was the entire DNS stuff. What a pain that was to figure out. <\/p>\n\n\n\n<p>Shoot me a message if your interested in learning more.<\/p>\n\n\n<div class=\"ead-preview\"><div class=\"ead-document\" style=\"position: relative;padding-top: 90%;\"><div class=\"ead-iframe-wrapper\"><iframe src=\"\/\/docs.google.com\/viewer?url=https%3A%2F%2Fdatadandies.nl%2Fwp-content%2Fuploads%2F2025%2F01%2Fdata_flow_diagram_eetbare_avonturen_aws_met_omschrijving.pdf&amp;embedded=true&amp;hl=en\" title=\"Ingesloten document\" class=\"ead-iframe\" style=\"width: 100%;height: 100%;border: none;position: absolute;left: 0;top: 0;visibility: hidden;\"><\/iframe><\/div>\t\t\t<div class=\"ead-document-loading\" style=\"width:100%;height:100%;position:absolute;left:0;top:0;z-index:10;\">\n\t\t\t\t<div class=\"ead-loading-wrap\">\n\t\t\t\t\t<div class=\"ead-loading-main\">\n\t\t\t\t\t\t<div class=\"ead-loading\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/datadandies.nl\/wp-content\/plugins\/embed-any-document\/images\/loading.svg\" width=\"55\" height=\"55\" alt=\"Lader\">\n\t\t\t\t\t\t\t<span>Bezig met laden&#8230;<\/span>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t\t<div class=\"ead-loading-foot\">\n\t\t\t\t\t\t<div class=\"ead-loading-foot-title\">\n\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/datadandies.nl\/wp-content\/plugins\/embed-any-document\/images\/EAD-logo.svg\" alt=\"EAD logo\" width=\"36\" height=\"23\"\/>\n\t\t\t\t\t\t\t<span>Duurt het te lang?<\/span>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<p>\n\t\t\t\t\t\t\t<div class=\"ead-document-btn ead-reload-btn\" role=\"button\">\n\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/datadandies.nl\/wp-content\/plugins\/embed-any-document\/images\/reload.svg\" alt=\"Opnieuw laden\" width=\"12\" height=\"12\"\/> Laad het document opnieuw\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t<span>|<\/span>\n\t\t\t\t\t\t\t<a href=\"https:\/\/datadandies.nl\/wp-content\/uploads\/2025\/01\/data_flow_diagram_eetbare_avonturen_aws_met_omschrijving.pdf\" class=\"ead-document-btn\" target=\"_blank\">\n\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/datadandies.nl\/wp-content\/plugins\/embed-any-document\/images\/open.svg\" alt=\"Open\" width=\"12\" height=\"12\"\/> Openen in nieuwe tab\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t<\/div>\n\t\t<\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>Some time ago I developed a reservation system using AWS CDK. Potential customers can visit a website that contains a calendar, click on a date, click on a time and finally, enter their email address. A confirmation email will be sent to their address right after the reservation. I built this infrastructure using an S3&hellip;<\/p>\n<p class=\"more-link\"><a href=\"https:\/\/datadandies.nl\/index.php\/2025\/01\/26\/using-aws-cdk-to-create-a-cloud-reservation-system\/\" class=\"themebutton\">Read More<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[43,56,58,57,63,37],"class_list":["post-597","post","type-post","status-publish","format-standard","hentry","category-blog","tag-aws","tag-cdk","tag-html","tag-javascript","tag-project","tag-python"],"_links":{"self":[{"href":"https:\/\/datadandies.nl\/index.php\/wp-json\/wp\/v2\/posts\/597","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/datadandies.nl\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/datadandies.nl\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/datadandies.nl\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/datadandies.nl\/index.php\/wp-json\/wp\/v2\/comments?post=597"}],"version-history":[{"count":1,"href":"https:\/\/datadandies.nl\/index.php\/wp-json\/wp\/v2\/posts\/597\/revisions"}],"predecessor-version":[{"id":599,"href":"https:\/\/datadandies.nl\/index.php\/wp-json\/wp\/v2\/posts\/597\/revisions\/599"}],"wp:attachment":[{"href":"https:\/\/datadandies.nl\/index.php\/wp-json\/wp\/v2\/media?parent=597"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/datadandies.nl\/index.php\/wp-json\/wp\/v2\/categories?post=597"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/datadandies.nl\/index.php\/wp-json\/wp\/v2\/tags?post=597"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}