<?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: Bill Hegazy</title>
    <description>The latest articles on Forem by Bill Hegazy (@bhegazy).</description>
    <link>https://forem.com/bhegazy</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%2F721090%2Ff555f30b-b529-4134-904f-8ce44621ae07.jpeg</url>
      <title>Forem: Bill Hegazy</title>
      <link>https://forem.com/bhegazy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/bhegazy"/>
    <language>en</language>
    <item>
      <title>Controlling Procrastination and Get Your AWS Security Specialty Certificate</title>
      <dc:creator>Bill Hegazy</dc:creator>
      <pubDate>Sun, 19 Mar 2023 12:00:00 +0000</pubDate>
      <link>https://forem.com/aws-builders/controlling-procrastination-and-get-your-aws-security-specialty-certificate-57ij</link>
      <guid>https://forem.com/aws-builders/controlling-procrastination-and-get-your-aws-security-specialty-certificate-57ij</guid>
      <description>&lt;p&gt;Hey there! You might remember my previous post on controlling procrastination while preparing for the AWS &lt;a href="https://billhegazy.com/aws-solution-architect-professional-certificate/"&gt;Solution Architect Professional Certificate&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Well, guess what? I'm back with more tips to help you tackle another awesome AWS: exam &lt;strong&gt;AWS Certified Security - Specialty&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5KORp8B---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ar97di0fkv1zlujknih9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5KORp8B---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ar97di0fkv1zlujknih9.jpg" alt="Image description" width="682" height="384"&gt;&lt;/a&gt;&lt;br&gt;
Photo by &lt;a href="https://unsplash.com/@magnetme?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Magnet.me&lt;/a&gt; on &lt;a href="https://unsplash.com/photos/LDcC7aCWVlo?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Just like you, I've been a victim of procrastination while preparing for my AWS exams. But, Do not fear Bill is here! 😆 I've got your back yet again! Let's dive in and explore some tips that can help you control procrastination and successfully achieve this certification!&lt;/p&gt;

&lt;h2&gt;
  
  
  Say Goodbye to Social Media (Temporarily)
&lt;/h2&gt;

&lt;p&gt;During your study period, consider uninstalling social media apps like Instagram, TikTok, and Facebook. Trust me, your sanity and focus will thank you for it. &lt;/p&gt;

&lt;p&gt;Social media can be a huge time sink and a major source of distractions, so by eliminating them temporarily, you'll be able to better concentrate on your studies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Familiar and Hands-On with AWS Security Services
&lt;/h2&gt;

&lt;p&gt;To prepare for the AWS Certified Security - Specialty exam, it's crucial to gain hands-on experience with various AWS security services. This will help you understand how these services work in real-world scenarios and enable you to apply the concepts you'll face during the exam. Focus your study more on the following services and really understand the differences between them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IAM and SSO&lt;/li&gt;
&lt;li&gt;KMS and CloudHSM&lt;/li&gt;
&lt;li&gt;Cloudtrail, Cloudwatch, and S3&lt;/li&gt;
&lt;li&gt;WAF and Shield&lt;/li&gt;
&lt;li&gt;Config, Security Hub, and GuardDuty&lt;/li&gt;
&lt;li&gt;Inspector, Macie, and Detective&lt;/li&gt;
&lt;li&gt;Cloudfront and ACM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I highly recommend checking the &lt;a href="https://d1.awsstatic.com/training-and-certification/docs-security-spec/"&gt;exam guide&lt;/a&gt; for the full list of services.&lt;/p&gt;

&lt;p&gt;Courses by &lt;a href="https://learn.cantrill.io/p/aws-certified-security-specialty"&gt;Adrian Cantrill&lt;/a&gt; are super helpful for gaining practical experience.&lt;/p&gt;

&lt;h3&gt;
  
  
  Practice Tests, Study, Rinse, and Repeat
&lt;/h3&gt;

&lt;p&gt;Practice tests are lifesavers. Start by taking one to figure out your strengths and weaknesses. Study the areas you struggle with, then take another practice test. Keep repeating this process to refine your understanding and boost your chances of acing the exam.&lt;/p&gt;

&lt;p&gt;I recommend &lt;a href="https://tutorialsdojo.com/courses/aws-certified-security-specialty-practice-exams/"&gt;Tutorials Dojo Practice tests&lt;/a&gt; as the explanation is very clear and helpful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Set a Deadline and Book Your Exam
&lt;/h2&gt;

&lt;p&gt;As I mentioned in my previous &lt;a href="https://billhegazy.com/aws-solution-architect-professional-certificate/"&gt;post&lt;/a&gt;, and would like to emphasize here that it's so important, scheduling your exam upfront is a great strategy for overcoming procrastination. Although it's scary to set a date without knowing when you'll be ready, it actually helps you allocate time to study.&lt;/p&gt;

&lt;h2&gt;
  
  
  It's OK to Reschedule Your Exam
&lt;/h2&gt;

&lt;p&gt;Hey, no need to stress if you're thinking about rescheduling your exam because you're not quite ready. It's totally cool to give yourself some extra time to prepare. After all, the main goal is to pass the exam, right? So, take the time you need to make sure you've got this!&lt;/p&gt;

&lt;p&gt;And if you need someone's permission to reschedule, consider this your official go-ahead from me. Just remember, your success and well-being are what matter most, so focus on getting well-prepared for the exam 😄&lt;/p&gt;




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

&lt;p&gt;And there you have it! By following these extra tips, I hope you control your procrastination temporarily until you achieve the AWS Certified Security - Specialty exam. Remember, the journey might be challenging, but the rewards are worth it. So, keep pushing forward and believe in yourself. You've got this!&lt;/p&gt;




&lt;p&gt;Like this post? Consider following me on Medium &lt;strong&gt;&lt;a href="https://billhegazy.medium.com/"&gt;billhegazy&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you have questions or want to reach out, add me on &lt;strong&gt;&lt;a href="https://www.linkedin.com/in/bhegazy/"&gt;LinkedIn&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>awssecurity</category>
      <category>procrastination</category>
      <category>adhd</category>
      <category>awscommunity</category>
    </item>
    <item>
      <title>Terraform EKS module upgrade from v17.x to v18.x</title>
      <dc:creator>Bill Hegazy</dc:creator>
      <pubDate>Fri, 22 Jul 2022 03:20:11 +0000</pubDate>
      <link>https://forem.com/aws-builders/terraform-eks-module-upgrade-from-v17x-to-v18x-583b</link>
      <guid>https://forem.com/aws-builders/terraform-eks-module-upgrade-from-v17x-to-v18x-583b</guid>
      <description>&lt;p&gt;If you’re like me and you are using the awesome &lt;a href="https://github.com/terraform-aws-modules/terraform-aws-eks"&gt;terraform-aws-eks&lt;/a&gt; module to manage your EKS clusters, then you should know that there are many &lt;a href="https://github.com/terraform-aws-modules/terraform-aws-eks/releases/tag/v18.0.0"&gt;breaking changes&lt;/a&gt; when upgrading the module version from &lt;code&gt;v17.x to&lt;/code&gt; &lt;code&gt;v18.x&lt;/code&gt;, in this guide I will share the steps that I took to ease the upgrade a little bit (we have more than 12 clusters with similar config) and I hope that this helps someone.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I highly recommend that you also read the official guide &lt;a href="https://github.com/terraform-aws-modules/terraform-aws-eks/blob/master/docs/UPGRADE-18.0.md"&gt;UPGRADE-18.0.md&lt;/a&gt; document&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  1) Change module version and variables
&lt;/h2&gt;

&lt;p&gt;Check the variables changes &lt;a href="https://github.com/terraform-aws-modules/terraform-aws-eks/blob/master/docs/UPGRADE-18.0.md#variable-and-output-changes"&gt;here&lt;/a&gt;, as everyone is using a different configuration, in my case I have ended up with the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="kr"&gt;module&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"eks"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"terraform-aws-modules/eks/aws"&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="c"&gt;# check releases for the latest version&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="c"&gt;# https://github.com/terraform-aws-modules/terraform-aws-eks/releases&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;version&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"18.26.2"&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="c"&gt;# Needed for EKS module Upgrade&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="c"&gt;# https://github.com/terraform-aws-modules/terraform-aws-eks/blob/master/docs/UPGRADE-18.0.md#upgrade-from-v17x-to-v18x&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;prefix_separator&lt;/span&gt;&lt;span class="w"&gt;                   &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;iam_role_name&lt;/span&gt;&lt;span class="w"&gt;                      &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;var.cluster_name&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nx"&gt;cluster_security_group_name&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;var.cluster_name&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nx"&gt;cluster_security_group_description&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"EKS cluster security group."&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="c"&gt;# Add this to avoid issues with AWS Load balancer controller&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="c"&gt;# "error":"expect exactly one securityGroup tagged kubernetes.io/cluster/xxx&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="c"&gt;# https://github.com/terraform-aws-modules/terraform-aws-eks/issues/1986&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;node_security_group_tags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="s2"&gt;"kubernetes.io/cluster/&lt;/span&gt;&lt;span class="nv"&gt;${var.cluster_name}&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;null&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="n"&gt;cluster_name&lt;/span&gt;&lt;span class="w"&gt;                    &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;local.name&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nx"&gt;cluster_version&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;local.cluster_version&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nx"&gt;cluster_endpoint_private_access&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nx"&gt;cluster_endpoint_public_access&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;true&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="n"&gt;cluster_addons&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;coredns&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;resolve_conflicts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OVERWRITE"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;kube-proxy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;resolve_conflicts&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"OVERWRITE"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="n"&gt;cluster_encryption_config&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;provider_key_arn&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aws_kms_key.eks.arn&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nx"&gt;resources&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"secrets"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="n"&gt;vpc_id&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;module.vpc.vpc_id&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="c"&gt;# Rename subnets to subnet_ids&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;subnet_ids&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;module.vpc.private_subnets&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="c"&gt;# Rename node_group_defaults to eks_managed_node_group_defaults&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;eks_managed_node_group_defaults&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;ami_type&lt;/span&gt;&lt;span class="w"&gt;       &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"AL2_x86_64"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;instance_types&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"m5.large"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"m5a.large"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"t3.large"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"m5.xlarge"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="n"&gt;iam_role_attach_cni_policy&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;true&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="n"&gt;update_config&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;max_unavailable_percentage&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

    &lt;/span&gt;&lt;span class="n"&gt;block_device_mappings&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;xvda&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="n"&gt;device_name&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"/dev/xvda"&lt;/span&gt;&lt;span class="w"&gt;

        &lt;/span&gt;&lt;span class="n"&gt;ebs&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="n"&gt;volume_size&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"100"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="n"&gt;volume_type&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"gp3"&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="n"&gt;encrypted&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
          &lt;/span&gt;&lt;span class="nx"&gt;kms_key_id&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;aws_kms_key.ebs.arn&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;metadata_options&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;http_endpoint&lt;/span&gt;&lt;span class="w"&gt;               &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"enabled"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;http_tokens&lt;/span&gt;&lt;span class="w"&gt;                 &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"required"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;http_put_response_hop_limit&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;instance_metadata_tags&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"disabled"&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="c"&gt;# Rename eks_managed_node_groups to eks_managed_node_groups&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="c"&gt;# the variables in the sub module also changed, so be sure to rename them!&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="n"&gt;eks_managed_node_groups&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;default&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"default"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;use_name_prefix&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nx"&gt;subnet_ids&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;module.vpc.private_subnets&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nx"&gt;desired_size&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;max_size&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;min_size&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;

      &lt;/span&gt;&lt;span class="n"&gt;labels&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="n"&gt;environment&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;local.environment&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nx"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"on_demand"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

      &lt;/span&gt;&lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;local.tags&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;spot&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="w"&gt;            &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"spot"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;use_name_prefix&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nx"&gt;capacity_type&lt;/span&gt;&lt;span class="w"&gt;   &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"SPOT"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;instance_types&lt;/span&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"m5a.xlarge"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"m5.xlarge"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"r5.xlarge"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"r5a.xlarge"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;subnet_ids&lt;/span&gt;&lt;span class="w"&gt;      &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;module.vpc.private_subnets&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nx"&gt;desired_size&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;max_size&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;min_size&lt;/span&gt;&lt;span class="w"&gt;        &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="n"&gt;cluster_version&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;local.cluster_version&lt;/span&gt;&lt;span class="w"&gt;

      &lt;/span&gt;&lt;span class="n"&gt;labels&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="n"&gt;environment&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;local.environment&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nx"&gt;capacity&lt;/span&gt;&lt;span class="w"&gt;    &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"spot"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;

      &lt;/span&gt;&lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;local.tags&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="n"&gt;tags&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;local.tags&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If your &lt;code&gt;iam_role_name&lt;/code&gt; variable is NOT the cluster_name, the get the cluster iam role name using aws cli:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;export CLUSTER_NAME=bill-eks-test
aws-vault exec aws-prod -- aws eks describe-cluster --name $CLUSTER_NAME --output json | jq -r .cluster.roleArn | cut -d/ -f2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2) Do a &lt;code&gt;terraform plan&lt;/code&gt; to see what changes
&lt;/h2&gt;

&lt;p&gt;You should see a lot of resources change including for example IAM, node groups, and even cluster control plane replacement (we will fix that next step)&lt;/p&gt;

&lt;p&gt;Since there are a lot of changes and we wanted to make the upgrade simple for us, the best approach is to remove existing node groups and related resources from terraform state, this suggestion also came from users in the &lt;a href="https://github.com/terraform-aws-modules/terraform-aws-eks/issues/1744"&gt;related Github issue&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3) Terraform state migration and deletion
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Everyone setup is different so be careful when playing with Terrafrom state file, as your tf state might get corrupted, always backup the state file first!&lt;/p&gt;


&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight powershell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Backup terraform state first &lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;terraform&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;pull&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;&amp;gt;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;tf_backup.tfstate&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Remove node_groups from tf state&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;terraform&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'module.node_groups'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Rename the cluster iam role tf resource to new name&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;terraform&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;mv&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'aws_iam_role.cluster[0]'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'aws_iam_role.this[0]'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Remove policy attachment for node groups from tf state&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;terraform&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'aws_iam_role_policy_attachment.workers_AmazonEC2ContainerRegistryReadOnly[0]'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'aws_iam_role_policy_attachment.workers_AmazonEKSWorkerNodePolicy[0]'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'aws_iam_role_policy_attachment.workers_AmazonEKS_CNI_Policy[0]'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Remove node groups security group from state&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;terraform&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'aws_security_group.workers[0]'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Remove node groups aws_security_group_rule resources from tf state&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;terraform&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;terraform&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;grep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;aws_security_group_rule.workers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Remove cluster aws_security_group_rule resources from tf state&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;terraform&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;terraform&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;|&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;grep&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;aws_security_group_rule.cluster&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Remove IAM Role of node groups from tf state&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;terraform&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'aws_iam_role.workers[0]'&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# If you are managing the aws-auth configmap using EKS module&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Then remove aws-auth configmap from tf state as now the module dropped the support&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;terraform&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'kubernetes_config_map.aws_auth[0]'&lt;/span&gt;&lt;span class="w"&gt;

&lt;/span&gt;&lt;span class="c"&gt;# If you use addons then remove from state as well&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;terraform&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;state&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;rm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'aws_eks_addon.kube_proxy'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'aws_eks_addon.vpc_cni'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'aws_eks_addon.coredns'&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="c"&gt;# Then import the new add ons to state&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;terraform&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'aws_eks_addon.this["coredns"]'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cluster:coredns&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;terraform&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'aws_eks_addon.this["vpc-cni"]'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cluster:vpc-cni&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="n"&gt;terraform&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;import&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;'aws_eks_addon.this["kube-proxy"]'&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nx"&gt;cluster:kube-proxy&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4) Test &lt;code&gt;terraform plan&lt;/code&gt; again
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Make sure you DO NOT see the following
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;The cluster Must be replaced&lt;/li&gt;
&lt;li&gt;Old node groups must be destroyed&lt;/li&gt;
&lt;li&gt;Node groups related resources (sg, sg rules, old node iam) must be destroyed&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  You should see the following:
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Some cluster policy changes.&lt;/li&gt;
&lt;li&gt;New node group adding.&lt;/li&gt;
&lt;li&gt;New node groups related resources.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  5) Proceed with &lt;code&gt;terraform apply&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;You can now start by applying the changes with &lt;code&gt;terraform apply&lt;/code&gt; . &lt;/p&gt;

&lt;p&gt;After the &lt;code&gt;apply&lt;/code&gt; is complete, you should see new nodes joining the cluster and working as expected&lt;/p&gt;

&lt;h2&gt;
  
  
  6) Manually delete the old node group and related resources
&lt;/h2&gt;

&lt;p&gt;Now you can go ahead and delete the old node group manually and pods will restart on new node groups 👍 🎉. &lt;/p&gt;

&lt;p&gt;Other related resources should be manually deleted as well such as old node group security groups.&lt;/p&gt;

&lt;h2&gt;
  
  
  Over to you
&lt;/h2&gt;

&lt;p&gt;Like this post? Consider following me on Medium &lt;strong&gt;&lt;a href="https://billhegazy.medium.com/"&gt;billhegazy&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you have questions or want to reach out, add me on &lt;strong&gt;&lt;a href="https://www.linkedin.com/in/bhegazy/"&gt;LinkedIn&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>terraform</category>
      <category>awscommunity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Controlling Procrastination and Get Your AWS Solution Architect Professional Certificate</title>
      <dc:creator>Bill Hegazy</dc:creator>
      <pubDate>Mon, 18 Apr 2022 01:38:40 +0000</pubDate>
      <link>https://forem.com/aws-builders/controlling-procrastination-and-get-your-aws-solution-architect-professional-certificate-glg</link>
      <guid>https://forem.com/aws-builders/controlling-procrastination-and-get-your-aws-solution-architect-professional-certificate-glg</guid>
      <description>&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@anniespratt?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Annie Spratt&lt;/a&gt; on &lt;a href="https://unsplash.com/s/photos/procrastination?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yes, I admit it, I have been procrastinating for a few months while preparing for my AWS SA Pro exam, but I controlled it and finally took the exam last February, in fact, I have been procrastinating on writing this post for 2 months now😅.&lt;/p&gt;

&lt;p&gt;I wanted to share a few tips, that helped me to control procrastination while studying for the AWS certification exam.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This post will also serve as a reminder for my future self 🙂&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Set a goal
&lt;/h2&gt;

&lt;p&gt;Procrastinator or not, you should set some kind of goal for yourself.&lt;/p&gt;

&lt;p&gt;Trust me this helped me to have some kind of plan. I formed the goal using the &lt;a href="https://www.whatmatters.com/faqs/okr-meaning-definition-example"&gt;OKR framework&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The goal doesn’t have to be perfect. Here is an example, so you can get started:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Objective&lt;/th&gt;
&lt;th&gt;Key Results&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Become an AWS Certified Solution Architect Professional by the end of Q1 2022&lt;/td&gt;
&lt;td&gt;KR1: Study a minimum of 1 hour daily&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;KR2: Pass at least 2 practice exams with an 80% score or higher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;KR3: Buy a study material and complete it 100%&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Schedule exam date upfront
&lt;/h2&gt;

&lt;p&gt;If you’re a professional procrastinator (like myself), you have to do this.&lt;br&gt;
I know it’s scary to schedule the exam date, and not know when you will be ready, but, trust me, this will help you to set aside some time to study.&lt;/p&gt;

&lt;p&gt;You can cancel or reschedule your exam (2 times only) up to 24 hours before your scheduled appointment without an extra fee.&lt;/p&gt;

&lt;h3&gt;
  
  
  Before scheduling the exam:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;If you’re going for an online proctor exam, then do read &lt;a href="https://www.psionline.com/en-gb/certification/aws-training/"&gt;PSI&lt;/a&gt; / &lt;a href="https://home.pearsonvue.com/aws/onvue"&gt;Pearson Vue&lt;/a&gt; FAQ.&lt;/li&gt;
&lt;li&gt;Take advantage of the &lt;a href="https://aws.amazon.com/certification/policies/before-testing/#Requesting_Accommodations"&gt;ESL +30&lt;/a&gt;, if English is not your first language. To get the extra 30 minutes, you must request this before scheduling your exam.&lt;/li&gt;
&lt;li&gt;Depending on your situation and time, you will need to figure out (approximately) how long it will take for you to complete your studies. I recommend starting by going through the video course curriculum and practice exams.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Take notes along the way
&lt;/h2&gt;

&lt;p&gt;Notes will be your best friend for the next few months to remind you about important AWS exam points, AWS services that you have never used before, and most importantly remind you to keep going.&lt;/p&gt;

&lt;p&gt;You might be wondering, &lt;em&gt;what notes should you take?&lt;/em&gt; I will give you an example of what my notes looks like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;I use &lt;a href="https://www.notion.so/"&gt;notion&lt;/a&gt; as my note-taking app, I recommend note-taking app that can sync to multiple devices&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_Jna9cnU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ruu2utsf1yu9rtmbnyba.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_Jna9cnU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ruu2utsf1yu9rtmbnyba.PNG" alt="Example of my aws notes photo" width="880" height="539"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Review: Note/screenshot of important points from the instructor or anything I find important to remember.&lt;/li&gt;
&lt;li&gt;Weak services: Summary of the AWS services that I’m weak at or never used before.&lt;/li&gt;
&lt;li&gt;Real life usage: Where I gather improvements that I want to apply to the current AWS Infrastructure that I manage.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Find a study partner (if possible)
&lt;/h2&gt;

&lt;p&gt;The AWS SA Pro is tough and long, your study partner will remind you that, you are not alone and to keep going. A study partner can also give you tips that they found out while studying. I was lucky enough to have a partner at my work, who happened to be studying for the AWS SA Pro and we did a weekly sharing together.&lt;/p&gt;

&lt;h2&gt;
  
  
  Be gentle to yourself
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;“Have no fear of perfection - you'll never reach it.” — Salvador Dali&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you don't feel ready yet, don’t feel bad about it, and remember that It’s OK to re-schedule the exam date. I had to re-schedule 2 times myself.&lt;/p&gt;

&lt;p&gt;Go through the study materials, go through the notes and review the parts that you're weak at.&lt;/p&gt;

&lt;p&gt;The key is to remember that anyone can do it, you might need to study harder or need more time than others, but in the end, you will get there!&lt;/p&gt;

&lt;h2&gt;
  
  
  Study materials:
&lt;/h2&gt;

&lt;p&gt;I understand that you might be wondering about the study materials that helped me prepare.Here is what I recommend:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://learn.cantrill.io/p/aws-certified-solutions-architect-professional"&gt;Adrian Cantrill&lt;/a&gt;: AWS SA Pro video course, Adrian's course is very detailed and well organized.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://portal.tutorialsdojo.com/courses/aws-certified-solutions-architect-professional-practice-exams/"&gt;Tutorials Dojo Practice exam&lt;/a&gt;: Practice exams currently include 4 exam sets, the practice exams will help you prepare for the real one and also identify your weak points.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://explore.skillbuilder.aws/learn/course/34/exam-readiness-aws-certified-solutions-architect-professional"&gt;AWS Exam Readiness&lt;/a&gt;: Official Exam Readiness from AWS.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why get AWS Certified
&lt;/h2&gt;

&lt;p&gt;I asked myself the exact same question. I have been managing AWS for 7+ years now, and I proved that I’m more than capable when it comes to AWS cloud.&lt;/p&gt;

&lt;p&gt;There are many benefits listed &lt;a href="https://aws.amazon.com/certification/benefits"&gt;here&lt;/a&gt;, for me, &lt;em&gt;it's simple: I love learning!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Getting AWS certified, was an opportunity to learn more, learn what I have done wrong, and learn what can I improve in the current AWS architecture.&lt;/p&gt;

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

&lt;p&gt;I have learned a lot from studying for such a tough exam like AWS SA Pro, learning new AWS skills, and controlling procrastination.&lt;/p&gt;

&lt;p&gt;I hope that the tips can help you to get started on your AWS SA Pro exam journey.&lt;/p&gt;

&lt;p&gt;If I could do it, then anyone can!&lt;/p&gt;

&lt;h2&gt;
  
  
  Over to you
&lt;/h2&gt;

&lt;p&gt;Which AWS exams are you currently interested in? What stopping you from preparing for the AWS exam?&lt;/p&gt;

&lt;p&gt;Like this post? Consider following me on Medium &lt;strong&gt;&lt;a href="https://billhegazy.medium.com/"&gt;billhegazy&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you have questions or want to reach out, add me on &lt;strong&gt;&lt;a href="https://www.linkedin.com/in/bhegazy/"&gt;LinkedIn&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>career</category>
      <category>aws</category>
      <category>awscommunity</category>
    </item>
    <item>
      <title>Terraform in AWS</title>
      <dc:creator>Bill Hegazy</dc:creator>
      <pubDate>Sun, 17 Apr 2022 09:49:38 +0000</pubDate>
      <link>https://forem.com/bhegazy/terraform-in-aws-45ma</link>
      <guid>https://forem.com/bhegazy/terraform-in-aws-45ma</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://billhegazy.medium.com/terraform-in-aws-9793e3c01173"&gt;https://medium.com&lt;/a&gt; on 19 June 2021&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Tools and best practices, that makes your terraform life easier on AWS.
&lt;/h2&gt;

&lt;h2&gt;
  
  
  1) aws-vault
&lt;/h2&gt;

&lt;p&gt;Although it's not exactly specific for Terraform aws-vault is a must-use tool for Terraform in AWS, especially when you have multiple AWS accounts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/99designs/aws-vault"&gt;aws-vault&lt;/a&gt; stores IAM credentials in your Os's secure Keystore and generates temporary credentials to be used in shell.&lt;/p&gt;

&lt;p&gt;Using aws-vault with Terraform to easily switch between AWS accounts and avoid hard-coding AWS profile in Terraform backend state code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install aws-vault
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--cask&lt;/span&gt; aws-vault
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Usage Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Run simple aws command&lt;/span&gt;
aws-vault &lt;span class="nb"&gt;exec &lt;/span&gt;aws_example_account &lt;span class="nt"&gt;--&lt;/span&gt; aws s3 &lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;span class="c"&gt;# Login to aws console using temporary credentials&lt;/span&gt;
aws-vault login aws_example_account
&lt;span class="c"&gt;# Use with terraform&lt;/span&gt;
aws-vault &lt;span class="nb"&gt;exec &lt;/span&gt;aws_example_account &lt;span class="nt"&gt;--&lt;/span&gt; terraform apply
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  2) tfenv
&lt;/h2&gt;

&lt;p&gt;tfenv is Terraform version manager similar to rbenv.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install tfenv
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;tfenv
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Usage Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# List tf remote versions&lt;/span&gt;
tfenv list-remote
&lt;span class="c"&gt;# Install tf version&lt;/span&gt;
tfenv &lt;span class="nb"&gt;install &lt;/span&gt;0.11.15
&lt;span class="c"&gt;# Use tf version&lt;/span&gt;
tfenv use 0.11.15
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  tfenv automatic version switching
&lt;/h3&gt;

&lt;p&gt;Add &lt;code&gt;.terraform-version&lt;/code&gt; file to automatically switch between different Terraform versions and control versions between accounts.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;├── .
├── aws_prodution_account
    ├── resource_1
    │   ├── main.tf
    |   ├── variables.tf
    |   └── ...
    ├── resource_2
    │   ├── main.tf
    |   ├── variables.tf
    |   └── ...
    ├── .terraform-version
├── aws_staging_account
    ├── resource_1
    │   ├── main.tf
    |   ├── variables.tf
    |   └── ...
    ├── resource_2
    │   ├── main.tf
    |   ├── variables.tf
    |   └── ...
    ├── .terraform-version
├── README.md
└── ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3) pre-commit
&lt;/h2&gt;

&lt;p&gt;Using &lt;a href="http://pre-commit.com/"&gt;pre-commit framework&lt;/a&gt; with terraform repository, will help your code to be kept clean, formated, updated document and checked for tf security issues (optional with &lt;a href="https://github.com/tfsec/tfsec"&gt;tfsec&lt;/a&gt;) before committing and pushing the code to git source.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install precommit and related tools
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;pre-commit gawk terraform-docs tflint coreutils checkov terrascan
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Install the pre-commit hook globally
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nv"&gt;DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;~/.git-template
git config &lt;span class="nt"&gt;--global&lt;/span&gt; init.templateDir &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DIR&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;
pre-commit init-templatedir &lt;span class="nt"&gt;-t&lt;/span&gt; pre-commit &lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;DIR&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Initialize git repo with terraform hooks
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;your_terraform_git_repo
git init &lt;span class="c"&gt;# if new repo&lt;/span&gt;
&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt; &amp;gt; .pre-commit-config.yaml
repos:
- repo: git://github.com/antonbabenko/pre-commit-terraform
  rev: &amp;lt;VERSION&amp;gt; # Get the latest from: &amp;lt;https://github.com/antonbabenko/pre-commit-terraform/releases&amp;gt;
  hooks:
    - id: terraform_fmt
    - id: terraform_docs
&lt;/span&gt;&lt;span class="no"&gt;EOF
&lt;/span&gt;pre-commit &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;span class="c"&gt;# Test pre commit&lt;/span&gt;
pre-commit run &lt;span class="nt"&gt;--all-&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Now, whenever you run git commit on terraform repo, pre-commit will run the hooks&lt;/p&gt;
&lt;h3&gt;
  
  
  Auto generate Terraform docs with pre-commit
&lt;/h3&gt;

&lt;p&gt;Using &lt;a href="https://github.com/terraform-docs/terraform-docs"&gt;terraform-docs&lt;/a&gt; with terraform modules&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;terraform_example_module
&lt;span class="nb"&gt;cat&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&amp;lt;&lt;/span&gt;&lt;span class="no"&gt;EOF&lt;/span&gt;&lt;span class="sh"&gt; &amp;gt; README.md
&amp;lt;!-- BEGINNING OF PRE-COMMIT-TERRAFORM DOCS HOOK --&amp;gt;
lines here will be replaced by terraform_docs when pre-commit runs
&amp;lt;!-- END OF PRE-COMMIT-TERRAFORM DOCS HOOK --&amp;gt;
&lt;/span&gt;&lt;span class="no"&gt;EOF
&lt;/span&gt;pre-commit run &lt;span class="nt"&gt;--all-files&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4) tfsec
&lt;/h2&gt;

&lt;p&gt;Want static analysis for your terraform code to help spot potential security issues? then all you need is &lt;a href="https://github.com/tfsec/tfsec"&gt;tfsec&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Install tfsec
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install &lt;/span&gt;tfsec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Usage Example
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;terraform_folder
tfsec &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Add tfsec to your pre-commit config
&lt;/h3&gt;

&lt;p&gt;Add &lt;code&gt;terraform_tfsec&lt;/code&gt; hook to &lt;code&gt;.pre-commit-config.yaml&lt;/code&gt;&lt;br&gt;
&lt;strong&gt;Example&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;repos&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;repo&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;git://github.com/antonbabenko/pre-commit-terraform&lt;/span&gt;
  &lt;span class="na"&gt;hooks&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;...&lt;/span&gt;
    &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;id&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;terraform_tfsec&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Ignoring some tfsec rules
&lt;/h3&gt;

&lt;p&gt;You may wish to ignore some warnings from tfsec. you can simply add a comment containing &lt;code&gt;tfsec:ignore:&amp;lt;RULE&amp;gt;&lt;/code&gt; to the offending line in your templates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For example, to ignore an open security group rule:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"aws_security_group_rule"&lt;/span&gt; &lt;span class="s2"&gt;"my-rule"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"ingress"&lt;/span&gt;
    &lt;span class="c1"&gt;#tfsec:ignore:AWS006&lt;/span&gt;
    &lt;span class="nx"&gt;cidr_blocks&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"0.0.0.0/0"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Other best practices:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;a href="https://registry.terraform.io/providers/hashicorp/aws/latest"&gt;official Terraform public module&lt;/a&gt; for AWS, official public module are well written and tested ( don't re-invent the wheel).&lt;/li&gt;
&lt;li&gt;Limit access to Terraform state S3bucket access, encrypt it and enable versioning.&lt;/li&gt;
&lt;li&gt;Avoid storing secrets when creating a resource as Terraform state will store secrets plain-text, at least create a temporary password and change it after the resource is created.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Simple Example&lt;/span&gt;
&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"random_password"&lt;/span&gt; &lt;span class="s2"&gt;"db-password"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;length&lt;/span&gt;  &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;
  &lt;span class="nx"&gt;special&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="nx"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"aws_db_instance"&lt;/span&gt; &lt;span class="s2"&gt;"default"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;engine&lt;/span&gt;           &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"mysql"&lt;/span&gt;
  &lt;span class="nx"&gt;engine_version&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"5.7"&lt;/span&gt;
  &lt;span class="nx"&gt;instance_class&lt;/span&gt;       &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"db.t3.micro"&lt;/span&gt;
  &lt;span class="nx"&gt;name&lt;/span&gt;                 &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"mydb"&lt;/span&gt;
  &lt;span class="nx"&gt;username&lt;/span&gt;             &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"foo"&lt;/span&gt;
  &lt;span class="nx"&gt;password&lt;/span&gt;             &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;random_password&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;db&lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="err"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;result&lt;/span&gt;
  &lt;span class="err"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>aws</category>
      <category>terraform</category>
      <category>cloud</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>New World Game Architecture</title>
      <dc:creator>Bill Hegazy</dc:creator>
      <pubDate>Thu, 13 Jan 2022 07:47:21 +0000</pubDate>
      <link>https://forem.com/awscommunity-asean/new-world-game-architecture-46pb</link>
      <guid>https://forem.com/awscommunity-asean/new-world-game-architecture-46pb</guid>
      <description>&lt;p&gt;AWS re:invent 2021 was fascinating, with a lot of interesting announcements. One of the most interesting parts for me was the last 10-15 minutes of &lt;strong&gt;Dr. Werner Vogels&lt;/strong&gt; Keynote, when he shared the architecture of the online MMORPG Game New World.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.newworld.com/en-us/" rel="noopener noreferrer"&gt;New World&lt;/a&gt;  is a Massively Multiplayer Online Role-Playing Game (MMORPG) developed by &lt;a href="https://en.wikipedia.org/wiki/Amazon_Games" rel="noopener noreferrer"&gt;Amazon Games&lt;/a&gt; It’s an open-world online game where you create a custom character, level up, craft your weapons and armors, etc...&lt;br&gt;
&lt;a href="https://media.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%2F3hib7icf1u3sv69t2nau.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3hib7icf1u3sv69t2nau.PNG" alt="game mode"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have been playing New World since it was launched in September, 2021. Although there are some bugs in the game 😅, it is fun with much, much stuff to do.&lt;/p&gt;

&lt;p&gt;This part of the keynote was interesting to me because I have been managing services in AWS for a few years now, so I wanted to share some points from the keynote.&lt;/p&gt;

&lt;h2&gt;
  
  
  New World lives fully in the cloud (AWS)
&lt;/h2&gt;

&lt;p&gt;Aeternum, which is the name of the game’s world, is built out in 14 smaller regions (Windsward, Everfall, Brightwood, etc...).&lt;/p&gt;

&lt;h2&gt;
  
  
  REPS
&lt;/h2&gt;

&lt;p&gt;The game has 4 EC2 instances in each world (each new world &lt;a href="https://www.newworld.com/en-us/support/server-status" rel="noopener noreferrer"&gt;server&lt;/a&gt;). Amazon Games call those EC2s “remote entry points” or “REPS”.&lt;/p&gt;

&lt;p&gt;Those EC2s act as Application routers (Nginx/Haproxy maybe?) and are the only public-facing instances. This is where security and resilience are handled.&lt;br&gt;
&lt;a href="https://media.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%2Fml6iawlp20mw4959r7vf.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fml6iawlp20mw4959r7vf.PNG" alt="Reps Instances"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There was no mention of any ALB or NLB, so my guess is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Those EC2 instances are behind NLB, but why do the instances have to be public if they are behind a public NLB?&lt;/li&gt;
&lt;li&gt;Those EC2s are behind Route53 using weighted, latency, or geo route. But why did Amazon Games not leverage AWS ALB/NLB in this case and make the instances private?&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Hubs
&lt;/h2&gt;

&lt;p&gt;Hubs handle the computing of a portion of the world. There are 7 Hubs (EC2s).&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fajyly6dbqsqy2scld6yw.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fajyly6dbqsqy2scld6yw.PNG" alt="Hub instances"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hubs are basically where the core game backend servers are running.&lt;/p&gt;

&lt;p&gt;In a single world (server), the hubs process:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;2,500 Players&lt;/li&gt;
&lt;li&gt;Around 7,000 A.I Entities&lt;/li&gt;
&lt;li&gt;100,000s Objects&lt;/li&gt;
&lt;/ol&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg0qhvhwdwj2ccfr0yqvg.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg0qhvhwdwj2ccfr0yqvg.PNG" alt="NW AI"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Overlaid on top of the Aeternum map is a series of grids. This is where the 7 hubs work together and spread the load.&lt;/p&gt;

&lt;p&gt;Each hub picks up 2 pieces of the grid, but the 2 pieces are not in order, so if you move from grid 1 to grid 2 in the map, you will move from hub to hub (instance to instance).&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F78pg39ee8r16gpfnng68.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F78pg39ee8r16gpfnng68.PNG" alt="Hubs and Grids"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All the hubs’ EC2 instances are stateless, which is good, meaning that if a few hubs fail, they can always be replaced quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shared Instance Pool
&lt;/h2&gt;

&lt;p&gt;The instance pool is where all the single gameplay happens. For example, running an expedition or any other session-based mode in the game. Each session-based game mode will claim one or more EC2 instances, then when the session-based game is over (completed expedition), the EC2 instances return to the shared instance pool to be used by other players.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flmrnfsy9kwt7wuzs1zg6.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flmrnfsy9kwt7wuzs1zg6.PNG" alt="Instance Pool"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Database
&lt;/h2&gt;

&lt;p&gt;The stateless hubs store the game state and write everything to AWS DynamoDB, which is around &lt;strong&gt;800k writes&lt;/strong&gt; every 30 seconds.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F65e32t6na9zd2zmsqmcy.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F65e32t6na9zd2zmsqmcy.PNG" alt="DynamoDB"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Data Analytics
&lt;/h2&gt;

&lt;p&gt;New World logs 23M events/minute, pushed to AWS Kinesis into AWS S3 and then analyzed by AWS Athena, etc...&lt;/p&gt;

&lt;p&gt;Multiple Amazon Games team members can use the data collected, the data analyst can discover which wolves have been followed the most, or which paths are most traveled. These data allow game designers to figure out how players enjoy the game and change the game in real-time based on the data.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F381yh8zqzqkh25d2x565.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F381yh8zqzqkh25d2x565.PNG" alt="Data Analytics"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Non-Core Gameplay
&lt;/h2&gt;

&lt;p&gt;All the non-core gameplay services such as creating a character, creating a company, trading, are running as Serverless microservices using AWS Lambda and AWS API Gateway.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmxxsud3t4j1m501itomo.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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmxxsud3t4j1m501itomo.PNG" alt="Serverless"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;There are many MMORPG Games that live in AWS or other cloud providers, but I have never come across something similar to New World, which is a scalable and simple architecture. As &lt;strong&gt;Dr. Werner&lt;/strong&gt; said.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“This truly a MMORPG game born in the cloud and it would only have been possible to actually run this in the cloud”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Reference
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=8_Xs8Ik0h1w" rel="noopener noreferrer"&gt;AWS re:Invent 2021 - Keynote with Dr. Werner Vogels&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Over to you
&lt;/h2&gt;

&lt;p&gt;What do you think of the New World Game Architecture? and what would you change if you were the one who maintained this massive game?&lt;br&gt;
Like this post? Consider following me on Medium &lt;br&gt;
&lt;strong&gt;&lt;a href="https://billhegazy.medium.com/" rel="noopener noreferrer"&gt;billhegazy&lt;/a&gt;&lt;/strong&gt;, If you have questions or would like to reach out, add me on &lt;strong&gt;&lt;a href="https://www.linkedin.com/in/bhegazy/" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

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