A serverless security system built with AWS Services NOTE: This project is a work in progress
This security system sacrifices video livestreaming for the benefit of a serverless (more affordable) architecture. Additionally, the removal of livestreaming allows for less cpu requirements of each camera, and in turn a better video capture.
A "Client" is more-or-less a camera + computer that has the purpose of recording footage and periodically sending it to the cloud storage.
Little or no video processing is done at the client-side to allow "weak" computers (such as a raspberry pi) to act as the client.
See more in the Client README.
Cloud computing resources (such as AWS Lambda) run and process the footage recorded by each client.
The most essential resources are:
- S3 - store configuration file and videos uploaded by clients.
- Lambda - Handle file uploads to S3 (record client data). Remove videos that are not important (i.e., do not have any motion). Also serve as the backend (API) for interacting with the system.
- DynamoDB - store data related to users.
See more in the Cloud README.
- Docker-based client "application" that records footage of x min intervals.
- Some kind of authentication will be needed so that setting up a client to have permissions to upload files to S3 bucket.
- CRON-interval processes where the "client" syncs the footage to an S3 bucket.
- CRON-interval processes at the cloud-level where footage is "processed" and potentially disposed.
To deploy the Cloudformation stack with all necessary AWS resources, simply add a
In your AWS Account, create a new IAM Role with the permissions you deem necessary. This must include Cloudformation and S3. Refer to GitHub's docs for Configuring OpenID Connect in AWS for guidance.
Add the following secrets via Repository settings > Secrets > Actions.
IAM_ROLE_ARN
containing your IAM Role ARN from step 1.
To trigger a deploy, simply commit changes to the main
branch. You may also trigger a deploy within the Actions tab on the repository.