# Module 6: Compute # Section 1: Compute services overview ## AWS compute services * Amazon EC2: * resizable virtual machine * Amazon EC2 auto-scaling: * define conditions to launch or terminate EC2 instances * Amazon ECR: * store and retrieve Docker images * Amazon ECS: * Container orchestration service that supports Docker * VMWare Cloud on AWS: * hybrid cloud without custom hardware * AWS Elastic Beanstalk: * run and manage web app * AWS Lambda: * serverless compute solution * Amazon EKS: * run managed kubernetes on AWS * Amazon LightSail: * building app or website * AWS Batch: * running batch job at any scale * AWS Fargate: * run containers * AWS Outpost: * run AWS services in your on-premises data center * AWS Serverless Repository: * discover, deploy and publish application ## Categorizing compute services ![](https://i.imgur.com/z7zqR0F.png) ## Choosing the optimal compute service * The optimal compute service or services that you use will depend on your use case * Some aspects to consider * What is your application design ? * What are your usage pattern ? * Which configuration settings wll you want to manage ? * Selecting the wrong compute solution for an architecture can lead to lower performance efficiency * A good starting place: understand the available compute options # Section 2: Amazon EC2 ## Amazon Elastic Compute Cloud (Amazon EC2) Example uses of Amazon EC2 instances: * App server * web server * Database server * Game server * Mail server * Media server * Catalog server * File server * Computing server * Proxy server ## Amazon EC2 overview * Amazon Elastic Compute Cloud (Amazon EC2) * Provides *virtual machines* (EC2 instance) in the cloud * Fives you *full control* over the guest operating system (Windows or Linux) on each instance * You can launch instances of any size into and Availability Zone anywhere in the world * Launch instance from **Amazon Machine Images (AMIs)** * Launch instances with a few clicks or a line of code, and they are ready in minutes * You can control traffic to and from instances ## Launching an amazon EC2 instance ![](https://i.imgur.com/DmTue3H.png) :::danger Nine key decisions when creating a EC2 instance. ::: ### 1. Select an AMI * Amazon Machine Image (AMI) * Is a template that is used to create an EC2 instance * Contains a *Windows* or *Linux* OS * Often has some software pre-installed * AMI choices: * Quick Start * Linux and Windows AMIs provided by AWS * My AMIs * Any AMIs that you created * AWS Marketplace * Pre-configured templates from third parties * Community AMIs * AMIs shared by others; use at you own risk ![](https://i.imgur.com/c44uFKW.png) ## 2. Select an instance type * Consider you use case * How will the EC2 instance you create be used ? * The **instance type** that you choose determines * Memory (RAM) * Processing power (CPU) * Disk space and disk type (Storage) * Network performance * Instance type categories * General purpose * Compute optimized * Memory optimized * Storage optimized * Accelerated computed * Instance types offer *family, generation* and *size* ### Instance type naming and sizes ![](https://i.imgur.com/gZw3M91.png) ### Based on use case ![](https://i.imgur.com/dmrwck2.png) ### Networking features * The network bandwith (GBps) varies by instance type * To maximize networking and bandwith performance of your instance type * If you have interdependent instances, launch them into a *cluster placement group* * Enable enhanced networking * Enhanced networking types are supported on most instance types * Enhanced networking types * Elastic Network Adapter (ENA): Supports network speeds of up to 100 Gpbds * Intel 82599 Virtual Function interface: Supports network speeds of up to 10 Gbps # Section 3: Amazon EC2 Part 2 ## 3. Specify network settings * Where should the instance be deployed ? * Identify the VPC and optinally the **subnet** * Should a *public IP address* be automatically assigned ? * To make it internet-accessible ![](https://i.imgur.com/iGkPSkO.png) ## 4. Attach IAM role (optional) * Will software on the EC2 insrance need to interact with other AWS services ? * If yes, attach an appropriate IAM Role * An AWS Identity and Access Management (IAM) role that is attache to an EC2 instance is kept in an **instance profile** * You are *not* restricted to attaching a role only at instance launch * You can also attach a role to an instance that already exists ## 5. User data script (optional) * Optionally specify a user data script at instance launch * Use **user data** scripts to customize the runtime environment of your instance * Script executes the first time the instance starts * Can be used strategically * Reduce the number of custom AMIs that you build and maintain ![](https://i.imgur.com/BDZFCdy.png) ## 6. Specify storage * Configure the *root volume* * Where the guest operating system is installed * Attach *additional storage volumes* (optional) * AMI might already include more than one volume * For each volume, specify: * The *size* of the disk (in GB) * The *volume type* * Different types of SSDs and HDDs are available * If the volume will be deleted when the instance is terminated * If *encryption* should be used ### Amazon EC2 storage options * **Amazon Elastic Block Store (Amazon EBS)** * *Durable*, block-level storage volumes * You can stop the instance and start it again, and the data will still be there * **Amazon Elastic Block Store** * Storage is provided on disls that are attached to the host computer where the EC2 instance is running * *If the instance stops, data stored here is deleted* * Other options for storage (not for root volume) * Mount an **Amazon Elastic File System (Amazon EFS)** file system * Connect to **Amazon Simple Storage Service (Amazon S3)** ### Example storage options ![](https://i.imgur.com/Zmr9PqP.png) * **Instance 1** characteristics * It has an **Amazon EBS** *root volume* type for the operating system * What will happen if the instance is stopped and then started again ? * The OS volume would survive * Any data stored on Amazon EBS would remain intact * Any data stored in ephemeral volume 1 would be lost * **Instance 2** characteristics * It has an **Instance Store** *root volume* type for the operating system * What will happen if the instance stops (because of user error or a system malfunction)? * All data stored in ephemeral volume 2 would be lost, including the OS # Section 4: Amazon EC2 Part 3 ## 7. Add tags :::info A **tag** is a label that you can assign to an AWS resource * Consists of a *key* and an optional *value* ::: * Tagging is how you can attach **metadata** to an EC2 instance * Potential benefits from tagging - Filtering, automation, cost allocation and access control ## 8. Security group settings :::info A **security group** is a *set of firewall rules* that control traffic to the instance. * It exsists *outside* of the instance's guest OS ::: Create **rules** that specify the **source** and which **ports** that network communications can use. * Specify the **port** number and the **protocol**, such as TCP, UDP or ICMP * Specify the **source** that is allowed to use the rule ## 9. Identify the key pair * At instance launch, you specify an existing key pair *or* create a new key pair * A **key pair** consists of * A *public key* that AWS stores * A *private key* file that you store * It enables secure connections to the instance * For **Windows AMIs** * Use the private key to obtain the administrator password that you need to log in to your instance * For **Linux AMIs** * Use the private key to use SSH to securely connect to your instance ## Amazon EC2 console view of a running EC2 instance ![](https://i.imgur.com/bvUS8HI.png) ## Another option: Launch an EC2 instance with the AWS CLI * EC2 instances can also be created programmatically ``` bash aws ec2 run-instances --image0id ami-1a2b3c4d --count 1 --instance-type c3.large \ --key-name MyKeyPair --security-groups MySecurityGroup --region us-east-1 ``` This example shows how simple the command can be. * This command assumes that the key pair and security group already exists * More option could be specified ## Amazon EC2 instance lifecycle ![](https://i.imgur.com/5L6u6Ef.png) ## Consider using an Elastic IP address * **Rebooting** an instanc will *not* change any IP addresses or DNS hostnames * When an instance will *not* change any IP addresses or DNS hostnames * When an instance is **stopped** and then **started** again * The *public* IPv4 address and *external* DNS hostname will change * The *private* IPv4 address and internal DNS hostname do *not* change * If you require a persistent public IP address * Associate an *Elastic IP address* with the instance * Elastic IP address characteristics * Can be associated with instances in the Region as needed * Remains allocated to your account until you choose to release it ## EC2 instance metadata :::info It is data about your instance ::: * While you are connected to the instance, you can view it * In a browser: `http://169.254.169.254/latest/meta-data/` * In a terminal window: `curl http://169.254.169.254/latest/meta-data/` * Example retrievable values * Public IP address, private IP address, public hostname, instance ID, security groups, Region, Availability zone * Any user data specified at instance launch can also be accesse at: `http://169.254.169.254/latest/user-data/` * It can be used to configure or manage a running instance * For example, author a configuration script that read the metadata and uses to configure applications or OS settings ## Amazon CloudWatch for monitoring * Use **Amazon CloudWatch** to monitor EC2 instances * Provides near-real-time metrics * Provides charts in the Amazon EC2 console **Monitoring** tab * Maintains 15 months of historical data * **Basic monitoring** * Default, no additional cost * Metric data sent to CloudWatch every 5 minutes * **Detailed monitoring** * Fixed monthly rate for seven pre-selected metrics * Metric data delivered every 1 min # Section 5: Amazon EC2 Cost Optimization ## Amazon EC2 pricing models * **On-Demand Instances** * Pay by the hour * No long-term commitments * Elligible for the AWS Free Tier * **Dedicated Hosts** * A physical server with EC2 instance capacity fully dedicated to your use * **Dedicated instances** * Instances that run in a VPC on a hardware that is dedicated to a single customer * **Reserverd Instances** * Full, partial, or no upfront payment for instance you reserve * Discount on hourly charge for that instance * 1-year or 3-year term * **Scheduled Reserverd Instances** * Purchase a capacity reservation that is always available on a recurring schedule you specify * 1-year term * **Spot Instances** * Instances run as long as they are available and your bid is above the Spot Instance price * They can be interrupted by AWS with a 2-minute notification * Interruption options include terminated, stopped or hibernated * Prices can be significantly less expensive compared to On-Demand Instances * Good choice when you have flexibility in when your applications can run ### Benefits |On-Demand Instances|Spot Instances|Reserved Instances|Dedicated Hosts| |-|-|-|-| |Low cost and flexibility|Large scale, dynamic workload|Predictability ensures compute capacity is available when needed|Save money on licensing costs </br> Help meet compliance and regulatory requirements| ### Use cases ![](https://i.imgur.com/MTwEnD8.png) ## The 4 pillars of cost optimization ![](https://i.imgur.com/o80PPDm.png) ### Pillar 1: Right size * Provision instances to match the need * CPU, memory, storage and network throughput * Selct appropriate *instance types* for your use * Use Amazon CloudWatch metrics * How idle are instances? When * Downsizze instances * Best practice: right size, then reserve ### Pillar 2: Increase elasticity * **Stop** or **hibernate** amazon EBS-backed instances that are not actively in use * Example: non-production development or test instances * Use **automatic scaling** to match needs base on usage * Automated and time-based elasticity ### Pillar 3: Optimal pricing model * Leverage the right pricing model for your use case * Consider your usage patterns * Optimize and *combine* purchase types * Examples: * Use *On-Demand Instance* and *Spot Instances* for variable workloads * Use *Reserved Instances* for predictable workloads * Consider serverless solutions (AWS Lambda) ### Pillar 4: Optimize storage choices * Reduce cost while maintaining storage performance and availability * Resixe EBS volumes * Changes EBS volumes types * Can you meet performance requirements with less expensive storage ? * Example: *Amazon EBS Throughput Optimized HDD (st1)* storage typically costs half as much as the default *General Purpose SSD (gp2)* storage option * Delete EBS snapshots that are no longer needed * Identify the most appropriate destination for specific types of data * Does the app need the instance to reside on Amazon EBS ? * Amazon S3 storage options with lifecycle policies can reduce costs ## Measure, monitor and improve * Cost optimization is an ongoing process * Recommendations * Define and enforce *cost allocation tagging* * Define metrics, set targets, and review regularly * Encourage teams to *architect for cost* * Assign the responsibility of optimization to an individual or to a team # Section 6: Container services ## Container basics :::info **Containers** are a method of *operating system virtualization* ::: Benefits: * Repeatable * Self-contained environments * Software runs the same in different environments * Developer's laptop, test, prod * Faster to launch and stop or terminate than virtual machines ## What is Docker ? :::info **Docker** is a software platform that enables you to build, test, and deploy app quickly. ::: * You run containers on Docker * Containers are created from a template called an *image* * A **container** has everything a software app needs to run ## Containers vs VMs ![](https://i.imgur.com/DOQg5IG.png) ## Amazon Elastic Container Service (Amazon ECS) :::info A highly scalable, fast, **container management service**. ::: * Key benefit * Ocherstartes the running of Docker containers * Maintains and scales the fleet of nodes that run your containers * Removes the complexity of standing up the infrastucture * Integrated with features that are familiar to Amazon EC2 service users * Elastic Load Balancing * Amazon EC2 security groups * Amazon EBS volumes * IAM roles ## Amazon ECS orchestrates containers ![](https://i.imgur.com/wWOJIm0.png) ## Amazon ECS cluster options ***Do you want to manage the Amazon ECS cluster that runs the containers ?*** * Yes: create an **Amazon ECS cluster backed by Amazon EC2** * Provides more granular control over infrastructure * No: create an **Amazon ECS cluster back by AWS Fargate** * Easier to maintain, focus on your app ![](https://i.imgur.com/8RoRRbC.png) ## What is Kubernetes ? * Kubernetes is open source software for containers orchestration * deploy and **manage containerized app** *at scale* * The same toolset can be used on premises and in the cloud * Complements Docker * Docker enables you to run mutliple containers on a single OS host * Kubernetes **orchestrates** mutliple Docker hosts (nodes) * Automates * Container provisioning * Networking * Load distribution * Scaling ## Amazon Elastic Kubernetes Service (Amazon EKS) * EKS * Enables you to run Kubernetes on AWS * Certified Kubernetes conformant * Supports Linux and Windows containers * Compatible with Kubernetes community tools and add-ons * Use Amazon EKS to * Manage clusters of Amazon EC2 instances * Run containers that ar ochestrated by Kubernetes on those instances ## Amazon Elastic Container Registry (Amazon ECR) :::info **Amazon ECR** is a fully managed Docker *container registry* that makes it easy for developpers to store, manage and deploy Docker container images. ::: * Supports * Team collab * Acces control * Third party integration * Possible to use with Amazon EKS # Section 7: Introduction to AWS Lambda ## AWS Lambda: Run code without servers :::info AWS Lambda is a **serverless** compute service. ![](https://i.imgur.com/FYn7GSD.png) ::: ## Benefits of Lambda * Supports multiple programming languages * Completely automated administration * Built-in fault tolerance * Supports orchestration of multiple functions * Pay-per-use pricing ## AWS Lambda event sources ![](https://i.imgur.com/7AId32R.png) ## AWS Lambda function configuration * Create lambda function: give a name * Runtime environment * Python * Node.js * Execution role to grant IAM permission to the function to interact with other services * Configure the function * adding a trigger * Add function code * Specify the memory in megabytes (up to 3008MGB) * Specify env variable ![](https://i.imgur.com/x5RcitN.png) ## Schedule-based Lambda function example: start and stop EC2 instances ![](https://i.imgur.com/fbBO9ok.png) ## Envent-based Lambda function example: create thumbnail images ![](https://i.imgur.com/Roh5j63.png) ## AWS Lambda limits Soft limits per Region * Concurrent executions = 1,000 * Function and layer storage = 75GB Hard limits for individual function: * Max function memory alloc = 3,008 MB * Function tiemout = 15 min * Deployement package size = 250 MB unzipped, including layers # Section 8: Introduction to AWS Elastic Beanstalk ## AWS Elastic Beanstalk * An easy way to get *web app* up and running * A *managed service* that automatically handles * Infra provisionning and config * Deployement * Load balancing * Automatic scaling * Health monitoring * Analysis and debugging * Logging * No additional charge for Elastic Beanstalk * Pay only for the underlying ressources that are used ## AWS Elastic Beanstalk deployements * Supports web app written for common platforms * Java, .NET, PHP, Node.js, Python, Ruby, Go and Docker * You upload your code * Elastic Beanstalk automatically handles the deployement * Deploys on servers such as Apache, NGINX, Passenger, Puma, and Microsoft Internet Information Services (IIS) ## Benefits of Elastic Beanstalk ![](https://i.imgur.com/pkBcTWY.png) # Wrap-up Which AWS service helps developers quickly deploy resources which can make use of different programming languages, such as .Net and Java ? 1. AWS CloudFormation 2. AWS SQS 3. AWS Elastic Beanstalk 4. Amazon Elastic Compute Cloud (Amazon EC2) :::spoiler Answer Keywords: * developers quickly deploy resources * different programming languages Answer 3. :::