<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Andreas Rütten's Blog]]></title><description><![CDATA[Andreas Rütten's Blog]]></description><link>https://blog.aruetten.me</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Apr 2026 20:36:20 GMT</lastBuildDate><atom:link href="https://blog.aruetten.me/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[My 10 Years in the AWS Community]]></title><description><![CDATA[This month is a very special month for me. Exactly 10 years ago on July 09, 2015, I hosted the first AWS User Group Meetup in Hamburg as a fresh User Group Leader. It was a super exciting evening at mytaxi (nowadays FREENOW), lots of pizza and two gr...]]></description><link>https://blog.aruetten.me/my-10-years-in-the-aws-community</link><guid isPermaLink="true">https://blog.aruetten.me/my-10-years-in-the-aws-community</guid><category><![CDATA[AWS]]></category><category><![CDATA[AWSCommunity]]></category><category><![CDATA[#AWSCommunityBuilders]]></category><category><![CDATA[#AWSCommunityDay]]></category><dc:creator><![CDATA[Andreas Rütten]]></dc:creator><pubDate>Thu, 10 Jul 2025 18:28:57 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1752171686806/82c29369-ecfb-4c21-9132-8a174f33aeca.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This month is a very special month for me. Exactly 10 years ago on July 09, 2015, I hosted the first AWS User Group Meetup in Hamburg as a fresh User Group Leader. It was a super exciting evening at mytaxi (nowadays <a target="_blank" href="https://www.linkedin.com/company/freenow/"><strong>FREENOW</strong></a>), lots of pizza and two great talks about CloudFormation and ECS.</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4D12AQHxcVgmii9ZyQ/article-inline_image-shrink_1000_1488/B4DZfwtkCcHMAU-/0/1752090175334?e=1757548800&amp;v=beta&amp;t=dJ2Todt0NhG_Ic1dF-KW-Ek9ihiOR73YeziJjfOaisE" alt="Article content" /></p>
<h3 id="heading-2015-where-it-all-began"><strong>2015: Where It All Began</strong></h3>
<p>I had been an AWS user since 2011/2012, but my first contact with the AWS Community started just one month before in June 2015 when I attended my first AWS User Group Meetup. This one was hosted at <a target="_blank" href="https://www.linkedin.com/company/jimdo/"><strong>Jimdo</strong></a> and moderated by <a target="_blank" href="https://www.linkedin.com/in/sandraliermann/"><strong>Sandra Liermann</strong></a> and <a target="_blank" href="https://www.linkedin.com/in/markbate/"><strong>Mark Bate</strong></a> from <a target="_blank" href="https://www.linkedin.com/company/amazon-web-services/"><strong>Amazon Web Services (AWS)</strong></a>, it was a very memorable evening. What really stuck with me was how Sandra and Mark emphasized that a User Group should be driven by the Community, for the Community. This had been my personal main driver for almost everything I did as part of the AWS Community since that day. So when they mentioned they were looking for someone to take over the User Group, I volunteered that very evening.</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4D12AQEqeDN1O71bMQ/article-inline_image-shrink_1000_1488/B4DZfw3KZHGgAY-/0/1752092689847?e=1757548800&amp;v=beta&amp;t=kq_0DPHR3c3FP3cLqAa65rsE-VN_F_1aB70cYCq8KpE" alt="Article content" /></p>
<p>Fast forward one month, I was hosting my first AWS User Group Meetup as User Group Leader. Since then, I've been deeply involved with the <a target="_blank" href="https://www.meetup.com/de-DE/awsughh/"><strong>AWS User Group in Hamburg</strong></a>, organizing over 60 meetups, including 5 re:Invent re:Caps, and helping grow the group to over 2,700 members - making it the third-largest AWS User Group in Germany.</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4D12AQEuYEMRkTnVBQ/article-inline_image-shrink_1000_1488/B4DZfwtpEZHAAc-/0/1752090187555?e=1757548800&amp;v=beta&amp;t=uRa-CosKxCpFFWTLSNOvCpAAixSXtsBY9GrB7c6idbc" alt="Article content" /></p>
<p>A big Thank You goes to <a target="_blank" href="https://www.linkedin.com/in/bjoernboettcher/"><strong>Björn Böttcher</strong></a> who started the group back in 2011, and also to all my co-organizer who joined me over the years: <a target="_blank" href="https://www.linkedin.com/in/ramona-junge-10715690/"><strong>Ramona Junge</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/martin-sch%C3%BCtte-343494117/"><strong>Martin Schütte</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/enrico-boldt-6ab779a8/"><strong>Enrico Boldt</strong></a> and <a target="_blank" href="https://www.linkedin.com/in/s0enke/"><strong>Sönke Ruempler</strong></a>. And I’m super thankfully for <a target="_blank" href="https://www.linkedin.com/in/vanessa-giese-25b330107/"><strong>Vanessa Giese</strong></a> who is taking over the torch since I moved out of Hamburg.</p>
<p>In 2015, I had also the chance to attend AWS re:Invent for the first time. It was mind-blowing, huge, and an incredible experience. I attended as many sessions I could squeeze into the week, including a special and cozy gathering of about 20 User Group Leaders from around the world meeting the incredible <a target="_blank" href="https://www.linkedin.com/in/jeffbarr/"><strong>Jeff Barr</strong></a> for a cosy evening.</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4D12AQHLuL5OErXgOQ/article-inline_image-shrink_1000_1488/B4DZfw6bOvGQAQ-/0/1752093546344?e=1757548800&amp;v=beta&amp;t=C78Ui0d30cXKVUNwSeMdb-VC94CcOo0U1O37tZnE_uc" alt="Article content" /></p>
<h3 id="heading-2016-2017-growing-community-involvement"><strong>2016-2017: Growing Community Involvement</strong></h3>
<p>In 2016, I contributed to the <a target="_blank" href="https://www.awsadvent.com/aws-advent-2016/"><strong>AWS Advent</strong></a>, writing a blog post as part of a series running from December 1st until Christmas, finalizing my submission during my second visit to re:Invent.</p>
<p>2017 marked another milestone when the first <a target="_blank" href="https://www.aws-community-day.de/"><strong>AWS Community Day</strong></a> in Germany was born at the AWS Summit in Berlin. Around a dozen User Group leaders from Germany met at the evening before the summit, organized by <a target="_blank" href="https://www.linkedin.com/in/marinmamic/"><strong>Marin Mamic</strong></a> from the German ISV Team. From the start, I was involved in organizing it, running the Kubernetes Track including a Call for Papers, selecting the talks, and moderating the talks during the event. It was a great first Community Day, including having <a target="_blank" href="https://www.linkedin.com/in/rossbarich/"><strong>Ross Barich</strong></a> as our special guest. Since then, I've been involved in all subsequent AWS Community Days, which have taken place in Frankfurt, Hamburg, Dresden, and two times in Munich (plus two virtual editions in between).</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4D12AQHXXDSMI8VC5Q/article-inline_image-shrink_1500_2232/B4DZfw3X35GQAU-/0/1752092738998?e=1757548800&amp;v=beta&amp;t=x_A9bDpeef6VL8goYMDfA38bdcCN_RyWmM148zgwtQA" alt="Article content" /></p>
<h3 id="heading-2019-2021-expanding-horizons"><strong>2019-2021: Expanding Horizons</strong></h3>
<p>In 2019, I organized our first AWS Community GameDay, hosted at my then-employer <a target="_blank" href="https://www.linkedin.com/company/smaato/"><strong>Smaato (Now part of Verve)</strong></a>'s office, on the Day after the AWS Community Day in Hamburg. Special Thanks to <a target="_blank" href="https://www.linkedin.com/in/jensgehring/"><strong>☁ Jens Gehring ☁</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/stefanchristoph/"><strong>Stefan Christoph</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/roberthanuschke/"><strong>Robert Hanuschke</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/hoegertn/"><strong>Thorsten Höger</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/madlin-collins-07a4639a/"><strong>Madlin Collins</strong></a>, and the many others who made it possible.</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4D12AQEr5A8QiCYHOw/article-inline_image-shrink_1000_1488/B4DZfw2.YHGQAU-/0/1752092633300?e=1757548800&amp;v=beta&amp;t=xao2uNQ7QL-EqRRjLab6MWkOqGcQAdztSMBkX600dtE" alt="Article content" /></p>
<p>While COVID-19 presented challenges for community activities, 2020 brought also new opportunities. I was selected to join the first official cohort of <a target="_blank" href="https://aws.amazon.com/developer/community/community-builders"><strong>AWS Community Builders</strong></a>, a program which really helped me expand my horizons and connect with AWS Community enthusiast from around the world. I'm proud to still be part of it today. Special thanks to <a target="_blank" href="https://www.linkedin.com/in/jasonrobertdunn/"><strong>Jason Dunn</strong></a> for what he has created here.</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4D12AQEHwLOw29oxHg/article-inline_image-shrink_1000_1488/B4DZfwt9JEHAAQ-/0/1752090269146?e=1757548800&amp;v=beta&amp;t=7MCuBYZWw1Xdo4upAZyi1bwxb6Jm3xMASMLcDVFxvA0" alt="Article content" /></p>
<p>During 2020, I also launched the AWS Community DACH Slack space, which has grown to almost 1,000 members and serves AWS Communities across Germany, Austria, and Switzerland as place to connect. Along special channels for organizing our various AWS community events, also many User Groups have their dedicated channel there.</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4E12AQGT2g525mDLkw/article-inline_image-shrink_1000_1488/B4EZfwsKVCH0AQ-/0/1752089799958?e=1757548800&amp;v=beta&amp;t=RNtSUyYpNzTUcamfXtfG-0YZOS3Hy69kcjJcSrnnQ4Y" alt="Article content" /></p>
<p>2020 was also the first re:Invent during COVID-19, which was complete remote. Together with <a target="_blank" href="https://www.linkedin.com/in/ostertag/"><strong>Markus Ostertag</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/hoegertn/"><strong>Thorsten Höger</strong></a> and <a target="_blank" href="https://www.linkedin.com/in/dennis-traub/"><strong>Dennis Traub</strong></a> I joined a live re:Cap of <a target="_blank" href="https://www.linkedin.com/in/andy-jassy-8b1615/"><strong>Andy Jassy</strong></a>s keynote on Youtube.</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4D12AQEii6r7YldUfA/article-inline_image-shrink_1000_1488/B4DZfwsutiGsBM-/0/1752089954488?e=1757548800&amp;v=beta&amp;t=EbVz3iXmHJi5pd3mFMFP3wZhFP4BEhmC2fFNqka8zGI" alt="Article content" /></p>
<p>2021 saw us also adapting to the virtual world with our first virtual AWS Community GameDay, complete with unicorn costumes, alongside <a target="_blank" href="https://www.linkedin.com/in/linda-mohamed/"><strong>Linda Mohamed</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/kristinehoward/"><strong>Kristine Howard</strong></a>, and <a target="_blank" href="https://www.linkedin.com/in/dennis-traub/"><strong>Dennis Traub</strong></a>.</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4D12AQHeCz2p51ImJg/article-inline_image-shrink_1000_1488/B4DZfwtMLZG8AY-/0/1752090074934?e=1757548800&amp;v=beta&amp;t=9GqKYeBrTioVvtn_k0Gl_ynLW-EmNZ2ltnuojuAKmIk" alt="Article content" /></p>
<h3 id="heading-2022-2025-new-milestones"><strong>2022-2025: New Milestones</strong></h3>
<p>In 2022, I became a founding member of the <a target="_blank" href="https://www.aws-community.de/association"><strong>Förderverein AWS Community DACH</strong></a>. I’m part of the board since the start and served as second chairman and financial auditor. The Fördervereins mission is to facilitate engagement, knowledge-sharing, and networking opportunities across the AWS Community within the DACH region. Our Members are all either AWS Heros, AWS User Group Leads or AWS Community Builder. The Verein acts also as legal framework for our growing community activities, especially when it’s about handling finances, contracts, sponsors, insurances, etc. for the AWS Community Day DACH.</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4D12AQFR_2T49wSnYw/article-inline_image-shrink_1000_1488/B4DZfwuTNcGYAY-/0/1752090359366?e=1757548800&amp;v=beta&amp;t=OEP00IpTnq8Djty_wr_YwUvB452hl7pKSgRwpm8_gqI" alt="Article content" /></p>
<p>2022 was also the first time we all met again for the AWS Summit in Berlin. This time that the AWS Community got the chance to have their own dedicated stage and together with some Members of the Förderverein I joined organizing the Call for Papers, moderated the Sessions and had a booth where we presented the different AWS Community Programs.</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4D12AQGF3KbNB0Exmg/article-inline_image-shrink_1000_1488/B4DZfw.MQRHAAY-/0/1752094526881?e=1757548800&amp;v=beta&amp;t=LQ1YoqG9MOvwNkucOI0AYHvPNGB5NhG1arLns372YXs" alt="Article content" /></p>
<p>2023 brought another exciting chapter as I co-founded a new <a target="_blank" href="https://www.meetup.com/de-DE/aws-bonn"><strong>AWS User Group</strong></a> from scratch in Bonn with <a target="_blank" href="https://www.linkedin.com/in/johannes-oehmen/"><strong>Johannes Oehmen</strong></a>. Despite Bonn's smaller size compared to Hamburg, we've grown to almost 200 members, organized 12 Meetups (including one re:Invent re:Cap) at 6 different locations so far, and established a strong collaboration with our neighbors form the <a target="_blank" href="https://www.meetup.com/de-DE/aws-cologne/"><strong>AWS User Group Cologne</strong></a>.</p>
<p>For re:Invent 2024, I joined a group of AWS Community Builders and organized a special "re:Invent at Home" event for the rest of AWS Community Builders program, featuring talks, keynote viewing parties, and knowledge sharing sessions. I also shared my experiences from previous re:Invents to help others navigate the event. Big thank you goes to <a target="_blank" href="https://www.linkedin.com/in/annem-sabah-s-995543110/"><strong>Annem Sabah Shah</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/endah-bongo-awah/"><strong>Endah Bongo-Awah</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/emmanuel-mingle/"><strong>Emmanuel Mingle</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/katoria-henry-2018/"><strong>Katoria H.</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/oluwasegun-adeniyi-adedigba-4a00861b3/"><strong>Oluwasegun Adeniyi Adedigba</strong></a> and <a target="_blank" href="https://www.linkedin.com/in/jasonrobertdunn/"><strong>Jason Dunn</strong></a>.</p>
<p>2025 is already proving to be another landmark year, highlighted by an excellent AWS Summit in Hamburg. As every years since 2022 I helped to organize and run the Community stage. This one was our largest yet, with 350 seats.</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4D12AQGcIm0LSfzzQg/article-inline_image-shrink_1000_1488/B4DZfw3v8ZHMAQ-/0/1752092839049?e=1757548800&amp;v=beta&amp;t=KRDUGGYLnp9AD0UltbQLAyoGkDkPISSNm_6eM8aobg8" alt="Article content" /></p>
<p>Only one week later I was back at the local AWS User Group Meetup in Bonn, where I also gave a talk about AWS SES and was accompanied by my former Colleague <a target="_blank" href="https://www.linkedin.com/in/jbeisser/"><strong>johan beisser</strong></a> who spoke about Local Lambda development.</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4D12AQF3HhG6LTRQRQ/article-inline_image-shrink_1000_1488/B4DZfw468IGQAU-/0/1752093145001?e=1757548800&amp;v=beta&amp;t=9fNDIwXA2SDLyEdS9dYZ-1oOUnZCqdwlzs_5yxefl4A" alt="Article content" /></p>
<p>Just last month we closed already the Call for Papers for this years AWS Community Day DACH. Going through over 120 great submission took a while but I’m super happy and proud that we where able to create an awesome lineup again and just opened the <a target="_blank" href="https://www.aws-community-day.de/"><strong>registration</strong></a> a few days ago. Looking forward seeing you there :-)</p>
<p><img src="https://media.licdn.com/dms/image/v2/D4D12AQHdwBnnipXLDw/article-inline_image-shrink_1000_1488/B4DZfw4SuYHAAc-/0/1752092984034?e=1757548800&amp;v=beta&amp;t=u2TUF_5NDd58xqL5JN5FjbQCorPvk8oK61TpNTm51kQ" alt="Article content" /></p>
<h3 id="heading-looking-ahead"><strong>Looking Ahead</strong></h3>
<p>As I reflect on these 10 years, I'm grateful for the connections made, knowledge shared, and communities built. The AWS Community has become more than just a professional network - it's a second family. I look forward to many more years of innovation, collaboration, and community building in the AWS ecosystem.</p>
<p>It’s impossible for me to name everybody I’m super thankful for being part of that journey, here a just a few which haven't been mention already in no particular order: <a target="_blank" href="https://www.linkedin.com/in/mathias-leppich-26539910/"><strong>Mathias Leppich</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/cmatthiasschmidt/"><strong>Matthias Schmidt</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/pgarbe/"><strong>Philipp Garbe</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/lockhead/"><strong>Johannes Koch</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/bombadiltom/"><strong>Tom Lorenz</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/christian-bonzelet/"><strong>Christian Bonzelet</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/davide-de-paolis-98ab9815/"><strong>Davide de Paolis</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/dmytro-hlotenko-7aa348151/"><strong>Dmytro Hlotenko</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/vadymkazulkin/"><strong>Vadym Kazulkin 🇺🇦</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/timur-galeev/"><strong>Timur Galeev</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/kai5er/"><strong>Markus Kaiser</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/michaelhanisch/"><strong>Michael Hanisch</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/nora-schoener/"><strong>Nora Schöner</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/frankprechtel/"><strong>Frank Prechtel</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/gustavares/"><strong>Gustavo Tavares</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/aaronpwalker/"><strong>Aaron Walker</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/julianmichel2/"><strong>Julian Michel</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/sana-shah-viebln/"><strong>Sana Shah</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/bitbauer/"><strong>Stefan Bauer</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/steffenmazanek/"><strong>Steffen Mazanek</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/svenseiler/"><strong>Dr. Sven Seiler</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/martin-raabe-aws/"><strong>Martin Raabe</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/andreaswittig/"><strong>Andreas Wittig</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/michael-wittig/"><strong>Michael Wittig</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/chrisderby/"><strong>Chris Derby</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/davidsimonheidt/"><strong>David Heidt</strong></a> <a target="_blank" href="https://www.linkedin.com/in/mariaencinar/"><strong>María Encinar</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/thembile-martis/"><strong>Thembile Martis</strong></a>, <a target="_blank" href="https://www.linkedin.com/in/susanlopezbeswick/"><strong>Susan Lopez</strong></a>, and many many more.</p>
]]></content:encoded></item><item><title><![CDATA[Getting certified as AWS Solution Architect – Associated (again)]]></title><description><![CDATA[Five years ago, in October 2015, I got certified as an AWS Solution Architect Associated. You can find the details under the certification credential ID AWS-ASA-DE-513.
It was my first AWS Certificate ever, and I remember that I was quite proud back ...]]></description><link>https://blog.aruetten.me/getting-certified-as-aws-solution-architect-associated-again-1</link><guid isPermaLink="true">https://blog.aruetten.me/getting-certified-as-aws-solution-architect-associated-again-1</guid><category><![CDATA[AWS]]></category><category><![CDATA[AWS Certified Solutions Architect Associate]]></category><category><![CDATA[Certification]]></category><dc:creator><![CDATA[Andreas Rütten]]></dc:creator><pubDate>Sun, 31 Jan 2021 12:43:32 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1612042379078/4oDONWe2Z.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Five years ago, in October 2015, I got certified as an AWS Solution Architect Associated. You can find the details under the certification credential ID <a target="_blank" href="https://www.youracclaim.com/badges/d408a2de-2b00-41f6-8344-ca2827708a1a">AWS-ASA-DE-513</a>.
It was my first AWS Certificate ever, and I remember that I was quite proud back then.</p>
<p>This week I retook the exam. One of the reason is obviously that the certified status had expired already years ago. With this blog post, I would like to share my experiences doing this exam for the second time and provide insights into what has changed over time.</p>
<h2 id="the-format">The format</h2>
<p>Let's start with taking a look at what are some of the formal changes.</p>
<p>The current version of this certification is called: <em>AWS Certified Solutions Architect – Associate (SAA-C02)</em>. This version of the exam was released in March 2020 and is already the second iteration after the one I did. SAA-C01 was released beginning of 2018. You can find the official Exam Guide for the SAA-C02 <a target="_blank" href="https://d1.awsstatic.com/training-and-certification/docs-sa-assoc/AWS-Certified-Solutions-Architect-Associate_Exam-Guide.pdf">here</a>.</p>
<p>Most of it is very similar to how it looked in 2015. You get a total of 65 questions; these will be a mix of simple multiple-choice and multiple response questions. The latter also states how many correct answers you should pick. You get 130 minutes for this and need a score of 720 out of 1000 to pass based on a <a target="_blank" href="https://aws.amazon.com/blogs/training-and-certification/demystifying-your-aws-certification-exam-score/">scaled scoring model</a>.</p>
<h2 id="exam-content">Exam Content</h2>
<p>The actual content has changed quite a lot. The current version still has questions out of 4 domains, but the subjects and the weighting have changed.</p>
<h3 id="aws-asa-2015">AWS-ASA (2015)</h3>
<ul>
<li>60% – Designing highly available, cost efficient, fault tolerant, scalable systems</li>
<li>10% – Implementation/Deployment</li>
<li>20% – Data Security</li>
<li>10% – Troubleshooting</li>
</ul>
<h3 id="saa-c02-2021">SAA-C02 (2021)</h3>
<ul>
<li>30% – Design Resilient Architectures</li>
<li>28% – Design High-Performing Architectures</li>
<li>25% – Design Secure Applications and Architectures</li>
<li>18% – Design Cost-Optimized Architectures</li>
</ul>
<p>AWS moves very fast, and therefore it's no surprise that the current version includes a lot of topics for features and services which did not exist in 2015.</p>
<p>For example, S3 grew a lot and got many new features and a few new storage classes. The AWS Snow family didn't exist at all, and the same goes for Athena or Macie. EC2 Spot is now way more complex than it used to be. On the Network side, we got things like VPC Gateway Endpoints, Private Link, or Transit Gateway. Back then, ELB was the name of the only available load balancer in AWS before he got renamed to classic ELB at the birth of its siblings ALB and NLB. Parameter Store, Systems Manager, or ECS were not yet released, and as far as I remember, even Lambda wasn't part of the exam in 2015.</p>
<h2 id="how-i-prepared-for-each-of-them">How I prepared for each of them</h2>
<p>I started using AWS as part of my day-to-day job somewhere around 2012/2013, giving me the recommended hands-on experience for my first exam in 2015. This was a huge help and provided a solid level of ground knowledge. To fill the gaps I used the online learning platform <a target="_blank" href="https://linuxacademy.com/">Linux Academy</a> for preparation and study. They offer a digital course dedicated to the certification which covered all needed topics and a bit more. In addition to the video material and some references, I remember two features that also helped me a lot preparing:</p>
<ol>
<li>Practice exams that simulated a real exam, including a random mix of questions and actual time pressure. This gave an excellent impression of how the exam will feel. How questions and answers are structured, and how to approach such a set of questions with the given time limit.</li>
<li>The possibility to define your own learning schedule. A small tool where you would specify how many hours you will put in on each day of the week. Based on that data a detailed plan gets created showing you which session you should take when. It also shows when you would be done with the entire content so that you can schedule your exam accordingly.</li>
</ol>
<p>At the end of 2019, <a target="_blank" href="https://acloudguru.com/">A Cloud Guru</a> announced Linux Academy's acquisition. Both companies are in the same market and provide online learning for cloud and related technologies. However, both used to have a slightly different approach.</p>
<p>I was curious about which would be the better choice for my new preparation. So I took a look at the course for this certification on both platforms. As it turns out, both programs provide the same content nowadays and with exactly the same videos and materials for this specific course. This time, I picked A Cloud Guru to see if there are any other differences and get a feeling for the learning experience with them.</p>
<p>The only thing I missed was that tool to plan out my learning schedule. You only get an indication by looking at each video's length and the sum for each chapter. I believe it was ok for this time, as most of the content wasn't entirely new. But I assume that if I'd do another certification, one where I would have to put in more effort, I would appreciate that structure of scheduled learning for myself.</p>
<p>I started my preparation beginning of December 2020. With all the distractions of re:invent, Christmas, and the holidays I used effectively 4-5 weeks to watch 98% of all the videos, took the quizzes, and did the practice exam five times.</p>
<h2 id="the-exam">The exam</h2>
<p>I took the AWS-ASA exam on an early Monday morning at re:invent 2015. It was a regular exam like you have it at any onsite AWS event or one of the many certification test centers worldwide. It's in a room full of tables arranged in rows and desktop PCs presenting you the exam questions in a web application.</p>
<p>This time was a lot different due to the current pandemic. Since the end of March 2020, AWS <a target="_blank" href="https://aws.amazon.com/blogs/training-and-certification/aws-certification-exams-now-available-virtually-for-added-convenience-and-flexibility/">offers</a> doing the exam virtually and from home together with their testing vendor Pearson VUE. I had used this approach for the AWS Cloud Practitioner in June 2020, so I was already familiar with the procedure.</p>
<p>In short: you need to download a particular application from Pearson VUE, which is available for Windows and MacOS. And on the day of your exam, you login ~30 minutes before it starts and follow the online proctoring instructions. You need a quiet room where you won't be interrupted by somebody, a clean desk, and a stable internet connection. During the onboarding, you use your laptop's webcam to show your ID, the room you are in, and that your desk is completely empty. You cannot have an external screen, use pen or paper, or any food and drinks during the exam. Your webcam will also record you for the entire time. That felt a bit wired initially, but it faded away as soon I started concentrating on the questions.</p>
<p>In both cases, I get a simple pass immediately after doing the exam and a more detailed overview of my score a few days later via email.</p>
<h2 id="conclusion">Conclusion</h2>
<p>In the end, I'm pleased that I got certified again. Going through the preparation got me (again) looking at some features or details of AWS that I haven't encountered before. This is especially true for services I don't touch regularly as part of my day job.</p>
<p>It was definitely worth the effort, and I would like to encourage everybody who works with AWS to get certified as well.</p>
]]></content:encoded></item><item><title><![CDATA[Building custom AMIs with Packer]]></title><description><![CDATA[Originally published at awsadvent.com
Amazon machine images (AMIs) are the basis of every EC2 instance launched. They contain the root volume and thereby define what operating system or application will run on the instance.
There are two types of AMI...]]></description><link>https://blog.aruetten.me/building-custom-amis-with-packer</link><guid isPermaLink="true">https://blog.aruetten.me/building-custom-amis-with-packer</guid><category><![CDATA[AWS]]></category><category><![CDATA[Devops]]></category><category><![CDATA[ec2]]></category><dc:creator><![CDATA[Andreas Rütten]]></dc:creator><pubDate>Thu, 08 Dec 2016 20:14:36 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1614286694345/hRugkqQvw.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Originally published at <em><a target="_blank" href="https://www.awsadvent.com/2016/12/08/building-custom-amis-with-packer/">awsadvent.com</a></em></p>
<p>Amazon machine images (AMIs) are the basis of every EC2 instance launched. They contain the root volume and thereby define what operating system or application will run on the instance.</p>
<p>There are two types of AMIs:</p>
<ul>
<li>public AMIs are provided by vendors, communities or individuals. They are available on the AWS Marketplace and can be paid or free.</li>
<li>private AMIs belong to a specific AWS account. They can be shared with other AWS accounts by granting launch permissions. Usually they are either a copy of a public AMI or created by the account owner.</li>
</ul>
<p>There are several reasons to create your own AMI:</p>
<ul>
<li>predefine a template of the software, which runs on your instances. This provides a major advantage for autoscaling environments. Since most, if not all, of the system configuration has already been done, there is no need to run extensive provisioning steps on boot. This drastically reduces the amount of time from instance start to service ready.</li>
<li>provide a base AMI for further usage by others. This can be used to ensure a specific baseline across your entire organization.</li>
</ul>
<h2 id="what-is-packer">What is Packer</h2>
<p>Packer is software from the HashiCorp universe, like Vagrant, Terraform or Consul. From a single source, you can create machine and container images for multiple platforms.</p>
<p>For that Packer has the concept of <code>builder</code> and <code>provisioner</code>.</p>
<p>Builders exist for major cloud providers (like Amazon EC2, Azure or Google), for container environments (like Docker) or classical visualization environments (like QEMU, VirtualBox or VMware). They manage the build environment and perform the actual image creation.</p>
<p>Provisioners on the other hand are responsible for installing and configuring all components, that will be part of the final image. They can be simple shell commands or fully featured configuration management systems like Puppet, Chef or Ansible.</p>
<h2 id="how-to-use-packer-for-building-aws-ec2-amis">How to use Packer for building AWS EC2 AMIs</h2>
<p>The heart of every Packer build is the template, a JSON file which defines the various steps of each Packer run. Let’s have a look at a very simple Packer template:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1614284310461/fd7axXJ92.png" alt="building-custom-amis-simple-template.png" /></p>
<p>There is just one builder and one simple provisioner. On line 4, we specify the <code>amazon-ebs</code> builder which means Packer will create an EBS-backed AMI by:</p>
<ul>
<li>launching the source AMI</li>
<li>running the provisioner</li>
<li>stopping the instance</li>
<li>creating a snapshot</li>
<li>converting the snapshot into a new AMI</li>
<li>terminating the instance</li>
</ul>
<p>As this all occurs under your AWS account, you need to specify your <code>access_key</code> and <code>secret_key</code>. Lines 7-9 specify the region, source AMI and instance type that will be used during the build. <code>ssh_username</code> specifies which user Packer will use to ssh into the build instance. This is specific to the source AMI. Ubuntu based AMIs use <code>ubuntu</code> which AWS Linux based AMIs use <code>ec2-user</code>.</p>
<p>Packer will create temporary keypairs and security groups to connect the local system to the build instance to run the provisioner. If you are running packer prior to 0.12.0 watch out for GitHub issue <a target="_blank" href="https://github.com/mitchellh/packer/issues/4057">#4057</a>.</p>
<p>The last line defines the name of the resulting AMI. We use the <code>{{timestamp}}</code> function of the Packer template engine which generates the current timestamp as part of the final AMI name.</p>
<p>The provisioner section defines one provisioner of the type shell. The local script “setup_things.sh” will be transferred to the build instance and executed. This is the easiest and most basic way to provision an instance.</p>
<h2 id="a-more-extensive-example">A more extensive example</h2>
<p>The requirements for a real world scenario usually needs something more than just executing a simple shell script during provisioning. Lets add some more advanced features to the simple template.</p>
<h3 id="optional-sections">Optional sections</h3>
<p>The first thing somebody could add is a <code>description</code> and a <code>variables</code> section to the top of our template, like:</p>
<pre><code class="lang-json">{
    <span class="hljs-attr">"description"</span>: <span class="hljs-string">"Demo Packer template"</span>,
    <span class="hljs-attr">"variables"</span>: {
        <span class="hljs-attr">"aws_access_key"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"aws_secret_key"</span>: <span class="hljs-string">""</span>,
        <span class="hljs-attr">"base_ami"</span>: <span class="hljs-string">"ami-b520c0d8"</span>,
        <span class="hljs-attr">"base_docker_image"</span>: <span class="hljs-string">"ubuntu:16.04"</span>,
        <span class="hljs-attr">"instance_type"</span>: <span class="hljs-string">"t2.medium"</span>,
        <span class="hljs-attr">"vpc_id"</span>: <span class="hljs-string">"vpc-12345678"</span>,
        <span class="hljs-attr">"subnet_id"</span>: <span class="hljs-string">"subnet-87654321"</span>
    },
    [...]
}
</code></pre>
<p>The first one is just a simple and optional description of the template. While the second adds some useful functionality. It defines variables, which can later be used in the template. Some of them have a default value, others are optional and can be set during the Packer call. Using <code>packer inspect</code> shows that:</p>
<pre><code class="lang-sh">$ packer inspect advanced_template.json
Description:

Demo Packer template

Optional variables and their defaults:

aws_access_key =
aws_secret_key =
base_ami = ami-b520c0d8
base_docker_image = ubuntu:16.04
instance_type = t2.medium
subnet_id = subnet-87654321
vpc_id = vpc-12345678
[...]
</code></pre>
<p>Overriding can be done like this:</p>
<pre><code class="lang-sh">$ packer build \
        -var <span class="hljs-string">'aws_access_key=foo'</span> \
        -var <span class="hljs-string">'aws_secret_key=bar'</span> \
        advanced_template.json
</code></pre>
<h2 id="multiple-builders">Multiple builders</h2>
<p>The next extension could be to define multiple builders:</p>
<pre><code class="lang-json">{
[...]
  <span class="hljs-attr">"builders"</span>: [
    {
      <span class="hljs-attr">"type"</span>: <span class="hljs-string">"amazon-ebs"</span>,
      <span class="hljs-attr">"access_key"</span>: <span class="hljs-string">"{{user `aws_access_key`}}"</span>,
      <span class="hljs-attr">"secret_key"</span>: <span class="hljs-string">"{{user `aws_secret_key`}}"</span>,
      <span class="hljs-attr">"region"</span>: <span class="hljs-string">"us-east-1"</span>,
      <span class="hljs-attr">"source_ami"</span>: <span class="hljs-string">"{{user `base_ami`}}"</span>,
      <span class="hljs-attr">"instance_type"</span>: <span class="hljs-string">"{{user `instance_type`}}"</span>,
      <span class="hljs-attr">"vpc_id"</span>: <span class="hljs-string">"{{user `vpc_id`}}"</span>,
      <span class="hljs-attr">"subnet_id"</span>: <span class="hljs-string">"{{user `subnet_id`}}"</span>,
      <span class="hljs-attr">"associate_public_ip_address"</span>: <span class="hljs-literal">true</span>,
      <span class="hljs-attr">"ssh_username"</span>: <span class="hljs-string">"ubuntu"</span>,
      <span class="hljs-attr">"ami_name"</span>: <span class="hljs-string">"Packer-build DEMO {{timestamp}}"</span>,
      <span class="hljs-attr">"ami_description"</span>: <span class="hljs-string">"Build at {{isotime \"Mon, 02 Jan 2006 15:04:05 MST\"}} based on {{user `base_ami`}}"</span>
    },
    {
      <span class="hljs-attr">"type"</span>: <span class="hljs-string">"docker"</span>,
      <span class="hljs-attr">"image"</span>: <span class="hljs-string">"{{user `base_docker_image`}}"</span>,
      <span class="hljs-attr">"pull"</span>: <span class="hljs-literal">true</span>,
      <span class="hljs-attr">"commit"</span>: <span class="hljs-literal">true</span>,
      <span class="hljs-attr">"run_command"</span>: [<span class="hljs-string">"-d"</span>, <span class="hljs-string">"-i"</span>, <span class="hljs-string">"--net=host"</span>, <span class="hljs-string">"-t"</span>, <span class="hljs-string">"{{.Image}}"</span>, <span class="hljs-string">"/bin/bash"</span>]
    }
  ]
[...]
}
</code></pre>
<p>The <code>amazon-ebs</code> builder was extended by using some of the previously introduced variables. It got a bit more specific about the build environment which will be used on AWS side by defining a VPC, a subnet and attaching a public IP address to the build instance, and also added how the description of the resulting AMI will look.</p>
<p>The second builder defines a build with docker. This is quite useful for testing the provisioning part of the template. Creating an EC2 instance and an AMI afterwards takes some time and resources while building in a local docker environment is faster.</p>
<p>The <code>pull</code> option ensures that the base docker image is pulled if it isn’t already in the local repository. While the commit option is set so that the container will be committed to an image in the local repository after provisioning instead of exported.</p>
<p>Per default, packer will execute all builders which have been defined. This can be useful if you want to build the same image in a different Cloud Provider or in different AWS regions at the same time. In our example we have a special test builder and the actual AWS builder. The following command tells packer to use only a specific builder:</p>
<pre><code class="lang-sh">$ sudo packer build -only=docker advanced_template.json
</code></pre>
<h2 id="provisioner">Provisioner</h2>
<p>Provisioners are executed sequentially during the build phase. Using the only option you can restrict the provisioner to be called <code>only</code> by the corresponding builder.</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"provisioners"</span>: [
    {
      <span class="hljs-attr">"type"</span>: <span class="hljs-string">"shell"</span>,
      <span class="hljs-attr">"script"</span>: <span class="hljs-string">"bootstrap.sh"</span>,
      <span class="hljs-attr">"execute_command"</span>: <span class="hljs-string">"{{ .Vars }} sudo -E sh '{{ .Path }}'"</span>,
      <span class="hljs-attr">"only"</span>: [<span class="hljs-string">"amazon-ebs"</span>]
    },
    {
      <span class="hljs-attr">"type"</span>: <span class="hljs-string">"shell"</span>,
      <span class="hljs-attr">"script"</span>: <span class="hljs-string">"bootstrap.sh"</span>,
      <span class="hljs-attr">"only"</span>: [<span class="hljs-string">"docker"</span>]
    },
    {
      <span class="hljs-attr">"type"</span>: <span class="hljs-string">"ansible-local"</span>,
      <span class="hljs-attr">"playbook_file"</span>: <span class="hljs-string">"site.yml"</span>
    },
    {
      <span class="hljs-attr">"type"</span>: <span class="hljs-string">"shell"</span>,
      <span class="hljs-attr">"script"</span>: <span class="hljs-string">"cleanup.sh"</span>
    }
  ]
}
</code></pre>
<p>This is useful if you need different provisioners or different options for a provisioner. In this example both call the same script to do some general bootstrap actions. One is for the <code>amazon-ebs</code> builder, where we call the script with sudo, and the other is for the <code>docker</code> builder where we don’t need to call sudo, as being root is the default inside a docker container.</p>
<p>The script itself is about upgrading all installed packages and installing Ansible to prepare the next provisioner:</p>
<pre><code class="lang-sh"><span class="hljs-meta">#!/bin/bash</span>

<span class="hljs-built_in">export</span> DEBIAN_FRONTEND=noninteractive

apt-get update
apt-get -y upgrade
apt-get -y install sudo ansible
</code></pre>
<p>Now a provisioner of the type <code>ansible-local</code> can be used. Packer will copy the defined Ansible Playbook from the local system into the instance and then execute it locally.</p>
<p>The last one is another simple shell provisioner to do some cleanup:</p>
<pre><code class="lang-sh"><span class="hljs-meta">#!/bin/bash</span>

<span class="hljs-comment"># Remove Ansible</span>
sudo bash -c <span class="hljs-string">"apt-get purge -y ansible"</span>

<span class="hljs-comment"># Remove temporary stuff</span>
sudo bash -c <span class="hljs-string">"apt-get autoremove -y"</span>
sudo bash -c <span class="hljs-string">"apt-get clean"</span>
sudo bash -c <span class="hljs-string">"rm -rf /tmp/_"</span>
sudo bash -c <span class="hljs-string">"rm -rf /home/ubuntu/.ansible"</span>
sudo bash -c <span class="hljs-string">"rm -rf /root/.ssh/authorized*keys"</span>
sudo bash -c <span class="hljs-string">"rm -rf /usr/sbin/policy-rc.d/"</span>
sudo bash -c <span class="hljs-string">"rm -rf /etc/ssh/ssh_host*_"</span>
sudo bash -c <span class="hljs-string">"cat /dev/null &amp;gt; /var/log/wtmp"</span>
sudo bash -c <span class="hljs-string">"cat /dev/null &amp;gt; /var/log/syslog"</span>
</code></pre>
<h2 id="post-processors">Post-Processors</h2>
<p>Post-processors are run right after the image is built. For example to tag the docker image in the local docker repository:</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"post-processors"</span>: [
    [
      {
        <span class="hljs-attr">"type"</span>: <span class="hljs-string">"docker-tag"</span>,
        <span class="hljs-attr">"only"</span>: [<span class="hljs-string">"docker"</span>],
        <span class="hljs-attr">"repository"</span>: <span class="hljs-string">"demo/awsadvent"</span>,
        <span class="hljs-attr">"tag"</span>: <span class="hljs-string">"{{timestamp}}"</span>
      }
    ]
  ]
}
</code></pre>
<p>Or to trigger the next step of a CI/CD pipeline.</p>
<h2 id="pitfalls">Pitfalls</h2>
<p>While building AMIs with packer is quite easy in general, there are some pitfalls to be aware of.</p>
<p>The most common is differences between the build system and the instance which will be created based on the AMI. It could be anything from simple things like different instance type to running in a different VPC. This means thinking about what can already be done at build time and what is specific to the environment where an EC2 instance is created based on the build AMI. Other examples, an Apache worker threads configuration based on the amount of available CPU cores, or a VPC specific endpoint the application communicates with, for example, an S3 VPC endpoint or the CloudWatch endpoint where custom metrics are sent.</p>
<p>This can be addressed by running a script or any real configuration management system at first boot time.</p>
<h2 id="wrapping-up">Wrapping up</h2>
<p>As we have seen, building an AMI with a pre-installed configuration is not that hard. Packer is an easy to use and powerful tool to do that. We have discussed the basic building blocks of a packer template and some of the more advanced options. Go ahead and check out the great <a target="_blank" href="https://www.packer.io/docs/">Packer documentation</a> which explains this and much more in detail.</p>
<p>All code examples can be found at <a target="_blank" href="https://github.com/aruetten/aws-advent-2016-building-amis">https://github.com/aruetten/aws-advent-2016-building-amis</a></p>
]]></content:encoded></item></channel></rss>