Skip to content

AWS CRUDDUR Cloud Project - A full-stack Cloud/CRUD - based messaging app.

Notifications You must be signed in to change notification settings

HillaryUgwu/aws-cruddur

Repository files navigation

AWS Cruddur: A Cloud-based full stack application

  • Application: Cruddur
  • Cohort: 2023-A1

This is the starting codebase that will be used in the FREE AWS Cloud Project Bootcamp 2023

Cruddur Graphic

Cruddur Screenshot

Architecture

The architecture of the project is described in the below diagram: Cruddur architecture diagram

AWS services used

The application is deployed on AWS utilizing several AWS services. The backend uses a Flask-based Python application deployed to a Docker container running on ECS Fargate.

Frontend uses ReactJs statically hosted on S3, then cached and distributed via CloudFront.

The application is instrumented using X-Ray as an observability tool.

Amplify and Cognito are used for decentralized authentication.

RDS Postgres database is used for user data storage. DynamoDB and DynamoDB Stream are used as a single table design for real-time messaging and conversation updates.

A hosted zone on Route 53 is linked to the custom domain cloudproject.online. Application load balancer is used to forward requests to the frontend and backend containers.

Serverless image processing is implemented using API Gateway, two Lambda functions, presigned URL, S3 and CloudFront.

CodePipeline, CodeBuild and CodeDeploy are used for CI/CD.

The first version of the project was completed by partially clicking through the AWS console and utilising AWS CLI. Later on, the infrastructure was re-created using CloudFormation. Additionally, the serverless image processing was implemented with AWS CDK using Typescript.

Third-party tools that were used

Honeycomb's OpenTelemetry Flask instrumentation was used as an observability tool for distributed tracing. It was very straightforward to instrument and easy to use.

Rollbar was configured to be used for monitoring and bug-tracking.

Instructions

At the start of the bootcamp you need to create a new Github Repository from this template.

Journal

The /journal directory contains

Vscode setting.json

{
    "workbench.colorTheme": "Predawn",
    "workbench.iconTheme": "ayu",
    "python.defaultInterpreterPath": "/usr/bin/python3",
    "python.formatting.provider": "black",
    "workbench.editor.highlightModifiedTabs": true,
    "editor.formatOnSave": true,
    "python.linting.enabled": true,
    "python.linting.pylintEnabled": true,
    "code-runner.executorMap": {
        "python": "$pythonPath -u $fullFileName"
    },
    "code-runner.clearPreviousOutput": true,
    "code-runner.showExecutionMessage": false,
    "code-runner.ignoreSelection": true,
    "code-runner.saveFileBeforeRun": true,
    "editor.quickSuggestionsDelay": 100,
    "zenMode.centerLayout": false,
    "zenMode.fullScreen": false,
    "zenMode.hideLineNumbers": false,
    "zenMode.hideTabs": false,
    "editor.minimap.enabled": false,
    "workbench.settings.openDefaultSettings": true,
    "workbench.settings.editor": "json",
    "workbench.settings.useSplitJSON": true,
    "workbench.statusBar.feedback.visible": false,
    "workbench.startupEditor": "newUntitledFile",
    "[python]": {
        "editor.formatOnType": true
    }
}