<?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>Forem: LABOUARDY Mohamed</title>
    <description>The latest articles on Forem by LABOUARDY Mohamed (@mlabouardy).</description>
    <link>https://forem.com/mlabouardy</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%2F162023%2Fb9a55fdb-dff1-4410-84fe-d81cf8d9f894.png</url>
      <title>Forem: LABOUARDY Mohamed</title>
      <link>https://forem.com/mlabouardy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/mlabouardy"/>
    <language>en</language>
    <item>
      <title>Deploy Komiser to AWS with Terraform</title>
      <dc:creator>LABOUARDY Mohamed</dc:creator>
      <pubDate>Mon, 24 Apr 2023 18:57:57 +0000</pubDate>
      <link>https://forem.com/tailwarden/deploy-komiser-to-aws-with-terraform-lnb</link>
      <guid>https://forem.com/tailwarden/deploy-komiser-to-aws-with-terraform-lnb</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/tailwarden/komiser"&gt;Komiser&lt;/a&gt; is an open-source cloud-agnostic inventory solution that gives you a holistic view of your cloud resources and helps you uncover insights about your infrastructure such as cost wasted, security threats, and compliance issues.&lt;/p&gt;

&lt;p&gt;This tutorial will cover all the necessary steps for deploying Komiser on AWS using Terraform. By the end of this tutorial, we’ll deploy the below architecture with the following components:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Provision an EC2 instance to host the Komiser container, and ensure that inbound and outbound traffic to the instance is restricted using a security group.&lt;/li&gt;
&lt;li&gt;  Deploy an ELB in front of the EC2 instance to manage traffic distribution, and configure a security group for the ELB.&lt;/li&gt;
&lt;li&gt;  Create an IAM instance profile and attach it to the EC2 instance, including the Komiser recommended IAM policy to manage access to AWS resources.&lt;/li&gt;
&lt;li&gt;  Set up an alias record in Route 53 to direct traffic to the ELB DNS with a user-friendly URL.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--N9ZccVgU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2A2cwPMl-Baj5IGn-IqMI8TA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N9ZccVgU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2A2cwPMl-Baj5IGn-IqMI8TA.png" alt="architecture" width="710" height="340"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;All Terraform templates used in this tutorial can be found in the GitHub &lt;a href="https://github.com/tailwarden/komiser-terraform"&gt;repository&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To get started, define your backend and declare AWS as your provider in the &lt;a href="http://terraform.tf/"&gt;terraform.tf&lt;/a&gt; file. In this example, S3 is used as the backend for storing Terraform state files. Once done, run &lt;em&gt;terraform init&lt;/em&gt; to download the AWS module.&lt;/p&gt;

&lt;p&gt;Next, declare an EC2 instance in &lt;a href="http://ec2.tf/"&gt;ec2.tf&lt;/a&gt; file with &lt;em&gt;aws_instance&lt;/em&gt; resource. The resource uses Amazon Linux 2 as an AMI which is obtained using the &lt;em&gt;data&lt;/em&gt; block and the &lt;em&gt;aws_ami&lt;/em&gt; data source. The instance type is &lt;em&gt;t2.medium&lt;/em&gt; (recommended size to host Komiser) and uses a public IP address and a security group that allows traffic on port 22 for SSH access and 3000 for serving the Komiser dashboard. It also attaches an IAM instance profile with the &lt;a href="https://github.com/tailwarden/komiser/blob/master/policy.json"&gt;permissions&lt;/a&gt; required by Komiser to build your asset inventory.&lt;/p&gt;

&lt;p&gt;The provisioned blocks define a series of file transfers and commands to execute on the EC2 instance after it’s launched. The first three &lt;em&gt;provisioner&lt;/em&gt; blocks upload files from the local machine to the EC2 instance. The last &lt;em&gt;provisioner&lt;/em&gt; block executes remote commands on the EC2 instance, which installs some needed dependencies by running a bash script that is transferred to one of the previous &lt;em&gt;provisioner&lt;/em&gt; blocks and deploys Komiser as a Docker container.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Dk7vq_cK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2Awx51JwhhR78OLu9_8BIGsA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Dk7vq_cK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2Awx51JwhhR78OLu9_8BIGsA.png" alt="ec2 instance" width="800" height="872"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s important to note that when using Komiser in a production environment, certain additional improvements should be taken to ensure security and scalability.&lt;/p&gt;

&lt;p&gt;Firstly, it’s recommended to deploy the Komiser instance within a private subnet and restrict SSH access only from a trusted CIDR block or a bastion host. This helps to prevent unauthorized access to the instance and reduces the risk of security threats.&lt;/p&gt;

&lt;p&gt;Secondly, automation tools such as Ansible or Packer can be leveraged to further optimize the deployment process. Using Packer, for example, allows for creating a custom AMI that includes all the necessary software and configurations for running Komiser.&lt;/p&gt;

&lt;p&gt;The &lt;a href="http://install.sh/"&gt;install.sh&lt;/a&gt; script installs Docker Community Edition (CE) and Docker Compose. It also adds the &lt;em&gt;ec2-user&lt;/em&gt; to the &lt;em&gt;docker&lt;/em&gt; group, allowing us to run Docker commands without needing to use &lt;em&gt;sudo&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7JZ-Sz7e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2ABSoYZoNinZ2wNOZGNdhwhw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7JZ-Sz7e--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2ABSoYZoNinZ2wNOZGNdhwhw.png" alt="bash script" width="800" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once those tools are installed, the deployment of the Komiser container can be initiated by executing the command &lt;em&gt;docker-compose up&lt;/em&gt; with reference to the &lt;em&gt;docker-compose.yml&lt;/em&gt; file. This will result in the deployment of the latest version of the Komiser image, which is at the time of writing this post &lt;a href="https://github.com/tailwarden/komiser/releases/tag/v3.0.11"&gt;&lt;em&gt;v3.0.11&lt;/em&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The container is configured to use a &lt;em&gt;config.toml&lt;/em&gt; file that connects to the running AWS account and stores data in an SQLite database. Additionally, the container serves the Komiser dashboard through port 3000.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xhCJ29GC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2AyP-K23_RGcPc0WHtTbXfMQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xhCJ29GC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2AyP-K23_RGcPc0WHtTbXfMQ.png" alt="config toml" width="800" height="609"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the &lt;a href="http://iam.tf/"&gt;&lt;em&gt;iam.tf&lt;/em&gt;&lt;/a&gt; file, the next step is to define AWS IAM resources that enable the Komiser EC2 instance to assume an IAM role with the appropriate permissions attached to it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4qlUpRbP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2AIsV5H_wiUHCzr_kXOvia0w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4qlUpRbP--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2AIsV5H_wiUHCzr_kXOvia0w.png" alt="iam policy" width="800" height="1103"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, in &lt;a href="http://elb.tf/"&gt;elb.tf&lt;/a&gt; define a load balancer resource that forwards traffic into the EC2 instance running the Komiser container on port 3000. The ELB is configured with two listeners: one for HTTPS traffic and the other for HTTP traffic. The HTTPS listener is configured with an SSL certificate (requested through ACM) that is specified as a variable.&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;health_check&lt;/em&gt; block specifies a health check configuration for the ELB. It specifies the target to check for health as “TCP:3000”. The health check is configured to check the instances every 5 seconds, with a timeout of 3 seconds, and a threshold of 2 checks for both healthy and unhealthy responses.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--CdwpWDHK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2APOhuG6yr7PTT8EkzzY2sUQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CdwpWDHK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2APOhuG6yr7PTT8EkzzY2sUQ.png" alt="elb" width="800" height="1044"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, in &lt;a href="http://route53.tf/"&gt;route53.tf&lt;/a&gt; creates a new AWS Route 53 record for a domain name that points to the ELB resource using an alias record. The record type specified is “A” for an IPv4 address.&lt;/p&gt;

&lt;p&gt;This creates a Route 53 record that maps the domain name to the ELB, making it possible for users to access Komiser running on the ELB through a user-friendly URL.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ZdeF4lui--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2AkqAKqqLgC3hmKNoQ3BGubQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ZdeF4lui--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2AkqAKqqLgC3hmKNoQ3BGubQ.png" alt="route53 record" width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After defining variables and outputs, running &lt;em&gt;terraform plan&lt;/em&gt; will generate an execution plan detailing the changes that will be made to the infrastructure. Running &lt;em&gt;terraform apply&lt;/em&gt; will apply these changes, resulting in the deployment of the 9 new resources necessary for running Komiser on AWS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--P_umV2dB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2AT9ySZrUZfzIrp2SEV-qcVg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P_umV2dB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2AT9ySZrUZfzIrp2SEV-qcVg.png" alt="terraform output" width="800" height="323"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the resources have been successfully provisioned, you can easily access the Komiser dashboard by navigating to &lt;a href="https://demo.domain.com/"&gt;&lt;strong&gt;https://demo.domain.com&lt;/strong&gt;&lt;/a&gt;. Once accessed, you will be presented with a comprehensive breakdown of your AWS resources, including their associated costs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W5-QfVfI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2A4n9z6sPEcT1FD4RkXtm26A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W5-QfVfI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/1%2A4n9z6sPEcT1FD4RkXtm26A.png" alt="komiser dashboard" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congrats! You’ve successfully deployed Komiser with Terraform.&lt;/p&gt;

&lt;p&gt;You can now leverage Komiser’s holistic view to take control of your cloud usage and optimize your resources for maximum efficiency and cost savings.&lt;/p&gt;

</description>
      <category>terraform</category>
      <category>aws</category>
      <category>devops</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Managing Multiple Environments with Terraform</title>
      <dc:creator>LABOUARDY Mohamed</dc:creator>
      <pubDate>Sat, 15 Apr 2023 13:22:04 +0000</pubDate>
      <link>https://forem.com/mlabouardy/managing-multiple-environments-with-terraform-1m92</link>
      <guid>https://forem.com/mlabouardy/managing-multiple-environments-with-terraform-1m92</guid>
      <description>&lt;p&gt;Get ready for another exciting edition of the &lt;a href="https://www.devopsbulletin.com/"&gt;DevOps weekly newsletter&lt;/a&gt;! This week, I’ve got a lot in store for you.&lt;/p&gt;

&lt;p&gt;Discover how to improve AWS dead-letter queues, automate multiple AWS environments with Terraform, and explore how Amazon practices continuous deployment. We’ll also explore the dangers of relying on ChatGPT for security guidance and how database sharding works in MySQL and Postgres.&lt;/p&gt;

&lt;p&gt;Plus, discover what happens when you leak AWS credentials and explore the ultimate guide to multi-tenancy in Kubernetes. And don’t miss a funny video of the week, highlighting the main reasons people hate Amazon Web Services.&lt;/p&gt;

&lt;p&gt;As always, I’ve got some fantastic open-source projects for you to check out, including Tart, a virtualization toolset for building, running, and managing macOS and Linux virtual machines on Apple Silicon, Chroma, an open-source embedding database, and a curated list of awesome PostgreSQL software, libraries, tools, and resources inspired by awesome-mysql. We’ll also look at Timoni, a package manager for Kubernetes powered by CUE and inspired by Helm.&lt;/p&gt;

&lt;p&gt;This is one DevOps newsletter you won’t want to miss!&lt;/p&gt;

&lt;h2&gt;
  
  
  Tutorials of the week
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;👀 “Improving our dead-letter queues” —&lt;/strong&gt; This blog post addresses a previous incident where messages placed on a AWS dead-letter queue were lost, and how a better process was implemented — &lt;a href="https://dvla.github.io/posts/2023-03-improving-our-dead-letter-queues?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚀 “Automating multiple environments with Terraform”&lt;/strong&gt; — How to manage a central main account for shared infrastructure with a dev, test, and prod account — &lt;a href="https://www.buildon.aws/tutorials/automating-multiple-environments-with-terraform?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔌 “Automating safe, hands-off deployments”&lt;/strong&gt; — Strategies for continuously deploying to production while balancing safety and speed — &lt;a href="https://aws.amazon.com/builders-library/automating-safe-hands-off-deployments?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔒 “Please don’t use GPT for Security guidance”&lt;/strong&gt; — This is a really bad idea and this is why — &lt;a href="https://decodebytes.substack.com/p/please-dont-use-gpt-for-security?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⭐️ “How does database sharding work?”&lt;/strong&gt; — How database sharding works on MySQL &amp;amp; Postgres, how to think about implementing your own sharded database, and some useful tools out there that can help — &lt;a href="https://planetscale.com/blog/how-does-database-sharding-work?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔥 “Uptime guarantees — a pragmatic perspective”&lt;/strong&gt; — Engineering for 99.5% uptime is more cost-effective than 99.99% for most startups — &lt;a href="https://world.hey.com/itzy/uptime-guarantees-a-pragmatic-perspective-736d7ea4?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;😵 “What happens when you leak AWS credentials”&lt;/strong&gt; — and how AWS minimizes the damage — &lt;a href="https://xebia.com/blog/what-happens-when-you-leak-aws-credentials-and-how-aws-minimizes-the-damage/?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Open-source projects of the week
&lt;/h2&gt;

&lt;p&gt;1️⃣ Tart is a virtualization toolset to build, run and manage macOS and Linux virtual machines (VMs) on Apple Silicon — &lt;a href="https://github.com/cirruslabs/tart?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2️⃣ Chroma is an open-source embedding database. Fastest way to build Python or JavaScript LLM apps with memory — &lt;a href="https://github.com/chroma-core/chroma?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3️⃣ NoiSQL shows how to play sound and music with declarative SQL queries — &lt;a href="https://github.com/ClickHouse/NoiSQL?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4️⃣ Timoni is a package manager for Kubernetes, powered by CUE and inspired by Helm — &lt;a href="https://github.com/stefanprodan/timoni?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5️⃣ Tabby is a self-hosted AI coding assistant. An open source/on-prem alternative to GitHub Copilot — &lt;a href="https://github.com/TabbyML/tabby?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6️⃣ A curated list of awesome PostgreSQL software, libraries, tools and resources, inspired by awesome-mysql — &lt;a href="https://github.com/dhamaniasad/awesome-postgres?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Thread of the week
&lt;/h2&gt;

&lt;p&gt;Full thread &lt;a href="https://twitter.com/danielepolencic/status/1645398015736414210"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--evIrLqCO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/0%2ATZ_eX5vdyjr_hZ4o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--evIrLqCO--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/0%2ATZ_eX5vdyjr_hZ4o.png" alt="thread" width="800" height="781"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Memes of the week
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--O9M3yhYZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/0%2AAkKVHEw5ivHrq-AZ.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--O9M3yhYZ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://miro.medium.com/v2/resize:fit:1400/0%2AAkKVHEw5ivHrq-AZ.jpeg" alt="meme" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope you enjoy this week’s newsletter! Share it with a friend or colleague if you find it helpful, drop me an &lt;a href="//mailto:mohamed@labouardy.com"&gt;email&lt;/a&gt; or send me a &lt;a href="https://twitter.com/mlabouardy"&gt;DM&lt;/a&gt; on Twitter about topics you’d like to hear about in future editions.&lt;/p&gt;

</description>
      <category>terraform</category>
      <category>aws</category>
      <category>kubernetes</category>
      <category>postgres</category>
    </item>
    <item>
      <title>Build a Serverless Gym App with ChatGPT, Twilio and WhatsApp</title>
      <dc:creator>LABOUARDY Mohamed</dc:creator>
      <pubDate>Mon, 03 Apr 2023 17:05:42 +0000</pubDate>
      <link>https://forem.com/tailwarden/build-a-serverless-gym-app-with-chatgpt-twilio-and-whatsapp-3cob</link>
      <guid>https://forem.com/tailwarden/build-a-serverless-gym-app-with-chatgpt-twilio-and-whatsapp-3cob</guid>
      <description>&lt;p&gt;We have recently started hosting virtual workshops in our &lt;a href="http://discord.tailwarden.com/"&gt;Discord community&lt;/a&gt; called “Wardens Assembly”. These monthly events cover a variety of tech topics. The first event was about building a Serverless gym app that sends a workout plan to your WhatsApp number using ChatGPT. In case you missed the event, you can watch it completely here:&lt;/p&gt;

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

&lt;p&gt;In case you want to cut straight to the chase, this tutorial is for you as it covers only the key parts of building a Serverless app, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Building a Serverless app using Golang &amp;amp; AWS Lambda&lt;/li&gt;
&lt;li&gt;  Scheduling Lambda with cron expression triggers&lt;/li&gt;
&lt;li&gt;  Integrating ChatGPT 4 with AWS Lambda&lt;/li&gt;
&lt;li&gt;  Sending WhatsApp messages via the Twilio SDK&lt;/li&gt;
&lt;li&gt;  Streamlining deployment with GitHub Actions &amp;amp; AWS SAM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before jumping into the code, the diagram below summarizes the architecture we’re going to build by end of this tutorial:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sGShzkmK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2ANPMNELL9W7C70Dqt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sGShzkmK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2ANPMNELL9W7C70Dqt.png" alt="Application’s architecture" width="700" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The goal is to create a Lambda function in Go, which will communicate with ChatGPT. This function will send a prompt to ChatGPT API and then use Twilio to send a workout plan to our WhatsApp number at a specific schedule determined by an EventBridge Rule. Moreover, we will leverage AWS SAM and GitHub Actions to automate the infrastructure build and deployment, as well as the CI/CD pipeline.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can find all the source code used in this tutorial on &lt;a href="https://github.com/tailwarden/virtual-workshops"&gt;GitHub&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Building Lambda Function
&lt;/h2&gt;

&lt;p&gt;To get started, from your terminal create a main.go file, initialize a go project, and install the AWS Lambda package with the following commands:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;go mod init workout-generator&lt;br&gt;
go get github.com/aws/aws-lambda-go&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Next, declare the handler function in &lt;em&gt;main.go&lt;/em&gt;. The main function calls the lambda &lt;em&gt;handler&lt;/em&gt; by calling the &lt;em&gt;lambda.Start&lt;/em&gt; method_._&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WIxJn0B6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2APL8m296LjZKpyozc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WIxJn0B6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2APL8m296LjZKpyozc.png" alt="Lambda handler" width="700" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, to integrate with OpenAI, you will need to download the OpenAI Go wrapper library:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;go get github.com/sashabaranov/go-openai&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then, update the handler, and create an OpenAI client by passing your OpenAI token. Next, start a chat using the &lt;em&gt;CreateChatCompletion&lt;/em&gt; method and pass a prompt, and &lt;em&gt;setGPT3Dot5Turbo&lt;/em&gt; as the target model (which is the underlying name for ChatGPT). The library also supports other models, such as ChatGPT, GPT-4, DALL·E 2, and Whisper.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--RIoGlkig--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2AUFHxtpP34eyroMzj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--RIoGlkig--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2AUFHxtpP34eyroMzj.png" alt="ChatGPT Go integration" width="700" height="565"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;OPENAI_TOKEN&lt;/em&gt; value can be generated from the &lt;a href="https://platform.openai.com/account/api-keys"&gt;OpenAI platform&lt;/a&gt;. Make sure to save the key in a safe place, as it will only be shown to you once.&lt;/p&gt;

&lt;p&gt;To send the workout plan to our WhatsApp number, we need to integrate Twilio. To do so, you will need to sign up for a Twilio account, sign in to your existing account, and activate the Twilio Sandbox for WhatsApp. Follow the steps below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Sign up for a &lt;a href="https://www.twilio.com/try-twilio"&gt;free Twilio account&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;  Activate the Twilio &lt;a href="https://www.twilio.com/console/sms/whatsapp/sandbox"&gt;Sandbox for WhatsApp&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;  Select a number from the available sandbox numbers to activate your sandbox.&lt;/li&gt;
&lt;li&gt;  Send join &lt;em&gt;&lt;/em&gt; to your Sandbox number in WhatsApp to join your Sandbox.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After sending the message, Twilio should reply with a confirmation message, as shown in the screenshot below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PLS-GsQT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2AjwWzm4qs9SpYqkdF.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PLS-GsQT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2AjwWzm4qs9SpYqkdF.png" alt="Twilio Sandbox confirmation" width="700" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now to integrate with our app, install the Twilio Go package with the following command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;go get https://github.com/twilio/twilio-go&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Next, add the following code snippet to the Lambda handler. It creates a Twilio client by passing the credentials as environment variables. The Account SID and Auth Token can be found &lt;a href="http://twilio.com/console"&gt;here&lt;/a&gt; and should be set as the values for the environment variables &lt;em&gt;TWILIO_USERNAME&lt;/em&gt; and &lt;em&gt;TWILIO_PASSWORD&lt;/em&gt; respectively. Finally, it uses the &lt;em&gt;CreateMessage&lt;/em&gt; method to send the workout plan generated by ChatGPT.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4h5_kdT2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2A2TXcHsUQsiJR9mOh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4h5_kdT2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2A2TXcHsUQsiJR9mOh.png" alt="Sending message with Twilio SDK" width="700" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That’s it. Our function handler is ready to be deployed to AWS Lambda!&lt;/p&gt;

&lt;h2&gt;
  
  
  Deploying Serverless Stack with SAM
&lt;/h2&gt;

&lt;p&gt;For the deployment part, we’re going to use AWS Serverless Application Model (SAM). Once you’ve installed the &lt;a href="https://docs.aws.amazon.com/serverless-application-model/latest/developerguide/install-sam-cli.html"&gt;SAM CLI&lt;/a&gt;, create a template.yml that declares a Lambda function called “WorkoutGenerator”, including its source code location, handler function, runtime environment, memory size, and timeout duration.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q0WpA3tj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2AcR-3I-f9Vohb-OCJ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q0WpA3tj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2AcR-3I-f9Vohb-OCJ.png" alt="SAM template" width="700" height="683"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The template also defines a set of environment variables for the function. These variables are resolved using the AWS Systems Manager Parameter Store, which is a service that stores secure strings and parameters. The variables specified in this template include the OpenAI token, Twilio account credentials, and phone numbers for sending and receiving WhatsApp messages.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bCBc1fp7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2AAhNMH2wxZYHKZKHf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bCBc1fp7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2AAhNMH2wxZYHKZKHf.png" alt="Lambda variables stored in Parameter Store" width="700" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, use the AWS SAM CLI to build the application and prepare for deployment by running the &lt;em&gt;sam build&lt;/em&gt; command. Finally, run the &lt;em&gt;sam deploy — guided&lt;/em&gt; command to deploy the AWS resources by provisioning an AWS CloudFormation stack:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GpC6UcnM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2ApcxljtqoU1Fbh091.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GpC6UcnM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2ApcxljtqoU1Fbh091.png" alt="The sam deploy command’s output" width="700" height="341"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Lambda function is now deployed and running in the AWS Cloud! You can test it out, by triggering the Lambda function manually from the AWS Console. A WhatsApp message should be received with a workout plan generated by ChatGPT as follows:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--y7fiAkYk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2ArX-HZtmBu8Xa6kMP.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--y7fiAkYk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2ArX-HZtmBu8Xa6kMP.png" alt="Workout plan generated by ChatGPT" width="700" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, our goal is to have our workout plan generated automatically, ideally before we begin our gym workout. To achieve this, we need to trigger our Lambda function at a specific schedule. We can use an EventBridge rule to define a cron expression that invokes our function every weekday at 7 PM. Update the SAM template below and run it again:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HgRKnXhK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2AS8clxAjd6sVEECIJ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HgRKnXhK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2AS8clxAjd6sVEECIJ.png" alt="Triggering Lambda function with a cron job" width="700" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you head back to the Lambda dashboard, you should see an EventBridge Rule trigger, as shown in the screenshot below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0ee0VONM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2AlHHOrfFXl6g2tybI.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0ee0VONM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2AlHHOrfFXl6g2tybI.png" alt="EventBridge integration" width="700" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With our application being completed, let’s build a CI/CD pipeline to automate the deployment process through GitHub Actions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Defining a CI/CD Pipeline with GitHub Actions
&lt;/h2&gt;

&lt;p&gt;Once your source code is pushed to a remote GitHub repository, create a &lt;em&gt;release.yml&lt;/em&gt; file under the &lt;em&gt;.github/workflows&lt;/em&gt; folder with the following steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Check out the repository under &lt;em&gt;$GITHUB_WORKSPACE&lt;/em&gt;, so the workflow can access it.&lt;/li&gt;
&lt;li&gt;  Set up Python environment and install SAM CLI.&lt;/li&gt;
&lt;li&gt;  Configure AWS credentials from secrets. Make sure to add &lt;em&gt;AWS_ACCESS_KEY_ID&lt;/em&gt; and &lt;em&gt;AWS_SECRET_ACCESS_KEY&lt;/em&gt; as a secret under the GitHub repository.&lt;/li&gt;
&lt;li&gt;  Run the &lt;em&gt;sam build&lt;/em&gt; and &lt;em&gt;sam deploy&lt;/em&gt; commands in a non-interactive mode.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--I6RpxZeS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2AFwPOp-m32F1UPiAZ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--I6RpxZeS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2AFwPOp-m32F1UPiAZ.png" alt="CI/CD pipeline" width="700" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once the pipeline is defined, push the changes to the remote repository.&lt;/p&gt;

&lt;p&gt;We can test out the pipeline by improving the ChatGPT prompt to generate a workout plan with only weightlifting exercises. Push the changes, the pipeline will be triggered and new changes will be deployed to AWS as shown below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ik6QBTX1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2ABWizl77yrIxSoTj4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ik6QBTX1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2ABWizl77yrIxSoTj4.png" alt="GitHub Actions pipeline’s output" width="700" height="313"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To improve the workout plan, provide your age, gender, weight, height, and one rep max in the ChatGPT prompt.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Congratulations! You have successfully built a personal gym workout generator. We would love to see your implementation. Create a similar Serverless app that integrates with ChatGPT and share it on Twitter to enter the competition. Tag &lt;a href="https://twitter.com/tailwarden"&gt;Tailwarden on Twitter&lt;/a&gt; and add the hashtag #WardensAssemblyChallenge. The three winners will be chosen on Friday, April 28th.&lt;/p&gt;

</description>
      <category>serverless</category>
      <category>go</category>
      <category>aws</category>
      <category>programming</category>
    </item>
    <item>
      <title>Kubernetes Broke Reddit</title>
      <dc:creator>LABOUARDY Mohamed</dc:creator>
      <pubDate>Fri, 31 Mar 2023 15:58:19 +0000</pubDate>
      <link>https://forem.com/mlabouardy/kubernetes-broke-reddit-4bjm</link>
      <guid>https://forem.com/mlabouardy/kubernetes-broke-reddit-4bjm</guid>
      <description>&lt;p&gt;Get ready to supercharge your DevOps knowledge with another jam-packed edition of our &lt;a href="https://devopsbulletin.com/" rel="noopener noreferrer"&gt;weekly DevOps newsletter&lt;/a&gt;! Unravel the mystery behind unexpected charges on your AWS bill, get practical tips for rightsizing your Kubernetes workloads, and explore the benchmarking results of the AWS SDK v2 and v3.&lt;/p&gt;

&lt;p&gt;Dive into using Terraform to deploy a Counter-Strike server, learn about the notorious Lambda — S3 infinite loop, and discover how to implement magic links with Amazon Cognito. Plus, we’ll discuss testing AWS Serverless Microservices and share an insightful Reddit incident postmortem.&lt;/p&gt;

&lt;p&gt;As always, our open-source projects of the week won’t disappoint! Get your hands on a bash script to build a minimal Linux operating system just to play Doom. An open-source GitHub Copilot server, the cloud-nuke tool for cleaning up your cloud accounts, and others.&lt;/p&gt;

&lt;p&gt;Lastly, don’t miss my video tutorial on building a Serverless gym app that sends personalized workout plans to your WhatsApp using ChatGPT, Twilio, AWS SAM, and GitHub Actions from scratch, along with other exciting content!&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Tutorials of the week&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;💰 “Unexpected charges on your AWS bill” —&lt;/strong&gt; Are you a new AWS user who has experienced bill shock while being in a free-tier plan or a cloud practitioner struggling to understand your team’s cloud expenses? This post can be useful — &lt;a href="https://www.tailwarden.com/blog/unexpected-charges-on-your-aws-bill?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔨 “Practical tips for rightsizing your Kubernetes workloads”&lt;/strong&gt; — How resources are allocated in K8s envs and tips for rightsizing your workloads for cost efficiency and performance — &lt;a href="https://www.datadoghq.com/blog/rightsize-kubernetes-workloads/?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📊 “Benchmarking the AWS SDK”&lt;/strong&gt; — I would have expected the v3 to perform better than v2 — &lt;a href="https://dev.to/aws-builders/benchmarking-the-aws-sdk-2pd4?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🎮 “Using Terraform to deploy a Counter-Strike”&lt;/strong&gt; — For the geeks out there, learn how to build CS: GO server with Terraform from scratch — &lt;a href="https://techblog.zrp.com.br/deploy-a-counter-strike-go-server-using-terraform-db3f8ad68442?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;😅 “The S3 — Lambda death spiral loop”&lt;/strong&gt; — The infamous Lambda — S3 infinite loop and easiest way to lose money — &lt;a href="https://medium.com/@stefansarmir/how-to-go-broke-developing-on-aws-the-s3-lambda-death-spiral-loop-fab763363499?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔒 “Implementing magic links with Amazon Cognito”&lt;/strong&gt; — Tutorial on how to build a Lambda function that sends an email with a time-limited URL for passwordless authentication — &lt;a href="https://theburningmonk.com/2023/03/implementing-magic-links-with-amazon-cognito-a-step-by-step-guide?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚀 “Managing risk as an SRE”&lt;/strong&gt; — While evangelism can be a cap on advancement as an SRE, risk management ability is a hard requirement — &lt;a href="https://hross.substack.com/p/managing-risk-as-an-sre?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧪 “How to test AWS Serverless Microservices”&lt;/strong&gt; — It covers unit, solitary, sociable, integration, API, and E2E tests — &lt;a href="https://dev.to/epilot/how-to-test-aws-serverless-microservices-the-proper-way-1f05?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Open source projects of the week
&lt;/h2&gt;

&lt;p&gt;1️⃣ A bash script to build a minimal Linux operating system just to play Doom — &lt;a href="https://github.com/shadlyd15/DoomLinux?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2️⃣ Autometrics is a set of open-source libraries that make it fun and easy to understand the performance of your code in production.- &lt;a href="https://github.com/autometrics-dev?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3️⃣ FauxPilot is an open-source GitHub Copilot server — &lt;a href="https://github.com/fauxpilot/fauxpilot?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4️⃣ cloud-nuke is a tool for cleaning up your cloud accounts by nuking (deleting) all resources within it — &lt;a href="https://github.com/gruntwork-io/cloud-nuke?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5️⃣ Markprompt is an open-source GPT-4 platform for Markdown, Markdoc and MDX with built-in analytics — &lt;a href="https://github.com/motifland/markprompt?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6️⃣ Untitled Goose Tool is an incident response tool that runs a full investigation against a customer’s AzureAD, Azure, and M365 environments — &lt;a href="https://github.com/cisagov/untitledgoosetool?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Thread of the week
&lt;/h2&gt;

&lt;p&gt;Outage due to upgrading to a &lt;a href="https://www.reddit.com/r/RedditEng/comments/11xx5o0/you_broke_reddit_the_piday_outage/" rel="noopener noreferrer"&gt;newer Kubernetes version&lt;/a&gt;…&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afit%3A1388%2F0%2A2r8MOvrREMJijkxy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afit%3A1388%2F0%2A2r8MOvrREMJijkxy.png" alt="kubernetes"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Memes of the week
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afit%3A1400%2F0%2ALIItGUxtKeETALZO.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afit%3A1400%2F0%2ALIItGUxtKeETALZO.jpeg" alt="meme"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope you enjoy this week’s newsletter! Share it with a friend or colleague if you find it helpful, drop me an &lt;a href="//mailto:mohamed@labouardy.com"&gt;email&lt;/a&gt; or send me a &lt;a href="https://twitter.com/mlabouardy" rel="noopener noreferrer"&gt;DM&lt;/a&gt; on Twitter about topics you’d like to hear about in future editions.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>aws</category>
      <category>devops</category>
      <category>programming</category>
    </item>
    <item>
      <title>Unexpected charges on your AWS bill</title>
      <dc:creator>LABOUARDY Mohamed</dc:creator>
      <pubDate>Mon, 27 Mar 2023 13:36:16 +0000</pubDate>
      <link>https://forem.com/tailwarden/unexpected-charges-on-your-aws-bill-31am</link>
      <guid>https://forem.com/tailwarden/unexpected-charges-on-your-aws-bill-31am</guid>
      <description>&lt;p&gt;Are you a new AWS user who has experienced bill shock while being in a free-tier plan or a professional cloud practitioner struggling to understand your team’s cloud expenses? If so, you’re not alone. Many AWS users are surprised by unexpected charges on their monthly bills, which can significantly increase the overall cost of using AWS services. As companies’ cloud environments become more complex, lack of visibility can lead to unpredictable cloud bills and budget overruns. In this blog post, we will cover the most common unexpected charges on your AWS bill and provide tips on how to avoid them, so you can optimize your cloud costs and avoid unpleasant surprises.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;It’s worth mentioning that the list is not exhaustive and covers only the most common ways in which money is wasted on AWS.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Paying for unused resources
&lt;/h2&gt;

&lt;p&gt;One of the main common unexpected charges is related to idle resources. AWS charges for resources that are not actively used, such as idle EC2 instances, RDS databases, and Elastic Load Balancers. These charges can accumulate over time and result in significant bills. To avoid this, you can use AWS Auto Scaling to automatically adjust the number of resources based on demand. You can also use AWS Reserved Instances or Savings Plans to reduce costs by committing to a one-year or three-year term or use Spot Instances for non-critical jobs or workloads.&lt;/p&gt;

&lt;p&gt;Another common source of idle resources is unattached EBS volumes and unused Elastic IPs. To avoid these charges appearing on your bill, create a &lt;a href="https://aws.amazon.com/blogs/mt/controlling-your-aws-costs-by-deleting-unused-amazon-ebs-volumes/"&gt;policy that automatically deletes any unused EBS volumes&lt;/a&gt; or EIPs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Infrastructure Drift
&lt;/h2&gt;

&lt;p&gt;One major cause of &lt;a href="https://www.tailwarden.com/blog/infrastructure-drift-management"&gt;infrastructure drift&lt;/a&gt; is the creation of resources outside of the established IaC tools such as Terraform, CloudFormation, and Pulumi, or without proper approval. When this happens, the infrastructure state is not adequately described or persisted, and the changes made to the infrastructure go unnoticed (aka shadow IT activity).&lt;/p&gt;

&lt;p&gt;Until you have total visibility across your environment and have implemented measures to prevent the use of cloud consoles, infrastructure drift is likely to contribute to your AWS bill.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data requests, transfers, and retrievals
&lt;/h2&gt;

&lt;p&gt;Another unexpected item that can pop up on your AWS bill is related to data transfer. AWS charges for data transfer within the platform, as well as data transfer to and from the internet. Many users are unaware of this charge and end up with significant increases. To avoid this, you can use AWS services in the same region or availability zone, which is usually free of charge. You can also use AWS Direct Connect for data transfer between your data center and AWS, which can significantly reduce data transfer charges.&lt;/p&gt;

&lt;h2&gt;
  
  
  CloudWatch Logs
&lt;/h2&gt;

&lt;p&gt;CloudWatch is the primary source of truth for monitoring the overall health and storing logs of active AWS cloud services. However, it is also notorious for surprise bill spikes due to the complexity of its pricing model.&lt;/p&gt;

&lt;p&gt;The pricing is determined by various factors, such as the number of custom metrics, alarms, and dashboards, logs ingested, stored, and analyzed, and the use of contributor insights rules and synthetics canary runs.&lt;/p&gt;

&lt;p&gt;The most common way of rapidly driving up costs is by leaving the default retention period. This is especially true for AWS Lambda, which creates an automatic log group with an &lt;a href="https://medium.com/@mlabouardy/how-we-reduced-lambda-functions-costs-by-thousands-of-dollars-8279b0a69931"&gt;indefinite retention setting&lt;/a&gt;. It’s also important to use alarms and dashboards for key metrics only that way avoiding unnecessary alerts and visualizations.&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS Free Tier expired or usage exceeds
&lt;/h2&gt;

&lt;p&gt;AWS is pretty generous with free-tier plans but without proper monitoring, you can exceed the free usage limits in a breeze. The good news is you can monitor usage through the &lt;a href="https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/tracking-free-tier-usage.html"&gt;AWS Management Console&lt;/a&gt; and track free tier usage. Any usage beyond the free tier limit or after a free trial has ended is charged at standard rates. To avoid charges, set up alerts to notify you before the free tier expires or usage exceeds the limit.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cu0yvhWW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2ARiRoTWJe4TpxWtFF.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cu0yvhWW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:700/0%2ARiRoTWJe4TpxWtFF.png" alt="https://www.reddit.com/r/aws/comments/119admy/300k_bill_after_aws_account_hacked/" width="700" height="613"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;AWS Free Tier usage alerts automatically notify you over email when you exceed 85 percent of your Free Tier limit for each service.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Underutilized Reserved Instances and Savings Plans
&lt;/h2&gt;

&lt;p&gt;When it comes to AWS EC2 costs, there are several recommendations that you can use to save money. One popular approach is to purchase Reserved Instances and Savings Plans. By doing so, companies can potentially save a lot of money on their monthly bills. However, it’s important to note that simply purchasing these plans isn’t enough. In order to fully reap the benefits of Reserved Instances and Savings Plans, you need to make sure that they are being used, monitored, and optimized effectively. Failure to do so can result in unexpected charges and higher costs.&lt;/p&gt;

&lt;h2&gt;
  
  
  Dynamic Environments
&lt;/h2&gt;

&lt;p&gt;Elastic Beanstalk is designed to ensure that all necessary resources are running. As a result, it will automatically relaunch any services that you stop. To prevent this, you must terminate your Elastic Beanstalk environment before terminating any resources that Elastic Beanstalk has created.&lt;/p&gt;

&lt;p&gt;Similarly, auto-scaling groups are designed to maintain a minimum number of EC2 instances running. Ensure that you terminate your ASG or update the scaling policies to avoid unexpected charges.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preventing AWS Bill Shock
&lt;/h2&gt;

&lt;p&gt;AWS has many services to help monitor billing. Setting an account-wide budget alert is a relatively easy first line of defense. Secondly, regularly review and tag your resources to identify any unused or idle resources that you can terminate or downsize to reduce costs. Thirdly, use AWS Cost Explorer to analyze and visualize your costs, identify cost trends, and optimize your spending. Finally, take advantage of AWS tools such as CloudWatch and AWS Config to monitor and optimize your resources continuously.&lt;/p&gt;

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

&lt;p&gt;If you’re looking for an all-in-one platform, you can also leverage open-source tools like &lt;a href="https://github.com/tailwarden/komiser"&gt;Komiser&lt;/a&gt; to build your cloud asset inventory, tag resources, set up budget alerts, and &lt;a href="https://www.tailwarden.com/blog/how-to-practice-finops-with-komiser"&gt;bring accountability to cloud spend&lt;/a&gt;.&lt;/p&gt;

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

&lt;p&gt;Unexpected charges on AWS bills can put businesses out of the market. However, with the right practices and tools in place, companies can detect and troubleshoot overspending issues before they ever occur.&lt;/p&gt;

&lt;p&gt;Whether you’re just starting out with AWS or you’re a seasoned DevOps engineer, &lt;a href="https://github.com/tailwarden/komiser"&gt;Komiser&lt;/a&gt; can help you catch potential cost optimization opportunities early, before they become a larger problem.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Regardless if you are a Developer, DevOps, or Cloud engineer. Dealing with the cloud can be tough at times, especially on your own. If you are using Tailwarden or Komiser and want to share your thoughts doubts and insights with other cloud practitioners feel free to join our &lt;a href="https://discord.tailwarden.com/"&gt;&lt;em&gt;Tailwarden discord server&lt;/em&gt;&lt;/a&gt;. Where you will find tips, community calls, and much more.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>programming</category>
    </item>
    <item>
      <title>ChatGPT for DevOps</title>
      <dc:creator>LABOUARDY Mohamed</dc:creator>
      <pubDate>Sun, 26 Mar 2023 17:02:05 +0000</pubDate>
      <link>https://forem.com/mlabouardy/chatgpt-for-devops-1lid</link>
      <guid>https://forem.com/mlabouardy/chatgpt-for-devops-1lid</guid>
      <description>&lt;p&gt;Get ready for an exciting edition of our weekly &lt;a href="https://www.devopsbulletin.com/"&gt;DevOps newsletter&lt;/a&gt;! This week, we’ve got a diverse range of topics that will help you level up your skills and stay updated with the latest trends. Learn how to build an efficient pull request review process, implement passwordless authentication with Amazon Cognito, and build bedtime stories for children with AWS serverless services, ChatGPT, and DALL-E.&lt;/p&gt;

&lt;p&gt;Plus, discover how to reduce your AWS billing cost from $7000+ to under $2000 dollar and run virtual machines like a Pod and orchestrate them via Kubernetes.&lt;/p&gt;

&lt;p&gt;Don’t miss out on the open-source projects of the week, a podcast episode with cost-optimization tips for running containers on ECS, and my &lt;a href="https://discord.gg/8zAyEXdMYq?event=1085199832521637948"&gt;free workshop event&lt;/a&gt; on how to build a Serverless app with AWS Lambda, ChatGPT, and Twilio. Buckle up and let’s dive in!&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Tutorials of the week
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;👀 “Building a scalable PR review process” —&lt;/strong&gt; A great read on how to optimize the code review process for fast-growing organizations or teams — &lt;a href="https://medium.com/@Games24x7Tech/building-a-scalable-pr-review-process-b0c8ef8dbea0?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔒 “Passwordless authentication made easy with Cognito”&lt;/strong&gt; — A hands-on tutorial on how to implement passwordless authentication with Amazon Cognito — &lt;a href="https://theburningmonk.com/2023/03/passwordless-authentication-made-easy-with-cognito-a-step-by-step-guide/?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;😅 “Implementing a Serverless story generation application with ChatGPT and DALL-E”&lt;/strong&gt; — This post covers how to build a bedtime story for children with AWS serverless services, ChatGPT and DALL-E — &lt;a href="https://aws.amazon.com/blogs/compute/implementing-an-event-driven-serverless-story-generation-application-with-chatgpt-and-dall-e/?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💰 “How I reduced our AWS billing cost from $7000+ to under $2000 dollar?”&lt;/strong&gt; — Optimizing MySQL queries and proper indexing, API Gateway caching, CloudWatch logs retention, CloudFront caching, and other tips — &lt;a href="https://postscripts.medium.com/how-i-reduced-our-aws-billing-cost-from-7000-to-under-2000-dollar-53a10ed42ba2"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📦 “KubeVirt Part 1 — Run VMs like a Pod”&lt;/strong&gt; — Learn how to run virtual machines like a Pod and orchestrate them via Kubernetes — &lt;a href="https://eng.d2iq.com/blog/kubevirt-part-1-run-vms-like-a-pod/?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🤖 “Using ChatGPT for DevOps”&lt;/strong&gt; — Tips and tricks to get the most out of using ChatGPT for DevOps — &lt;a href="https://blog.devgenius.io/using-chatgpt-for-devops-7daa7c1783e9"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚀 “Inside logical replication in PostgreSQL”&lt;/strong&gt; — This blog post will go through the fundamentals of Logical Replication and some use cases — &lt;a href="https://www.postgresql.fastware.com/blog/inside-logical-replication-in-postgresql?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🔨 &lt;strong&gt;“How to own your own Docker Registry address”&lt;/strong&gt; — Dodge the next Dockerpocalypse and setup your own Docker registry — &lt;a href="https://httptoolkit.com/blog/docker-image-registry-facade/?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔎 “Analyzing multi-gigabyte JSON files locally”&lt;/strong&gt; — For data engineers, this tutorial can be helpful on how to leverage jq, Jupyter and Dask for large JSON files analysis — &lt;a href="https://thenybble.de/posts/json-analysis/?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Open-source projects of the week
&lt;/h2&gt;

&lt;p&gt;1️⃣ SQL Translator is a tool for converting natural language queries into SQL code using artificial intelligence — &lt;a href="https://github.com/whoiskatrin/sql-translator?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2️⃣ A simple, high-throughput file client for mounting an Amazon S3 bucket as a local file system — &lt;a href="https://github.com/awslabs/mountpoint-s3?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3️⃣ Chainloop is an open source software supply chain control plane, a single source of truth for artifacts plus a declarative attestation process — &lt;a href="https://github.com/chainloop-dev/chainloop?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4️⃣ Miller is like awk, sed, cut, join, and sort for name-indexed data such as CSV, TSV, and tabular JSON — &lt;a href="https://github.com/johnkerl/miller?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5️⃣ Terraform Live Graph Extension for vscode is a plugin that allows you to generate a live Terraform graph as you code — &lt;a href="https://github.com/adamiBs/vscode-terraform-live-graph?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6️⃣ libgsqlite is a SQLite extension that loads a Google Sheet as a virtual table — &lt;a href="https://github.com/0x6b/libgsqlite?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tweet of the week
&lt;/h2&gt;

&lt;p&gt;Lambda functions are cost-efficient they say 😅&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mu2Cr0Yg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:1180/0%2AA40GmCZtQV9ooPgR.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mu2Cr0Yg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:1180/0%2AA40GmCZtQV9ooPgR.png" alt="Lambda functions" width="590" height="559"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Full &lt;a href="https://twitter.com/donkersgood/status/1635244161778737152"&gt;thread&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Memes of the week
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HM1KViQb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:1400/0%2AzTpA3PAJo-TTddvg.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HM1KViQb--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:1400/0%2AzTpA3PAJo-TTddvg.jpeg" alt="Meme" width="880" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope this summary has been helpful. Remember to &lt;a href="https://www.devopsbulletin.com/"&gt;subscribe to the newsletter&lt;/a&gt; to receive the latest DevOps trends in your inbox every week.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>chatgpt</category>
      <category>kubernetes</category>
      <category>aws</category>
    </item>
    <item>
      <title>Postgres Explained</title>
      <dc:creator>LABOUARDY Mohamed</dc:creator>
      <pubDate>Mon, 20 Mar 2023 05:34:42 +0000</pubDate>
      <link>https://forem.com/mlabouardy/postgres-explained-2648</link>
      <guid>https://forem.com/mlabouardy/postgres-explained-2648</guid>
      <description>&lt;p&gt;Get ready for another action-packed edition of our weekly DevOps newsletter! This week, I’m covering a diverse range of topics that will help you level up your skills and stay up to date with the latest trends in DevOps. From exploring the ins and outs of Postgres architecture to learning how to troubleshoot common Kubernetes errors, I’ve got you covered.&lt;/p&gt;

&lt;p&gt;Plus, we’ll be diving into the world of AWS with articles on Just-in-Time Access and Serverless AWS CDK pipeline best practices &amp;amp; patterns. We’ll also be discussing the importance of SREs being evangelists to be successful, and how to deal with devs pushing bad code to production.&lt;/p&gt;

&lt;p&gt;And that’s not all — I’m sharing open-source projects of the week, including a DevOps framework based on getting things done, APE, Troubleshoot, and Helicone. So, whether you’re looking to automate your infrastructure with Terraform and Buildkite or learn how Discord stores trillions of messages, this week’s newsletter has got you covered. Don’t miss out — buckle up and let’s dive in!&lt;/p&gt;

&lt;h2&gt;
  
  
  Posts of the week
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;🔒 “The unreasonable effectiveness of just-in-time access” —&lt;/strong&gt; If an attacker obtained one of your developer’s credentials, what access would they have? By adding a temporal dimension to access policies, the attack surface can be significantly reduced for many security-breach scenarios. That’s where just-in-time access comes in — &lt;a href="https://blog.symops.com/2022/10/28/just-in-time-access-least-privilege-cloud/?utm_campaign=nl-6&amp;amp;utm_medium=nl-paid&amp;amp;utm_source=devopsbulletin&amp;amp;utm_content=jit-2"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⭐️ “Demystifying the For vs Owns vs Watches controllers”&lt;/strong&gt; — Theoretical side of these Kubernetes controller builders as well as their practices with a real-life examples — &lt;a href="https://yash-kukreja-98.medium.com/develop-on-kubernetes-series-demystifying-the-for-vs-owns-vs-watches-controller-builders-in-c11ab32a046e"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🤖 “Automate your infrastructure with Terraform and Buildkite”&lt;/strong&gt; — Learn how to use Buildkite to deploy your Terraform code changes — &lt;a href="https://medium.com/@neonforge/say-goodbye-to-manual-deployments-automate-your-infrastructure-with-terraform-and-buildkite-f07d6593c0e3?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🌎 “SRE evangelist”&lt;/strong&gt; — SREs must be evangelists to be successful, making reliability more interesting and externalizing the feeling — &lt;a href="https://hross.substack.com/p/sre-evangelist?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔨 “How to identify and troubleshoot common Kubernetes errors”&lt;/strong&gt; — Monitoring Kubernetes series that explains everything you need to quickly set up your Kubernetes clusters and monitor them — &lt;a href="https://newrelic.com/blog/how-to-relic/monitoring-kubernetes-part-three?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🌥 “Inside Uber’s move to the cloud”&lt;/strong&gt; — Uber has operated its own data centers for 9 years. What challenges did the company face, and why is it considering moving to the Cloud? — &lt;a href="https://newsletter.pragmaticengineer.com/p/uber-move-to-cloud?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✨ “Serverless AWS CDK pipeline best practices &amp;amp; patterns”&lt;/strong&gt; — An opinionated discussion around how to set up, structure, and deploy your AWS CDK Serverless apps using CDK Pipelines in line with AWS best practice — &lt;a href="https://blog.serverlessadvocate.com/serverless-aws-cdk-pipeline-best-practices-patterns-part-2-5446a417d232?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Projects of the week
&lt;/h2&gt;

&lt;p&gt;1️⃣ Dozzle is a web-based app to monitor Docker logs. It doesn’t store any log files. It is for live monitoring of your container logs only — &lt;a href="https://github.com/amir20/dozzle?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2️⃣ The Do Framework is a DevOps framework focused on simplicity, intuitiveness, and productivity. It helps you get more done — &lt;a href="https://github.com/iankoulski/do-framework?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3️⃣ APE takes all of your AWS IAM policies and presents you with a single policy, summarizing all of their actual permissions — &lt;a href="https://github.com/orcasecurity/orca-toolbox/tree/main/iam-ape?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4️⃣ Troubleshoot is a kubectl plugin providing diagnostic tools for Kubernetes applications — &lt;a href="https://github.com/replicatedhq/troubleshoot"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5️⃣ Meshery is the cloud-native management plane offering lifecycle, configuration, and performance management of Kubernetes, service meshes, and your workloads. — &lt;a href="https://github.com/meshery/meshery?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6️⃣ Helicone is an open-source observability platform for GPT-3 users — &lt;a href="https://github.com/Helicone/helicone?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Question of the week
&lt;/h2&gt;

&lt;p&gt;Easy! revoke their access 💀&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--cYmxb-RY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:1400/0%2A1QZCAV26AX4gPo6h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--cYmxb-RY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:1400/0%2A1QZCAV26AX4gPo6h.png" alt="Dev pushing bad code to production" width="880" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Full &lt;a href="https://www.reddit.com/r/devops/comments/11ppp66/how_to_deal_with_devs_pushing_bad_code/"&gt;thread&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Meme of the week
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WBEgizV---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:1122/0%2Ap9qqbNl_xuVDubig.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WBEgizV---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:1122/0%2Ap9qqbNl_xuVDubig.png" alt="Meme of the week" width="561" height="577"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope this summary has been helpful. Remember to &lt;a href="https://www.devopsbulletin.com/"&gt;subscribe to the newsletter&lt;/a&gt; to receive the latest DevOps trends in your inbox every week.&lt;/p&gt;

</description>
      <category>postgres</category>
      <category>aws</category>
      <category>kubernetes</category>
      <category>devops</category>
    </item>
    <item>
      <title>Why Use Message Brokers</title>
      <dc:creator>LABOUARDY Mohamed</dc:creator>
      <pubDate>Tue, 14 Mar 2023 09:10:11 +0000</pubDate>
      <link>https://forem.com/mlabouardy/why-use-message-brokers-n18</link>
      <guid>https://forem.com/mlabouardy/why-use-message-brokers-n18</guid>
      <description>&lt;p&gt;Get ready for another jam-packed edition of our weekly DevOps newsletter! This week, I’m covering everything from monitoring production systems and using message brokers to explaining CDN in simple words and testing AWS Serverless &amp;amp; Lambda. Plus, I’ll be sharing tips for writing Terraform for unsupported resources, discussing AI-generated infrastructure-as-code, and highlighting the best book for hiring talented tech engineers.&lt;/p&gt;

&lt;p&gt;Don’t forget to check out a podcast featuring IAM best practices, and our open-source projects of the week, including a web-based database interface, a tool for deploying apps with zero downtime, and an AWS Spot instances estimator. And that’s just the start — there’s plenty more to explore. So buckle up and let’s dive in!&lt;/p&gt;

&lt;h2&gt;
  
  
  Posts of the week
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;🔎 “Listing all AWS resources in an AWS account” —&lt;/strong&gt; I recently wrote a blog post on how to list all your AWS resources and build your asset inventory to answer questions about your AWS infrastructure — &lt;a href="https://medium.com/tailwarden/how-to-find-all-resources-in-an-aws-account-277a6ce85a9a"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧪 “Test In production: the ideal monitoring”&lt;/strong&gt; — A few inputs on monitoring your production system for any regression bug that can be introduced while everyone constantly makes changes — &lt;a href="https://nagaraj-tantri.medium.com/test-in-production-the-ideal-monitoring-587b23a541f9?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🗳 “Why use message brokers?”&lt;/strong&gt; — Reduce pressure off downstream consumers, prevent messages/data from being lost, parallel processing, and others — &lt;a href="https://serverlessland.com/event-driven-architecture/visuals/why-use-message-brokers?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🌎 “Content Delivery Network (CDN): explained in simple words”&lt;/strong&gt; — This post does a great job on explaining what a CDN is and how it works internally — &lt;a href="https://levelup.gitconnected.com/content-delivery-network-cnd-explained-in-simple-words-674e971b06c3?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⭐️ “Guide to AWS Serverless &amp;amp; Lambda testing”&lt;/strong&gt; — A practical guidelines for testing Serverless based apps, from mocking events to E2E tests — &lt;a href="https://www.ranthebuilder.cloud/post/guide-to-serverless-lambda-testing-best-practices-part-1?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✨ “Writing Terraform for unsupported resources”&lt;/strong&gt; — TerraCurl is a utility Terraform provider that allows you to make managed and unmanaged API calls in their Terraform code — &lt;a href="https://www.hashicorp.com/blog/writing-terraform-for-unsupported-resources?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔥 “Move past incident response to reliability”&lt;/strong&gt; — Remember when optimism and crossed fingers were our first line of incident response? @lethain outlines a better way — &lt;a href="https://github.com/readme/guides/incident-response?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚀 “Ensuring smooth migration to Serverless”&lt;/strong&gt; — Should you do performance testing if AWS says that a particular service has certain Service Level Objectives? If yes, what process should you follow? — &lt;a href="https://medium.com/ssense-tech/aws-performance-testing-ensuring-smooth-migration-to-serverless-dddce61284d0?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Projects of the week
&lt;/h2&gt;

&lt;p&gt;1️⃣ Mathesar is an open source tool that provides a spreadsheet-like interface to a PostgreSQL database — &lt;a href="https://github.com/centerofci/mathesar?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2️⃣ A native desktop application that allows you to estimate the cost savings you can achieve in your AWS account by converting your AutoScaling Groups to Spot instances — &lt;a href="https://github.com/LeanerCloud/savings-estimator?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3️⃣ MRSK deploys web apps anywhere from bare metal to cloud VMs using Docker with zero downtime — &lt;a href="https://github.com/mrsked/mrsk?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4️⃣ A verification engine on Kubernetes that enables verification of artifact security metadata and admits for deployment only those that comply with policies you create — &lt;a href="https://github.com/deislabs/ratify?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5️⃣ A lightweight utility to dump AWS Fargate’s ECS containers environment variables locally — &lt;a href="https://github.com/dineshgowda24/ecsnv?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6️⃣ 30 days of Python programming challenge is a step-by-step guide to learning the Python programming language in 30 days — &lt;a href="https://github.com/Asabeneh/30-Days-Of-Python?utm_source=devopsbulletin&amp;amp;utm_id=newsletter"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Question of the week
&lt;/h2&gt;

&lt;p&gt;Development containers are a thing!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Tii75LPk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:1400/0%2A458xvbx-s5jwpf7j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Tii75LPk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:1400/0%2A458xvbx-s5jwpf7j.png" alt="containers" width="736" height="242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;See &lt;a href="https://www.reddit.com/r/devops/comments/11jd4ci/crazy_coworker_manages_entire_development/"&gt;thread&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Meme of the week
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YhrQLLfA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:1000/0%2ADSyu31D1Yb4_7xqr.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YhrQLLfA--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/v2/resize:fit:1000/0%2ADSyu31D1Yb4_7xqr.jpeg" alt="meme" width="500" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope this summary has been helpful. Remember to &lt;a href="https://www.devopsbulletin.com/"&gt;subscribe to the newsletter&lt;/a&gt; to receive the latest DevOps trends in your inbox every week 🔥&lt;/p&gt;

</description>
      <category>devops</category>
      <category>aws</category>
      <category>kafka</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>How to find all resources in an AWS account</title>
      <dc:creator>LABOUARDY Mohamed</dc:creator>
      <pubDate>Fri, 03 Mar 2023 17:02:01 +0000</pubDate>
      <link>https://forem.com/tailwarden/how-to-find-all-resources-in-an-aws-account-10ag</link>
      <guid>https://forem.com/tailwarden/how-to-find-all-resources-in-an-aws-account-10ag</guid>
      <description>&lt;p&gt;When managing your cloud infrastructure on AWS, it’s important to have a comprehensive understanding of all the resources running in your AWS accounts. It’s crucial to be able to have reliable data and clear insight into areas such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Identifying resources that are idle, unmonitored, or exposed to security threats.&lt;/li&gt;
&lt;li&gt;  Understanding the cost breakdown and coverage of tags.&lt;/li&gt;
&lt;li&gt;  Keeping up-to-date and accurate audit information.&lt;/li&gt;
&lt;li&gt;  Evaluating whether your resources conform to specific governance controls.&lt;/li&gt;
&lt;li&gt;  &lt;a href="https://www.tailwarden.com/blog/infrastructure-drift-management" rel="noopener noreferrer"&gt;Detecting any infrastructure drift&lt;/a&gt; and changes in configurations.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without answers to those questions, you open the doors to cost wastage, security threats, and compliance issues.&lt;/p&gt;

&lt;p&gt;This blog post provides guidance on the different tools available that can help you in locating and identifying all resources within your AWS account.&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS Native Services
&lt;/h2&gt;

&lt;p&gt;AWS provides several tools to help you identify and track resources in your account. Each tool has its own pros and cons, as we will see. The key distinction for cloud resource tracking is the scope of the tool and which resources are in its zone. Let’s dive in.&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS Management Console
&lt;/h3&gt;

&lt;p&gt;For anyone working with AWS, the &lt;a href="https://console.aws.amazon.com/" rel="noopener noreferrer"&gt;AWS Management Console&lt;/a&gt; is a good place to begin. It provides access to a wide range of services and features. However, the console’s UI can be challenging to navigate, and it can be overwhelming. Additionally, you should have prior knowledge of the resources you are searching for and their location in the region. Otherwise, you may end up spending several hours browsing through multiple tabs and levels of hierarchy in the AWS Console to find answers to questions such as “What is the number of EC2 instances operating in our Frankfurt region?”&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS Resource Groups
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/ARG/latest/userguide/resource-groups.html" rel="noopener noreferrer"&gt;AWS Resource Groups&lt;/a&gt; is a better alternative to the AWS console. This service enables you to create a custom group of your resources, based on specific criteria such as tags or the resources in an AWS CloudFormation stack. By organizing and consolidating information in this way, you can easily track the resources used by individuals or application teams.&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%2Fcuddmku532y0rel1lw2u.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%2Fcuddmku532y0rel1lw2u.png" alt="Grouping resources by owner tag" width="700" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s worth noting that the service doesn’t support all AWS services (&lt;a href="https://docs.aws.amazon.com/ARG/latest/userguide/integrated-services-list.html" rel="noopener noreferrer"&gt;AWS services that work with AWS Resource Groups&lt;/a&gt;), as it was not specifically designed for resource discovery. Rather, the service is intended to group resources together based on predetermined tags or CF stack. Therefore, it may not be the best option if you’re looking for a tool to build your asset inventory.&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS Config
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/config/" rel="noopener noreferrer"&gt;AWS Config&lt;/a&gt; is a full-fledged asset inventory. It discovers all your running AWS resources and their configuration history as well as the resource relationships (e.g: find out if an EBS volume is attached to an EC2 instance associated with a security group).&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%2F3grgvvzfnqtkl1fjfe3b.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%2F3grgvvzfnqtkl1fjfe3b.png" alt="List of active resources" width="700" height="374"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The service also provides a rules engine that you can use to evaluate the configuration of resources against pre-defined rules or compliance policies. E.g: you can use SQL queries to find resources that are non-compliant AWS resources and export the results to JSON or CSV format for further benchmarks (e.g: &lt;a href="https://www.cisecurity.org/benchmark/amazon_web_services/" rel="noopener noreferrer"&gt;CIS AWS Benchmarks&lt;/a&gt;, &lt;a href="https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-standards-fsbp-controls.html" rel="noopener noreferrer"&gt;AWS Foundational Security Best Practices&lt;/a&gt;, or &lt;a href="https://www.pcisecuritystandards.org/" rel="noopener noreferrer"&gt;PCI DSS&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Despite those features, the AWS Config service does come with certain drawbacks, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  As of the time of writing, AWS Config does not cover all types of resources (A list of supported services can be found &lt;a href="https://docs.aws.amazon.com/config/latest/developerguide/resource-config-reference.html" rel="noopener noreferrer"&gt;&lt;strong&gt;here&lt;/strong&gt;&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;  The more configuration items generated, the more expensive the service can become (See &lt;a href="https://aws.amazon.com/config/pricing/" rel="noopener noreferrer"&gt;pricing&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;  AWS Config is best suited for AWS resources. Therefore, users operating in multi-cloud environments and organizations seeking configuration visibility for SaaS assets may require additional tools.&lt;/li&gt;
&lt;li&gt;  The service is not enabled by default, so users need to set it up in all regions for all their AWS accounts. For those with a considerable number of AWS accounts, this can result in significant effort.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  AWS Cost Explorer and CloudWatch
&lt;/h3&gt;

&lt;p&gt;It is also a good idea to take a look at Cost explorer once in a while and check whether we are charging our account unnecessarily. Billing information cannot provide a complete picture. But you can use the AWS Cost Explorer to slice your AWS cost by both AWS services, regions, and tags (if enabled). This can give you a starting point of where to further explore manually with AWS Config or Resource Explorer.&lt;/p&gt;

&lt;p&gt;You can also leverage AWS CloudWatch to identify which resources are generating metrics so no resource goes untracked.&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS Resource Explorer
&lt;/h3&gt;

&lt;p&gt;AWS Resource Explorer is a service released last year that allows you to explore and discover the resources in your AWS account. It allows you to view, search, and filter the resources across all regions and services in your AWS account. The service is free of charge, making it a great alternative to other resource discovery mechanisms, such as AWS Config.&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%2Fhqu9f6hhq58tnwc4cak9.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%2Fhqu9f6hhq58tnwc4cak9.png" alt="List of untagged resources" width="700" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Resource Explorer was built with cross-region support from the very beginning. However, the list of resource types that can be discovered with Resource Explorer is quite short and does not support searching across multiple accounts inside an organization (It only works on an AWS account scope).&lt;/p&gt;

&lt;p&gt;As such, you may want to consider alternative options that are more user-friendly and offer a more intuitive way to manage your resources on AWS.&lt;/p&gt;

&lt;h2&gt;
  
  
  Komiser
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/tailwarden/komiser" rel="noopener noreferrer"&gt;Komiser&lt;/a&gt; is an open-source cloud-agnostic asset inventory. It integrates with multiple cloud providers, builds a cloud asset inventory, and helps you break down your cost at the resource level.&lt;/p&gt;

&lt;p&gt;Komiser comes with a resource inventory feature where you can have an active resource inventory of all your cloud resources along with relevant information such as source account, region, cost, and the tags that are applied to it. You can analyze cloud resource utilization and costs based on specific criteria, such as teams, applications, or cost centers. This approach enables the creation of custom views for engineering, finance, and product teams and promotes accountability for cloud expenses.&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%2F7icnzbx5v46misf8p297.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%2F7icnzbx5v46misf8p297.png" alt="Multi-cloud asset inventory" width="700" height="348"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you’re moving to a multi-cloud model, you would need a single place where you can manage all your cloud resources. By integrating with several cloud service providers (currently supporting AWS, Azure, Oracle, DigitalOcean, Civo, Tencent Linode, Kubernetes, and Scaleway), Komiser can swiftly generate your cloud asset inventory. This allows you to utilize its powerful filter system to uncover idle resources and wasted costs across all your cloud accounts and regions. Consequently, supported resources have nowhere to hide, and there is no way they will slip under the radar. As soon as the resource inventory is fetched, all regions will show exactly what they are holding. The resources come to you in a sense, so there’s no more tab switching or console hoping to make sure you didn’t miss anything.&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%2Famc03uo4zs7vvpnjl7bd.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%2Famc03uo4zs7vvpnjl7bd.png" alt="Cost breakdown" width="700" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Having an asset inventory of your AWS resources is crucial to uncover optimization opportunities and answering questions about your infrastructure. AWS has some good services but as the number of resources increases and you shift toward multi-cloud you might want to check out something like Komiser that does it all.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Regardless if you are a Developer, DevOps, or Cloud engineer. Dealing with the cloud can be tough at times, especially on your own. If you are using Komiser and want to share your thoughts doubts and insights with other cloud practitioners feel free to join our &lt;a href="https://discord.tailwarden.com/" rel="noopener noreferrer"&gt;&lt;em&gt;Tailwarden discord server&lt;/em&gt;&lt;/a&gt;. Where you will find tips, community calls, and much more.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>softwaredevelopment</category>
      <category>productivity</category>
      <category>career</category>
      <category>discuss</category>
    </item>
    <item>
      <title>AWS Security Pillar</title>
      <dc:creator>LABOUARDY Mohamed</dc:creator>
      <pubDate>Thu, 23 Feb 2023 21:12:29 +0000</pubDate>
      <link>https://forem.com/mlabouardy/aws-security-pillar-1aei</link>
      <guid>https://forem.com/mlabouardy/aws-security-pillar-1aei</guid>
      <description>&lt;p&gt;Welcome to this week’s DevOps newsletter! I’ve got a lot of exciting topics to cover, including AWS security pillar, Kubernetes dashboards, and DevOps open-source projects.&lt;/p&gt;

&lt;p&gt;Firstly, I have a comprehensive guide to the AWS security pillar, where you can learn how to secure your AWS environment by implementing AWS security best practices and gaining a comprehensive understanding of AWS security services.&lt;/p&gt;

&lt;p&gt;Next, we’re exploring the rise of Serverless monoliths and the best practices for running Java apps on Kubernetes. Additionally, I’m sharing an architecture for enforcing RBAC in a cloud storage system and an open-source utility that scans live Kubernetes clusters and reports potential issues with deployed resources and configurations. And, for those interested in Terraform, I have a preparation guide for becoming a Hashicorp Certified Terraform Associate.&lt;/p&gt;

&lt;p&gt;Lastly, don’t miss our open-source projects of the week, including a ChatGPT-powered gym workout generator and a CLI that creates screenshots based on terminal command output. And, we’re also diving into why open-source is broken and uncovering the truth about git metrics tools. Stay tuned for all this and more in this week’s DevOps newsletter!&lt;/p&gt;

&lt;h2&gt;
  
  
  Posts of the week
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;🔒 “Our guide to the AWS security pillar” —&lt;/strong&gt; A walkthrough of the AWS Security Pillar with insights into how to manage this vital but often complicated aspect of modern architecture — &lt;a href="https://theserverlessedge.com/our-guide-to-the-aws-security-pillar/?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧐 “Platform Engineering teams done right…”&lt;/strong&gt; — Three reasons for the platform engineering meme: demand for tools to improve complicated platforms on Kubernetes, marketing by companies with tools to sell, and interest sparked by the Team Topologies book’s definition of how to create/manage Platform Teams — &lt;a href="https://adrianco.medium.com/platform-engineering-teams-done-right-b3b3d4a8ad23?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💡 “AWS Lambda layers best practices”&lt;/strong&gt; — This blog post covers AWS Lambda layers basics, the pros, and cons, and recommended best practices — &lt;a href="https://www.ranthebuilder.cloud/post/aws-lambda-layers-best-practices?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📊 “Kubernetes dashboards: everything you need to know”&lt;/strong&gt; — Kubernetes comes with its own web UI for deploying containerized applications to a cluster using wizards, troubleshooting workloads, and managing cluster resources — known as Dashboard. But there are other open-source options as well — &lt;a href="https://thenewstack.io/kubernetes/kubernetes-dashboards?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔥 “Become a Hashicorp Certified Terraform Associate — preparation guide”&lt;/strong&gt; — The post is intended for individuals looking to prepare or take the exam in the future. It covers tips and what you need to know to pass the exam — &lt;a href="https://blog.kubesimplify.com/become-a-hashicorp-certified-terraform-associate-preparation-guide?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔑 “An architecture for enforcing RBAC in a cloud storage system”&lt;/strong&gt; — This article explores a 2016 paper by Garrison et al. that presents an architecture for enforcing access control policies in a cloud storage system — &lt;a href="https://pncnmnp.github.io/blogs/rbac-storage-system.html?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧵 “Best practices for Java apps on Kubernetes”&lt;/strong&gt; — In this article, you will read about the best practices for running Java apps on Kubernetes. Most of these recommendations will also be valid for other languages — &lt;a href="https://piotrminkowski.com/2023/02/13/best-practices-for-java-apps-on-kubernetes/?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🚀 “The rise of the Serverless monoliths”&lt;/strong&gt; — This post covers the evolution of meta-frameworks (Next.js and Remix) and backend as a service (Supabase, SurrealDB) — &lt;a href="https://medium.com/@dbottiau/the-rise-of-the-serverless-monoliths-63d3d2d98164?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🐳 “Docker will edit host-based firewall rules for you”&lt;/strong&gt; — Docker would quietly add a rule to your system’s iptables to allow container port through the firewall — &lt;a href="https://geoff.tuxpup.com/posts/psa_docker_edits_firewall_rules/?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Read more »&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Projects of the week
&lt;/h2&gt;

&lt;p&gt;IaSQL is open-source software that treats infrastructure as data by maintaining a 2-way connection between a cloud account and a PostgreSQL database — &lt;a href="https://github.com/iasql/iasql?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Learn more »&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%2Fk373pfs51ffc8mb1a4zq.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%2Fk373pfs51ffc8mb1a4zq.png" alt="IaSQL" width="800" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Signadot is a Kubernetes native platform that provides lightweight environments using a unique multi-tenancy model that shares resources safely. You’re able to test every pull request end-to-end in K8s and ship features 10x faster — &lt;a href="https://docs.signadot.com/docs/how-it-works/?utm_campaign=Paid%20Newsletters&amp;amp;utm_source=email&amp;amp;utm_medium=Devops%20Bulletin" rel="noopener noreferrer"&gt;Learn more »&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%2F2w9eh5fam52id3xce0qi.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%2F2w9eh5fam52id3xce0qi.png" alt="Signadot" width="425" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Popeye is a utility that scans live Kubernetes cluster and reports potential issues with deployed resources and configurations — &lt;a href="https://github.com/derailed/popeye?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Learn more »&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%2Fch903dazop7a9j11c4s1.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%2Fch903dazop7a9j11c4s1.png" alt="Popeye" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A cool side project that leverages ChatGPT to build gym workouts for you based on the equipment you have at your disposal — &lt;a href="https://www.readysetcloud.io/blog/allen.helton/chatgpt-is-my-new-personal-trainer?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Learn more »&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%2F88a2b3byatezt6vy5tro.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%2F88a2b3byatezt6vy5tro.png" alt="ChatGPT" width="568" height="526"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Keep is an open-source alerting CLI that contains everything you need to start creating Alerts. It supports all major providers (e.g. Sentry/Datadog or Slack/Pagerduty) — &lt;a href="https://github.com/keephq/keep?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Learn more »&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%2Fbxs0v338niti1ech6ty9.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%2Fbxs0v338niti1ech6ty9.png" alt="Termshot" width="800" height="581"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Termshot takes the console output and renders an output image that resembles a user interface window. The idea is similar to what carbon.now.sh, ray.so do — &lt;a href="https://github.com/homeport/termshot?utm_source=devopsbulletin&amp;amp;utm_id=newsletter" rel="noopener noreferrer"&gt;Learn more »&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tweet of the week
&lt;/h2&gt;

&lt;p&gt;If you’ve ever noticed dropped connection after a rolling upgrade, this &lt;a href="https://twitter.com/danielepolencic/status/1627628028971941888" rel="noopener noreferrer"&gt;thread&lt;/a&gt; digs into the details👇🏻&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%2Ffn6dlp9lk448x4py5e35.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%2Ffn6dlp9lk448x4py5e35.png" alt="Kubernetes" width="588" height="536"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Meme of the week
&lt;/h2&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%2Fvpa31rqifo7ktlpgybyk.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%2Fvpa31rqifo7ktlpgybyk.png" alt="Meme" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope this summary has been helpful. Remember to &lt;a href="https://www.devopsbulletin.com/" rel="noopener noreferrer"&gt;subscribe to the newsletter&lt;/a&gt; to receive the latest DevOps trends in your inbox every week 🔥&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Drift management in cloud infrastructure</title>
      <dc:creator>LABOUARDY Mohamed</dc:creator>
      <pubDate>Wed, 22 Feb 2023 17:15:31 +0000</pubDate>
      <link>https://forem.com/tailwarden/drift-management-in-cloud-infrastructure-5c5a</link>
      <guid>https://forem.com/tailwarden/drift-management-in-cloud-infrastructure-5c5a</guid>
      <description>&lt;p&gt;Over the past few years, the number of infrastructure services has grown, and more applications are being released to production on a daily basis while infrastructure needs to be able to be spun up, scaled, and taken down frequently. The adoption of CI/CD and DevOps practices emphasizes the importance of having similar runtime environments. Without an Infrastructure as Code (IaC) practice in place, it becomes increasingly difficult to manage the scale of today’s average infrastructure environment.&lt;/p&gt;

&lt;p&gt;IaC safeguards the entire process of cloud provisioning and ensures consistency across different environments by codifying and documenting configuration specifications. IaC tools like Terraform helped the dev and ops teams align as they both use the same description of application deployment. In an ideal world, you want everything to be managed by your IaC stack but expectations do not always line up with reality, resources are still being provisioned manually or through the cloud provider’s consoles, causing infrastructure drift and a growing number of untracked assets.&lt;/p&gt;

&lt;p&gt;Understanding the resources that are not managed by IaC in the cloud is a challenge and finding whether they remain in the same configuration defined in the code is yet another task. This blog post will explore the various tools available for detecting and managing infrastructure drift.&lt;/p&gt;

&lt;h2&gt;
  
  
  What’s Infrastructure Drift
&lt;/h2&gt;

&lt;p&gt;Infrastructure drift occurs when the configuration of the infrastructure deviates from its intended or documented state. This deviation can be attributed to several factors such as human error, lack of automation, manual intervention, applications making unwanted changes, changes applied to some environments but not propagated to others, and so on, leading to inconsistencies in the infrastructure. Additionally, CI/CD workflows can result in failed pipelines, causing the infrastructure state to become corrupted, leading to orphaned resources and drift.&lt;/p&gt;

&lt;p&gt;One major cause of infrastructure drift is the creation of resources outside of the established IaC tools such as Terraform, CloudFormation, and Pulumi. When this happens, the infrastructure state is not adequately described or persisted, and the changes made to the infrastructure go unnoticed. This opens the door to security vulnerabilities, wasted costs, and compliance issues.&lt;/p&gt;

&lt;p&gt;In some cases, there may be production incidents or emergencies that require quick action, and manual adjustments to the infrastructure via web consoles may be necessary to achieve a better state as soon as possible (and keep the customers satisfied). However, this becomes a problem when those changes are not backported to Terraform which often stems from poor education on best IaC practices, loose access permissions, and a lack of proper communication regarding the infrastructure management process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why it’s bad
&lt;/h2&gt;

&lt;p&gt;Infrastructure drift can have a significant impact on the reliability, security, and cost-effectiveness of the infrastructure. One major issue caused by infrastructure drift is the wastage of cloud resources, which can lead to increased costs. Drifting can result in the creation of duplicate resources or the failure to delete unused ones, leading to an unoptimized cloud environment.&lt;/p&gt;

&lt;p&gt;Furthermore, infrastructure drift can pose a significant threat to the security of the infrastructure. Inconsistent configurations can make the infrastructure vulnerable to security breaches and data leaks. Such inconsistencies can lead to essential resources unintentionally being made publicly accessible, and unsecured resources may go unnoticed. However, if changes to infrastructure were made through IaC, it would be possible to set up compliance policies and security controls, preventing or mitigating issues such as an S3 bucket being accessible to the public and making sure all resources are properly tagged.&lt;/p&gt;

&lt;p&gt;Infrastructure fragmentation is another problem that can arise from infrastructure drift. As the infrastructure becomes more complex, it becomes more difficult to track all resources and changes. This can lead to situations where development teams are unaware of production environment changes, which can cause applications to crash and deployment projects to fail unexpectedly. Moreover, when the IaC tool does not cover the entire infrastructure, it can cause discrepancies between the different environments, leading to inconsistent behavior. This inconsistency can be particularly problematic between the development, staging, and production environments.&lt;/p&gt;

&lt;p&gt;Without a single, shared source of truth, intentional infrastructure changes to remediate incidents could be reverted or temporary changes left unnoticed, wasting thousands of dollars in monthly costs due to unused resources.&lt;/p&gt;

&lt;p&gt;Cloud workloads undergo frequent changes as more workloads and services are deployed to the infrastructure, resulting in more developers and authenticated services interacting with the infrastructure across various cloud environments and providers. Drift is inevitable, just like incidents, and is a part of the infrastructure’s life cycle. Therefore, it’s crucial to be able to easily and quickly detect and possibly revert drift.&lt;/p&gt;

&lt;h2&gt;
  
  
  Drift Management
&lt;/h2&gt;

&lt;p&gt;Preventing and resolving infrastructure drift is crucial to maintain the stability and security of the infrastructure. Increasing the adoption of IaC is one of the most effective ways to prevent infrastructure drift. Teams should ensure that a greater percentage of the infrastructure is managed by IaC and leverage code versioning, code reviews, static analysis, automated tests, and so on.&lt;/p&gt;

&lt;p&gt;When resources are created using IaC tools, drift can be detected and resolved promptly. For instance, running a command like “terraform plan” can reveal any drift in resources described in the Terraform files.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F700%2F0%2A0zIZ2ovBAxtbpulO.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F700%2F0%2A0zIZ2ovBAxtbpulO.png" alt="Terraform drift detection"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the screenshot above, we can see that the EC2 instance owner has changed outside of Terraform which is drift.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;CloudFormation has a built-in&lt;/em&gt; &lt;a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/detect-drift-stack.html" rel="noopener noreferrer"&gt;&lt;em&gt;drift detection&lt;/em&gt;&lt;/a&gt; &lt;em&gt;feature that can be used either via the AWS Console or via the AWS CLI command.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Regular testing and monitoring are also critical to detect and resolve any issues that may arise due to infrastructure drift. Open-source tools like &lt;a href="https://github.com/snyk/driftctl" rel="noopener noreferrer"&gt;driftctl&lt;/a&gt;, &lt;a href="https://github.com/tenable/terrascan" rel="noopener noreferrer"&gt;terrascan&lt;/a&gt;, and &lt;a href="https://cloudcustodian.io/" rel="noopener noreferrer"&gt;cloud custodian&lt;/a&gt; can also be leveraged to detect all changes outside of regular IaC workflow and ensure prompt remediation.&lt;/p&gt;

&lt;p&gt;In addition to tracking infrastructure changes, it is crucial to track who is provisioning what, where, and how often. This is especially important since it can be challenging to track those changes across multiple cloud providers and accounts, and manually checking provisioned resources can be time-consuming. Tools like &lt;a href="https://github.com/tailwarden/komiser" rel="noopener noreferrer"&gt;Komiser&lt;/a&gt; can be used to build a queryable asset inventory and get a clear picture of the cloud infrastructure. Komiser can detect the drift of managed resources and unmanaged resources in multi-cloud environments, which can be brought under control to maintain consistency and prevent security risks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F700%2F0%2AYeH2VGhS3LkOqD6A.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fmax%2F700%2F0%2AYeH2VGhS3LkOqD6A.png" alt="Cloud asset inventory"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After loading the cloud assets into the Komiser dashboard, teams can use filters and views to query the inventory and identify any unmanaged resources. This feature enables you to efficiently manage your cloud infrastructure and ensure that all resources are tracked and appropriately accounted for through your IaC workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cloud Resource Coverage
&lt;/h2&gt;

&lt;p&gt;In addition to the previous points, it is important to regularly schedule drift detection checks to identify any changes that may have occurred. For instance, an hourly check may be appropriate for detecting any changes in IAM roles, while a daily check may suffice for less critical cloud services. Additionally, to minimize the possibility of infrastructure drift due to manual changes, it is recommended to follow the Least Privilege Principle and restrict permissions to cloud practitioners only for necessary tasks. This approach reduces the number of individuals who can make manual changes to the infrastructure.&lt;/p&gt;

&lt;p&gt;In summary, preventing infrastructure drift requires a proactive approach, and a combination of practices and tools can be leveraged to achieve this goal. By increasing IaC adoption, regularly testing and monitoring the infrastructure, and leveraging tools like driftctl and Komiser, teams can detect and resolve drift promptly, maintain consistency, and prevent security risks and bill shocks.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Regardless if you are a Developer, DevOps, or Cloud engineer. Dealing with the cloud can be tough at times, especially on your own. If you are using Tailwarden or Komiser and want to share your thoughts doubts and insights with other cloud practitioners feel free to join our &lt;a href="https://discord.tailwarden.com/" rel="noopener noreferrer"&gt;&lt;em&gt;Tailwarden discord server&lt;/em&gt;&lt;/a&gt;. Where you will find tips, community calls, and much more.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>terraform</category>
      <category>cloud</category>
    </item>
    <item>
      <title>How to practice FinOps with Komiser</title>
      <dc:creator>LABOUARDY Mohamed</dc:creator>
      <pubDate>Mon, 20 Feb 2023 16:49:28 +0000</pubDate>
      <link>https://forem.com/tailwarden/how-to-practice-finops-with-komiser-4akn</link>
      <guid>https://forem.com/tailwarden/how-to-practice-finops-with-komiser-4akn</guid>
      <description>&lt;p&gt;Financial Operations (FinOps) is a critical aspect of cloud computing that helps organizations to manage their cloud resources effectively and efficiently. With the increasing popularity of cloud computing, the importance of FinOps has only increased (&lt;a href="https://www.cio.com/article/404314/94-of-enterprises-are-overspending-in-the-cloud-report.html"&gt;94% of enterprises overspend&lt;/a&gt; in the cloud), as organizations look to reduce their cloud spend and make the most of their investments in cloud infrastructure.&lt;/p&gt;

&lt;p&gt;Despite the increasing concerns around cloud costs, there has yet to be a single tool that comprehensively manages and helps to remediate excessive cloud expenses. As a result, teams continue to depend on a mix of native cloud provider tools, third-party platforms, and Google Sheets.&lt;/p&gt;

&lt;p&gt;According to the &lt;a href="https://data.finops.org/"&gt;State of FinOps 2022&lt;/a&gt; report, teams are still struggling with the following challenges:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ncokAyLg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/0%2A3jBgV9mBzSRhQpYQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ncokAyLg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/0%2A3jBgV9mBzSRhQpYQ.png" alt="Key FinOps Challenges" width="880" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;FinOps is a cultural discipline that involves collaboration among finance, engineering, product, and management. The open-source model can facilitate this collaboration and cover the long tail of cloud providers and services. That’s where &lt;a href="https://github.com/tailwarden/komiser"&gt;Komiser&lt;/a&gt; comes in as a way to address cloud cost management concerns in today’s multi-cloud environments. It offers insight into cloud resource consumption and expenses, making it a valuable tool for organizations practicing FinOps.&lt;/p&gt;

&lt;p&gt;In this post, we’ll explore how to use Komiser to empower engineers to optimize their cloud spend while following the &lt;a href="https://www.finops.org/framework/principles/"&gt;FinOps principles&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost Allocation
&lt;/h2&gt;

&lt;p&gt;Cost allocation is a crucial component of FinOps. Komiser enables cost allocation to individual projects, teams, or departments, which simplifies the tracking of resource usage and its associated expenses. This information can be used to set budgets, track costs, and identify areas where costs can be optimized. For example, if you see that one team is consistently using more EC2 instances than others, you can work with that team to identify opportunities for optimization.&lt;/p&gt;

&lt;p&gt;By utilizing a tagging strategy, you can analyze cloud resource utilization and costs based on specific criteria, such as teams, applications, or cost centers. This approach enables the creation of personalized views that promote accountability for cloud expenses.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eKQx9f1K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6qg5vd9dfvtd00z0vxcn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eKQx9f1K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/6qg5vd9dfvtd00z0vxcn.png" alt="Creating a view with a list of resources created by the Frontend team" width="880" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a great way to show your teams what they’re spending and why and see the impact of their actions on the monthly bill.&lt;/p&gt;

&lt;h2&gt;
  
  
  Multi-cloud Cost Reporting
&lt;/h2&gt;

&lt;p&gt;As you’re moving to a multi-cloud model, you would need a single place where you can manage all your cloud resources. By integrating with several cloud service providers, Komiser can swiftly generate your cloud asset inventory. This allows you to utilize its powerful filter system to uncover idle resources and wasted costs across all your cloud accounts and regions.&lt;/p&gt;

&lt;p&gt;Komiser takes cloud cost management to the next level. Firstly, it gives you visibility into the cloud unit economics that are relevant to you, rather than focusing on a specific cloud vendor. Additionally, it enables you to tag resources across multiple providers and regions using a single interface, which can uncover dormant resources and reduce unnecessary costs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fn6xCsfY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/0%2AZQHEs9wAPEMgiEPq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fn6xCsfY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/0%2AZQHEs9wAPEMgiEPq.png" alt="Cloud resources deployed in different providers&amp;lt;br&amp;gt;
" width="880" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Komiser provides multi-cloud platform support, including AWS, DigitalOcean, OCI, Tencent, Linode, and Civo, with GCP and Azure support to be added soon. It also supports containerization solutions like Kubernetes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Uncovering Idle Resources
&lt;/h2&gt;

&lt;p&gt;Komiser provides detailed information on resource utilization, including information on the types of resources being used, the number of resources being used, and the costs associated with each resource. This information can be used to identify opportunities for cost optimization, such as underutilized resources or resources that can be scaled down to reduce costs.&lt;/p&gt;

&lt;p&gt;By assigning human-readable labels to cloud resources, teams can use tagging to increase visibility and make smarter budget allocations. With Komiser’s bulk tagging feature, tags can be efficiently applied to a group of resources provisioned in various providers and regions without leaving the Komiser dashboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Qix-zfvG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/0%2AAMyVyX0w5vpM8gJF.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Qix-zfvG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/0%2AAMyVyX0w5vpM8gJF.png" alt="Filtering resources by environment&amp;lt;br&amp;gt;
" width="880" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With resources being accurately identified by tags, you can gain a comprehensive understanding of your cloud costs, pinpoint resources that are either redundant or aren’t being used, and identify potential opportunities to save money.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shared Costs Tracking
&lt;/h2&gt;

&lt;p&gt;A key aspect of FinOps is that every team member is responsible for their cloud usage. The calculation of the total cost of ownership requires transparency and accuracy, but unallocated shared costs obstruct these factors. If shared costs are not properly divided, engineers and product managers do not have a complete understanding of the actual cost of their apps. To improve visibility into shared resources such as databases, logging, k8s, enterprise support, etc., developers can categorize shared resources and allocate budget, as well as create custom views that separate these shared resources from the rest of the team’s views.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5YkL-Eck--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/0%2AzlbP2L-C6Maxc2vk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5YkL-Eck--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/0%2AzlbP2L-C6Maxc2vk.png" alt="Hide shared resources&amp;lt;br&amp;gt;
" width="880" height="524"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Cost Trends Analysis
&lt;/h2&gt;

&lt;p&gt;It’s important to keep an eye on cost trends over time. Komiser provides information on cost trends, including total costs, cost per resource, per team, or tags. This information can be used to identify cost spikes or patterns in resource usage that may indicate an opportunity for optimization. For example, if you see a sudden increase in costs for the frontend team, it may be a good time to review your CDN utilization and see if there are any opportunities to reduce costs.&lt;/p&gt;

&lt;p&gt;Komiser cost explorers go beyond native tools like AWS Cost Explorer to provide full-funnel cost visibility across your cloud environment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xhBC3qPX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/0%2A8u__HblhiF5W_r_i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xhBC3qPX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://miro.medium.com/max/1400/0%2A8u__HblhiF5W_r_i.png" alt="Komiser cost explorer widget&amp;lt;br&amp;gt;
" width="880" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Budget Monitoring
&lt;/h2&gt;

&lt;p&gt;In order to stay on top of costs and ensure that resources are being used effectively, it’s important to set alerts in Komiser. Slack alerts can be set to notify you when costs reach a certain threshold, or when resources are being used more than expected. This can help you to catch potential cost optimization opportunities early before they become larger problems.&lt;/p&gt;

&lt;h2&gt;
  
  
  We need your help
&lt;/h2&gt;

&lt;p&gt;Although Komiser can serve as a good starting point for enabling FinOps within your organization, there is still room for improvement in terms of features. We’re collaborating with the open-source community and cloud leaders to work on the following enhancements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Automatic resource scaling, right-sizing of instances, RI coverage, and other cost optimization recommendations.&lt;/li&gt;
&lt;li&gt;  Forecasting based on past cloud usage to anticipate future demand and identify areas for investment.&lt;/li&gt;
&lt;li&gt;  Additional support for cloud providers and SaaS platforms.&lt;/li&gt;
&lt;li&gt;  Container cost reporting through OpenCost.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Join our &lt;a href="http://discord.tailwarden.com/"&gt;Discord community&lt;/a&gt; or visit the &lt;a href="https://github.com/tailwarden/komiser"&gt;Komiser repository&lt;/a&gt; to find a good first issue and help us create the future for DevOps where the cloud is transparent and collaborative.&lt;/p&gt;

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

&lt;p&gt;Developing a FinOps culture takes time, but it is essential for creating a sustainable business model. With the right strategy and tools, such as Komiser, you can automate cloud cost management, address complex edge cases, and set higher performance goals. By building a cloud asset inventory, tracking usage and costs, and setting custom alerts, organizations can optimize their cloud infrastructure and make the most of their investments.&lt;/p&gt;

&lt;p&gt;Whether you’re just starting out with cloud computing or are an experienced user, &lt;a href="https://github.com/tailwarden/komiser"&gt;Komiser&lt;/a&gt; is a valuable tool for practicing FinOps and optimizing cloud spend.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Regardless if you are a Developer, DevOps, or Cloud engineer. Dealing with the cloud can be tough at times, especially on your own. If you are using Tailwarden or Komiser and want to share your thoughts doubts and insights with other cloud practitioners feel free to join our &lt;a href="https://discord.tailwarden.com/"&gt;&lt;em&gt;Tailwarden discord server&lt;/em&gt;&lt;/a&gt;. Where you will find tips, community calls, and much more.&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>cloud</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
