An AWS set-up to automatically upload Zoom recordings to your S3 bucket for persistent storage, while recovering zoom recording storage limits.
This tool is beneficial for Zoom Pro users who need to store recording to a persistent storage like S3. Since this tool uses a Lambda function, the maximum size of file that can be processed is 500 MB (equal to /tmp storage provided by AWS Lambda). For files of greater size, modifications would be required to use ECS Fargate instead of a Lambda function.
Use AWS SAM CLI to deploy this application. Clone this repository, and using SAM CLI from inside the cloned folder, execute:
sam build
(Requires python3.7/pip)sam deploy --guided --capabilities CAPABILITY_NAMED_IAM
(Requires AWS credentials)
You may need to configure your AWS User credentials usingaws configure
(using AWS CLI) prior to deploy step.
Other than this, you can also set this up directly using AWS CloudFormation by creating a stack. Note that the Lambda code may need to be inputted into template.yaml
file (InlineCode) or set up separately.
Refer to the Zoom Recording Completed webhook and follow the instructions as given to set up the webhook. Your API Gateway endpoint which needs to be configured on Zoom Marketplace can be found in your CloudFormation stack -> Outputs OR using command aws cloudformation describe-stacks --stack-name <name of your stack>
-> Stacks -> 0 -> Outputs -> OutputValue (where OutputKey is "ZoomRecordingCompleteWebhookUrl").
This template deploys resources needed for creating an API Gateway endpoint to receive request from Zoom Recording Completed webhook, forward them to SQS queue, and upload the files to S3 bucket using a lambda function. Files must be less than 500MB in size.
The list of parameters for this template:
Type: String
Default: Release
Description: Name of the stage of API Gateway. Affects the endpoint URL.
Type: String
Description: Bucket name of S3 bucket to store recordings to. Bucket is created if "Create bucket" parameter is "true". Note that bucket name must be unique globally if creating a new bucket.
Type: String
Description: "true" if creating a new bucket, "false" if reusing an existing bucket.
The list of resources this template creates:
Type: AWS::ApiGateway::RestApi Creates an API Gateway endpoint which can be configured on Zoom to receive events whenever a new recording is available.
Type: AWS::ApiGateway::Resource
Type: AWS::ApiGateway::Method
Type: AWS::ApiGateway::Method
Type: AWS::ApiGateway::Deployment
Type: AWS::SQS::Queue
Queue to temporarily store requests and remove duplicates if any during the webhook call. Also allows lambda to run for greater than the API gateway timeout by decoupling them.
Type: AWS::IAM::Role
Type: AWS::S3::Bucket
Conditional resource which creates bucket if "CreateNewS3Bucket" parameter is "true".
Type: AWS::Serverless::Function
Lambda function which downloads the recording locally and uploads into S3.
The list of outputs this template exposes:
Description: API Gateway endpoint URL which will be called by Zoom whenever there is a new recording available.
PRs are welcome.
- Delete recording from Zoom to open up storage space automatically after successful upload.
- Error handling for failure scenarios (for eg. currently Zoom HTML page is downloaded if video link is incorrect).
- Notification using SNS/SES on status
- Deleting files from local /tmp directly in Lambda to make space for other files within the same recording
- Using ECS Fargate (serverless) for files larger than 500MB