Skip to content

Commit

Permalink
Add different solutions to AWS exercises
Browse files Browse the repository at this point in the history
Not only console solutions, but also Terraform and Pulumi.

In addition, this change fixes issues bregman-arie#279 and bregman-arie#280
  • Loading branch information
abregman committed Aug 24, 2022
1 parent 591ef74 commit 03a92d5
Show file tree
Hide file tree
Showing 17 changed files with 210 additions and 46 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

:information_source:  This repo contains questions and exercises on various technical topics, sometimes related to DevOps and SRE

:bar_chart:  There are currently **2393** exercises and questions
:bar_chart:  There are currently **2402** exercises and questions

:books:  To learn more about DevOps and SRE, check the resources in [devops-resources](https://github.com/bregman-arie/devops-resources) repository

Expand Down
48 changes: 35 additions & 13 deletions topics/aws/README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# AWS

**Note**: Provided solutions are using the AWS console. It's recommended you'll use IaC technologies to solve the exercises (e.g. Terraform, Pulumi).<br>
**2nd Note**: Some of the exercises cost money and can't be performed using the free tier/resources
**2nd Note**: Some of the exercises cost $$$ and can't be performed using the free tier/resources

- [AWS](#aws)
- [Exercises](#exercises)
Expand All @@ -15,6 +15,7 @@
- [Containers](#containers)
- [Lambda](#lambda)
- [Elastic Beanstalk](#elastic-beanstalk)
- [CodePipeline](#codepipeline)
- [Misc](#misc)
- [Questions](#questions)
- [Global Infrastructure](#global-infrastructure)
Expand All @@ -39,6 +40,7 @@
- [Disaster Recovery](#disaster-recovery)
- [CloudFront](#cloudfront)
- [ELB](#elb-1)
- [ALB](#alb)
- [Auto Scaling Group](#auto-scaling-group)
- [Security](#security-1)
- [Databases](#databases-1)
Expand All @@ -58,6 +60,7 @@
- [Production Operations and Migrations](#production-operations-and-migrations)
- [Scenarios](#scenarios)
- [Architecture Design](#architecture-design)
- [Misc](#misc-2)

## Exercises

Expand Down Expand Up @@ -1395,15 +1398,17 @@ True. AWS responsible for making sure ELB is operational and takes care of lifec
</b></details>

<details>
<summary>Which load balancer would you use for services which use HTTP or HTTPS traffic?</summary><br><b>
<summary>What's a "listener" in regards to ELB?</summary><br><b>
</b></details>

Application Load Balancer (ALB).
<details>
<summary>What's a "target group" in regards to ELB?</summary><br><b>
</b></details>

<details>
<summary>True or False? With ALB (Application Load Balancer) it's possible to do routing based on query string and/or headers</summary><br><b>
<summary>Which load balancer would you use for services which use HTTP or HTTPS traffic?</summary><br><b>

True.
Application Load Balancer (ALB).
</b></details>

<details>
Expand Down Expand Up @@ -1440,7 +1445,7 @@ For example, port `2017` and endpoint `/health`.

<details>
<summary>Which type of AWS load balancer is used in the following drawing?<br>
<img src="images/aws/identify_load_balancer.png" width="300px;" height="400px;"/>
<img src="../../images/aws/identify_load_balancer.png"/>
</summary><br><b>

Application Load Balancer (routing based on different endpoints + HTTP is used).
Expand Down Expand Up @@ -1525,12 +1530,6 @@ False. This is only supported in Classic Load Balancer and Application Load Bala
With cross zone load balancing, traffic distributed evenly across all (registered) instances in all the availability zones.
</b></details>

<details>
<summary>True or False? For application load balancer, cross zone load balancing is always on and can't be disabled</summary><br><b>

True
</b></details>

<details>
<summary>True or False? For network load balancer, cross zone load balancing is always on and can't be disabled </summary><br><b>

Expand All @@ -1540,7 +1539,7 @@ False. It's disabled by default
<details>
<summary>True or False? In regards to cross zone load balancing, AWS charges you for inter AZ data in network load balancer but no in application load balancer</summary><br><b>

False. It charges fir inter AZ data in network load balancer, but not in application load balancer
False. It charges for inter AZ data in network load balancer, but not in application load balancer
</b></details>

<details>
Expand All @@ -1555,6 +1554,20 @@ True
The period of time or process of "draining" instances from requests/traffic (basically let it complete all active connections but don't start new ones) so it can be de-registered eventually and ELB won't send requests/traffic to it anymore.
</b></details>

#### ALB

<details>
<summary>True or False? With ALB (Application Load Balancer) it's possible to do routing based on query string and/or headers</summary><br><b>

True.
</b></details>

<details>
<summary>True or False? For application load balancer, cross zone load balancing is always on and can't be disabled</summary><br><b>

True
</b></details>

### Auto Scaling Group

<details>
Expand Down Expand Up @@ -3157,3 +3170,12 @@ Network Load Balancer

You can use an ElastiCache cluster or RDS Read Replicas.
</b></details>

### Misc

<details>
<summary>What's an ARN?</summary><br><b>

ARN (Amazon Resources Names) used for uniquely identifying different AWS resources.
It is used when you would like to identify resource uniqely across all AWS infra.
</b></details>
11 changes: 8 additions & 3 deletions topics/aws/exercises/new_vpc/exercise.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
## AWS VPC - My First VPC
# My First VPC

### Objectives
## Objectives

1. Create a new VPC
1. It should have a CIDR that supports using at least 60,000 hosts
1. It should have a CIDR that supports using at least 60,000 hosts
2. It should be named "exercise-vpc"

## Solution

Click [here](solution.md) to view the solution
Empty file.
10 changes: 10 additions & 0 deletions topics/aws/exercises/new_vpc/pulumi/__main__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import pulumi
import pulumi_awsx as awsx

vpc = awsx.ec2.Vpc("exercise-vpc", cidr_block="10.0.0.0/16")

pulumi.export("vpc_id", vpc.vpc_id)
pulumi.export("publicSubnetIds", vpc.public_subnet_ids)
pulumi.export("privateSubnetIds", vpc.private_subnet_ids)

# Run 'pulumi up' to create it
25 changes: 19 additions & 6 deletions topics/aws/exercises/new_vpc/solution.md
Original file line number Diff line number Diff line change
@@ -1,17 +1,30 @@
## AWS VPC - My First VPC
# My First VPC

### Objectives
## Objectives

1. Create a new VPC
1. It should have a CIDR that supports using at least 60,000 hosts
1. It should have a CIDR that supports using at least 60,000 hosts
2. It should be named "exercise-vpc"

### Solution
## Solution

#### Console
### Console

1. Under "Virtual Private Cloud" click on "Your VPCs"
2. Click on "Create VPC"
3. Insert a name (e.g. someVPC)
3. Insert a name - "exercise-vpc"
4. Insert IPv4 CIDR block: 10.0.0.0/16
5. Keep "Tenancy" at Default
6. Click on "Create VPC"

### Terraform

Click [here](terraform/main.tf) to view the solution

### Pulumi - Python

Click [here](pulumi/__main__.py) to view the solution

### Verify Solution

To verify you've create the VPC, you can run: `aws ec2 describe-vpcs -filters Name=tag:Name,Values=exercise-vpc`
11 changes: 11 additions & 0 deletions topics/aws/exercises/new_vpc/terraform/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
resource "aws_vpc" "exercise-vpc" {
cidr_block = "10.0.0.0/16"

tags = {
Name = "exercise-vpc"
}
}

output "vpc-id" {
value = aws_vpc.exercise-vpc.id
}
3 changes: 2 additions & 1 deletion topics/aws/exercises/subnets/exercise.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@

### Requirements

Single newly created VPC
1. Single newly created VPC
2. Region with more than two availability zones

### Objectives

Expand Down
27 changes: 27 additions & 0 deletions topics/aws/exercises/subnets/pulumi/__main__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
import pulumi
import pulumi_aws as aws

availableZones = pulumi_aws.get_availability_zones(state="available")

aws.ec2.Subnet("NewSubnet1",
vpc_id=aws_vpc["main"]["id"],
cidr_block="10.0.0.0/24",
availability_zone=availableZones.names[0],
tags={"Name": "NewSubnet1"}
)

aws.ec2.Subnet("NewSubnet2",
vpc_id=aws_vpc["main"]["id"],
cidr_block="10.0.1.0/24",
availability_zone=availableZones.names[1]
tags={"Name": "NewSubnet2"}
)

aws.ec2.Subnet("NewSubnet3",
vpc_id=aws_vpc["main"]["id"],
cidr_block="10.0.2.0/24",
availability_zone=availableZones.names[2]
tags={"Name": "NewSubnet3"}
)

# Run "pulumi up"
37 changes: 23 additions & 14 deletions topics/aws/exercises/subnets/solution.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,27 @@
## AWS VPC - Subnets
# AWS VPC - Subnets

### Requirements
## Requirements

Single newly created VPC
1. Single newly created VPC
2. Region with more than two availability zones

### Objectives
## Objectives

1. Create a subnet in your newly created VPC
1. CIDR: 10.0.0.0/24
2. Name: NewSubnet1
1. CIDR: 10.0.0.0/24
1. Name: NewSubnet1
2. Create additional subnet
1. CIDR: 10.0.1.0/24
2. Name: NewSubnet2
3. Different AZ compared to previous subnet
1. CIDR: 10.0.1.0/24
2. Name: NewSubnet2
3. Different AZ compared to previous subnet
3. Create additional subnet
1. CIDR: 10.0.2.0/24
2. Name: NewSubnet3
3. Different AZ compared to previous subnets
4. CIDR: 10.0.2.0/24
5. Name: NewSubnet3
6. Different AZ compared to previous subnets

### Solution
## Solution

#### Console
### Console

1. Click on "Subnets" under "Virtual Private Cloud"
2. Make sure you filter by your newly created VPC (to not see the subnets in all other VPCs). You can do this in the left side menu
Expand All @@ -37,3 +38,11 @@ Single newly created VPC
13. Set the subnet name to "NewSubnet3"
14. Choose a different AZ
15. Set CIDR to 10.0.2.0/24

### Terraform

Click [here](terraform/main.tf) to view the solution

### Pulumi - Python

Click [here](pulumi/__main__.py) to view the solution
49 changes: 49 additions & 0 deletions topics/aws/exercises/subnets/terraform/main.tf
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# Variables

variable "vpc_id" {
type = string
}

# AWS Subnets

resource "aws_subnet" "NewSubnet1" {
cidr_block = "10.0.0.0/24"
vpc_id = var.vpc_id
availability_zone = data.aws_availability_zones.all.names[0]
tags = {
Purpose: exercise
Name: "NewSubnet1"
}
}

resource "aws_subnet" "NewSubnet2" {
cidr_block = "10.0.1.0/24"
vpc_id = var.vpc_id
availability_zone = data.aws_availability_zones.all.names[1]
tags = {
Purpose: exercise
Name: "NewSubnet2"
}
}

resource "aws_subnet" "NewSubnet3" {
cidr_block = "10.0.2.0/24"
vpc_id = var.vpc_id
availability_zone = data.aws_availability_zones.all.names[2]
tags = {
Purpose: exercise
Name: "NewSubnet3"
}
}

# Outputs

output "NewSubnet1-id" {
value = aws_subnet.NewSubnet1.id
}
output "NewSubnet2-id" {
value = aws_subnet.NewSubnet2.id
}
output "NewSubnet3-id" {
value = aws_subnet.NewSubnet3.id
}
25 changes: 17 additions & 8 deletions topics/kubernetes/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,21 @@

## Kubernetes Questions

* [Kubernetes 101](#kubernetes-101)
* [Kubernetes Hands-On Basics](#kubernetes-hands-on-basiscs)
* [Kubernetes Cluster](#kubernetes-cluster)
* [Kubernetes Pods](#kubernetes-pods)
* [Kubernetes Deployments](#kubernetes-deployments)
* [Kubernetes Services](#kubernetes-services)
- [Kubernetes](#kubernetes)
- [Kubernetes Exercises](#kubernetes-exercises)
- [Kubernetes Questions](#kubernetes-questions)
- [Kubernetes 101](#kubernetes-101)
- [Kubernetes - Hands-On Basics](#kubernetes---hands-on-basics)
- [Kubernetes - Cluster](#kubernetes---cluster)
- [Pods](#pods)
- [Deployments](#deployments)
- [Services](#services)
- [Ingress](#ingress)
- [Kubernetes - Security](#kubernetes---security)
- [Kubernetes - Troubleshooting Scenarios](#kubernetes---troubleshooting-scenarios)
- [Kubernetes - Submariner](#kubernetes---submariner)
- [Kubernetes - Istio](#kubernetes---istio)
- [Kubernetes - Scenarios](#kubernetes---scenarios)

## Kubernetes 101

Expand Down Expand Up @@ -161,9 +170,9 @@ False. A Kubernetes cluster consists of at least 1 master and can have 0 workers

<details>
<summary>Place the components on the right side of the image in the right place in the drawing<br>
<img src="images/kubernetes_components.png"/>
<img src="images/cluster_architecture_exercise.png"/>
</summary><br><b>
<img src="images/kubernetes_components_solution.png"/>
<img src="images/cluster_architecture_solution.png"/>
</b></details>

<details>
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed topics/kubernetes/images/kubernetes_components.png
Binary file not shown.
Binary file not shown.
Loading

0 comments on commit 03a92d5

Please sign in to comment.