AWS Serverless Services for Computation
AWS Serverless Services for Computation
Docker
- Docker is a software development platform to deploy apps
- Apps are packaged in containers that can be run on any OS
- Apps run the same, regardless of where they're run
- Any machine
- No compatibility issues
- Predictable behavior
- Less work
- Easier to maintain and deploy
- Works with any language, any OS, any technology
- Scale containers up and down very quickly (seconds)
Docker images and storage
- Docker images are stored in Docker Repositories
- Public: Docker Hub https://hub.docker.com/
- Find base images for many technologies or OS:
- Ubuntu
- MySQL
- NodeJS, Java ....
- Private: Amazon ECR (Elastic Container Registry)
Docker vs Virtual Machines
- Docker is "sort of" a virtualization technology, but not exactly
- Resources are shared with the host => many containers on one server
ECS
- ECS = Elastic Container Service
- Launch Docker containers on AWS
- You must provision & maintain the infrastructure (the EC2 instances)
- AWS takes care of starting/stopping containers
- Has integrations with the Application Load Balancer
Fargate
- Elastic Container Registry
- Private Docker Registry on AWS
- This is where you store your Docket images so they can be run by ECS or Fargate
- Same image can be used by multiple containers or each container can have there respective docker images.
Amazon EKS
- EKS = Elastic Kubernetes Service
- Allows you to launch managed Kubernetes clusters on AWS
- Kubernetes is an open-source system for management, deployment and scaling of containerized apps (Docker)
- Containers can be hosted on:
- EC2 instances
- Fargate (serverless)
- Kubernetes is cloud-agnostic - can be used in any cloud - Azure, GCP, AWS ... and even on on-premise) As it will create a cluster where containers will run and it make it environment friendly and independent.
Serverless
- Serverless is a new paradigm in which the developers don't have to manage servers anymore....
- They just deploy code
- They just deploy... functions!
- Initially... Serverless == FaaS (Function as a Service)
- Serverless was pioneered by AWS Lambda but now also includes anything that's managed: "databases, messaging, storage, etc..."
- Serverless does not mean there are no servers... it means you just don't manage/provision/see them
- some examples:
- Amazon S3
- DynamoDB
- Fargate
- Lambda
AWS Lambda
- EC2 key points:
- Virtual Servers in the cloud
- Limited by RAM and CPU
- Continuously running
- Scaling means intervention to add/remove servers
- Lambda key points:
- Virtual functions - no servers to manage!
- Limited by time - short executions
- Run on-demand
- Scaling is automated!
Benefits of Lambda
- Easy Pricing:
- Pay per request and compute time
- Free tier of 1,000,000 AWS Lambda requests and 400,000 GBs of compute time
- Integrated with the whole AWS suite of services
- Event-Driven: functions get invoked by AWS when needed
- Integrated with many programming languages
- Easy monitoring through AWS CloudWatch
- Easy to get more resources per functions (up to 10 GB of RAM!)
- Increasing RAM will also improve CPU and network!
- Languages supported:
- Node.js (JavaScript)
- Python
- Java
- C# (.NET Core)/Power-shell
- Ruby
- Custom Runtime API (community supported, example Rust or Golang)
- Lambda Container Image
- The container image must implement the Lambda Runtime API
- ECS/Fargate is preferred for running arbitrary Docker images
- Lambda support only up to some extend of image and containers. ( basically for Node.js and Python related ones)
- Some use cases of Lambda:
AWS Lambda Pricing: example
- Link: https://aws.amazon.com/lambda/pricing/
- Pay per calls:
- First 1,000,000 requests are free
- $0.20 per 1 million requests thereafter ($0.0000002 per request)
- Pay per duration: (in increment of 1 ms)
- 400,000 GB-seconds of compute time per month is FREE
- == 400,000 seconds if function is 1 GB RAM
- == 3,200.000 seconds if function is 128 RAM
- After that $1.00 for 600,000 GB-seconds
- It is usually very cheap to run AWS Lambda so it's very popular
Amazon API Gateway
- Helps in building a serverless API
- Fully managed service for developers to easily create, publish, maintain, monitor and secure APIs
- Serverless and scalable
- Supports RESTful APIs and WebSocket APIs
- Support for security, user authentication, API throttling, API keys, monitoring....
AWS Batch
- Fully managed batch processing at any scale
- Efficiently run 100,000s of computing batch jobs on AWS
- A "batch" job is a job with a start and an end (opposed to continuous)
- Batch will dynamically launch EC2 instances or Spot Instances
- AWS Batch provisions the right amount of compute/memory
- You submit or schedule batch jobs and AWS Batch does the rest!
- Batch jobs are defined as Docker images and run on ECS
- Helpful for cost optimizations and focusing less on the infrastructure
Batch vs Lambda
- Lambda
- Time limit
- Limited runtimes
- Limited temporary disk space
- Serverless
- Batch
- No time limit
- Any runtime as long as it's packaged as a Docker image
- Rely on EBS/instance store for disk space
- Relies on EC2 (can be managed by AWS)
Amazon Lightsail
- It is a kind of standalone service
- Virtual servers, storage, databases and networking
- Low & predictable pricing
- Simpler alternative to using EC2, RDS, ELB, EBS, Route 53...
- Great for people with little cloud experience!
- Can setup notifications and monitoring of your Lightsail resources
- Use cases:
- Simple web applications (has templates for LAMP, Nginx, MEAN, Node.js...)
- Websites (templates for WordPress, Magento, Plesk, Joomla)
- Dev/Test environment
- Has high availability but no auto-scaling, limited AWS integrations
Summary
- Docker: container technology to run applications
- ECS: run Docker containers on EC2 instances
- Fargate:
- Run Docker containers without provisioning the infrastructure
- Serverless offering (no EC2 instances)
- ECR: Private Docker Images Repository
- Batch: run batch jobs on AWS across managed EC2 instances
- Lightsail: predictable & low pricing for simple application & DB stacks
- Lambda:
- Serverless, Function as a Service, seamless scaling, reactive
- Lambda billing:
- By the time run x by the RAM provisioned
- By the number of invocations
- Language Support: many programming languages except (arbitrary) Docker
- Invocation time: up to 15 minutes
- Use cases:
- Create Thumbnails for images uploaded onto S3
- Run a Serverless CRON job
- Can be used for any application which will complete within 15 minutes timeline.
- API Gateway: expose Lambda functions as HTTP API






Comments
Post a Comment