<?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: RohithPrabakar</title>
    <description>The latest articles on DEV Community by RohithPrabakar (@rohithprabakar).</description>
    <link>https://dev.to/rohithprabakar</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%2F975170%2F0f512504-88c9-4ba7-bb9e-6e1faae8d1bb.png</url>
      <title>DEV Community: RohithPrabakar</title>
      <link>https://dev.to/rohithprabakar</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rohithprabakar"/>
    <language>en</language>
    <item>
      <title>Deploy a ReactJS Application to AWS S3 with Route53 and Cloud Front using GitHub Action for CI-CD</title>
      <dc:creator>RohithPrabakar</dc:creator>
      <pubDate>Thu, 26 Jan 2023 02:31:42 +0000</pubDate>
      <link>https://dev.to/rohithprabakar/deploy-a-reactjs-application-to-aws-s3-with-route53-and-cloud-front-using-github-action-for-ci-cd-6e</link>
      <guid>https://dev.to/rohithprabakar/deploy-a-reactjs-application-to-aws-s3-with-route53-and-cloud-front-using-github-action-for-ci-cd-6e</guid>
      <description>&lt;p&gt;A good developer would always want to reduce repetitive, manual processes. Using CI/CD (Continuous Integration / Continuous Delivery) helps developers to automate processes so they can focus on other projects.&lt;/p&gt;

&lt;p&gt;This blog post is going to explain how you can deploy a static react application in AWS S3 with a custom domain using Route53, SSL certification using certificate manager and using Cloud Front as CDN (Content Delivery Network). All while, make the deployment process automate using GitHub Actions. &lt;/p&gt;

&lt;p&gt;Before we start with the steps, the blog assumes that you already have a static react application in your desired GitHub repository.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Now, the steps that we will take to set this up are:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Enlist a domain name in Route53. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a S3 bucket with the same root domain name and create &lt;br&gt;
another S3 bucket but &lt;em&gt;www.&lt;/em&gt; Subdomain name with redirect option &lt;br&gt;
enabled. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We then create a custom SSL certificate using Certificate &lt;br&gt;
Manager &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We then create a Cloud Front distribution. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add records in Route53. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a YAML file for GitHub actions auto deployment. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Test your deployment by visiting your domain in a web browser.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Enlist a domain name in Router 53
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Go to the AWS Route53 console (&lt;a href="https://console.aws.amazon.com/route53/" rel="noopener noreferrer"&gt;https://console.aws.amazon.com/route53/&lt;/a&gt;) &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the navigation pane, choose &lt;strong&gt;Registered domains&lt;/strong&gt;. Choose &lt;code&gt;Register domain&lt;/code&gt; button. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;In the &lt;strong&gt;Search for domain&lt;/strong&gt; box, enter the domain name that you want to register, then choose &lt;code&gt;Check&lt;/code&gt;. Select the desired domain name and choose &lt;code&gt;Add to cart&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiomt1o0z8c3axqgvynpe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiomt1o0z8c3axqgvynpe.png" alt="Search for domain" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Review the domain name, contact information and pricing then choose &lt;code&gt;Continue&lt;/code&gt; &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Review and accept the terms and conditions. Choose &lt;code&gt;Complete purchase&lt;/code&gt;. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You'll receive a confirmation email with instructions to confirm the domain registration &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Log in to the email address that you provided as the registrant contact email address, open the email from AWS, and click on the link to confirm the domain registration. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Once you have confirmed the registration, the domain name will be available in the Route53 console, and you can start configuring DNS records for it. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Setting Up AWS S3
&lt;/h1&gt;

&lt;p&gt;Now we are going to setup AWS S3 with the root domain name as the bucket name and having public access blocked for security. We need to install aws cli configured in your local pc. &lt;/p&gt;

&lt;p&gt;If you are not sure on how to configure them you can read the &lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-quickstart.html" rel="noopener noreferrer"&gt;Quick configure guide&lt;/a&gt; from amazon.&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;# create S3 bucket root domain&lt;/span&gt;
aws s3 mb s3://example &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;this code snippet creates an S3 bucket with example the bucket’s name instead of that add your root domain name.  &lt;/p&gt;

&lt;p&gt;Then go to your aws s3 console and click on the refresh button and click on the s3 bucket with the root domain name you just created and click on &lt;code&gt;permission&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7qllaurbu0eq9hgjvkxa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7qllaurbu0eq9hgjvkxa.png" alt="S3 bucket permission" width="800" height="437"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In here, edit the &lt;strong&gt;Block public access&lt;/strong&gt; and click on all the check boxes. &lt;/p&gt;

&lt;p&gt;Now we must create another s3 bucket with &lt;em&gt;&lt;a href="http://www" rel="noopener noreferrer"&gt;www&lt;/a&gt;. [domain_name] .com&lt;/em&gt; this will be redirecting the bucket with domain name. &lt;/p&gt;

&lt;p&gt;Same way, create the bucket using aws cli&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;# create S3 bucket with www. &lt;/span&gt;
aws s3 mb s3://www.example.com &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;then in aws s3 console go into the bucket and in properties come down to Static Website Hosting and click &lt;code&gt;edit&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;In the edit section click all appropriate options shown in the image. And then click &lt;code&gt;Save changes&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd3ray8h01k13fe2a3mnk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd3ray8h01k13fe2a3mnk.png" alt="enable static hosting for redirecting" width="800" height="635"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;We have successfully created both the buckets.&lt;/p&gt;




&lt;h1&gt;
  
  
  Setting up Custom SSL certificate
&lt;/h1&gt;

&lt;p&gt;We are going to create a SSL certificate for the domain and all sub domain.&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;# create SSL certificate for example.net and *.example.net&lt;/span&gt;
aws acm request-certificate &lt;span class="nt"&gt;--domain-name&lt;/span&gt; example.net  &lt;span class="nt"&gt;--validation-method&lt;/span&gt; DNS &lt;span class="nt"&gt;--subject-alternative-names&lt;/span&gt; &lt;span class="k"&gt;*&lt;/span&gt;.example.net &lt;span class="nt"&gt;--tag&lt;/span&gt; &lt;span class="nv"&gt;Key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Name,Value&lt;span class="o"&gt;=&lt;/span&gt;example
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Go to the certificate manager console and wait until the status changes to Issued. &lt;/p&gt;

&lt;p&gt;Once it is changed click on the certificate ID and click on the &lt;code&gt;Create records in Route 53&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmmvlm6hs0q11lyjgtfvx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmmvlm6hs0q11lyjgtfvx.png" alt="create record" width="800" height="73"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Setting up Cloud Front
&lt;/h1&gt;

&lt;p&gt;Now that we have our s3 buckets and SSL certificate configured we can configure the CDN for distribution of the website to the internet, for that we will be configuring CloudFront. Firstly, go in to the CloudFront dashboard using aws console. Click on the &lt;code&gt;Create distribution&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftgyjalx1w8krpkprp54i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftgyjalx1w8krpkprp54i.png" alt="Create cloud front" width="800" height="128"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then in the create distribution page select the options given in the image below. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flb5i0kjy2llrz0ha5anf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flb5i0kjy2llrz0ha5anf.png" alt="cloud front settings" width="687" height="807"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is important that you choose &lt;code&gt;Legacy access identities&lt;/code&gt; and for &lt;code&gt;Origin access identity&lt;/code&gt; create a new OAI and select that.&lt;/p&gt;

&lt;p&gt;The Bucket policy must be &lt;code&gt;Yes, update the bucket policy&lt;/code&gt;.  &lt;/p&gt;

&lt;p&gt;Next in the Viewer protocol policy select &lt;code&gt;Redirect HTTP to HTTPS protocol&lt;/code&gt; for secure connection.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5osc5fo5vkj02oado7rk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5osc5fo5vkj02oado7rk.png" alt="Viewer protocol policy" width="277" height="131"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To route people who visit &lt;a href="http://www" rel="noopener noreferrer"&gt;www&lt;/a&gt;. As the subdomain to your domain type it in the Alternate domain name section.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7554u36hefyubjhakgj9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7554u36hefyubjhakgj9.png" alt="Alternate domain name" width="716" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And in the custom SSL certificate click on the drop-down and you will be able to see the certificate that we created before, use that. Type index.html in default root object and enable &lt;code&gt;IPv6&lt;/code&gt;. Keep rest of the options default. Once everything is configured click on &lt;code&gt;Create distribution&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8loamj81jajt6u03w30h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8loamj81jajt6u03w30h.png" alt="custom SSL certificate" width="588" height="675"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Add recodes to Route53
&lt;/h1&gt;

&lt;p&gt;Once we have created the cloud front distribution we can now add records in the route53 which connects to CloudFront distribution with your domain name in route53. &lt;/p&gt;

&lt;p&gt;Go to the Router53 dashboad and click on &lt;strong&gt;Hosted zone-&amp;gt;[Domain name]&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwr7p9rkw8ltvnsxv1fbw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwr7p9rkw8ltvnsxv1fbw.png" alt="Hosted zone" width="480" height="148"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you are inside this click on &lt;code&gt;create record&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;In the Quick create record we are 4 records.&lt;br&gt;
2 records of IPv4 for the root domain and &lt;em&gt;&lt;a href="http://www" rel="noopener noreferrer"&gt;www&lt;/a&gt;. [domain_name] .com&lt;/em&gt;&lt;br&gt;
2 records of IPv6 for the root domain and &lt;em&gt;&lt;a href="http://www" rel="noopener noreferrer"&gt;www&lt;/a&gt;. [domain_name] .com&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc93rcnnewmu579rtemh5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc93rcnnewmu579rtemh5.png" alt="Quick create record" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Basically, in the Recode name you leave it blank for root domain and the for the other type &lt;a href="http://www" rel="noopener noreferrer"&gt;www&lt;/a&gt;. In the blank. Record type is going to be either &lt;code&gt;A-Routes trffic to an IPv4 address and some AWS resources&lt;/code&gt; or &lt;code&gt;AAA-Routes traffic to an IPv6 address and some Aws resources&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;Enable Alicas option. For both Route traffic to option is Alice to CloudFront distribution and Routing policy is Simple routing.&lt;/p&gt;

&lt;p&gt;Do this for all the records by add another record. Once everything is added click on &lt;code&gt;Create record&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You will see some this like this in the records tab.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwosr6hbvz2xid3q3udr6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwosr6hbvz2xid3q3udr6.png" alt="records tab" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h1&gt;
  
  
  GitHub Action Setup
&lt;/h1&gt;

&lt;p&gt;Firstly, go to your desired GitHub repository. In this repository create a folder PATH &lt;code&gt;.github/workflows&lt;/code&gt;. Afterwards create a &lt;code&gt;deploy-app.yaml&lt;/code&gt; file in it. &lt;/p&gt;

&lt;p&gt;Next Copy this code snippet into the &lt;code&gt;deploy-app.yaml&lt;/code&gt; file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nc"&gt;Name&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;workflow&lt;/span&gt; &lt;span class="n"&gt;as&lt;/span&gt; &lt;span class="n"&gt;seen&lt;/span&gt; &lt;span class="n"&gt;in&lt;/span&gt; &lt;span class="nc"&gt;Github&lt;/span&gt; &lt;span class="n"&gt;actions&lt;/span&gt; &lt;span class="n"&gt;tab&lt;/span&gt;
&lt;span class="nl"&gt;name:&lt;/span&gt; &lt;span class="no"&gt;CI&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="no"&gt;CD&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="no"&gt;S3&lt;/span&gt; &lt;span class="nc"&gt;Bucket&lt;/span&gt;
&lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nc"&gt;Run&lt;/span&gt; &lt;span class="n"&gt;workflow&lt;/span&gt; &lt;span class="n"&gt;only&lt;/span&gt; &lt;span class="n"&gt;on&lt;/span&gt; &lt;span class="n"&gt;push&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt; &lt;span class="n"&gt;branch&lt;/span&gt;
&lt;span class="nl"&gt;on:&lt;/span&gt;
  &lt;span class="nl"&gt;push:&lt;/span&gt;
    &lt;span class="nl"&gt;branches:&lt;/span&gt;
      &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;main&lt;/span&gt;
&lt;span class="nl"&gt;jobs:&lt;/span&gt;
  &lt;span class="err"&gt;#&lt;/span&gt; &lt;span class="nc"&gt;To&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;project&lt;/span&gt;
  &lt;span class="n"&gt;deploy&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nl"&gt;S3:&lt;/span&gt;
    &lt;span class="n"&gt;runs&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nl"&gt;on:&lt;/span&gt; &lt;span class="n"&gt;ubuntu&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;latest&lt;/span&gt;
    &lt;span class="nl"&gt;steps:&lt;/span&gt;
      &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nl"&gt;name:&lt;/span&gt; &lt;span class="nc"&gt;Checking&lt;/span&gt; &lt;span class="n"&gt;out&lt;/span&gt; &lt;span class="n"&gt;code&lt;/span&gt;
        &lt;span class="nl"&gt;uses:&lt;/span&gt; &lt;span class="n"&gt;actions&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;checkout&lt;/span&gt;&lt;span class="nd"&gt;@v3&lt;/span&gt;

      &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nl"&gt;name:&lt;/span&gt; &lt;span class="nc"&gt;Installing&lt;/span&gt; &lt;span class="nc"&gt;Node&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;js&lt;/span&gt;
        &lt;span class="nl"&gt;uses:&lt;/span&gt; &lt;span class="n"&gt;actions&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;setup&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="nd"&gt;@v3&lt;/span&gt;
        &lt;span class="nl"&gt;with:&lt;/span&gt;
          &lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nl"&gt;version:&lt;/span&gt; &lt;span class="s"&gt;"16"&lt;/span&gt;

      &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nl"&gt;name:&lt;/span&gt; &lt;span class="nc"&gt;Installing&lt;/span&gt; &lt;span class="n"&gt;dependencies&lt;/span&gt;
        &lt;span class="nl"&gt;run:&lt;/span&gt; &lt;span class="n"&gt;npm&lt;/span&gt; &lt;span class="n"&gt;install&lt;/span&gt;

      &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nl"&gt;name:&lt;/span&gt; &lt;span class="nc"&gt;Run&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt;
        &lt;span class="nl"&gt;run:&lt;/span&gt; &lt;span class="n"&gt;npm&lt;/span&gt; &lt;span class="n"&gt;test&lt;/span&gt;

      &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nl"&gt;name:&lt;/span&gt; &lt;span class="nc"&gt;Building&lt;/span&gt; &lt;span class="n"&gt;project&lt;/span&gt;
        &lt;span class="nl"&gt;run:&lt;/span&gt; &lt;span class="n"&gt;npm&lt;/span&gt; &lt;span class="n"&gt;run&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;

      &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nl"&gt;name:&lt;/span&gt; &lt;span class="nc"&gt;Configure&lt;/span&gt; &lt;span class="no"&gt;AWS&lt;/span&gt; &lt;span class="nc"&gt;Credentials&lt;/span&gt;
        &lt;span class="nl"&gt;uses:&lt;/span&gt; &lt;span class="n"&gt;aws&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;actions&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;configure&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;aws&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;credentials&lt;/span&gt;&lt;span class="nd"&gt;@v1&lt;/span&gt;
        &lt;span class="nl"&gt;with:&lt;/span&gt;
          &lt;span class="n"&gt;aws&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;access&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nl"&gt;id:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="o"&gt;{{&lt;/span&gt; &lt;span class="n"&gt;secrets&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AWS_ACCESS_KEY_ID&lt;/span&gt; &lt;span class="o"&gt;}}&lt;/span&gt;
          &lt;span class="n"&gt;aws&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;secret&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;access&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nl"&gt;key:&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="o"&gt;{{&lt;/span&gt; &lt;span class="n"&gt;secrets&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="na"&gt;AWS_SECRET_ACCESS_KEY&lt;/span&gt; &lt;span class="o"&gt;}}&lt;/span&gt;
          &lt;span class="n"&gt;aws&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nl"&gt;region:&lt;/span&gt; &lt;span class="n"&gt;us&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;west&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;

      &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nl"&gt;name:&lt;/span&gt; &lt;span class="nc"&gt;Deploy&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="no"&gt;S3&lt;/span&gt; &lt;span class="n"&gt;bucket&lt;/span&gt;
        &lt;span class="nl"&gt;run:&lt;/span&gt; &lt;span class="n"&gt;aws&lt;/span&gt; &lt;span class="n"&gt;s3&lt;/span&gt; &lt;span class="n"&gt;sync&lt;/span&gt; &lt;span class="n"&gt;build&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nl"&gt;s3:&lt;/span&gt;&lt;span class="c1"&gt;//example --delete&lt;/span&gt;
        &lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;:&lt;/span&gt; &lt;span class="n"&gt;success&lt;/span&gt;&lt;span class="o"&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This code snippet describes the action, the workflow is triggered on pushes to the main branch. It first checks out the code, installs the dependencies, run the tests, builds the React application, and then configures the AWS CLI with the necessary credentials. Finally, it uses the aws s3 sync command to upload the contents of the build/ directory to the specified S3 bucket.&lt;/p&gt;

&lt;p&gt;It is also a good practice to use &lt;code&gt;if: success()&lt;/code&gt; in the build and deploy step, so that it only runs if all previous steps are successful.&lt;/p&gt;

&lt;p&gt;In the deploy to S3 bucket line add your s3 bucket url.&lt;/p&gt;

&lt;p&gt;You will need to set environment variables for &lt;code&gt;AWS_ACCESS_KEY_ID&lt;/code&gt;, &lt;code&gt;AWS_SECRET_ACCESS_KEY&lt;/code&gt; in your GitHub Actions workflow settings or you can use secrets to store those.&lt;/p&gt;

&lt;h2&gt;
  
  
  Add secrets to your repository
&lt;/h2&gt;

&lt;p&gt;Final step is to add the secrets to your GitHub repository. For this Github Action, we need the access key ID and secret access key from IAM User as secrets called &lt;code&gt;AWS_ACCESS_KEY_ID&lt;/code&gt; and &lt;code&gt;AWS_SECRET_ACCESS_KEY&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Go to your IAM User in AWS and click on your &lt;strong&gt;account name -&amp;gt; Security credentials&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Scroll down to Access Keys section and &lt;code&gt;Create access key&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fojd1ghvaadyax0ktgld0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fojd1ghvaadyax0ktgld0.png" alt="Access Keys" width="800" height="101"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click the option &lt;code&gt;Applications running outside of AWS&lt;/code&gt; and click &lt;code&gt;next&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4p2fdehmzaex580kaak3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4p2fdehmzaex580kaak3.png" alt="Applications running outside of AWS option" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This step is optional but for readability I prefer you to add appropriate tag to this access key. Then click on &lt;code&gt;Create access key&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc2lu64d63z3frrgnz7tq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc2lu64d63z3frrgnz7tq.png" alt="tag" width="800" height="169"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Copy the access key and secret access key in a separate file because this is the only time you can see the secret access key. Once you click Done you will not be able to see secret access key. You can also download the .csv file.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffnh5wtrbzf3nobzucmd1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffnh5wtrbzf3nobzucmd1.png" alt="access key info" width="800" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now go back to your GitHub repository, it’s time to and the access keys to secrets.&lt;br&gt;
To add the secrets, you have to go to the &lt;strong&gt;&lt;code&gt;settings&lt;/code&gt;-&amp;gt;&lt;code&gt;Secrets and variables&lt;/code&gt; -&amp;gt; &lt;code&gt;Actions&lt;/code&gt;&lt;/strong&gt;&lt;br&gt;
In there create &lt;code&gt;New repository secret&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faheakoug0rm6d2u0r9m7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faheakoug0rm6d2u0r9m7.png" alt="secret" width="800" height="204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And on the secrets page, you can add your 2 secrets &lt;code&gt;AWS_ACCESS_KEY_ID&lt;/code&gt; and &lt;code&gt;AWS_SECRET_ACCESS_KEY&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbnccpmfj3arf66p60ol.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnbnccpmfj3arf66p60ol.png" alt="ACCESS_KEY_ID" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Grab a coffee and enjoy it
&lt;/h1&gt;

&lt;p&gt;Lastly, you have to create a pull request from a feature branch into main branch and watch your actions deploying your app to S3 and website being served with in your domain name.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuh4tji4572g37pvtc84g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuh4tji4572g37pvtc84g.png" alt="github action result" width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;I created a project using this method. You can find the repository &lt;a href="https://github.com/RohithPrabakar/Resume-Website" rel="noopener noreferrer"&gt;here&lt;/a&gt;. If something is unclear let me know and I will adjust it.&lt;/p&gt;




</description>
      <category>gratitude</category>
    </item>
    <item>
      <title>Design Narrative: Deploy Resume Website in AWS</title>
      <dc:creator>RohithPrabakar</dc:creator>
      <pubDate>Sun, 22 Jan 2023 17:43:04 +0000</pubDate>
      <link>https://dev.to/rohithprabakar/design-narrative-deploy-resume-website-in-aws-40i6</link>
      <guid>https://dev.to/rohithprabakar/design-narrative-deploy-resume-website-in-aws-40i6</guid>
      <description>&lt;h2&gt;
  
  
  Getting Started
&lt;/h2&gt;

&lt;p&gt;On First week of January I got my cloud practitioner certification. With the new found knowledge I wanted to use it on a project and gain more experience with some hands on experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frontend
&lt;/h2&gt;

&lt;p&gt;Coding the frontend of the resume site using react was a good refresher of my skills in react. This helped in bringing me back up to speed with the language. Once I was got the hang of react. I was persistent in custom components. This was because in future, updating the website will be much easier if everything is separated as components. And as we all know resume's would have constant changes to it as we learn more and add them to it. In the process I also wanted this project to be perfect before committing it to main branch so I wanted to incorporate a unit testing which helped be in validating the information where rendering properly.&lt;/p&gt;

&lt;p&gt;Once I completed building the website I wanted have a git repository so that I can revert back to previous version if I did something wrong. As I had some experience working with GitHub I choose to create a remote repository in that. During this project I learnt the distinction between GitHub and git though I have used them for my previous projects I was not clear with it I would just do as per the instructions but if I got any error I was not able to fix them. Now I did learn the difference and also implemented some good practices like create a &lt;code&gt;feature branch&lt;/code&gt; to add any changes and not directly to the main branch.&lt;/p&gt;

&lt;p&gt;Once I felt confident with my workflow, I wanted to integrate CI/CD for hosting the website in S3. Since my site's version control was being handled by Git and GitHub, it was a matter of finding a GitHub Actions workflow that uploaded my code to S3 and also invalidated the CloudFront distribution every time I pushed an update so that the latest copy of my site would always be visible. This worked seamlessly once I create a the architecture in the AWS cloud.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cloud Architecture
&lt;/h2&gt;

&lt;p&gt;I have posted a detailed step-by-step guide for the architecture to host the react file in &lt;a href="https://dev.to/rohithprabakar/deploy-a-reactjs-application-to-aws-s3-with-route53-and-cloud-front-using-github-action-for-ci-cd-6e"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;AWS cloud was new to me so, at first I saw many videos explaining the architecture but everyone had different way of approach so I thought to stick to any approach where I would have the files in S3 and leave the CloudFront for distribution and certificate manager for security in transit and Route53 for DNS. This approach seemed straight forward and simple. When deploying this I wanted to get some experience with deploying a service with code so tried using AWS CLI. But in my future projects I want to us terraform and cloudformation to deploying services. &lt;/p&gt;

&lt;h2&gt;
  
  
  Warping Up
&lt;/h2&gt;

&lt;p&gt;I finally reached a point where I'm ready to tidy up the content of my resume, as part of a bigger push to prepare myself for the impending job search. It was incredibly instructive and helped set my path forward as I continue learning and progressing towards my career.&lt;br&gt;
&lt;a href="https://rohithprabakarresume.com/"&gt;Click here&lt;/a&gt; to see my resume&lt;br&gt;
&lt;a href="https://github.com/RohithPrabakar/Resume-Website"&gt;GitHub repository&lt;/a&gt;&lt;/p&gt;

</description>
      <category>journey</category>
      <category>cloud</category>
      <category>resume</category>
      <category>aws</category>
    </item>
    <item>
      <title>My Cloud Journey: Jan 04, 2023</title>
      <dc:creator>RohithPrabakar</dc:creator>
      <pubDate>Thu, 05 Jan 2023 02:14:37 +0000</pubDate>
      <link>https://dev.to/rohithprabakar/my-cloud-journey-jan-04-2023-381e</link>
      <guid>https://dev.to/rohithprabakar/my-cloud-journey-jan-04-2023-381e</guid>
      <description>&lt;p&gt;I am happy to write this post as I have completed my AWS Cloud Practitioner Certification and have successfully started to get my feet wet in the world of the Cloud. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Learning Path 📚&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Recently Completed:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Cloud Practitioner Cert
This was a great dive into the Cloud environment. This certification helped me in understanding the basics of the cloud, services, and terminologies commonly used. Now, this cert gave me the confidence to tackle the next certification AWS Solutions Architect.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;In Progress:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Solutions Architect
I have started with AWS solutions architect by following through the video course provided by whiz labs. They have a bundle where I am able to practice the gained knowledge in the lab section and also finally use the exam section to get prepared for the certification exam.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Projects 👨‍💻&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I have started with a project where I will be using my previous knowledge of React to create a static resume website and try to create a CI-CD using GitHub Actions and deploy it in the S3 bucket. I feel this would be an introductory project where I can get a feel of the AWS environment in a real-world situation. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Wrap up 🍫&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;So far, I am not displeased with my progress. I have been working on this journey through the cloud for about 3 months as a full-time student. I still feel need a lot more to know about cloud but still, I am only Human that too a teenager with lots of distractions.&lt;/p&gt;

&lt;p&gt;That's all for the week.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Onwards and Upwards!&lt;/em&gt;  &lt;/p&gt;

</description>
      <category>machinelearning</category>
      <category>docker</category>
    </item>
    <item>
      <title>Motive</title>
      <dc:creator>RohithPrabakar</dc:creator>
      <pubDate>Thu, 05 Jan 2023 01:05:26 +0000</pubDate>
      <link>https://dev.to/rohithprabakar/motive-3eke</link>
      <guid>https://dev.to/rohithprabakar/motive-3eke</guid>
      <description>&lt;p&gt;Hi, I'm Rohith!&lt;/p&gt;

&lt;p&gt;I am a final year BTech Computer Engineering Student. I am writing this blog to document my journey in the Cloud computing world.&lt;/p&gt;

&lt;p&gt;I am starting this blog to structurize my learning and try to keep this an informative blog so that others can learn through my journey.&lt;/p&gt;

&lt;p&gt;I would like to return to this page and say that I am a successful cloud engineer. &lt;/p&gt;

&lt;p&gt;Onwards and Upwards!&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
