<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Mohammed Anjum</title>
    <description>The latest articles on DEV Community by Mohammed Anjum (@anjum-py).</description>
    <link>https://dev.to/anjum-py</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F313414%2F04f4480f-012c-4ca0-be2b-fc067598c26b.jpg</url>
      <title>DEV Community: Mohammed Anjum</title>
      <link>https://dev.to/anjum-py</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/anjum-py"/>
    <language>en</language>
    <item>
      <title>Automated Deployment of Geolocation API to Google Cloud's Cloud Run with CDKTF and Bash Script</title>
      <dc:creator>Mohammed Anjum</dc:creator>
      <pubDate>Thu, 06 Jul 2023 12:44:03 +0000</pubDate>
      <link>https://dev.to/anjum-py/automated-deployment-of-geolocation-api-to-google-clouds-cloud-run-with-cdktf-and-bash-script-52j1</link>
      <guid>https://dev.to/anjum-py/automated-deployment-of-geolocation-api-to-google-clouds-cloud-run-with-cdktf-and-bash-script-52j1</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;This article provides a step by step guide on deploying Geolocation API to your own Google Cloud project. This article will focus on using the automation tools and scripts in deploying a FastAPI python web application to Google Cloud’s Cloud Run, a serverless containers platform.&lt;/p&gt;

&lt;p&gt;For more information on the design and tech stack used, please refer to Building Geolocation API. In this article, we will focus on deployment.&lt;/p&gt;

&lt;p&gt;As an overview, the project has five distinct components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A FastAPI application that handles web requests and queries IP addresses to retrieve geolocation data from MaxMind GeoLite2 databases.&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;Dockerfile&lt;/code&gt; that automates the process of downloading the GeoLite2 databases and building a lightweight Docker image.&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;cloudbuild.yaml&lt;/code&gt; file that defines the necessary steps for the build pipeline, which includes building the Docker image and deploying a new revision to Cloud Run.&lt;/li&gt;
&lt;li&gt;A CDKTF (Cloud Development Kit for Terraform) application that deploys the required cloud infrastructure for the Geolocation API.&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;deploy.sh&lt;/code&gt; shell script that sets up the Cloud Shell VM environment for deployment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the purpose of deployment, we will only be executing &lt;code&gt;deploy.sh&lt;/code&gt; shell script which will take care of setting up our environment and deploying our CDKTF application. However, before we run our script, we need to manually do a few things first. Please continue reading to find out more.&lt;/p&gt;

&lt;h2&gt;
  
  
  Accompanying Youtube Video
&lt;/h2&gt;

&lt;p&gt;If you'd rather watch a video instead of reading a long article, here is a YouTube video that accompanies this content.&lt;br&gt;
&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/MTqIj9ycPLY"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Live Demo
&lt;/h2&gt;

&lt;p&gt;Explore a live demo of the Geolocation API hosted on my Google Cloud platform, running as a Cloud Run revision, &lt;a href="https://anjum-py.github.io/projects/deploying-geolocation-api-deployment-guide/#demo"&gt;on this page&lt;/a&gt;. Enter a valid public IP address, whether IPv4 or IPv6, to retrieve its details. If no input is provided, the API will return details of your own IP address.&lt;/p&gt;

&lt;h2&gt;
  
  
  Overview of deployment steps
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;We will start with getting a MaxMind developer account to obtain a license key. This key will be used in our &lt;code&gt;Dockerfile&lt;/code&gt; to download latest GeoLite2 databases.&lt;/li&gt;
&lt;li&gt;We will login into our Google Cloud Platform to create a project and use Google Cloud Shell to deploy required components.&lt;/li&gt;
&lt;li&gt;We will fork the GitHub repository to be able to connect to Cloud Build trigger.&lt;/li&gt;
&lt;li&gt;We will connect our GitHub repository to Cloud Build trigger to use it as a source.&lt;/li&gt;
&lt;li&gt;We will use &lt;code&gt;.env&lt;/code&gt; file to customise and configure our environment.&lt;/li&gt;
&lt;li&gt;We will use &lt;code&gt;deploy.sh&lt;/code&gt; shell script to prepare Google Cloud Shell Console VM and deploy our FastAPI application.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let's begin by going through each item on this list, one at a time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create a MaxMind Developer Account
&lt;/h2&gt;

&lt;p&gt;To set up automatic database updates within our container, we need to create a MaxMind account and obtain a license key. To do this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to the MaxMind website and &lt;a href="https://www.maxmind.com/en/geolite2/signup"&gt;sign up&lt;/a&gt; for an account to access GeoLite2 databases.&lt;/li&gt;
&lt;li&gt;Check your email for a verification link. Click on the link to set a password for your account.&lt;/li&gt;
&lt;li&gt;Log in to your MaxMind account. You will receive a verification code via email. Copy and paste the verification code to complete the authentication process.&lt;/li&gt;
&lt;li&gt;On your account dashboard, click on "&lt;strong&gt;Manage License Keys&lt;/strong&gt;" in the left sidebar.&lt;/li&gt;
&lt;li&gt;Click on "&lt;strong&gt;Create New License Key&lt;/strong&gt;" and enter a name for your license key.&lt;/li&gt;
&lt;li&gt;Click on "&lt;strong&gt;Create&lt;/strong&gt;" to generate your license key.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Keep your license key window open as we will need it shortly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create &lt;strong&gt;a Google Cloud Project&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Before we begin, please make sure that you are logged in to your Google Cloud account and have a valid billing account. You may be charged for using Google Cloud services, but Google Cloud’s free tier is more than enough to test our deployment without incurring any cost.&lt;/p&gt;

&lt;p&gt;The free tier includes a set of Google Cloud services that you can use for free, up to certain usage limits. If you exceed the usage limits, you will be charged for the additional usage.&lt;/p&gt;

&lt;p&gt;The free tier is a great way to try out Google Cloud services and to test our deployment without incurring any cost.&lt;/p&gt;

&lt;p&gt;If you do not want to continue using the service, our CDKTF implementation makes it very easy to delete the deployed resource in just one command.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to the &lt;a href="https://console.cloud.google.com/"&gt;Google Cloud Console&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Click on the &lt;strong&gt;Sign in&lt;/strong&gt; button.&lt;/li&gt;
&lt;li&gt;Enter your Google Account email address and password.&lt;/li&gt;
&lt;li&gt;Click on the &lt;strong&gt;Sign in&lt;/strong&gt; button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once you are logged in, you will be taken to the Google Cloud Platform console. From here, you can start using Google Cloud services.&lt;/p&gt;

&lt;p&gt;To create a new Google Cloud project for deploying our geolocation service, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click on the &lt;strong&gt;Select Project&lt;/strong&gt; button located in the top-left corner of the GCP Console.&lt;/li&gt;
&lt;li&gt;Click on "&lt;strong&gt;New Project&lt;/strong&gt;" to create a new project.&lt;/li&gt;
&lt;li&gt;In the "&lt;strong&gt;Project Name&lt;/strong&gt;" field, enter "&lt;strong&gt;geolocation&lt;/strong&gt;."&lt;/li&gt;
&lt;li&gt;Make a note of the random project ID that Google Cloud assigns. This is required to be unique globally, so Google Cloud assigns a random number to the name.&lt;/li&gt;
&lt;li&gt;Click "&lt;strong&gt;Create&lt;/strong&gt;."&lt;/li&gt;
&lt;li&gt;Click on the &lt;strong&gt;Select Project&lt;/strong&gt; button and select the newly created project to make it the active project.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You can also select the project by clicking on Select Project dropdown button located in top-left corner of the GCP console and then selecting the project.&lt;/p&gt;

&lt;p&gt;To learn more about creating a project on Google Cloud Platform, follow this &lt;a href="https://cloud.google.com/resource-manager/docs/creating-managing-projects#creating_a_project"&gt;guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fork and Clone the Git Repository
&lt;/h2&gt;

&lt;p&gt;We need to fork the &lt;a href="https://github.com/anjum-py/geolocation"&gt;Git repository&lt;/a&gt; because Cloud Build only allows connecting to repositories from our own GitHub account, even if the repository is public. Forking a repository creates a copy of it in our own account, which we can then clone to our Cloud Shell environment. Once the repository is cloned, we can connect it to our Cloud Build trigger.&lt;/p&gt;

&lt;p&gt;Here is a more detailed explanation of the steps involved:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to the &lt;a href="https://github.com/anjum-py/geolocation"&gt;GitHub repository&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Click the &lt;strong&gt;Fork&lt;/strong&gt; button in the top right corner of the page.&lt;/li&gt;
&lt;li&gt;This will create a copy of the repository in our own GitHub account.&lt;/li&gt;
&lt;li&gt;Once the repository has been forked, click the &lt;strong&gt;Clone&lt;/strong&gt; button.&lt;/li&gt;
&lt;li&gt;In the &lt;strong&gt;Clone with HTTPs&lt;/strong&gt; section, copy the URL of the repository.&lt;/li&gt;
&lt;li&gt;Open a terminal window in our Cloud Shell environment.&lt;/li&gt;
&lt;li&gt;Type the following command to clone the repository: &lt;code&gt;git clone &amp;lt;URL&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Replace &lt;code&gt;&amp;lt;URL&amp;gt;&lt;/code&gt; with the URL that we copied in step 5.&lt;/p&gt;

&lt;p&gt;The repository will be cloned to our Cloud Shell environment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Connect git repository
&lt;/h2&gt;

&lt;p&gt;In this step, we authenticate and connect GitHub repository to cloudbuild trigger.&lt;/p&gt;

&lt;p&gt;To connect our GitHub repository to Cloud Build, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go to the &lt;strong&gt;&lt;a href="https://console.cloud.google.com/cloud-build/repositories/"&gt;Repositories&lt;/a&gt;&lt;/strong&gt; page in the &lt;strong&gt;Google Cloud Console&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Scroll to the bottom of the page and click &lt;strong&gt;Connect Repository&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Leave the &lt;strong&gt;Region&lt;/strong&gt; as &lt;strong&gt;global&lt;/strong&gt; and make sure &lt;strong&gt;GitHub&lt;/strong&gt; is selected.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Continue&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;If you are not already logged in to GitHub, you will be prompted to do so.&lt;/li&gt;
&lt;li&gt;Once you are logged in, click &lt;strong&gt;Authorize Google Cloud Build by GoogleCloudBuild&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Connect&lt;/strong&gt; to connect your repository.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Do not create a trigger yet. We will do it using cdktf.&lt;/p&gt;

&lt;h2&gt;
  
  
  Create &lt;code&gt;.env&lt;/code&gt; file
&lt;/h2&gt;

&lt;p&gt;Our CDKTF stacks depend on values from &lt;code&gt;.env&lt;/code&gt; file for setting up our infrastructure&lt;/p&gt;

&lt;p&gt;To set up &lt;code&gt;.env&lt;/code&gt; file, follow these steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click the &lt;strong&gt;Activate Cloud Shell&lt;/strong&gt; button at the top of the page.&lt;/li&gt;
&lt;li&gt;Wait for the Cloud Shell session to open.&lt;/li&gt;
&lt;li&gt;Click "&lt;strong&gt;Open Editor&lt;/strong&gt;" to open file editor.&lt;/li&gt;
&lt;li&gt;Copy the contents of the &lt;code&gt;example_env.txt&lt;/code&gt; file.&lt;/li&gt;
&lt;li&gt;Create a new file and paste the copied content.&lt;/li&gt;
&lt;li&gt;Save the file as &lt;code&gt;.env&lt;/code&gt; in the root directory of your cloned repository.&lt;/li&gt;
&lt;li&gt;Find the random numeric ID assigned to your project ID by Google and set it to &lt;code&gt;RANDOM_ID&lt;/code&gt; variable.&lt;/li&gt;
&lt;li&gt;Set your preferred Google Cloud region to variable &lt;code&gt;REGION_PREFERRED&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Set the URL of your forked git repository to variable &lt;code&gt;GIT_SOURCE_REPOSITORY&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;If you will be using this API from a front end, set the &lt;code&gt;FASTAPI_CORS_ORIGINS&lt;/code&gt; variable accordingly.&lt;/li&gt;
&lt;li&gt;Find the account ID and license key of your MaxMind account and assign these values to &lt;code&gt;GEOIPUPDATE_ACCOUNT_ID&lt;/code&gt; and &lt;code&gt;GEOIPUPDATE_LICENSE_KEY&lt;/code&gt; environment variables respectively.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Be sure to remove any unwanted spaces after the equal sign or after the variable value.&lt;/p&gt;

&lt;p&gt;Our &lt;code&gt;.env&lt;/code&gt; file is now configured and we are ready to deploy our Cloud Run service.&lt;/p&gt;

&lt;h2&gt;
  
  
  Run &lt;code&gt;deploy.sh&lt;/code&gt; script
&lt;/h2&gt;

&lt;p&gt;In this final step, we execute our &lt;code&gt;deploy.sh&lt;/code&gt; script. In order to learn what our script does in detail, please refer to Building Geolocation API video. From a deployment standpoint, in a fresh and clean cloud shell environment, our script will first prepare our Cloud Shell VM and then deploy our CDKTF stacks one by one.&lt;/p&gt;

&lt;p&gt;When I initially started working on the project, I began documenting the steps to write a detailed guide for setting up the Cloud Shell VM to deploy our microservice.  However, I realized that most of this work can be easily automated and a simple shell script would be more beneficial and user-friendly for everyone involved.&lt;/p&gt;

&lt;p&gt;Consequently, I went ahead and created a shell script that handles the setup and deployment of our foundational CDKTF stacks. We then had to trigger the build manually once before we could deploy our third and final CDKTF stack to deploy our Cloud Run service.&lt;/p&gt;

&lt;p&gt;In this version of the script, I was using &lt;code&gt;pyenv&lt;/code&gt; to set up python version globally and there were a couple of manual steps to be taken in the exact order at a particular point in time. This was making it a little difficult to understand and troubleshoot. So, I spent some more time to refactor and make the script better and the result was fully automated end to end deployment of our microservice Geolocation API with just one command.&lt;/p&gt;

&lt;p&gt;To execute our script, make sure you are in the project root directory and run &lt;code&gt;./deploy.sh&lt;/code&gt; script.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# make sure we are in the right directory&lt;/span&gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; ~/geolocation
./deploy.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If prompted, select &lt;code&gt;Authorize&lt;/code&gt; to continue.&lt;/p&gt;

&lt;p&gt;Now, sit back and watch our Cloud Shell VM get set up and our Cloud Run service get built, tested, and deployed on Cloud Run.&lt;/p&gt;

&lt;p&gt;This script actually does a lot of work and to understand more, please watch my video about Building Geolocation API where I walk through the code and delve into how various tools work together and how this shell script brings everything together. It should take approximately 12 minutes for setting up VM, building the container image, and then deploying a cloud run revision.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Finish Line: Completing the Deployment Journey
&lt;/h2&gt;

&lt;p&gt;At this stage, we should have a running Cloud Run revision for our geolocation service. You can check the status of our deployed Cloud Run service &lt;a href="https://console.cloud.google.com/run"&gt;here&lt;/a&gt;. Click on the service link to open the Cloud Run page and access the url the service is hosted on.&lt;/p&gt;

&lt;p&gt;Also, check for configured weekly schedule to trigger our Cloud Build &lt;a href="https://console.cloud.google.com/cloudscheduler"&gt;here&lt;/a&gt;. So, every week, our Cloud Build will get triggered and rebuild the image with updated MaxMind GeoLite2 databases and deploy the new Cloud Run revision.&lt;/p&gt;

&lt;p&gt;It took quite a bit of work to reach here, but from now on, automation will take over. Now, we can use this API in any number of applications that needs geolocation information. We do not have to worry about keeping the databases up to date or the scalability of the service. Cloud Run by design will spin up as many containers as required based on the demand and when there is no demand, Cloud Run will terminate all containers and scale the service down to zero.  We are billed only for the time our containers are serving requests.&lt;/p&gt;

&lt;p&gt;Thank you for reading. I hope you find this useful. I know there is a lot that can be improved.  Your feedback and suggestions are very important to me. Please take a moment to leave a comment.&lt;/p&gt;

</description>
      <category>python</category>
      <category>fastapi</category>
      <category>googlecloud</category>
      <category>serverless</category>
    </item>
    <item>
      <title>Code Walkthrough: Building Geolocation API and Automating Deployment to Cloud Run</title>
      <dc:creator>Mohammed Anjum</dc:creator>
      <pubDate>Thu, 06 Jul 2023 12:43:38 +0000</pubDate>
      <link>https://dev.to/anjum-py/code-walkthrough-building-geolocation-api-and-automating-deployment-to-cloud-run-4jc8</link>
      <guid>https://dev.to/anjum-py/code-walkthrough-building-geolocation-api-and-automating-deployment-to-cloud-run-4jc8</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;This article serves as an introduction to my new youtube video. In this video, I'll take you through my journey of creating an API for geolocation information based on IP addresses. But what makes this project even more exciting is the focus on automating the deployment process using Cloud Development Kit for Terraform and bash script to serverless cloud-native infrastructure, specifically Google Cloud's Cloud Run.&lt;/p&gt;

&lt;p&gt;Before we dive into the details, I want to let you know that the code for this project is open-source and available in the accompanying &lt;a href="https://github.com/anjum-py/geolocation"&gt;GitHub repository&lt;/a&gt;. I highly encourage you to explore the code and provide your valuable feedback. Your suggestions and recommendations will be instrumental in improving the quality of my code.&lt;/p&gt;

&lt;p&gt;In this video, my main focus will be on walking you through the source code, explaining how different components are structured, and showcasing their interactions. If you're interested in learning how to deploy the Geolocation API in your own Google Cloud Project, I recommend checking out "Deploying Geolocation API". The current video is more about understanding the source code and how the different pieces fit together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Project Overview
&lt;/h2&gt;

&lt;p&gt;Let's start with an overview of the project.&lt;/p&gt;

&lt;p&gt;The geolocation-api project comprises five distinct components:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;FastAPI Application: The FastAPI application is responsible for handling web requests and retrieving geolocation data from MaxMind GeoLite2 databases. Along with the FastAPI python web framework, it has a few dependencies including &lt;code&gt;geoip2&lt;/code&gt;. The application includes middleware components for &lt;code&gt;TrustedHost&lt;/code&gt; and &lt;code&gt;CORS&lt;/code&gt; handling. It also defines endpoints for health checks and IP geolocation lookup.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Dockerfile&lt;/code&gt;:  The &lt;code&gt;Dockerfile&lt;/code&gt; employs a multi-stage build approach. In the first stage, it creates a configuration file required by &lt;code&gt;geoipupdate&lt;/code&gt; program and downloads GeoLite2 MaxMind databases. In the second stage, it uses the Python slim-buster image, installs dependencies, and sets up the python virtual environment. In the third and final stage, it simply brings everything together.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Cloudbuild.yaml&lt;/code&gt;:  This file defines the steps for build pipeline for Google Cloud's Cloud Build service. It consists of steps for copying the &lt;code&gt;.env&lt;/code&gt; file, running tests, building and pushing the Docker image, and updating the Cloud Run service with a new revision.&lt;/li&gt;
&lt;li&gt;CDKTF Application: CDKTF is used to define and provision the cloud infrastructure required for our API. Our CDKTF application has three stacks. The &lt;code&gt;base&lt;/code&gt; stack that enables required Google Cloud APIs and creates a bucket to store our &lt;code&gt;.env&lt;/code&gt; file. The &lt;code&gt;pre-cloudrun&lt;/code&gt; stack creates a dedicated service account for Cloud Build pipeline, creates Artifact Registry to store Docker container images, sets up Cloud Build trigger for manual invocation, and creates a Cloud Scheduler job to automatically trigger a weekly build of our image. The &lt;code&gt;cloudrun&lt;/code&gt; stack creates a dedicated service account to be used with our Cloud Run service, then creates Cloud Run service using the image we built using Cloud Build, and configures the service to be available for everyone.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;deploy.sh&lt;/code&gt; Shell Script: The &lt;code&gt;deploy.sh&lt;/code&gt; script automates the set up of the Cloud Shell environment by installing required components such as required version of Python, Poetry for managing virtual environment, CDKTF python bindings, and cdktf-cli npm package and then runs our &lt;code&gt;cdktf deploy&lt;/code&gt; commands to deploy cloud resources.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I hope this overview has given you a good understanding of the project's structure and components. In the video, I will provide a more detailed walkthrough of each piece, explaining the code and highlighting essential concepts.&lt;/p&gt;

&lt;p&gt;Make sure to watch the video until the end. Thank you for joining me on this journey. Please don't hesitate to leave comments or reach out to me directly. Let's get started!"&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/M1O_V5VSibg"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>python</category>
      <category>fastapi</category>
      <category>googlecloud</category>
      <category>walkthrough</category>
    </item>
  </channel>
</rss>
