Skip to content
This repository was archived by the owner on Dec 12, 2025. It is now read-only.

Commit

Permalink
Merge pull request #18 from CLASS/main
Browse files Browse the repository at this point in the history
Update Azure branch
  • Loading branch information
jhicks authored Feb 7, 2022
2 parents 32a55bb + 23d266b commit 1a7edf0
Show file tree
Hide file tree
Showing 27 changed files with 1,019 additions and 881 deletions.
25 changes: 19 additions & 6 deletions Build.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,27 @@ This copies the contents of `content/_build/html/` to `docs/` so GitHub Pages wi

## GCP

Using Jupyter launched from a remote Visual Code Studio session inside GCP Cloud-Shell requires some local settings stored in `local.sh`, use the following as a template replacing the project and email with the proper vaules:
```
gcloud config set account student31@class.internet2.edu
export GOOGLE_CLOUD_PROJECT=just-armor-301114
export DEVSHELL_PROJECT_ID=$GOOGLE_CLOUD_PROJECT
gcloud config set project $GOOGLE_CLOUD_PROJECT
Checkout the project so it is not seen by the students. Run `./scripts/gcp-cloudshell.sh` to open the shell with the agent and ports 8080 and 8081 forwarded and run the following commands (onetime setup). Be sure to check the project and account values.

```bash
git clone git@github.internet2.edu:/CLASS/CLASS-Essentials.git .essentials
cd .essentials/
git checkout -b gcp-dev --track origin/gcp-dev

ACCOUNT=learner@class.internet2.edu
PROJECT=essentials-learner
cat > .essentials/local.sh <<EOF
gcloud config set account $ACCOUNT
export GOOGLE_CLOUD_PROJECT=$PROJECT
export DEVSHELL_PROJECT_ID=$PROJECT
gcloud config set project $PROJECT
EOF
```

Then run the following from your local machine (Make sure to shutdown from the web-gui as ctrl-c is not managed properly):
```bash
./scripts/gcp-cloudshell-jupyter-lab.sh
```
## AWS

Expect that `aws` is installed locally. A ssh-key named 'learner' is required to access the account.
Expand Down
173 changes: 173 additions & 0 deletions LICENSE.md

Large diffs are not rendered by default.

23 changes: 20 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,21 @@
# CLASS-core
Curriculum development for Cloud for Researchers, A Primer
# CLASS-Essentials
This is the repository for the CLASS Essentials Curriculum material for AWS, GCP and Azure.

For development see the [build instructions](Build.md).
# Contribution Workflow
We use a `Feature` branch workflow: each user works on a specific Feature branch associated with a specific cloud provider. The core idea behind the `Feature` Branch Workflow is that all feature development should take place in a dedicated branch instead of the main branch. The Feature branches in this repository currently are `aws-dev`, `gcp-dev`, and `azure-dev`. More information can be found on [this Atlassian page](https://www.atlassian.com/git/tutorials/comparing-workflows/feature-branch-workflow).

Best Practices:
1. Do not edit directly in a branch that you did not create. Use Github issues or pull requests to suggest or request changes.
2. Make pull requests before merging to main.

# Maintainers
[John Hicks](jhicks@internet2.edu)

[Tim Middlekoop](tmiddelkoop@internet2.edu)

[Ananya Ravipati](aravipati@internet2.edu)

[Amanda Tan](atan@internet2.edu)

# License
<a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://i.creativecommons.org/l/by-nc-sa/4.0/80x15.png" /></a><br />This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License</a>.
5 changes: 3 additions & 2 deletions content/AWS/01_intro_to_cloud_console.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,7 @@
"metadata": {},
"source": [
"```{admonition} Exercise\n",
":class: attention\n",
"\n",
"* What is your IAM username? \n",
"* Why is IAM important?\n",
Expand All @@ -111,7 +112,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
Expand All @@ -125,7 +126,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.10"
"version": "3.9.5"
}
},
"nbformat": 4,
Expand Down
4 changes: 2 additions & 2 deletions content/AWS/02_intro_to_compute.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -237,7 +237,7 @@
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
Expand All @@ -251,7 +251,7 @@
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.7.10"
"version": "3.9.5"
}
},
"nbformat": 4,
Expand Down
241 changes: 241 additions & 0 deletions content/AWS/02_intro_to_compute_part1.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,241 @@
{
"cells": [
{
"cell_type": "markdown",
"id": "dc57021c",
"metadata": {},
"source": [
"# Introduction to Elastic Cloud Compute (EC2) - Part 1\n",
"\n",
"\n",
"```{admonition} Overview\n",
":class: tip\n",
"\n",
"**Teaching:** 45 mins\n",
"\n",
"**Exercises:** 10 mins\n",
"\n",
"**Questions:**\n",
"* What is an EC2 instance?\n",
"* When would I use an EC2 instance?\n",
"* How do I launch an EC2 instance?\n",
"\n",
"**Objectives:**\n",
"* Understand the concept of virtual servers.\n",
"* Understand what an Elastic Cloud Compute (EC2) instance is.\n",
"* Understand how to launch an EC2 instance. \n",
"\n",
"```"
]
},
{
"cell_type": "markdown",
"id": "502f2360",
"metadata": {},
"source": [
"Recall that the two fundamental components of cloud computing is compute and storage. On AWS, a \"virtual server\" or \"virtual computer\" is known as an **Elastic Cloud Compute (EC2) instance**; sometimes it's called \"EC2\", sometimes it's called an \"instance\" to denote that the ability to build and terminate this server instantaneously, but they all mean the same thing. An EC2 instance is no different from a server that sits under your desk, or your local departmental cluster, or even your local HPC cluster. You even boot up an EC2 instance through the web console, install software and then shut down your instance just like you would a real computer, except that Amazon takes care of the physical machinery while you are in charge of process of creating the computer. In some sense, you can think of utilizing an EC2 instance as renting a server or computer from Amazon! \n",
"\n",
"In cloud jargon, the term **elasticity** denotes the ability to quickly expand or decrease computer processing, memory, and storage resources to meet changing demands. In that way, you can expand the size of your CPU, RAM and disk size on your EC2 instance almost instantenously. Since EC2 forms the backbone of most of AWS's core infrastructure, it is an important part of your cloud journey. \n",
" \n",
"\n",
"Let's walk through some of the steps on getting an EC2 instance up and running. \n"
]
},
{
"cell_type": "markdown",
"id": "bc5d082d",
"metadata": {},
"source": [
"We begin with the AWS console again. Under the \"Build a Solution\" panel, select `Launch a Virtual Machine`\n",
"\n",
"![Start page for the AWS console](images/console_ec2.png)\n",
"\n",
"This will then lead you through a series of steps to get a **Free Tier** EC2 instance up and running. \n",
"\n",
"```{admonition} Note\n",
":class: note\n",
"\n",
"AWS Free Tier refers to several of the services that AWS offers to help users gain more hands on experience on the AWS platform without being charged. [Click here](https://aws.amazon.com/free/?all-free-tier.sort-by=item.additionalFields.SortRank&all-free-tier.sort-order=asc&awsf.Free%20Tier%20Types=*all&awsf.Free%20Tier%20Categories=*all) for more info about the AWS Free Tier [external link] . \n",
"```\n",
"\n",
"There are 7 steps to walk through to create a new EC2 instance; we will go through each in detail: \n",
"1. Select an AMI\n",
"2. Choose Instance Type\n",
"3. Configure Instance \n",
"4. Add Storage\n",
"5. Add Tags\n",
"6. Configure Security Group\n",
"7. Review/Launch"
]
},
{
"cell_type": "markdown",
"id": "b9809503",
"metadata": {},
"source": [
"## 1. Select an AMI\n",
"\n",
"An Amazon Machine Image (AMI) is a template that Amazon uses to describe the operating system, disk type and all the software configuration that is needed to make sure a computer runs smoothly. Imagine that you are purchasing a new laptop; fresh out of the box, the laptop is pre-configured with an operating system (e.g. Windows, Mac OS, Ubuntu etc.), configuration files that tells the laptop what peripherals are attached, and pre-installed software like Adobe PDF reader. An AMI contains all this information so that your EC2 instance runs exactly like it would a new laptop out of the box! There is much more to learn about AMIs and how they can used for collaboration and data sharing but that is not within the scope of CLASS Essentials. \n",
"\n",
"As you scroll through the AMI list (Figure 2) you will notice that the list contains offerings from various vendors (e.g. Amazon, RedHat, Windows, etc.). We will be choosing the Ubuntu operating system for flexibility and versatility (can be used outside of the AWS ecosystem). \n",
"\n",
"To list all the Free Tier AMIs, check the box on the right that says ```Free tier only```.\n",
"\n",
"<img src=\"./images/ec2-ami.png\" width=720 align=\"center\">\n",
"\n",
"<div align=\"center\">Figure 2: Step 1 - Select an AMI - Free Tier Only </div><br/>\n",
"\n",
"Scroll to ```Ubuntu Server 20.04 LTS(HVM), SSD Volume Type``` (Figure 3). Select ```64-bit(x86)```. \n",
"\n",
"<img src=\"./images/ec2-ubuntu.png\" width=720 align=\"center\">\n",
"\n",
"<div align=\"center\">Figure 3: Step 1 - Select an AMI - Operating System Selection </div><br/>"
]
},
{
"cell_type": "markdown",
"id": "17597535",
"metadata": {},
"source": [
"## Step 2: Choose an Instance Type\n",
"\n",
"Choosing an instance type is choosing the hardware for your computing system: you get to pick the number of CPUs and memory size for your instance. \n",
"\n",
"Instance types are group by [**families**](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/instance-types.html) and denotes whether, for example, an instance is optimized for batch processing (compute-optimized, C-family), optimized for databases (memory-optimized, R-family) or has accelerated hardware (GPUs) for AI or Machine Learning pipelines. \n",
"\n",
"When you choose an Instance Type (Figure 3), the screen show additional information about the selected instance type including the number of CPUs, the memory size, the type of storage and information about networking. \n",
"\n",
"In the Instance Storage (GB) column, you will notice a term called **EBS**. EBS is the acronym for **Elastic Block Storage** and is analogous to the hard disk or boot drive on your personal computer or laptop. More details about EBS and different kinds of disk storage on EC2 instances are beyond the scope of CLASS Essentials. \n",
"\n",
"```{admonition} Note\n",
":class: note\n",
"The four most common types of storage you will encounter on AWS are: Elastic Block Storage (EBS), Elastic File Storage (EFS), Simple Storage Service (s3) and s3 Glacier. In the simplest terms, EBS is analogous to a computer hard drive and EFS is analogous to a network file system (NFS) or shared file system. s3 is AWS's object storage which is discussed [here](05_intro_to_cloud_storage). s3 Glacier is a cost-effective way of storing s3 files that you do not need to access frequently. \n",
"```\n",
"\n",
"Here will will select a ```t2.micro``` instance which is Free Tier Eligible but only has 1vCPU and 1 GiB of memory. The cost of running a t2.micro instance is "
]
},
{
"cell_type": "markdown",
"id": "4ee655a3",
"metadata": {},
"source": [
"![Choose an Instance Type](images/ec2-type.png)\n",
"\n",
"Select ```Next: Configure Instance Details```.\n",
"\n",
"## Step 3: Configure Instance Details\n",
"Step 3 in creating an EC2 instance involves a rudimentary understanding of several key AWS and cloud jargon (Figure 4). While delving deeper into some of the terminology is outside of the scope of CLASS Essentials, we go will through these terms in brief as we learn how to configure your EC2 instance. For the most part, we will **leave the settings as default**. CLASS Intermediate offers a more in depth discussion on cloud concepts. \n",
"\n",
"![Configure Instance Details](images/ec2-configure.png)\n",
"\n",
"**Number of instances** : This indicates how many instances you want to create at the same time. Here, we will leave the value as '1' but in actuality, you can can have up to 20 instances per region. \n",
"\n",
"```{admonition} Note\n",
":class: note\n",
"Recall that we learned about regions in the [previous chapter](./01_intro_to_cloud_console). \n",
"```\n",
"\n",
"**Purchasing Options** : Throughout your AWS journey, you will hear the term **Spot Instances**. Spot instances make use of the servers that go unused in AWS data centers to minimize costs. Recall that AWS has many data centers spread across the globe and not all their servers are utilized at 100% capacity at all times. Amazon uses Spot Instances as a flexible way to profit from extra capacity. Users have access to Spot Instances through a bidding process, sometimes users can save up to 90% off the on-deman compute instance this way! We will not expand much more on Spot Instances in CLASS Essentials but if you are interested, I2's CLASS Intermediate talks more "
]
},
{
"cell_type": "markdown",
"id": "9c874bad",
"metadata": {},
"source": [
"```{admonition} Exercise\n",
":class: attention\n",
"\n",
"* What kind of information is contained in an AMI? \n",
"* How do Spot Instances help you optimize costs?\n",
"````"
]
},
{
"cell_type": "markdown",
"id": "1b8642f4",
"metadata": {},
"source": []
},
{
"cell_type": "markdown",
"id": "ce945b0d",
"metadata": {},
"source": [
"## Step 4. Add Storage\n",
"\n",
"Storage on an EC2 instance is akin to a hard drive. Here we will leave the default settings but it is important to know that a hard drive on an EC2 instance is known as [Elastic Block Storage](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/AmazonEBS.html). EBS volumes behave like raw, unformatted block devices.\n",
"\n",
"<img src=\"./images/ec2-storage.png\" width=720 align=\"center\">"
]
},
{
"cell_type": "markdown",
"id": "55f4f9af",
"metadata": {},
"source": [
"## Step 5: Add Tags\n",
"\n",
"[Tags](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/Using_Tags.html) are labels that you assign to an AWS resource. Each tag consists of a key and an optional value, both of which you define.Tags enable you to categorize your AWS resources in different ways, for example, by purpose, owner, or environment. e\n",
"\n",
"<img src=\"./images/ec2-tags.png\" width=720 align=\"center\">\n"
]
},
{
"cell_type": "markdown",
"id": "bd0b7892",
"metadata": {},
"source": [
"## Step 6: Configure Security Group\n",
"\n",
"A [security group](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_SecurityGroups.html) acts as a virtual firewall for your EC2 instances to control inbound and outbound traffic. Again, we will not delve too much into networking protocols in CLASS Essentials. We will leave the default values of opening port 22 so that we can securely log in to the EC2 instance that we create. \n",
"\n",
"<img src=\"./images/ec2-sg.png\" width=720 align=\"center\">"
]
},
{
"cell_type": "markdown",
"id": "d4b441c6",
"metadata": {},
"source": [
"## Step 7: Review Instance Launch\n",
"\n",
"<img src=\"./images/ec2-launch.png\" width=720 align=\"center\">\n",
"\n",
"<img src=\"./images/ec2-sshkey.png\" width=720 align=\"center\">\n",
"\n",
"<img src=\"./images/ec2-confirm.png\" width=720 align=\"center\">"
]
},
{
"cell_type": "code",
"execution_count": null,
"id": "1e918e55",
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.9.5"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
Loading

0 comments on commit 1a7edf0

Please sign in to comment.