Skip to content

Latest commit

 

History

History
95 lines (73 loc) · 4.86 KB

README.md

File metadata and controls

95 lines (73 loc) · 4.86 KB

TechConf Registration Website

Project Overview

The TechConf website allows attendees to register for an upcoming conference. Administrators can also view the list of attendees and notify all attendees via a personalized email message.

The application is currently working but the following pain points have triggered the need for migration to Azure:

  • The web application is not scalable to handle user load at peak
  • When the admin sends out notifications, it's currently taking a long time because it's looping through all attendees, resulting in some HTTP timeout exceptions
  • The current architecture is not cost-effective

In this project, you are tasked to do the following:

  • Migrate and deploy the pre-existing web app to an Azure App Service
  • Migrate a PostgreSQL database backup to an Azure Postgres database instance
  • Refactor the notification logic to an Azure Function via a service bus queue message

Dependencies

You will need to install the following locally:

Project Instructions

Part 1: Create Azure Resources and Deploy Web App

  1. Create a Resource group
  2. Create an Azure Postgres Database single server
    • Add a new database techconfdb
    • Allow all IPs to connect to database server
    • Restore the database with the backup located in the data folder
  3. Create a Service Bus resource with a notificationqueue that will be used to communicate between the web and the function
    • Open the web folder and update the following in the config.py file
      • POSTGRES_URL
      • POSTGRES_USER
      • POSTGRES_PW
      • POSTGRES_DB
      • SERVICE_BUS_CONNECTION_STRING
  4. Create App Service plan
  5. Create a storage account
  6. Deploy the web app

Part 2: Create and Publish Azure Function

  1. Create an Azure Function in the function folder that is triggered by the service bus queue created in Part 1.

    Note: Skeleton code has been provided in the README file located in the function folder. You will need to copy/paste this code into the __init.py__ file in the function folder.

    • The Azure Function should do the following:
      • Process the message which is the notification_id
      • Query the database using psycopg2 library for the given notification to retrieve the subject and message
      • Query the database to retrieve a list of attendees (email and first name)
      • Loop through each attendee and send a personalized subject message
      • After the notification, update the notification status with the total number of attendees notified
  2. Publish the Azure Function

Part 3: Refactor routes.py

  1. Refactor the post logic in web/app/routes.py -> notification() using servicebus queue_client:
    • The notification method on POST should save the notification object and queue the notification id for the function to pick it up
  2. Re-deploy the web app to publish changes

Monthly Cost Analysis

Complete a month cost analysis of each Azure resource to give an estimate total cost using the table below:

Azure Resource Service Tier Monthly Cost
Azure Postgres Database Single Server US$162.19
Azure App Service Basic Tier; 1 B1 US$13.14
Azure Functions US$0.00
Sendgrid Variable (100 free messages/month) US$0.00
Storage Account US$21.95
Service Bus Basic tier: 0 million messaging operations/mo US$0.00
Estimated monthly cost US$197.28

Architecture Explanation

Using the Web App service for deployment eliminates several costs:

  • Management of costs.
  • Infrastructure management is simplified.
  • Scaling options have been improved for both vertical and horizontal requirements.
  • This deployment enabled the creation of a decoupled application through the use of a microservices architecture.

The following advantages resulted from the use of Azure Functions:

  • Design of microservices.
  • Management of costs.
  • Infrastructure management is simplified.
  • Capability for rapid deployment.
  • Modification of the endpoint options is simple.
  • Cost savings across the board, easy extensibility of the product design, and simplified management of the deployment process.