What is Zappa?
Zappa is a very lightweight and powerful tool which allows you to deploy and update python applications to AWS. Using Zappa you can host your WSGI app on AWS Lambda, API Gateway quickly.
Why do we need Zappa?
Generally, we prefer to use a VM to host our python application and the VM is costly compared to serverless technology because it will be up and running all the time and the cloud provider is billing us as per run time. Pricing based on the amount of computing power, storage, and time.
- Infinite scaling
- Zero downtime
- Zero maintenance
Serverless
Nowadays serverless is in a buzz. Actually without any server we can’t host our application there is a resource which is available on demand. "Serverless computing is a cloud computing execution model in which the cloud provider allocates machine resources on demand, taking care of the servers on behalf of their customers."
EC2 vs. Lambda
AWS EC2 is a service that provides traditional cloud infrastructure (IaaS) and allows us to run EC2 instances as VMs. AWS Lambda provides us a serverless architecture and allows you to run arbitrary event-driven code in the cloud after an event trigger is activated.
Alternative
There are many alternatives available for Zappa :
Flask with Zappa
Step 1: Create a project folder called “myflask".
> mkdir myflask
Step 2: Create a “requirements.txt” file inside of the myflask folder.
Flask==2.0.1
zappa==0.48.2
Step 3: Create Virtual Environment
>virtualenv env
Step 4: Activate Your env
(Windows) D:\zappaTest>env\Scripts\activate
(Mac) $ source env/bin/activate
Step 5: Install Dependencies in Environment
(env)> pip3 install -r requirements.txt
Step 6: Create an index.py file for Flask.
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return 'Hello, World!'
@app.route('/hello')
def hello_world1():
return 'Hello, World1!'
if __name__ == '__main__':
app.run(host="0.0.0.0", port=3000, debug=True)
Step 7: Test Flask
(env)> python3 index.py
Step 8: Create a Zappa configuration file.
(env)> zappa init
{
"dev": {
"aws_region": "ap-south-1",
"django_settings": "myproject.settings",
"profile_name": "default",
"project_name": "project",
"runtime": "python3.6",
"s3_bucket": "zappa-ga67u69nx"
}
}
Step 9: Setup your aws configure There is two ways to configure your aws credentials using AWS command or updating credentials file if you want to go with command then you must have awscli installed into your local machine if not install using
> pip3 install awscli
> aws configure
AWS Access Key ID [None]: AKIAIOSFODNN7EXAMPLE
AWS Secret Access Key [None]: wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
Default region name [None]: us-west-2
Default output format [None]: json
OR
> vi ~/.aws/credentials
[default]
aws_access_key_id = 'abc'
aws_secret_access_key = '123’
Step 10: Deploy Flask
(env)>zappa deploy
or
(env)>zappa deploy
Step 11: After Deploying Check Server Log
(env)D:\zappaTest>zappa tail
Step 12: Update Codebase
(env)D:\zappaTest>zappa update dev
Step 13: If you want to remove this project from aws
(env)D:\zappaTest>zappa undeploy
or
(env)D:\zappaTest>zappa undeploy