<?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: Nirmal Chandrasiri</title>
    <description>The latest articles on DEV Community by Nirmal Chandrasiri (@nirmalnaveen).</description>
    <link>https://dev.to/nirmalnaveen</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%2F792802%2F302ba308-9c10-468d-81eb-2dfed5aa52c9.jpeg</url>
      <title>DEV Community: Nirmal Chandrasiri</title>
      <link>https://dev.to/nirmalnaveen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nirmalnaveen"/>
    <language>en</language>
    <item>
      <title>Helm vs Kustomize: A Comprehensive Guide with Examples</title>
      <dc:creator>Nirmal Chandrasiri</dc:creator>
      <pubDate>Sat, 08 Feb 2025 14:41:29 +0000</pubDate>
      <link>https://dev.to/nirmalnaveen/helm-vs-kustomize-a-comprehensive-guide-with-real-world-examples-1hn8</link>
      <guid>https://dev.to/nirmalnaveen/helm-vs-kustomize-a-comprehensive-guide-with-real-world-examples-1hn8</guid>
      <description>&lt;h1&gt;
  
  
  Helm vs Kustomize: A Comprehensive Guide with Real-World Examples
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;When it comes to Kubernetes application management, two popular tools stand out: &lt;strong&gt;Helm&lt;/strong&gt; and &lt;strong&gt;Kustomize&lt;/strong&gt;. Both tools aim to simplify Kubernetes deployments, but they take different approaches. Helm is often compared to a package manager for Kubernetes, while Kustomize offers a declarative way to manage Kubernetes configurations without templating. These tools empower organizations and individuals to deploy applications efficiently and ensure seamless management.&lt;/p&gt;

&lt;p&gt;In this guide, we will explore the differences between Helm and Kustomize, their real-world use cases, and how to work with them using example configurations.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Helm?
&lt;/h2&gt;

&lt;p&gt;Helm is a package manager for Kubernetes that allows developers to define, install, and upgrade applications using Helm Charts. A &lt;strong&gt;Helm Chart&lt;/strong&gt; is a collection of YAML configuration files that define Kubernetes resources, making it easy to deploy and manage complex applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Does Helm Offer?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Templating system&lt;/strong&gt;: Enables dynamic configuration using placeholders in YAML files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependency management&lt;/strong&gt;: Allows defining dependencies between applications.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Version control&lt;/strong&gt;: Provides versioned application deployments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Release management&lt;/strong&gt;: Simplifies rollback, upgrades, and rollouts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What is Kustomize?
&lt;/h2&gt;

&lt;p&gt;Kustomize is a configuration management tool that lets you customize raw Kubernetes YAML manifests without modifying the original files. Unlike Helm, Kustomize does not use templates; instead, it layers modifications on top of existing configurations.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Does Kustomize Offer?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Overlay-based configuration management&lt;/strong&gt;: Apply patches and modifications without altering base YAML files.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No templating&lt;/strong&gt;: Uses a purely declarative approach without placeholders or variables.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Native support in kubectl&lt;/strong&gt;: Since Kubernetes 1.14, Kustomize is integrated into &lt;code&gt;kubectl&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Base and overlays structure&lt;/strong&gt;: Allows for environment-specific configurations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Helm vs. Kustomize: Key Differences
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Helm&lt;/th&gt;
&lt;th&gt;Kustomize&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Approach&lt;/td&gt;
&lt;td&gt;Templating with Go templates&lt;/td&gt;
&lt;td&gt;Patch-based customization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Package Manager&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dependency Mgmt&lt;/td&gt;
&lt;td&gt;Supports dependencies&lt;/td&gt;
&lt;td&gt;No dependency management&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Versioning&lt;/td&gt;
&lt;td&gt;Supports versioned releases&lt;/td&gt;
&lt;td&gt;No built-in versioning&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Learning Curve&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;Easy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Integration&lt;/td&gt;
&lt;td&gt;Helm CLI&lt;/td&gt;
&lt;td&gt;kubectl built-in&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Example: Creating a Helm Chart
&lt;/h2&gt;

&lt;p&gt;Let's create a simple Helm chart for a &lt;strong&gt;Nginx&lt;/strong&gt; deployment.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Install Helm
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Create a New Helm Chart
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm create my-nginx
&lt;span class="nb"&gt;cd &lt;/span&gt;my-nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Modify the &lt;code&gt;values.yaml&lt;/code&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;replicaCount&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;
&lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;repository&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;
  &lt;span class="na"&gt;tag&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;latest&lt;/span&gt;
&lt;span class="na"&gt;service&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ClusterIP&lt;/span&gt;
  &lt;span class="na"&gt;port&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;80&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 4: Install the Helm Chart
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm &lt;span class="nb"&gt;install &lt;/span&gt;my-release ./my-nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Example: Using Kustomize for Nginx
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1: Create a Base Deployment
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# base/deployment.yaml&lt;/span&gt;
&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;apps/v1&lt;/span&gt;
&lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deployment&lt;/span&gt;
&lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;
&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2&lt;/span&gt;
  &lt;span class="na"&gt;selector&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;matchLabels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;metadata&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;app&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;
    &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;
        &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx:latest&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 2: Create an Overlay for Staging
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# overlays/staging/kustomization.yaml&lt;/span&gt;
&lt;span class="na"&gt;resources&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;../../base&lt;/span&gt;
&lt;span class="na"&gt;patches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;target&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;kind&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deployment&lt;/span&gt;
      &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;
    &lt;span class="na"&gt;patch&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;|-&lt;/span&gt;
      &lt;span class="s"&gt;- op: replace&lt;/span&gt;
        &lt;span class="s"&gt;path: "/spec/replicas"&lt;/span&gt;
        &lt;span class="s"&gt;value: 5&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3: Apply the Kustomization
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kubectl apply &lt;span class="nt"&gt;-k&lt;/span&gt; overlays/staging/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Helm vs. Kustomize with Real-World Examples
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Scenario&lt;/th&gt;
&lt;th&gt;Recommended Tool&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Deploying packaged applications&lt;/td&gt;
&lt;td&gt;Helm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customizing existing YAML files&lt;/td&gt;
&lt;td&gt;Kustomize&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Managing application versions&lt;/td&gt;
&lt;td&gt;Helm&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Applying patches for different environments&lt;/td&gt;
&lt;td&gt;Kustomize&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Advanced Features of Helm and Kustomize
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Helm
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Chart repositories&lt;/strong&gt;: Store and share charts with &lt;code&gt;helm repo&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hooks&lt;/strong&gt;: Execute scripts at different points of deployment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rollbacks&lt;/strong&gt;: Easily revert to previous releases.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Kustomize
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Transformers&lt;/strong&gt;: Modify labels, annotations, and images.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generators&lt;/strong&gt;: Create ConfigMaps and Secrets dynamically.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Strategic merge patches&lt;/strong&gt;: Update YAML selectively.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Performance Comparison
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Helm&lt;/strong&gt;: Uses client-side templating and may have performance overhead due to rendering.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Kustomize&lt;/strong&gt;: Directly applies YAML transformations and is generally faster for modifying existing configurations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Challenges of Helm and Kustomize
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Challenge&lt;/th&gt;
&lt;th&gt;Helm&lt;/th&gt;
&lt;th&gt;Kustomize&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Complexity&lt;/td&gt;
&lt;td&gt;Can be complex with templating&lt;/td&gt;
&lt;td&gt;Requires structured overlays&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Learning Curve&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;td&gt;Easier&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;YAML Duplication&lt;/td&gt;
&lt;td&gt;Minimal&lt;/td&gt;
&lt;td&gt;Can have duplication in overlays&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Benefits of Helm and Kustomize
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Benefit&lt;/th&gt;
&lt;th&gt;Helm&lt;/th&gt;
&lt;th&gt;Kustomize&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Reusability&lt;/td&gt;
&lt;td&gt;High&lt;/td&gt;
&lt;td&gt;Moderate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Customization&lt;/td&gt;
&lt;td&gt;Templating-based&lt;/td&gt;
&lt;td&gt;Overlay-based&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Adoption&lt;/td&gt;
&lt;td&gt;Widely used in Kubernetes community&lt;/td&gt;
&lt;td&gt;Built into &lt;code&gt;kubectl&lt;/code&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Helm and Kustomize both serve valuable roles in Kubernetes configuration management. Helm is best suited for deploying packaged applications with version control and dependencies, while Kustomize excels in modifying existing YAML manifests for different environments. Choosing the right tool depends on your use case, team workflow, and application complexity.&lt;/p&gt;

&lt;p&gt;Would you use Helm, Kustomize, or combination of both? Let me know in the comments!&lt;/p&gt;

&lt;p&gt;Until next blog post&lt;/p&gt;

&lt;p&gt;Happy Helming and Kustming! 🎉&lt;/p&gt;

</description>
      <category>devops</category>
      <category>kubernetes</category>
      <category>programming</category>
      <category>cloud</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Nirmal Chandrasiri</dc:creator>
      <pubDate>Tue, 04 Feb 2025 10:29:47 +0000</pubDate>
      <link>https://dev.to/nirmalnaveen/-cdp</link>
      <guid>https://dev.to/nirmalnaveen/-cdp</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/nirmalnaveen" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F792802%2F302ba308-9c10-468d-81eb-2dfed5aa52c9.jpeg" alt="nirmalnaveen"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/nirmalnaveen/deploying-an-ec2-instance-using-terraform-eee" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Deploying an EC2 Instance Using Terraform&lt;/h2&gt;
      &lt;h3&gt;Nirmal Chandrasiri ・ Feb 4&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#aws&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#ec2&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#terraform&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#devops&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>aws</category>
      <category>ec2</category>
      <category>terraform</category>
      <category>devops</category>
    </item>
    <item>
      <title>Deploying an EC2 Instance Using Terraform</title>
      <dc:creator>Nirmal Chandrasiri</dc:creator>
      <pubDate>Tue, 04 Feb 2025 10:17:58 +0000</pubDate>
      <link>https://dev.to/nirmalnaveen/deploying-an-ec2-instance-using-terraform-eee</link>
      <guid>https://dev.to/nirmalnaveen/deploying-an-ec2-instance-using-terraform-eee</guid>
      <description>&lt;h2&gt;
  
  
  Introduction to Terraform
&lt;/h2&gt;

&lt;p&gt;Terraform is an open-source Infrastructure as Code (IaC) tool developed by HashiCorp. It enables users to define, provision, and manage infrastructure using a declarative configuration language. With Terraform, infrastructure can be treated as code, making deployments more consistent, scalable, and automated.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Use IaC Instead of AWS Management Console?
&lt;/h3&gt;

&lt;p&gt;Using the AWS Management Console for creating EC2 instances is straightforward but not scalable. It involves manual effort, which can lead to errors and inconsistencies. With IaC tools like Terraform, you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automate infrastructure provisioning&lt;/li&gt;
&lt;li&gt;Maintain consistent deployments&lt;/li&gt;
&lt;li&gt;Easily manage infrastructure versions&lt;/li&gt;
&lt;li&gt;Reuse code for different environments&lt;/li&gt;
&lt;li&gt;Reduce human errors&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before we proceed ensure that you have:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;AWS Account&lt;/strong&gt; - &lt;a href="https://aws.amazon.com/free/" rel="noopener noreferrer"&gt;Sign up for an AWS Account&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terraform Installed&lt;/strong&gt; - &lt;a href="https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli" rel="noopener noreferrer"&gt;Installation Guide&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS CLI Installed&lt;/strong&gt; - &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/install-cliv2.html" rel="noopener noreferrer"&gt;Installation Guide&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AWS Configuration&lt;/strong&gt; - Configure AWS credentials using the following command:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;   aws configure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will be prompted to enter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AWS Access Key ID&lt;/li&gt;
&lt;li&gt;AWS Secret Access Key&lt;/li&gt;
&lt;li&gt;Default region name&lt;/li&gt;
&lt;li&gt;Default output format&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Terraform Best Practices
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Use Version Control&lt;/strong&gt;: Store Terraform configurations in Git for tracking changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Remote State&lt;/strong&gt;: Store Terraform state files in a remote backend (like S3) to enable collaboration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use Variables&lt;/strong&gt;: Avoid hardcoding values; use &lt;code&gt;variables.tf&lt;/code&gt; for flexibility.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Modularize Code&lt;/strong&gt;: Break down large configurations into reusable modules.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Follow Least Privilege Principle&lt;/strong&gt;: Provide only necessary permissions to resources.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Terraform Configuration Files
&lt;/h2&gt;

&lt;p&gt;In this section, I'm following best practices by structuring the Terraform configuration into separate files. While it is possible to integrate all the code into a single file, breaking it into multiple files makes it easier to read, update, and manage changes effectively. This modular approach enhances maintainability and reusability.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;main.tf&lt;/code&gt; - Defines the EC2 Instance Resource
&lt;/h3&gt;

&lt;p&gt;This file defines the EC2 instance resource:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"aws_instance"&lt;/span&gt; &lt;span class="s2"&gt;"ec2"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;ami&lt;/span&gt;           &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ami_id&lt;/span&gt;
  &lt;span class="nx"&gt;instance_type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;instance_type&lt;/span&gt;

  &lt;span class="nx"&gt;tags&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;Name&lt;/span&gt;      &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;instance_name&lt;/span&gt;
    &lt;span class="nx"&gt;timestamp&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;timestamp&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Explanation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;aws_instance "ec2"&lt;/code&gt; - Declares an EC2 instance.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;ami&lt;/code&gt; - Specifies the Amazon Machine Image ID.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;instance_type&lt;/code&gt; - Defines the type of EC2 instance.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;tags&lt;/code&gt; - Adds metadata to identify the instance.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;provider.tf&lt;/code&gt; - Configures the AWS Provider
&lt;/h3&gt;

&lt;p&gt;This file specifies the Terraform AWS provider:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="nx"&gt;terraform&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;required_providers&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;aws&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;source&lt;/span&gt;  &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"hashicorp/aws"&lt;/span&gt;
      &lt;span class="nx"&gt;version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"~&amp;gt; 4.16"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="nx"&gt;required_version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"&amp;gt;= 1.2.0"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;provider&lt;/span&gt; &lt;span class="s2"&gt;"aws"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;region&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;var&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;region&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Explanation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Defines AWS as the required provider.&lt;/li&gt;
&lt;li&gt;Specifies the provider source and version.&lt;/li&gt;
&lt;li&gt;Defines the AWS region from the &lt;code&gt;variables.tf&lt;/code&gt; file.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;variables.tf&lt;/code&gt; - Defines Input Variables
&lt;/h3&gt;

&lt;p&gt;This file defines input variables:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="nx"&gt;variable&lt;/span&gt; &lt;span class="s2"&gt;"region"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"AWS region where resources will be created"&lt;/span&gt;
  &lt;span class="nx"&gt;type&lt;/span&gt;        &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;
  &lt;span class="nx"&gt;default&lt;/span&gt;     &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"us-east-2"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;variable&lt;/span&gt; &lt;span class="s2"&gt;"ami_id"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"AMI ID for the EC2 instance"&lt;/span&gt;
  &lt;span class="nx"&gt;type&lt;/span&gt;        &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;
  &lt;span class="nx"&gt;default&lt;/span&gt;     &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"ami-0c7c4e3c6b4941f0f"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;variable&lt;/span&gt; &lt;span class="s2"&gt;"instance_type"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"EC2 instance type"&lt;/span&gt;
  &lt;span class="nx"&gt;type&lt;/span&gt;        &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;
  &lt;span class="nx"&gt;default&lt;/span&gt;     &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"t2.micro"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;variable&lt;/span&gt; &lt;span class="s2"&gt;"instance_name"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Name tag for the EC2 instance"&lt;/span&gt;
  &lt;span class="nx"&gt;type&lt;/span&gt;        &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;
  &lt;span class="nx"&gt;default&lt;/span&gt;     &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Instance-01"&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Explanation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Defines &lt;code&gt;region&lt;/code&gt;, &lt;code&gt;ami_id&lt;/code&gt;, &lt;code&gt;instance_type&lt;/code&gt;, and &lt;code&gt;instance_name&lt;/code&gt; as variables.&lt;/li&gt;
&lt;li&gt;Provides default values for each variable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;outputs.tf&lt;/code&gt; - Captures Outputs After Execution
&lt;/h3&gt;

&lt;p&gt;This file captures outputs after Terraform execution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="s2"&gt;"instance_id"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"ID of the created EC2 instance"&lt;/span&gt;
  &lt;span class="nx"&gt;value&lt;/span&gt;       &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;aws_instance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;output&lt;/span&gt; &lt;span class="s2"&gt;"public_ip"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;description&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Public IP of the EC2 instance"&lt;/span&gt;
  &lt;span class="nx"&gt;value&lt;/span&gt;       &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;aws_instance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;public_ip&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Explanation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Outputs the &lt;code&gt;instance_id&lt;/code&gt; and &lt;code&gt;public_ip&lt;/code&gt; after resource creation.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Running Terraform
&lt;/h2&gt;

&lt;p&gt;After creating the necessary files, follow these steps to deploy the EC2 instance:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Initialize Terraform
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fzj20rj0ldn3ahzx7m1q4.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%2Fzj20rj0ldn3ahzx7m1q4.png" alt="Image description" width="800" height="455"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Explanation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Downloads necessary provider plugins.&lt;/li&gt;
&lt;li&gt;Prepares the working directory for Terraform commands.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Validate Configuration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform validate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fppxy2ljyzt2sy1gy5awq.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%2Fppxy2ljyzt2sy1gy5awq.png" alt="Image description" width="800" height="455"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Explanation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Checks if the configuration syntax is correct.&lt;/li&gt;
&lt;li&gt;Ensures all required fields are specified.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  3. Plan Execution
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform plan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fazpu6lkxvs3fj73wqdx2.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%2Fazpu6lkxvs3fj73wqdx2.png" alt="Image description" width="800" height="455"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Explanation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shows what Terraform will create without applying changes.&lt;/li&gt;
&lt;li&gt;Helps verify expected modifications before execution.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  4. Apply Configuration
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform apply
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F5i1qbf4yimk8ivj9rbee.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%2F5i1qbf4yimk8ivj9rbee.png" alt="Image description" width="800" height="455"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;Explanation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deploys resources as per the configuration.&lt;/li&gt;
&lt;li&gt;Prompts for confirmation before executing.&lt;/li&gt;
&lt;li&gt;Once confirmed, creates the EC2 instance.&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%2F7tvrr5puuzsf3g5bjb2r.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%2F7tvrr5puuzsf3g5bjb2r.png" alt="Image description" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Remove Resources
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;terraform destroy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;⚠️ Please make sure to destroy resource if you don't want it anymore otherwise you will be charged. &lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;We can use Terraform to deploy an EC2 instance automates the process, ensuring consistency and scalability. By following best practices, using variables, and leveraging IaC principles, managing cloud infrastructure becomes more efficient and reliable.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>ec2</category>
      <category>terraform</category>
      <category>devops</category>
    </item>
    <item>
      <title>Shell Script to Monitor Linux Server Resources</title>
      <dc:creator>Nirmal Chandrasiri</dc:creator>
      <pubDate>Sat, 18 Jan 2025 06:33:26 +0000</pubDate>
      <link>https://dev.to/nirmalnaveen/shell-script-to-monitor-linux-server-resources-4270</link>
      <guid>https://dev.to/nirmalnaveen/shell-script-to-monitor-linux-server-resources-4270</guid>
      <description>&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%2F45s4nheierhvvnv3l8sy.jpg" 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%2F45s4nheierhvvnv3l8sy.jpg" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Phew! After a long time, I’ve finally planned to write a simple blog post on Dev. So, let’s dive in!&lt;/p&gt;

&lt;p&gt;We all know that effective server monitoring is essential for maintaining system stability and performance. In this blog post, I’ll show you how to create an enhanced shell script that monitors CPU usage, memory usage, disk space, network activity, running processes, and system uptime in real time.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;p&gt;Before we begin, ensure you have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;    Ubuntu Instance: Any Ubuntu-based system or virtual machine.&lt;/li&gt;
&lt;li&gt;    Basic Knowledge of Shell Scripting: Familiarity with terminal commands and scripting basics.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Create a File in Ubuntu&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Start by creating a file for your script. Open a terminal and use your preferred text editor. Here, we’ll use vim:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;vim monitor_linux.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 2: Write the Shell Script&lt;/p&gt;

&lt;p&gt;Add the following script to the file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#!/bin/bash

while true; do
 clear
 echo "System Resource Monitoring"
 echo "--------------------------"

 # Display CPU usage
 echo "CPU Usage:"
 top -n 1 -b | grep "Cpu"

 # Display memory usage
 echo -e "\nMemory Usage:"
 free -h

 # Display disk space usage
 echo -e "\nDisk Space Usage:"
 df -h

 # Display top 5 processes by memory usage
 echo -e "\nTop 5 Processes by Memory Usage:"
 ps -eo pid,ppid,cmd,%mem --sort=-%mem | head -6

 # Display network usage
 echo -e "\nNetwork Usage (bytes received and transmitted):"
 echo "Interface  RX Bytes  TX Bytes"
 cat /proc/net/dev | tail -n +3 | awk '{print $1, $2, $10}'

 # Display system uptime
 echo -e "\nSystem Uptime:"
 uptime -p

 sleep 5 # Wait for 5 seconds before the next update
done
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 3: Make the Script Executable&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Give the script execute permissions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;chmod +x monitor_linux.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Step 4: Run the Script&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Run the script to monitor your server:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;./monitor_linux.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The script will display updated system information every 5 seconds. To stop the script, please use CTRL + C.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Here is the in detail of this script:&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;    CPU Usage: The top command displays current CPU utilization.&lt;/li&gt;
&lt;li&gt;    Memory Usage: The free command shows memory statistics in a human-readable format.&lt;/li&gt;
&lt;li&gt;    Disk Space Usage: The df command shows disk space usage for all mounted filesystems.&lt;/li&gt;
&lt;li&gt;    Top 5 Processes: The ps command lists the top 5 memory-consuming processes.&lt;/li&gt;
&lt;li&gt;    Network Usage: Displays bytes received and transmitted for each network interface using /proc/net/dev.&lt;/li&gt;
&lt;li&gt;    System Uptime: The uptime command shows how long the system has been running.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This simple shell script offers a comprehensive view of your Linux server’s performance metrics. You can easily customize it further to include additional monitoring features like I/O statistics, swap usage, or alert mechanisms.&lt;/p&gt;

&lt;p&gt;I’m planning to share more technical posts in the future, covering topics like AWS, Kubernetes, Prometheus, Elastic, and more. Until next time, happy learning!&lt;/p&gt;

</description>
      <category>linux</category>
      <category>bash</category>
      <category>monitoring</category>
      <category>ubuntu</category>
    </item>
    <item>
      <title>Front-End Web and Mobile Development on AWS</title>
      <dc:creator>Nirmal Chandrasiri</dc:creator>
      <pubDate>Sun, 16 Jan 2022 06:16:13 +0000</pubDate>
      <link>https://dev.to/nirmalnaveen/front-end-web-andmobile-developmenton-aws-5f7f</link>
      <guid>https://dev.to/nirmalnaveen/front-end-web-andmobile-developmenton-aws-5f7f</guid>
      <description>&lt;p&gt;AWS offers a wide range of tools and services to support development workflows for iOS, Android, React Native, and web front-end developers. There is a set of services that make it easy to build, test, and deploy an application, even with minimal knowledge of AWS. With the speed and reliability of the AWS infrastructure, mobile and web applications can scale from prototype to millions of users to provide a better user experience and better solutions for the whole integrated system. &lt;/p&gt;

&lt;p&gt;Amazon services are primarily aimed at developing web and mobile&lt;br&gt;
applications:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Ease of use and minimal energy to start. Amazon services allow you to develop an application using existing iOS/Android IDEs and web frameworks. This makes it easy to add UI components for a user-friendly interface and use the CLI tool chain to easily customize the back end.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Provide access to the features you need. You can use Auth, Analytics, API, Storage, Predictions, XR, and others to create rich server infrastructures. GraphQL can be used to access and integrate data in flexible ways. Amazon services offer the ability to test mobile applications on hundreds of real devices.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A scalable approach allows you to grow your business quickly with built-in AWS best practices for security, availability, and reliability; your application can easily scale from one request per second with microsecond latency around the world.&lt;/p&gt;

&lt;p&gt;Let's look at which of the Amazon services will help in the development and operation of web and mobile solutions, as well as speed up the whole process and make it more stable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS Amplify&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS Amplify is a collection of tools and services that enable developers of mobile applications and web interfaces to build secure and scalable end-to-end systems on AWS. With Amplify, you can easily create custom workflows, develop voice interfaces, connect artificial intelligence to real-time data streams, run targeted advertising campaigns, and so on. AWS Amplify will help you develop and deliver quality applications.&lt;/p&gt;

&lt;p&gt;AWS Amplify includes an open-source platform with separate libraries for specific use cases and a wide range of tools for building cloud functionality and incorporating them into applications, as well as a web hosting service for deploying static web applications.&lt;/p&gt;

&lt;p&gt;Within minutes of configuring the appropriate service, a developer can automatically configure a best-in-class backend service for mobile and web applications, such as an authentication service, data warehouse, or API based on Amazon S3, Amazon Cognito, and other AWS services.&lt;/p&gt;

&lt;p&gt;Amplify CLI seamlessly integrates with iOS and Android IDEs, as well as many popular web development frameworks, providing a guided workflow to customize the optimal backend for your applications with a few simple commands.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS Amplify Console&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The AWS Amplify Console is a static web hosting service that accelerates the application release cycle with an uncomplicated CI/CD process for building and deploying static web applications. You only need to provide a link to the repository with your application code in the console, and all adjustments in the frontend and backend will be deployed in a single workflow every time you commit the code.&lt;/p&gt;

&lt;p&gt;A complex application includes a frontend hosted on a single-page application framework (such as React, Angular, Vue, Gatsby, or Flutter, which is now in developer preview) and an optional cloud-based backend (such as GraphQL, REST API, file and data stores). &lt;/p&gt;

&lt;p&gt;These main features allow you to integrate web and mobile applications with Amazon:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Authentication (User Registration and Authentication)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Data storage (offline sync and conflict resolution)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;API (GraphQL and REST - Accessing Data from Multiple Data Sources)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Storage (User Content Management)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Analytics (Collecting analytic data for your application)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Forecasting (Artificial Intelligence/Machine Learning, including text broadcasts)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Interactions (Conversational Chatbots)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Push notifications (Sending targeted messages)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PubSub (Post and Subscription Management)&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%2Fbi7qf5shocb6dgbx9y3t.jpg" 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%2Fbi7qf5shocb6dgbx9y3t.jpg" alt="A pie chart showing 40% responded " width="800" height="251"&gt;&lt;/a&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%2Fj6lfk8k2kr64fm27zymi.jpg" 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%2Fj6lfk8k2kr64fm27zymi.jpg" alt="A pie chart showing 40% responded " width="800" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS AppSync&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS AppSync simplifies application development by letting you create a universal API to securely access, modify, and combine data from multiple sources. AppSync is a managed service that uses GraphQL so that applications can easily retrieve only the data they need.&lt;/p&gt;

&lt;p&gt;With AppSync, you can build scalable applications, including those requiring real-time updates, using a range of data sources such as NoSQL data stores, relational databases, HTTP APIs, and native data sources with AWS Lambda.&lt;/p&gt;

&lt;p&gt;For mobile and web applications, AppSync also provides access to local data when devices go offline and sync data when they reconnect to the Internet. In this case, the client can customize the order of conflict resolution. AWS AppSync is available in different regions.&lt;/p&gt;

&lt;p&gt;You can develop your application in a familiar IDE (for example, Xcode, Android Studio, VS Code), and use the intuitive AWS AppSync or AWS Amplify CLI management console to automatically generate APIs and client code.&lt;/p&gt;

&lt;p&gt;AWS AppSync integrates with Amazon DynamoDB, Amazon Aurora, Amazon Elasticsearch, AWS Lambda, and other AWS services, allowing you to build complex applications with nearly unlimited performance and storage that can change based on your business needs.&lt;/p&gt;

&lt;p&gt;AWS AppSync provides real-time subscriptions to millions of devices and offline access to application data. Once the device is reconnected, AWS AppSync syncs only the updates at the time the device was disconnected, not the entire database. AWS AppSync offers configurable server-side conflict detection and resolution.&lt;/p&gt;

&lt;p&gt;It is also possible to perform complex queries and generalizations across multiple data sources with a single network call using GraphQL. AWS AppSync makes it easy to protect your application data by using multiple authentication modes at the same time and also allows you to determine the severity of the threat and perform granular access control at the data definition level directly from your GraphQL schema.&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%2Ffiwljdf6o658b9vwg740.jpg" 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%2Ffiwljdf6o658b9vwg740.jpg" alt="A pie chart showing 40% responded " width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amazon API Gateway&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon API Gateway is a fully managed developer service for building, publishing, maintaining, monitoring, and securing APIs at scale. Applications access the data, business logic, or functionality of your backend services through the API. API Gateway allows you to create RESTful and WebSocket APIs, which are the main component of real-time two-way communication applications. API Gateway supports containerized and serverless workloads and Internet applications.&lt;/p&gt;

&lt;p&gt;API Gateway takes care of all the tasks associated with accepting and processing hundreds of thousands of concurrent API calls, including traffic management, CORS support, authorization, and access control, request throttling, and API monitoring and versioning. Working with API Gateway does not require minimum fees or start-up investments. This only pays for the received API calls and the amount of data transferred, and you can use API Gateway's tiered pricing model to reduce application costs as you scale your API usage.&lt;/p&gt;

&lt;p&gt;REST API and WebSocket are very important features for web and mobile application development:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;REST API. Allows you to create RESTful APIs optimized for serverless workloads and HTTP servers using HTTP APIs. HTTP APIs are the best way to create APIs that only require an API proxy. If your API requires API proxy functionality and API management capabilities in a single solution, API Gateway also provides REST APIs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;WebSocket API. Allows you to create real-time two-way communication applications such as chat apps and streaming panels using the WebSocket API. API Gateway maintains a persistent communication to handle messages passed between your backend service and your clients.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;API Gateway provides a tiered pricing model for API requests. At just $0.90 per one million API requests at the highest level, a developer can reduce their costs by increasing the number of API requests per region across all of your AWS accounts.&lt;/p&gt;

&lt;p&gt;By the way, it is possible to monitor performance metrics and information about API calls, data latency, and error rates in the API Gateway control panel. This will allow you to visually control calls to your services using Amazon.&lt;/p&gt;

&lt;p&gt;It is easy to set up API access using AWS Identity and Access Management (IAM) and Amazon Cognito. By using OAuth tokens, you leverage the built-in support for OIDC and OAuth2 API Gateway. To support custom authorization requirements, you can run the Lambda Authorization Tool from AWS Lambda.&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%2Fwnw4vs5fnx43e87ogjcl.jpg" 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%2Fwnw4vs5fnx43e87ogjcl.jpg" alt="A pie chart showing 40% responded " width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AWS Device Farm&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS Device Farm is an application testing service that improves the performance of mobile and web applications. It uses a variety of desktop browsers and real mobile devices, so the developer doesn't need to create his own test framework. The service allows you to run tests simultaneously in multiple browsers for desktop computers or use real mobile devices. This speeds up the testing process, which also generates videos and logs to quickly identify bugs in your application.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Automated testing. Test applications in parallel on multiple physical devices in the AWS Cloud. With the built-in Amazon infrastructures, the user is able to test their applications without any scripting.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Testing on devices that potential users work with. It is possible to run tests on a wide variety of physical devices. Unlike emulators, physical devices allow you to more accurately determine how users interact with your application while taking into account factors such as memory size, processor usage, location, and firmware or software changes made by the manufacturer or operator. The base of devices in Amazon is constantly growing.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Playback and quick troubleshooting. The service allows you to manually reproduce problems and run automatic testing in parallel. The service collects videos, logs, and performance data, which will provide detailed information about the problem and help you quickly solve it. In automated testing, problems are identified and grouped.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In doing so, you can set the location, language settings, network connection settings, application data, and install the required applications.&lt;/p&gt;

&lt;p&gt;It is possible to use open source testing frameworks such as Appium, Calabash, or Espresso. Testing can also be performed manually using remote access. For automated tests and to retrieve results from IDEs, it is possible to use continuous integration environments such as Android Studio or Jenkins.&lt;/p&gt;

&lt;p&gt;For web applications, testing is available in multiple desktop browsers and in different browser versions. This allows tests to run across multiple desktop browsers, including Chrome, Firefox, and Internet Explorer, to ensure that applications work properly across multiple browsers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Amazon Pinpoint&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Amazon Pinpoint is a flexible and scalable service for inbound and outbound marketing communications. It allows you to interact with your customers through channels such as email, SMS, push notifications, or voice. Amazon Pinpoint is easy to set up, easy to use, and flexible to fit any marketing interaction scenario.&lt;/p&gt;

&lt;p&gt;This allows you to segment your campaign audience by customer type and customize your messages by filling them with relevant content. Amazon Pinpoint delivery and campaign metrics measure the success of your engagement. Amazon Pinpoint can grow with your business and scale to billions of messages per day across all communication channels.&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%2Fx3bc8wazn6uu1kz98600.jpg" 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%2Fx3bc8wazn6uu1kz98600.jpg" alt="A pie chart showing 40% responded " width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We discovered in this article Front-End Web and&lt;br&gt;
Mobile Development on AWS Features.&lt;/p&gt;

&lt;p&gt;Hope you enjoyed reading this blog post.&lt;/p&gt;

&lt;p&gt;If you have any questions or feedback, please feel free to leave a comment.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Documentation&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;[&lt;a href="https://aws.amazon.com/amplify/" rel="noopener noreferrer"&gt;https://aws.amazon.com/amplify/&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[&lt;a href="https://docs.aws.amazon.com/amplify/latest/userguide/welcome.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/amplify/latest/userguide/welcome.html&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[&lt;a href="https://aws.amazon.com/appsync/" rel="noopener noreferrer"&gt;https://aws.amazon.com/appsync/&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[&lt;a href="https://aws.amazon.com/api-gateway/" rel="noopener noreferrer"&gt;https://aws.amazon.com/api-gateway/&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[&lt;a href="https://aws.amazon.com/device-farm/" rel="noopener noreferrer"&gt;https://aws.amazon.com/device-farm/&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;[&lt;a href="https://aws.amazon.com/pinpoint/" rel="noopener noreferrer"&gt;https://aws.amazon.com/pinpoint/&lt;/a&gt;]&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>aws</category>
      <category>webdev</category>
      <category>cloud</category>
      <category>mobile</category>
    </item>
  </channel>
</rss>
