From 84bcc4f07ff74e05238d647cfbd878a45d1ccf71 Mon Sep 17 00:00:00 2001 From: Daivd Kuo <52212633+twdavidkuo@users.noreply.github.com> Date: Wed, 29 Oct 2025 02:33:33 +0000 Subject: [PATCH] week9 draft1 --- lessons/09_cloud_AI/09_cloud_AI.md | 361 ++++++++++++++++++ lessons/09_cloud_AI/resources/app.py | 68 ++++ .../resources/resource_group_animation.gif | Bin 0 -> 54964 bytes 3 files changed, 429 insertions(+) create mode 100644 lessons/09_cloud_AI/09_cloud_AI.md create mode 100644 lessons/09_cloud_AI/resources/app.py create mode 100644 lessons/09_cloud_AI/resources/resource_group_animation.gif diff --git a/lessons/09_cloud_AI/09_cloud_AI.md b/lessons/09_cloud_AI/09_cloud_AI.md new file mode 100644 index 0000000..25aa15a --- /dev/null +++ b/lessons/09_cloud_AI/09_cloud_AI.md @@ -0,0 +1,361 @@ +# Learning Objective ++ In this class, you will + + Learn how to manage computing resources on the cloud + + Understand the fundamental concepts related to deploying applications on the cloud + + Host your own cloud application with OpenAI's API + +# Table of Contents +1. [Managing Cloud Resources](#1-managing-cloud-resources) +2. [Deploy Applications on the Cloud](#2-deploy-applications-on-the-cloud) +3. [Hands-on Activity: Your First Cloud AI Application](#3-hands-on-activity-your-first-cloud-ai-application) +4. [Wrap-up](#4-wrap-up) + +# 1. Managing Cloud Resources + ++ **What is a resource group?** + In Azure, a resource group is a collection of resource, such as virtual machines and storage, that is managed with the same rules. You can set one lifecycle, netrowking, or auto-scale policy and apply them to all the resource in the same resource group so that you don't have to specify the rule every time you start a new virtual machine. + ++ **Region and Project** + In addition to resource group, you will also need to specify the region and project. A **region** is where your resources are physically located: if you select US East, that means the machines running your code are physically located in a data center somewhere in the US East region. + + In Azure, a **project** is not a fixed object but rather a concept that can be implemented using tags, naming conventions, or resource groups. For example, you can use a tag like `project:CustomerPortal` to group resources related to a specific project. This allows you to filter, organize, and report on resources across multiple resource groups or subscriptions. + + + **Warning: One resource group is bound to one region** + This means that, by default, all of your resources will be running from the same region. However, this does not mean you cannot manage multiple resources across regions. You can create multiple resource groups in different regions to distribute your resources geographically. For example, you might have one resource group in `East US` for low-latency access to users on the East Coast and another in `West Europe` for European users. While resources within a single resource group are typically optimized for the same region, cross-region management is possible using Azure's global tools, such as Azure Resource Manager (ARM) templates or the Azure CLI. + ++ **Resource Management Accross Platform** + Notice that resource group, project, and region exist in GCP, AWS, and Azure, but there are some minor differences. In Azure, a resource group is a logical container for resources, while in AWS, a similar concept is implemented using tags and organizational units. GCP uses projects as the primary organizational unit, which combines the functionality of Azure's resource groups and subscriptions. Regions, on the other hand, are consistent across all three platforms, representing the physical location of data centers, but the naming conventions and available regions may vary slightly between providers. + ++ **Manage Resource Group:** + Azure provide the following ways to manage resources so you can choose whichever is most convenient to work with. The following is a simple summary of Azure's resource group management taken from Azure's website + + + **Azure Portal:** + A graphic user interface where you can login to your Azure account and manage the resources with mouse and keyboard. The following is a quick snapshot of creating a resource group with Azure portal. + ![Create Resource Group](resources/resource_group_animation.gif) + + **Command Line Interface (Azure CLI, Azure Powershell)** + Azure, AWS, GCP all have built-in command line tool so that you can manage resources with bash or powershell syntax. For instance, we can create resource group called `exampleGroup` in `westus` region with the following command: + `az group create --name exampleGroup --location westus` + We can also delete the resource group we just created like this: + `az group delete --name exampleGroup` + + + **Python API** + Most of the cloud providers also have python APIs so that you can manage your resources with python code. For instance, the same create and delete operations could be done in the following python API: + + Create resource group + ``` + import os + from azure.identity import AzureCliCredential + from azure.mgmt.resource import ResourceManagementClient + + credential = AzureCliCredential() + subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"] + + resource_client = ResourceManagementClient(credential, subscription_id) + + rg_result = resource_client.resource_groups.create_or_update( + "exampleGroup", + { + "location": "westus" + } + ) + + print(f"Provisioned resource group with ID: {rg_result.id}") + ``` + + Delete Resource Group + ``` + import os + from azure.identity import AzureCliCredential + from azure.mgmt.resource import ResourceManagementClient + + credential = AzureCliCredential() + subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"] + + resource_client = ResourceManagementClient(credential, subscription_id) + + rg_result = resource_client.resource_groups.begin_delete("exampleGroup") + ``` + + **Warning** + The Python API allows you to control the resources without logging into your Azure account so that you can control your resources from your personal computer or anywhere else. However, you will need to have valid API keys corresponding to your account and configure them properly. + ++ Read the following page in Azure for more details: + + [Azure: Manage Resource Group](https://learn.microsoft.com/en-us/azure/azure-resource-manager/management/manage-resource-groups-portal) + + +# 2. Deploy Applications on the Cloud ++ **Select the right machines**: + Azure, AWS, and GCP offer myriad ways to host an application, and choosing the right service for your application is critical to the performance and cost! The following are some common types of services to host your application: + ++ **Virtual Machines** + Virtual machines (VMs) provide a flexible and scalable way to host applications by emulating physical hardware. You can choose the operating system, configure the environment, and install software as needed. VMs are ideal for applications requiring full control over the server or legacy software that cannot run in modern containerized environments. However, they require more management effort, such as patching and scaling, compared to other options. + + **Warning: Operating System and Bash Scripting** + Notice that by default, most of the virtual machines are working on Linux based operating systems (so does most of the CLI tools!). As a result, knowing the basic bash scripts will help tremendously while working with cloud. If you are unfamiliar with bash scripting, the following is a good reference and practice. + https://www.w3schools.com/bash/bash_commands.php + ++ **Containerized Compute** + Containerized compute services, such as Kubernetes or Docker, allow you to package applications and their dependencies into lightweight, portable containers. These containers can run consistently across different environments, making them ideal for microservices architectures and CI/CD workflows. Container orchestration platforms like Azure Kubernetes Service (AKS) or AWS Elastic Kubernetes Service (EKS) simplify scaling, deployment, and management. Containers are more resource-efficient than VMs but may require expertise in containerization and orchestration. + ++ **Serverless API Endpoint** + Hosting API endpoints is essential for applications that expose functionality to external clients or other services. Cloud providers offer managed services like Azure Functions, AWS Lambda, or Google Cloud Functions to host APIs without worrying about server management. Comparing to virtual machines, serverless managed services will handle the CPU, RAM, operating systems for you, so all you need to worry is your code (and cost). These serverless solutions automatically scale based on demand and charge only for the compute time used. They are ideal for lightweight, event-driven applications but may not be suitable for long-running or resource-intensive tasks. + ++ **Batch Data Processing** + Batch data processing services are designed for applications that handle large volumes of data in scheduled or on-demand jobs. Examples include Azure Batch, AWS Batch, and Google Cloud Dataflow. These services are ideal for tasks like ETL (Extract, Transform, Load), machine learning model training, or video rendering. They provide high scalability and cost efficiency by distributing workloads across multiple compute nodes. However, they are not suitable for real-time processing and require careful job configuration to optimize performance. + + + +# 3. Hands-on Activity: Your First Cloud AI Application + +This short guide walks through creating a resource group and provisioning a virtual machine (VM) on Azure. We will use the Azure Portal (web interface) for the first step and the Azure Command-Line Interface (CLI) for the second step. The goal is to get a working cloud computer ready to host a small Python app. + +## Step 1: Create a Resource Group +As we saw last week, a *resource group* is a container that holds related resources for an Azure project. You can think of it like a project folder that will contain everything associated with your cloud computer, such as the virtual machine, its network, and its public IP address. -- add more details here and link to rg discussion from azure -- + +Creating a resource group first keeps your resources organized and makes it easy to delete everything later when you are done (so you do not continue being charged for any of those resources!). + +### How to do it + +1. Go to [https://portal.azure.com](https://portal.azure.com) and sign in. +2. In the left sidebar or search bar, type **Resource group** and select it. +3. Click **+ Create**. +4. Under the **Basics** tab: + - **Subscription**: choose your default subscription (David: not sure how this will work for CTD students we should figure this out). + - **Resource group name**: `ctd-ai-rg` (stands for code the dream ai resource group) + - **Region**: choose one close to you, such as `East US` or `Central US`. +5. (Optional) Under **Tags**, you can add name-value pairs,e.g. + - `project = ctd-ai` + - `owner = ` +6. Click **Review + create**, then **Create**. + +When the deployment finishes, you will have a resource group ready to hold your virtual machine. You can confirm by returning to **Resource groups** in the portal and checking that `ctd-ai-rg` appears in the list. You can also list all resource groups in your account from the command line with: `az group list --output table` + +## Step 2: Provision the Virtual Machine + +A **virtual machine (VM)** is your cloud computer. It runs an operating system, such as Ubuntu Linux, on Azure hardware. *Provisioning* a VM means creating and configuring it, including network rules and disk size. We will use the Cloud Shell to create the VM. We already set things up last week so we have a persistent shell, with a cloud drive mounted and created SSH keys for authentication. + +We will create a small, low-cost Ubuntu server. Replace `` with your name in all commands below. You can copy and paste everything into the Cloud Shell at once. + +First we will set up some convenience variables to use in some of the remaining steps. You will need to replace some of them with your values (e.g., what location did you set up your resource group, etc). This is a useful pattern to use generally (for instance if you ever automate deployments or need to build up resources using scripts): + + +```bash +RG="ctd-ai-rg" # resource group name +VMNAME="ctd-ai-vm" # desired vm name +LOCATION="eastus" # you might need to change this +USERNAME="azureuser" # +MY_IP=$(curl -s ifconfig.me) #ip address of your computer +``` + +To see the values of these later, you can use the `echo` command, e.g., `echo $RG`. + +Now let's create the virtual machine. Wait until you actually want to use it, because unlike the resource group this will spin up a running compute instance (VM) that will start to generate charges in the cloud :dollar: + +```bash +az vm create \ + --resource-group $RG \ + --name $VMNAME \ + --image Ubuntu2204 \ + --size Standard_B1ms \ + --os-disk-size-gb 30 \ + --admin-username $USERNAME \ + --ssh-key-values ~/.ssh/id_rsa.pub \ + --tags project=ctd-ai owner=eric \ + --public-ip-sku Standard \ + --output yaml +``` + +### What we just did +The parameters we just used in setting up the VM: + +- `--resource-group`: puts the VM inside the resource group you just created. +- `--image Ubuntu2204`: uses Ubuntu Linux 22.04 +- `--size Standard_B1ms`: creates a small, cost-efficient VM. +- `--os-disk-size-gb 30`: sets a 30 GB system disk. +- `--ssh-key-values ~/.ssh/id_rsa.pub`: uses public ssh key you made last week +- `--public-ip-sku Standard`: gives your VM a static, routable IP address. +- `--tags`: attaches metadata for organization. +- `--output yaml` tells azure api to create human-readable output when command runs + +This command takes a few minutes (you will see a `Running` message while it deploys). When it finishes, you will see output containing information about the VM, including its public IP address. + +View and Manage Virtual Machines ++ Via Portal: + 1. In the search bar, enter virtual machine + 2. Click and go to page for virtual machines + 3. You should be able to view the status of the virtual machine you just created as well as manage it + ++ Via Command Line: + 1. Open Azure Cloud Shell + 2. Make sure you are using the bash shell + 3. Enter `az vm list --output table` to view all VMs in tabular format + +You can also select the relevant VMs based on image, region, disk size, project and other metrics in both CLI and portal. For more details, take a look at the following learning resources: [Azure Training on Virtual Machines](https://learn.microsoft.com/en-us/training/modules/provision-linux-virtual-machine-in-azure/) + +### Availability zones and NSGs +There were a couple of properties, not discussed above, that were set implicitly when we created the VM: + +#### Availability zones +Azure lets you decide how much redundancy you want when creating a virtual machine. As a failsafe, you can use *availability sets* or *zones* to spread copies of the same VM across different physical hardware or datacenters so that if one server fails, another will keep running. For our purposes, we only needed the default of a single, inexpensive development VM. This keeps costs and complexity low. + +#### Network security groups +Every VM in Azure sits behind a small virtual firewall called a network security group (NSG). Inbound port rules (into the VM) control which kinds of network traffic are allowed to reach the VM. By default, Azure automatically adds a rule that opens port 22 so we can connect securely using our SSH key pair. Later, if we run a Streamlit app or web server, we'll need to open an additional port (usually 8501 or 80) so that others can view our application in a browser. By setting `--generate-ssh-keys` as we did above, Azure implicitly created an NSG rule allowing inbound SSH (port 22) for your public key authentication. + +Note using this default rule, anyone on the internet could attempt to connect to your VM over port 22. To tighten security for our VM, we could add a new NSG rule so that only connections coming from your own public IP address are allowed. If we were in a high traffic production environment, we would do this, but for this little lesson, the default rules are good enough. + +### Enable automatic shutdown +In production, where an application needs to stay online continuously, auto-shutdown is rarely used (or wanted). In a classroom setting, or when learning to use a cloud system, however, it can be crucial for keeping costs under control and ensuring cloud resources are used efficiently. Otherwise, VMs will just run continuously, accumulating charges even if they are not being used! + +Azure does not let you enable auto-shutdown during VM creation. It must be configured afterward as a separate step, either in the portal under **Operations → Auto-shutdown** or by using the CLI. This setting makes sure your VM automatically powers off at a set time each day so you do not accumulate unnecessary charges if you forget to stop it manually. + + +The following enable automatic shutdown at 7:00 PM local time. + +```bash +az vm auto-shutdown \ + --resource-group $RG \ + --name $VMNAME \ + --time 1900 \ + --email "" +``` +You can change the shutdown hour if needed. The shutdown time follows the time of the Azure region your VM is in (for this example, Eastern US). As mentioned, this shutdown will recur *each day*. + +To restart the VM, you can do it from the portal (go to the VM and click `Start`), or from the Cloud Shell using the `az vm start` command: + + `az vm start --resource-group $RG --name $VMNAME` + + + +## Step 3: Create Application + +### Connect to VM +We will use Azure's built-in SSH connection to open a terminal *directly inside your VM*. Until now, you have been using *Cloud Shell*, which runs on a temporary container. When you connect to your **VM**, you are now working on your own persistent computer in the cloud. + +To ssh into your VM: + +1. In the Azure Portal, open your VM (for example, `ctd-ai-vm`). +2. Click **Connect**. +3. Scroll down to **More ways to connect**. +4. Click the icon labeled **SSH using Azure CLI**. + + +A cli window will open at the bottom of the screen. + +It is also possible to connect and manage the virual machines with your SSH key from your personal computer or other machines. However, this require additional configurations and might pose some security risk. **Warning: You should never expose your SSH key to the internet or commit your keys to code repos! Your keys should be managed separately from your code!** + +For more details about connecting to your virtual machines, visit Azure's guide on [Connect to Virtual Machines](https://learn.microsoft.com/en-us/azure/virtual-machines/linux-vm-connect?tabs=Linux) + + + + +### Set up virtual environment +Now that you are connected to your Virtual Machine (VM), we will set up your project directory and Python environment on the VM itself. This is the kind of thing you do locally all the time when setting up Python projects, the main difference now is you will be doing it on a remote computer (VM) in the cloud. + +Everything here runs inside the VM terminal window that opened when you connected. + +In what follows we will create a directory to store our project, create a virtual environment, and download our application and .env file that stores our openai api key. + +```bash +mkdir -p ~/chatbot +cd ~/chatbot +``` +This folder will hold all your chatbot files (code, environment, and configuration). + +Some VM images do not include the venv module by default, so we can install it: +```bash +sudo apt update +sudo apt install -y python3.10-venv +``` + +This installs the system package that allows Python to create virtual environments. + +Create and activate your virtual environment + +```bash +python3 -m venv .venv +source .venv/bin/activate +``` +Your prompt should now show `(.venv)` at the beginning. This means you are working inside your isolated environment. All packages you install will stay in this folder and not affect other projects. + +Upgrade pip and install required packages + +```bash +pip install --upgrade pip +pip install streamlit openai python-dotenv +``` + +These are the tools you need for the chatbot: +- streamlit – builds the user interface +- openai – connects to Azure OpenAI +- python-dotenv – loads your API keys and configuration from a `.env` file + +You now have a persistent project directory (`~/chatbot`) and an isolated Python environment (`.venv`) running on your VM. Everything you install here will remain available as long as the VM exists! Note even when you stop the VM, these will persist as long as the resource group continues to exist. + +When you stop a virtual machine in Azure, all of your files and configurations remain safely stored on its attached disk. This means that the next time you start the VM, your folders, virtual environment, and project files—such as your chatbot app—will all be exactly as you left them. Stopping the VM does not delete anything; it simply pauses the compute resources that cost the most money. The main expense in cloud computing comes from running the VM itself, not from the small ongoing charges for disk storage or networking. This is one of the advantages of the "pay as you go" model in the cloud: you can turn off compute power when it is not needed and save significantly, while keeping all your work intact for later. + +### Set up application + + + +First, you will need to download two files `app.py` and `.env` +- `app.py` contains a simple streamlit application that we will run on the virtual machine we just created +- `.env` contains the OpenAI API key required to run the application + + +To download the file run the following command: + +```bash +curl -o app.py https://github.com/Code-the-Dream-School/python-200/lessons/09_cloud_AI/resources/app.py +``` + +Once that is done (downloading app.py and .env), you can enter the following -- + + streamlit run app.py --server.port 8501 --server.address 0.0.0.0 + +With that command, you are telling Streamlit which port to use and where to listen for connections. +- `--server.port 8501` means your app is running on port 8501, which is Streamlit’s default port. +- `--server.address 0.0.0.0` tells Streamlit to listen on all network interfaces, not just inside the VM itself. In networking, 0.0.0.0 is a special address that means "accept connections from anywhere." This allows your app to receive requests that come from outside the VM, such as from your web browser. + +When you run the above command, you will see something like: + + You can now view your Streamlit app in your browser. URL: http://0.0.0.0:8501 + +but don't be fooled -- that's the server talking to itself. To actually see the app, you'll need to use your VM’s public IP instead (which you can find in the Portal): + + http://:8501 + +But we aren't quite ready yet, we need to open port 8501 to connections. + + +#### Open port 8501 in your NSG +Even though Streamlit is listening, the NSG will still block traffic until you explicitly open port 8501 to inbound connections. In other words, setting the server address to 0.0.0.0 makes your app reachable in theory, and updating the NSG rule makes it reachable in practice. Here we will open it up to be reachable by traffic from your IP address. + +Go back to your VM and Click Network settings and under Network security group (NSG) click Create port rule -> Inbound port rule. + +We will make an inbound port rule that opens things up only for your IP address. + + Setting Value + Source My IP Address + Source port ranges * + Destination port ranges 8501 + Protocol TCP + Action Allow + Priority 1010 (or next available) + Name allow_streamlit_8501_myip + +### Turn-off Virtual Machines ++ Via Portal: + 1. In the search bar, enter "virtual machine". + 2. Click and go to the page for virtual machines. + 3. Select the virtual machine you want to turn off. + 4. Click the "Stop" button to shut down the VM. + ++ Via Command Line: + 1. Open Azure Cloud Shell. + 2. Make sure you are using the bash shell. + 3. The command `az vm stop --resource-group ctd-ai-rg --name ctd-ai-vm` will to stop the VM given reosurce + 4. To confirm the VM is stopped, enter `az vm list --show-details --output table` and check the "PowerState" column. + ++ **Warning: Make Sure VM Cleaned-up Properly** + If you do not stop your VM, you will keep incurring cost! This could be extremely expensive if you have a giant (like 64GB, 8 core) VM running. Notice that when you delete a VM, all of the files you downloaded into the VM will be deleted permanently, whereas stopping the VM only pauses its compute resources while preserving all files and configurations on its attached disk. + +# 4. Wrap-up + Congratulations! You have just created your first application on the cloud platform, and now you just learn the tools to deploy and scale your application! Managing virtual machines and cloud application is not an easy task. In fact, it's more complicated than managing your personal computer as they have a lot more scalability and flexibility. \ No newline at end of file diff --git a/lessons/09_cloud_AI/resources/app.py b/lessons/09_cloud_AI/resources/app.py new file mode 100644 index 0000000..13563c5 --- /dev/null +++ b/lessons/09_cloud_AI/resources/app.py @@ -0,0 +1,68 @@ +from dotenv import load_dotenv +import streamlit as st +from openai import OpenAI + +# Load environment and client +if load_dotenv(): + st.markdown("✅ Loaded environment variables from .env file") +else: + st.markdown("⚠️ Environment variable failed to load. Check your .env file.") + +client = OpenAI() + +st.set_page_config(page_title="SalesBot", page_icon="👟") +st.title("SalesBot") +st.caption("A friendly sales assistant that will help you find the perfect shoes.") + +# --- Sidebar controls --- +with st.sidebar: + st.header("Session Controls") + if st.button("End Chat"): + st.session_state.clear() + st.success("Chat ended. Click Start New Chat to begin again.") + if st.button("Start New Chat"): + st.session_state.clear() + st.rerun() + +# --- Initialize conversation --- +if "messages" not in st.session_state: + st.session_state.messages = [ + {"role": "system", + "content": ( + "You are a friendly, competent sales assistant who helps customers find shoes " + "that fit their needs. Ask questions to learn their shoe size, style preferences, " + "and use case before recommending options." + )}, + {"role": "assistant", + "content": ( + "Hi there! I'm here to help you find the perfect pair of shoes. " + "What kind of shoes are you looking for — running, casual, hiking, or something else?" + )} + ] + +# --- Display chat history (skip system message) --- +for message in st.session_state.messages: + if message["role"] == "system": + continue + with st.chat_message(message["role"]): + st.markdown(message["content"]) + +# --- Handle new input --- +user_input = st.chat_input("Type your message here...") + +if user_input: + st.session_state.messages.append({"role": "user", "content": user_input}) + with st.chat_message("user"): + st.markdown(user_input) + + with st.chat_message("assistant"): + with st.spinner("Thinking..."): + response = client.chat.completions.create( + model="gpt-4o-mini", + messages=st.session_state.messages, + max_completion_tokens=300 + ) + reply = response.choices[0].message.content + st.markdown(reply) + + st.session_state.messages.append({"role": "assistant", "content": reply}) diff --git a/lessons/09_cloud_AI/resources/resource_group_animation.gif b/lessons/09_cloud_AI/resources/resource_group_animation.gif new file mode 100644 index 0000000000000000000000000000000000000000..c1b04eb81f76395da2381b3a7a955efcb4ab704e GIT binary patch literal 54964 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