https://github.com/tyler-cromwell/sdp
Senior Design Project: AWS Cloud Project Management Application
https://github.com/tyler-cromwell/sdp
angular8 aws python3 typescript
Last synced: over 1 year ago
JSON representation
Senior Design Project: AWS Cloud Project Management Application
- Host: GitHub
- URL: https://github.com/tyler-cromwell/sdp
- Owner: tyler-cromwell
- License: mit
- Created: 2019-11-23T17:45:08.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-01-07T12:08:24.000Z (over 3 years ago)
- Last Synced: 2024-04-16T00:19:04.743Z (about 2 years ago)
- Topics: angular8, aws, python3, typescript
- Language: Python
- Homepage:
- Size: 2.12 MB
- Stars: 2
- Watchers: 4
- Forks: 2
- Open Issues: 25
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# SDP: AWS Cloud Project Management Application
An Angular 8 web application for managing collections of Amazon Web Services (AWS) resources.
This application serves as our Senior Design Project (SDP) for the Computer Science program at the University of Connecticut.
## Project Setup
Setup is completed in 2 parts. The first is to setup to deploy the backend infrastructure, and the second is to serve the frontend application.
### Backend
To deploy the backend, execute the following steps:
1. `cd aws/infra/` (from the project root directory)
2. `./main.py -p ` (for details, see `./aws/infra/README.md`)
3. `cp confidential.json ../../src/` (for details, see `./aws/infra/README.md`)
### Frontend
1. `cd ./src` (from the project root directory)
2. `ng serve --host --port <#>`
## Noteworthy AWS Behavior & Obstacles
1. DynamoDB tables must **NOT** be created with any keys other than the parition and sort keys, and their attributes must map 1-to-1.
Any other keys will automatically be added when data containing it is inserted into the table.
2. The `IntegrationHTTPMethod` key under `Integration` under `Properties` for a resource with type `AWS::ApiGateway::Method` must contain the value `POST`, regardless of the HTTP method it fulfills.
The actual method is specified with the key `HttpMethod` under `Properties`.
3. When creating an EC2 Instance, the default security group does not open any port for SSH.
To resolve this, a new security group that opens a desired port must be created.
4. EC2 instances can be instructed to run a **BASH** script once creation is completed (for an example, see the `UserData` key under the `add_ec2_instance` function in `./aws/infra/template.py` or the `addEC2Instance` function in `./src/template.ts`).
5. When CloudFormation is peforming an action with a status ending with `_IN_PROGRESS`, subsequent commands will **NOT** be queued and the client the initiated the request will **NOT** be notified.
Status updates must be **polled**.
6. CloudFormation does **NOT** namespace resources.
Therefore, if a resource with a certain name/id already exists in one CloudFormation stack, the creation of another resource with the same name/id in another stack will fail.
A simple workaround we applied was to prefix resource names & ids with the name of the stack.
7. **AWS Resource names have a character limit.**
8. CloudFormation stacks cannot be created without at least 1 resource defined.
Our solution is to track/store the template in the database.
On submission of an a resource creation form, check if a resource exists, and if not we create the stack, otherwise we update the stack.
However, **there is currently no logic that waits for the stack to finish creating/updating**.
## Last updated: 5/1/2020