<?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: Pawel Zubkiewicz</title>
    <description>The latest articles on Forem by Pawel Zubkiewicz (@pzubkiewicz).</description>
    <link>https://forem.com/pzubkiewicz</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%2F600469%2Fc7d2a122-5eab-4e5b-8a44-1780a45da910.jpg</url>
      <title>Forem: Pawel Zubkiewicz</title>
      <link>https://forem.com/pzubkiewicz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/pzubkiewicz"/>
    <language>en</language>
    <item>
      <title>What's next with the Serverless Framework in 2025?</title>
      <dc:creator>Pawel Zubkiewicz</dc:creator>
      <pubDate>Wed, 05 Feb 2025 16:57:24 +0000</pubDate>
      <link>https://forem.com/aws-heroes/whats-next-with-the-serverless-framework-in-2025-121d</link>
      <guid>https://forem.com/aws-heroes/whats-next-with-the-serverless-framework-in-2025-121d</guid>
      <description>&lt;h1&gt;
  
  
  Recent Events Spark a Heated Debate
&lt;/h1&gt;

&lt;p&gt;Recent events surrounding the Serverless Framework have ignited a heated discussion within the user community. As shown in the attached image, the CEO of Serverless Inc. officially closed the door on support for version 3 by rejecting a pull request that would have enabled it to work with the latest runtime environments—including Node.js 22. In his decision, he stated:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“We are no longer working on V3 and are focusing on V4.”&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;The rejection of this simple PR by none other than the CEO and founder of Serverless Inc. has elicited a range of responses—from understanding to outright hostility. What’s clear, however, is that this decision unequivocally signals the future direction of the Serverless Framework and raises the question: What’s next?&lt;/p&gt;




&lt;h2&gt;
  
  
  Houston, We Have a Problem!
&lt;/h2&gt;

&lt;p&gt;This is a serious issue for several reasons. First, Node.js 20 (the last supported version in Serverless Framework v3) will reach its end of life in April 2026. Second, the company is firmly pushing users toward version 4, which introduces significant changes in its business model—changes that have effectively deterred the community from adopting this solution from the start.&lt;/p&gt;




&lt;h2&gt;
  
  
  Version 4 – Licensing Change, a New Business Model
&lt;/h2&gt;

&lt;p&gt;At the end of 2023, Serverless Inc. released version 4 of the framework, introducing a major change: &lt;strong&gt;licensing fees for larger organizations&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does it work in practice?&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
If your company generates more than $2 million in annual revenue, you’ll need to reach for your wallet. Fees are charged in the form of credits, where one credit equals one deployed service (a “Service Instance”) in a given region and environment for at least 10 days.&lt;br&gt;&lt;br&gt;
For example, a service named &lt;code&gt;foobar&lt;/code&gt; deployed on the dev, test, and prod stages in Frankfurt would count as three Service Instances—that is, 3 credits per month. Deploying the same service in another region would count as an additional three Service Instances.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;2 Credits:&lt;/strong&gt; Free
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;15 Credits:&lt;/strong&gt; $60 per month
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;50 Credits:&lt;/strong&gt; $175 per month
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;300 Credits:&lt;/strong&gt; $750 per month
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Credits can also be purchased at a significant discount through a reservation model.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Free Usage Terms for V4
&lt;/h2&gt;

&lt;p&gt;Fortunately, these changes don’t affect everyone. Version 4 remains free for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Independent developers (i.e., us mere mortals)
&lt;/li&gt;
&lt;li&gt;Consultants working for clients
&lt;/li&gt;
&lt;li&gt;Open source projects
&lt;/li&gt;
&lt;li&gt;Startups and companies with under $2 million in annual revenue
&lt;/li&gt;
&lt;li&gt;Educational institutions&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The Community Responds: Forking Serverless Framework V3
&lt;/h2&gt;

&lt;p&gt;As is often the case in the open source world, when a problem arises the community takes matters into its own hands. Thus was born the fork of Serverless Framework v3, known as &lt;strong&gt;oss-serverless&lt;/strong&gt;. This project, available on GitHub (&lt;a href="https://github.com/oss-serverless/serverless" rel="noopener noreferrer"&gt;oss-serverless/serverless&lt;/a&gt;), aims to extend the life of V3—eliminating the need to switch to the paid V4.&lt;/p&gt;

&lt;p&gt;This fork is gaining traction because it allows users to continue working with up-to-date runtime environments, such as &lt;strong&gt;Node.js 22, Python, or .NET&lt;/strong&gt;, without having to change framework versions. Essentially, it’s a copy of V3 with several improvements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Added support for the latest AWS Lambda runtime versions
&lt;/li&gt;
&lt;li&gt;Patched security vulnerabilities
&lt;/li&gt;
&lt;li&gt;Streamlined and sped up the CLI
&lt;/li&gt;
&lt;li&gt;Removed unused components
&lt;/li&gt;
&lt;li&gt;All changes are detailed &lt;a href="https://github.com/oss-serverless/serverless?tab=readme-ov-file#changes" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Switching to the fork is ridiculously simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Remove the global installation of Serverless:
&lt;code&gt;npm remove -g serverless&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Install the oss-serverless fork globally:
&lt;code&gt;npm install -g osls&lt;/code&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  What to Choose?
&lt;/h2&gt;

&lt;p&gt;We are now faced with several options:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Switch to V4&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
If you’re a small company or an individual developer, this might be the natural path forward. For larger companies, the cost of using SFv4 isn’t prohibitive—especially since V4 offers features that can boost developer productivity, potentially recouping the licensing fees many times over.&lt;br&gt;&lt;br&gt;
Of course, bureaucracy can be an issue; sometimes convincing a client to spend an extra $100 on a project costing $100,000 is impossible or downright frustrating. Fortunately, credits can be purchased through AWS, which should ease the process somewhat.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Adopt the oss-serverless Fork&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
This is a solid alternative for those who can’t or don’t want to move to V4. The community has committed to supporting it for at least the next 5 years.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Stick with V3&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Yes, the framework won’t suddenly stop working. However, the lack of updates and support could become problematic over time—especially if you’re looking for better performance and the latest features available in newer runtimes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Consider Alternatives&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Perhaps this is a good moment to explore other options like AWS CDK, AWS SAM, or SST.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




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

&lt;p&gt;The situation with the Serverless Framework teaches us two things.&lt;/p&gt;

&lt;p&gt;First, &lt;strong&gt;every successful open-source tool eventually needs to find a business model that enables further development&lt;/strong&gt;. Personally, I don’t hold it against Austen Collins (CEO) for blocking that PR—the change was announced long ago and shouldn’t come as a surprise. I’m hopeful that focusing on V4 and securing more financial resources will allow them to build an even better tool. I root for them and wish them the best of luck.&lt;/p&gt;

&lt;p&gt;Second, the power of the open-source community is invaluable—as demonstrated by the oss-serverless fork. Thanks to this initiative, we have options, and that’s a great thing.&lt;/p&gt;

&lt;p&gt;Regardless of which path you choose, it’s a good idea to start planning your strategy now. Although Node.js 20 will be supported for more than two years, time in the tech world moves faster than we think.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;What do you think? Which option will you choose for your projects?&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Bonus: What’s New in Serverless Framework V4?
&lt;/h2&gt;

&lt;p&gt;Despite the controversies surrounding the licensing model, V4 introduces a host of intriguing improvements that may convince users to migrate:&lt;/p&gt;

&lt;h3&gt;
  
  
  Hybrid Developer Mode
&lt;/h3&gt;

&lt;p&gt;V4 introduces an advanced approach that combines your local development environment with AWS Lambda functions—think hot-deployment. This means developers can enjoy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster development cycles
&lt;/li&gt;
&lt;li&gt;Forwarding events from the cloud to local code
&lt;/li&gt;
&lt;li&gt;A more precise testing environment
&lt;/li&gt;
&lt;li&gt;Greater deployment flexibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The framework also emphasizes increased freedom when choosing infrastructure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The ability to switch between Function-as-a-Service (FaaS) and serverless containers
&lt;/li&gt;
&lt;li&gt;Reduced risk of vendor lock-in
&lt;/li&gt;
&lt;li&gt;Support for new AWS regions and features&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Extensions and Integrations
&lt;/h3&gt;

&lt;p&gt;A new flexible extensions system now offers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The ability to create your own plugins
&lt;/li&gt;
&lt;li&gt;A partner program with an 80% revenue share for plugin developers
&lt;/li&gt;
&lt;li&gt;Support for various serverless service providers&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Additional Features
&lt;/h3&gt;

&lt;p&gt;V4 introduces a suite of useful tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integration with HashiCorp Vault for secret management - which is very enterprise-friendly
&lt;/li&gt;
&lt;li&gt;Built-in support for CI/CD
&lt;/li&gt;
&lt;li&gt;Access to the Serverless Dashboard at no extra cost&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Compatibility
&lt;/h3&gt;

&lt;p&gt;The developers have ensured a smooth transition by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Avoiding any breaking changes in backward compatibility
&lt;/li&gt;
&lt;li&gt;Preserving existing workflows&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>serverless</category>
      <category>aws</category>
      <category>opensource</category>
    </item>
    <item>
      <title>Migrating AWS Organizations: How I Did It and Why</title>
      <dc:creator>Pawel Zubkiewicz</dc:creator>
      <pubDate>Sun, 24 Nov 2024 10:22:50 +0000</pubDate>
      <link>https://forem.com/aws-heroes/migrating-aws-organizations-how-i-did-it-and-why-4oei</link>
      <guid>https://forem.com/aws-heroes/migrating-aws-organizations-how-i-did-it-and-why-4oei</guid>
      <description>&lt;p&gt;Migrating AWS Organizations is a rarely discussed topic that quickly becomes an administrative and technical challenge when you need to change the management account. This is because &lt;strong&gt;AWS Organizations does not allow changing the organization root account once it has been set&lt;/strong&gt;. As a result, it's necessary to create a new organization and manually migrate all member accounts to complete the migration.&lt;/p&gt;

&lt;p&gt;In my case, apart from migrating AWS accounts to a new management account within a new organization, I also changed the authentication method. I moved from IAM users to AWS Identity Center, formerly known as SSO. In this article, I share my experiences during this process, the challenges I faced, and insights that might be helpful to others.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Did I Have to Migrate?
&lt;/h2&gt;

&lt;p&gt;My AWS Organization is my personal setup, which I use for learning and small projects. &lt;strong&gt;I created my first AWS account back in 2016&lt;/strong&gt; with the intention of learning serverless. As my needs grew, I added more accounts and eventually formed an AWS Organization. Due to a lack of experience at the time, I used my first account as the management account. This account already hosted various resources, primarily serverless projects. Over time, I learned that this setup violated best practices and needed improvement, but I couldn't make changes without a major migration. For a long while, I operated like this—after all, it was my personal organization, and I didn't need to pass any audits. 😉&lt;/p&gt;

&lt;p&gt;Then, AWS &lt;a href="https://aws.amazon.com/iam/identity-center/" rel="noopener noreferrer"&gt;Identity Center&lt;/a&gt; (previously called SSO) came along, and I wanted to enable it. However, I didn't want to do it in my old, disorganized setup, as I knew it would only make it harder to align with AWS best practices in the future. So, I kept postponing it.&lt;/p&gt;

&lt;p&gt;Things changed in 2024, with the arrival of &lt;strong&gt;AWS Q Developer Pro&lt;/strong&gt;, which I wanted to enable to assist me in coding. &lt;strong&gt;It requires AWS Identity Center&lt;/strong&gt;, which finally pushed me to act. I wanted to deploy it, but not in the messy old organization. I knew that enabling Identity Center in my current structure would further complicate aligning with best practices.&lt;/p&gt;

&lt;p&gt;The third reason, based on some hints and speculation, was that old AWS accounts seem to differ from those created recently. While I don't know the specifics, it's generally better to have a newer account as the management account for the organization. I recall that when AWS finally &lt;a href="https://aws.amazon.com/blogs/security/you-can-now-assign-multiple-mfa-devices-in-iam/" rel="noopener noreferrer"&gt;enabled multiple hardware MFA keys for IAM users&lt;/a&gt;, my old AWS account from 2016 only gained this capability a few weeks after the announcement, and AWS Support cited its age as the reason for the delay.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Did the Migration Go?
&lt;/h2&gt;

&lt;p&gt;In my case, the migration focused solely on transferring member accounts to the new organization, without moving resources between accounts. Here are the main steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Setting Up the New Organization&lt;/strong&gt; – I started by creating a new AWS Organization, setting up a fresh AWS account that would serve as the management account.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Migrating Member Accounts&lt;/strong&gt; – Next came the most time-consuming part—migrating the member accounts. Each account needed to be detached from the old organization, which involved removing SCP policies that blocked the account from leaving. For accounts created directly within the old organization, I had to set a root password, enable MFA, and—most crucially—define a payment method. The last part was key, as with &lt;a href="https://docs.aws.amazon.com/awsaccountbilling/latest/aboutv2/useconsolidatedbilling-credits.html#consolidated-billing-credit-sharing-preferences" rel="noopener noreferrer"&gt;&lt;em&gt;consolidated billing&lt;/em&gt;&lt;/a&gt;, the payment method is usually only configured on the management account.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Accepting the Invitation to the New Organization&lt;/strong&gt; – After detaching an account from the old organization, it became independent. In the new organization, I sent an invitation to the account, which had to be accepted from the root account level. Only then would the account join the new organization.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

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

&lt;h2&gt;
  
  
  Challenges I Faced
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Payment Issues&lt;/strong&gt; – The main difficulty was setting up payment methods for accounts that had previously been created in the old organization without needing individual payment setups. I had to do this manually for each account.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lack of Automation&lt;/strong&gt; – Another significant challenge was the lack of automation from AWS. The platform doesn't provide tools for automatically transferring entire or partial organizations, which meant I had to execute every step manually. Fortunately, in my case, this involved only seven accounts, so it was manageable within a reasonable timeframe.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SCP and IAM Policies&lt;/strong&gt; – I transferred the existing SCP policies via copy-paste (JSON definitions), and the IAM configurations on the accounts remained unchanged.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  AWS Identity Center - A Fresh Start
&lt;/h2&gt;

&lt;p&gt;Implementing AWS Identity Center in the new organization represented a major shift in my approach to access and security management. You can find more details in my previous article &lt;a href="https://dev.to/aws-heroes/simplified-configuration-of-sso-profiles-in-aws-cli-using-sso-sessions-8hh"&gt;Simplified Configuration of SSO Profiles in AWS CLI Using SSO Sessions&lt;/a&gt;. Additionally, unlike in the old organization where resources were deployed directly on the management account, I decided to strictly adhere to AWS best practices and keep the management account empty.&lt;/p&gt;

&lt;p&gt;Interestingly, &lt;strong&gt;AWS recommends configuring Identity Center on the management account&lt;/strong&gt;, so it isn't entirely empty, but this is the only exception to the rule of not placing resources on the management account.&lt;/p&gt;

&lt;h2&gt;
  
  
  Recommendations
&lt;/h2&gt;

&lt;p&gt;If you need help with &lt;a href="https://www.youtube.com/watch?v=6oFwTy3b7O0" rel="noopener noreferrer"&gt;setting up your AWS Organization&lt;/a&gt; or &lt;a href="https://www.youtube.com/watch?v=1wEQbPbrg50" rel="noopener noreferrer"&gt;Identity Center&lt;/a&gt;, I recommend the excellent instructional videos by Łukasz Dorosz, which helped me get up to speed. In fact, if my memory serves me right, Łukasz was advising me to switch to Identity Center back in 2023. Thank you, Łukasz!&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;Migrating AWS Organizations is a complex task that may require many manual steps, but it is achievable with the right approach. In my case, creating a new organization and manually migrating accounts was the best solution, allowing me to organize resources and implement better security practices. Ultimately, it enabled me to use AWS Q Developer Pro.&lt;/p&gt;

&lt;p&gt;For those considering a similar migration, &lt;strong&gt;the most important advice is to plan the process carefully and prepare all the necessary elements, especially payment setups and root account access for all AWS accounts being migrated&lt;/strong&gt;. While the process is time-consuming, the benefits of a well-structured setup and increased security far outweigh the effort.&lt;/p&gt;

&lt;p&gt;If you're just starting out with AWS Organizations, remember to create a fresh, dedicated management account without any resources. This will save you from the need for migration in the future and ensure you're aligned with AWS best practices from the start.&lt;/p&gt;

&lt;p&gt;I hope my story will be helpful to those facing a similar challenge and that it will help you avoid my mistakes when creating your own AWS organization.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>management</category>
      <category>sso</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Simplified Configuration of SSO Profiles in AWS CLI Using SSO Sessions</title>
      <dc:creator>Pawel Zubkiewicz</dc:creator>
      <pubDate>Sat, 23 Nov 2024 16:14:00 +0000</pubDate>
      <link>https://forem.com/aws-heroes/simplified-configuration-of-sso-profiles-in-aws-cli-using-sso-sessions-8hh</link>
      <guid>https://forem.com/aws-heroes/simplified-configuration-of-sso-profiles-in-aws-cli-using-sso-sessions-8hh</guid>
      <description>&lt;p&gt;For some time now, configuring Single Sign-On (SSO) profiles in AWS CLI has been simplified thanks to the introduction of SSO sessions. Traditionally, setting up SSO profiles required specifying the SSO endpoint for each profile individually. The new approach uses the &lt;code&gt;sso-session&lt;/code&gt; section in the configuration file to group SSO endpoint variables, which profiles can reference. This avoids redundant information and makes the configuration process easier.&lt;/p&gt;

&lt;h2&gt;
  
  
  Benefits of Using SSO Sessions
&lt;/h2&gt;

&lt;p&gt;SSO sessions offer several advantages over previous methods:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Simplified configuration&lt;/strong&gt;: Defining the &lt;code&gt;sso-session&lt;/code&gt; section and linking it to a profile is easier than manually setting all the parameters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automatic token refreshing&lt;/strong&gt;: SSO sessions automatically renew access tokens, eliminating the need to manually refresh credentials. AWS CLI manages the token renewal process in the background using a "refresh token." When the access token expires (typically after an hour), AWS CLI uses the refresh token to obtain a new access token without user intervention. This allows uninterrupted work and removes the need to repeatedly log in, which is especially useful for long-running operations or background scripts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reusable configuration&lt;/strong&gt;: SSO session configurations can be shared across multiple profiles, making it easier to manage multiple accounts and roles.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why Choose SSO Sessions Over IAM Users?
&lt;/h3&gt;

&lt;p&gt;Using SSO sessions (IAM Identity Center) in AWS CLI offers significant advantages over traditional IAM users:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Enhanced security&lt;/strong&gt;: Authentication via IAM Identity Center eliminates the need to manage long-term access keys, commonly used with IAM users. With SSO sessions, credentials are short-lived and automatically renewed, significantly reducing the risk of leaks or misuse.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Centralized access management&lt;/strong&gt;: IAM Identity Center allows centralized management of user permissions through integration with existing identity providers (IdP), such as Microsoft Azure AD, or by creating your own user directory (&lt;em&gt;I chose this option&lt;/em&gt;). Organizations can easily control access to multiple AWS accounts from a single place, facilitating audits and compliance with security policies.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One login, multiple accounts&lt;/strong&gt;: SSO sessions enable users to access all accounts within an AWS Organizations structure using a single set of credentials. This means users log in once to access multiple AWS accounts without needing to create separate IAM users for each account or assign multiple roles to individual users. This simplifies identity management and enhances user convenience by eliminating the need to remember multiple passwords.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Configuring a Profile Using the &lt;code&gt;aws configure sso&lt;/code&gt; Wizard
&lt;/h2&gt;

&lt;p&gt;The easiest way to configure an SSO profile using SSO sessions is with the &lt;code&gt;aws configure sso&lt;/code&gt; wizard. This command guides users through the setup process, including:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Creating a session name, e.g., &lt;code&gt;myorg&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Providing the IAM Identity Center start URL, e.g., &lt;code&gt;https://myorg.awsapps.com/start&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Specifying the AWS region where the IAM Identity Center directory is located.&lt;/li&gt;
&lt;li&gt;Defining the registration scope (optional).&lt;/li&gt;
&lt;li&gt;Selecting the target account from a dropdown menu in the terminal (as shown in the image below).&lt;/li&gt;
&lt;/ol&gt;

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

&lt;p&gt;After completing the process, a new entry will appear in the &lt;code&gt;~/.aws/config&lt;/code&gt; file with the following structure. Notice how the profile references the session.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="nn"&gt;[profile my-new-profile]&lt;/span&gt;
&lt;span class="py"&gt;sso-session&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;myorg&lt;/span&gt;
&lt;span class="py"&gt;sso-account-id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;123456789012&lt;/span&gt;
&lt;span class="py"&gt;sso-role-name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;AdministratorAccess&lt;/span&gt;

&lt;span class="nn"&gt;[sso-session myorg]&lt;/span&gt;
&lt;span class="py"&gt;sso-start-url&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;https://myorg.awsapps.com/start&lt;/span&gt;
&lt;span class="py"&gt;sso-region&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;us-east-1&lt;/span&gt;
&lt;span class="py"&gt;sso-registration-scopes&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;sso:account:access&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In practice, the new configuration differs from the old one in that sso-session can be reused across multiple profiles. Previously, everything had to be defined together, duplicating information across profiles in the same organization.&lt;/p&gt;

&lt;p&gt;Here’s how the old configuration looked:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ini"&gt;&lt;code&gt;&lt;span class="c"&gt;; old config, don't use it
&lt;/span&gt;&lt;span class="nn"&gt;[profile my-old-profile]&lt;/span&gt;
&lt;span class="py"&gt;sso_start_url&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;https://myorg.awsapps.com/start&lt;/span&gt;
&lt;span class="py"&gt;sso_region&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;us-east-1&lt;/span&gt;
&lt;span class="py"&gt;sso_account_id&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;123456789012&lt;/span&gt;
&lt;span class="py"&gt;sso_role_name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;AdministratorAccess&lt;/span&gt;
&lt;span class="py"&gt;credential_process&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;aws-sso-util credential-process --profile my-old-profile&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Logging In and Using an SSO Profile
&lt;/h3&gt;

&lt;p&gt;After configuring an SSO profile, users can log in using the &lt;code&gt;aws sso login&lt;/code&gt; command. This command opens the default browser to authenticate the user. Once logged in, the credentials are cached, enabling AWS CLI to securely fetch AWS credentials for the specified IAM role.&lt;/p&gt;

&lt;p&gt;Example usage of an SSO profile:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws s3 &lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;--profile&lt;/span&gt; my-new-profile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you use environment variables, you can still set the profile as the default:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nb"&gt;export &lt;/span&gt;&lt;span class="nv"&gt;AWS_PROFILE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;my-new-profile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;BTW: I manage this setup with the &lt;code&gt;direnv&lt;/code&gt; tool, allowing me to use different profiles in different directories.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Configuring Additional SSO Profiles
&lt;/h3&gt;

&lt;p&gt;If you noticed in the screenshot, I have access to nine AWS accounts. To configure a profile for another account, I simply run the &lt;code&gt;aws configure sso&lt;/code&gt; command again.&lt;/p&gt;

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

&lt;p&gt;Then, I type the previously created &lt;strong&gt;SSO session&lt;/strong&gt; name. This allows me to select another account from the list &lt;strong&gt;without re-entering the SSO URL or other session details&lt;/strong&gt;. No manual edits or copying AWS account numbers from the web console to the config file are needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Logging Out of an SSO Session
&lt;/h3&gt;

&lt;p&gt;After finishing with an SSO profile, users can log out using the &lt;code&gt;aws sso logout&lt;/code&gt; command. This clears cached credentials.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience with IAM Identity Center
&lt;/h2&gt;

&lt;p&gt;In my AWS organization, I decided to enable IAM Identity Center specifically to &lt;strong&gt;use SSO sessions instead of IAM users with static access keys&lt;/strong&gt;. I must admit, for many years, out of convenience and habit, I didn’t regularly rotate my access keys 😱 (see the image below). However, security concerns pushed me to change my approach. The new authentication method via SSO sessions is significantly more secure, eliminating risks associated with long-term access keys. I now sleep easier knowing my AWS accounts are better protected.&lt;/p&gt;

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

&lt;h3&gt;
  
  
  Gradual Transition to SSO and Temporary IAM Key Deactivation
&lt;/h3&gt;

&lt;p&gt;When transitioning from IAM users with static access keys to SSO sessions, you can temporarily deactivate your access keys (Access Key and Secret Access Key) associated with the IAM user. Deactivation prevents the keys from being used for AWS operations but allows later reactivation without generating new keys. &lt;strong&gt;This approach provides flexibility during migration&lt;/strong&gt;—you can configure SSO sessions on your system while disabling IAM keys as a security measure. If needed, you can quickly revert to traditional keys by reactivating them with one click in the AWS console. This makes the SSO migration process safer and less risky, allowing an emergency fallback to the old setup if required.&lt;/p&gt;

&lt;h2&gt;
  
  
  CloudPouch Supports the New SSO Profile Configuration
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://cloudpouch.dev/" rel="noopener noreferrer"&gt;CloudPouch&lt;/a&gt; is an application for viewing costs and &lt;strong&gt;automatically identifying savings on AWS accounts&lt;/strong&gt;. I’m excited to announce that starting with version 1.36.0, I’ve added support for the new SSO profiles, making it 100% compatible with configurations created by &lt;code&gt;aws configure sso&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;SSO sessions simplify the configuration and management of profiles in AWS CLI. Users can leverage the &lt;code&gt;aws configure sso&lt;/code&gt; wizard to quickly and easily set up SSO sessions. This makes managing access to AWS resources more efficient, secure, and user-friendly.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>sso</category>
      <category>cli</category>
      <category>identity</category>
    </item>
    <item>
      <title>Report from AWS Heroes Summit 2024</title>
      <dc:creator>Pawel Zubkiewicz</dc:creator>
      <pubDate>Thu, 25 Jul 2024 10:23:26 +0000</pubDate>
      <link>https://forem.com/aws-heroes/report-from-aws-heroes-summit-2024-20hn</link>
      <guid>https://forem.com/aws-heroes/report-from-aws-heroes-summit-2024-20hn</guid>
      <description>&lt;p&gt;I spent all of last week (July 15-19) in Seattle at Amazon's headquarters for a top-secret event exclusively for AWS Heroes.&lt;/p&gt;

&lt;h2&gt;
  
  
  How was the AWS Heroes Summit?
&lt;/h2&gt;

&lt;p&gt;In short: &lt;strong&gt;fantastic&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Those who know me well know that I don't throw praise around lightly.&lt;/em&gt; 😉&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Our conference days were packed with many long sessions (an hour and a half to two hours) across 4 tracks. This allowed everyone to choose something interesting for themselves. The sessions featured well-known figures like Developer Advocates who often speak at conferences, but also engineers building services and the managers responsible for them. With all due respect to the DAs, the sessions with the latter two groups were the most interesting. I wasn't familiar with most of these people before.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The engineers from AWS made an incredible impression on me; some of them are absolute rockstars and top-tier experts&lt;/strong&gt;. Top of the top!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;I'm not even sure how to best describe this impression&lt;/em&gt; 🤔 &lt;em&gt;I imagine they're specialists of the same caliber as those working for Elon, and when he tells them to accomplish seemingly impossible things, they make it happen regardless of the scale of the problem. And AWS has the same kind of people working for them!&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In summary, &lt;strong&gt;our favorite serverless services are in good hands&lt;/strong&gt;. During these long sessions, there was plenty of room for discussions and questions. Interestingly, this worked both ways. The engineers from AWS were very interested in our problems, use cases, and generally what we think. &lt;em&gt;Customer obsession&lt;/em&gt; in a new form.&lt;/p&gt;

&lt;h2&gt;
  
  
  Serverless is not dead!
&lt;/h2&gt;

&lt;p&gt;In recent weeks (before the Summit in Seattle), several blog posts appeared once again proclaiming the death of or disappointment with serverless. This topic was amplified by the ubiquitous GenAI, which media-wise overshadows all other news and changes in AWS, as was particularly evident at the New York Summit, giving the impression that AWS has stopped investing in anything other than artificial intelligence. Luc van Donkersgoed, a Serverless Hero, critically described and summarized this situation in his &lt;a href="https://lucvandonkersgoed.com/2024/07/13/dear-aws-please-let-me-be-a-cloud-engineer-again/" rel="noopener noreferrer"&gt;article&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;In a way, I feel obligated to address these opinions and the prevailing anti-serverless climate, as well as the accusations against AWS.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Judging by the AWS Heroes Summit agenda alone, there's no cause for concern. Roughly &lt;strong&gt;half of all sessions were about serverless&lt;/strong&gt;, while the rest covered several topics: GenAI, security, databases, and containers (in no particular order).&lt;/p&gt;

&lt;p&gt;Meetings and conversations with &lt;em&gt;service teams&lt;/em&gt; show that AWS is developing normally, in many directions. Of course, GenAI, due to its nature, will touch many areas. Perhaps teams are encouraged to consider integrating such solutions into their services, but &lt;strong&gt;it's certainly not the case that AWS is investing only in artificial intelligence&lt;/strong&gt;. The vast majority of new features and issues discussed in the sessions I attended had nothing to do with GenAI.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's coming next?
&lt;/h2&gt;

&lt;p&gt;Serverless is doing well, as I mentioned, &lt;strong&gt;&lt;em&gt;rockstars&lt;/em&gt; are working on the services and will deliver many interesting and necessary new features&lt;/strong&gt; in Step Functions, EventBridge, Lambda, and probably other serverless services, before and at re:Invent, and in the coming year.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The entire event and all content are subject to NDA. Therefore, I can't reveal anything specific.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I really liked several upcoming updates and can't wait for them to appear so I can use them myself. And I'm talking about fairly ordinary engineering updates to the aforementioned services. No GenAI magic here ✨😃&lt;/li&gt;
&lt;li&gt;Some new features can definitely be classified in the "how long can we wait for this?" category 😉&lt;/li&gt;
&lt;li&gt;The remaining things are less exciting for me, solely because I don't have clients/projects where I could apply them 🙁 Which by no means diminishes their importance. They're created to facilitate building or increase the security of solutions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To be fair and not just paint a rosy picture, there was one thing in the [secret] service that I asked about and received an honest answer that they're aware of the need, but won't do it until 2025 because [secret]. That's a shame.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The level of openness of AWS employees towards Heroes elevated this Summit to levels previously unimaginable to me.&lt;/strong&gt; Access to information covered by NDAs allowed for free communication both ways. &lt;strong&gt;This kind of relationship with &lt;em&gt;service teams&lt;/em&gt; is the greatest value of being an AWS Hero&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Now I just need to find interesting projects where I can use this newly acquired knowledge 😉&lt;/p&gt;

&lt;h3&gt;
  
  
  The Summit is not just lectures
&lt;/h3&gt;

&lt;p&gt;The AWS Heroes Summit was attended by &lt;strong&gt;178 Heroes from 46 countries&lt;/strong&gt;. As of July 2024, there are 260 Heroes worldwide in total across 56 countries. Never before in the ten-year history of this program have so many of us been in one place.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvf1q6luft91d1c83m12j.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvf1q6luft91d1c83m12j.jpeg" alt="All Heroes" width="800" height="1066"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm the one in the Lambda / Half-life t-shirt 😃&lt;/p&gt;

&lt;p&gt;In the first row in the middle stands &lt;strong&gt;Jeff Barr&lt;/strong&gt;. He opened this mini-conference with an interesting keynote on the history and future of AWS.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuitda2isu2t8jvutq5yt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuitda2isu2t8jvutq5yt.jpg" alt="Matt" width="800" height="1331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Speaking of &lt;em&gt;celebrities&lt;/em&gt;, the big surprise on the second day was a visit from &lt;strong&gt;Matt Garman, the new CEO of AWS&lt;/strong&gt;. Interestingly, he didn't come to his keynote to &lt;em&gt;dazzle&lt;/em&gt; us with a marketing presentation 🙂, but greeted us, said a few words, and then announced he would start answering questions from the audience.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Respect!&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Heroes quickly grabbed the microphones, and Matt answered all questions, including the &lt;em&gt;uncomfortable&lt;/em&gt; ones. As a person with a huge technical background, it was easy for him to win over our tech crowd.&lt;/p&gt;

&lt;h2&gt;
  
  
  Celebrating together
&lt;/h2&gt;

&lt;p&gt;The Summit is a great opportunity for networking, as it doesn't have the crazy pace of re:Invent and is much more intimate. Every day we spent time together from breakfast until evening. I had the opportunity to deepen relationships with people I already knew and make new friends.&lt;/p&gt;

&lt;p&gt;On the second day, during the afternoon networking session, we celebrated a special occasion – the tenth birthday of the AWS Hero program and the 10th anniversary of AWS Lambda. These beautiful cakes were prepared for us to mark the occasion. 🍰&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F347lnz746z8sty6sxia2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F347lnz746z8sty6sxia2.png" alt="Cakes" width="780" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Polish 🇵🇱 representation at the Summit was very strong. Looking from the top left: Daniel Aniszkiewicz, Paweł Zubkiewicz, Łukasz Dorosz, Tomek Ptak, Karolina Boboli, Jarek Zieliński, Rafał Mituła, Tomek Dudek, Dominik Grzywaczewski, and Maciek Lelusz.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faeqrwb6hl31hqw6lntxo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faeqrwb6hl31hqw6lntxo.jpg" alt="Polish Heroes" width="800" height="582"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  After such a wonderful week, I can only thank the organizers, wish for another meeting of everyone in Las Vegas, and say &lt;strong&gt;&lt;em&gt;Go build!&lt;/em&gt;&lt;/strong&gt;
&lt;/h4&gt;

</description>
    </item>
    <item>
      <title>Year in review, 2023</title>
      <dc:creator>Pawel Zubkiewicz</dc:creator>
      <pubDate>Fri, 29 Dec 2023 10:05:23 +0000</pubDate>
      <link>https://forem.com/aws-heroes/year-in-review-2023-gij</link>
      <guid>https://forem.com/aws-heroes/year-in-review-2023-gij</guid>
      <description>&lt;p&gt;Following the tradition I have maintained since last year, the time has come to summarize the past twelve months. Although this article is publicly available, I wrote it primarily for myself, treating it as a personal retrospection and creating a lasting record of events, challenges, and moments of joy that shaped the last year.&lt;/p&gt;

&lt;p&gt;This text is not meant to be a self-congratulatory enumeration of achievements or a vain celebration of success, but rather a sincere look back, like a page from my diary, preserving memories and experiences from 2023.&lt;/p&gt;

&lt;p&gt;As before, I have divided the summary into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Career&lt;/li&gt;
&lt;li&gt;Failures&lt;/li&gt;
&lt;li&gt;Appearances and Publications&lt;/li&gt;
&lt;li&gt;Travels&lt;/li&gt;
&lt;li&gt;Concerts&lt;/li&gt;
&lt;li&gt;Books&lt;/li&gt;
&lt;li&gt;Other&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Career
&lt;/h2&gt;

&lt;p&gt;Here, there are practically no changes; I still collaborate with TT PSC as an AWS Architect, and as an independent consultant continue to develop services in the area of AWS cost optimization.&lt;/p&gt;

&lt;h3&gt;
  
  
  Successes
&lt;/h3&gt;

&lt;p&gt;I can count as my biggest successes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Creating from scratch and conducting &lt;strong&gt;&lt;em&gt;FinOps Training&lt;/em&gt;&lt;/strong&gt; for companies.&lt;/li&gt;
&lt;li&gt;Conducting several successful &lt;strong&gt;AWS Cost Audits&lt;/strong&gt; (&lt;em&gt;savings up to 44%&lt;/em&gt;) - I can't boast about most of them due to contract clauses, but I have one client who publicly described our cooperation - for which I am very grateful 😃&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/posts/blazejabel_aws-savings-cloud-activity-7063801009910743040-1uU-/"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuvh5cuo4e2gewzu4ez48.png" alt="Landinigi review" width="600" height="304"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Conducting cost optimization after a &lt;em&gt;Cost Audit&lt;/em&gt; that brought &lt;strong&gt;annual savings of over a million dollars&lt;/strong&gt;, specifically &lt;a href="https://www.linkedin.com/pulse/million-dollar-aws-savings-case-study-ebs-snapshot-pawe%C5%82-zubkiewicz/"&gt;1,319,110 USD&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Releasing as many as &lt;strong&gt;15&lt;/strong&gt; new versions of the &lt;a href="https://cloudpouch.dev/"&gt;CloudPouch&lt;/a&gt; application. Expanding &lt;em&gt;Cost insights&lt;/em&gt; functionality to include more AWS services: EC2, Load Balancers, DocumentDB, Glue Crawlers, and Jobs.&lt;/li&gt;
&lt;li&gt;Co-organizing the &lt;a href="https://www.meetup.com/pl-PL/aws-ug-wroclaw/"&gt;AWS User Group Wrocław&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Failures
&lt;/h2&gt;

&lt;p&gt;Actually, I could almost copy and paste those from last year.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Poor adoption of &lt;a href="https://cloudpouch.dev/"&gt;CloudPouch&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Small number of clients for &lt;em&gt;AWS Cost Audit&lt;/em&gt; service&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;It would seem that in current times, savings are a priority, and anything that allows to significantly reduce unnecessary IT costs should sell like hot cakes, but it's not the case.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Faithful readers of the Serverless Poland Newsletter and blog have surely noticed that I publish content much less frequently. Lack of time is one thing, but also writing the newsletter and articles regularly brought me less joy, so I did it less often.&lt;/li&gt;
&lt;li&gt;Not utilizing purchased training and access to closed communities.&lt;/li&gt;
&lt;li&gt;I didn't get around to creating a page advertising the &lt;strong&gt;&lt;em&gt;FinOps Training&lt;/em&gt;&lt;/strong&gt; - there's no information about it on the internet.&lt;/li&gt;
&lt;li&gt;Lack of significant engagement in &lt;a href="https://www.meetup.com/pl-PL/serverless-wroclaw/"&gt;Serverless Wrocław Meetup&lt;/a&gt; (we only organized 3 meetings)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Appearances and Publications
&lt;/h2&gt;

&lt;p&gt;The year in a nutshell:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Automatic testing of serverless applications&lt;/em&gt; - presentation at Serverless Wrocław (March 9, 2023)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;FinOps 4 Developers&lt;/em&gt; - presentation at the 4Developers conference in Warsaw (April 18, 2023)&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.youtube.com/watch?v=R4C0es_O8ao"&gt;&lt;em&gt;Multicloud: is it worth floating in many clouds?&lt;/em&gt;&lt;/a&gt; - podcast with Maciej Lelusz (April 19, 2023)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;The musty world of on-prem in AWS&lt;/em&gt; - with Maciej Lelusz - presentation at AWS User Group Wrocław (May 8, 2023)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;How much code in the code&lt;/em&gt; - with Przemek Malak - presentation at &lt;a href="https://awscommunity.pl/"&gt;AWS Community Day Warsaw 2023&lt;/a&gt; (June 1, 2023)&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;AWS re:Invent re:cap&lt;/em&gt; - panel discussion at AWS User Group Wrocław (December 11, 2023)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/aws-builders/mini-review-of-the-ultra-wide-samsung-ls49a950uiuxen-monitor-a5"&gt;Mini review of the ultra-wide Samsung LS49A950UIUXEN monitor&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/aws-heroes/how-to-prepare-for-reinvent-in-las-vegas-4hj1"&gt;How to prepare for a trip to re:Invent in Las Vegas? ✈️&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/pulse/million-dollar-aws-savings-case-study-ebs-snapshot-pawe%C5%82-zubkiewicz/"&gt;A Million-Dollar AWS Savings: A Case Study on EBS to Snapshot Conversion&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Also, let's not forget about (almost) regularly sending, the largest in Poland, &lt;a href="https://12.serverlesspolska.pl/"&gt;newsletter&lt;/a&gt; dedicated to AWS and serverless.&lt;/p&gt;

&lt;h2&gt;
  
  
  Travels
&lt;/h2&gt;

&lt;p&gt;Travels are not just memories, but also a window to the world that becomes more valuable with each passing year. Together with my wife, every few years we immortalize our adventures in photo books, which I highly recommend to every travel enthusiast, as photos are perceived differently in physical form.&lt;/p&gt;

&lt;p&gt;However, it's also nice to do an annual online summary, which can inspire others to pack their backpack and set off on a journey.&lt;/p&gt;

&lt;p&gt;In 2023, the travel history is as follows:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We started the year with a bang, heading to colorful &lt;strong&gt;Mexico&lt;/strong&gt; and &lt;strong&gt;Belize&lt;/strong&gt; in January. A great trip, beautiful landscapes, friendly people, and fantastic food 😃&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuqv75joevmcmntz4uz9p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuqv75joevmcmntz4uz9p.png" alt="Belize" width="780" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F32uw2ncce8a7v5zbqf25.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F32uw2ncce8a7v5zbqf25.png" alt="Mexico" width="780" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the spring (April), we went to the Balkans. Traveling by car through &lt;strong&gt;Montenegro&lt;/strong&gt;, &lt;strong&gt;Bosnia and Herzegovina&lt;/strong&gt;, and &lt;strong&gt;Croatia&lt;/strong&gt; was super interesting and allowed me to get to know this part of Europe better. And of course, Dubrovnik as the location of the &lt;em&gt;Game of Thrones&lt;/em&gt; series was doubly interesting.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdt9tyba39tagfmfya96h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdt9tyba39tagfmfya96h.png" alt="Balkans" width="780" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mountain bike camp in Bielsko-Biała, June.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F18dt0lhjnv8vnt8nk9o7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F18dt0lhjnv8vnt8nk9o7.png" alt="Bielsko-Biała, Poland" width="780" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In July, we celebrated my birthday in &lt;strong&gt;Italy&lt;/strong&gt;. The trip, whose climax was motorboating on the Mediterranean Sea, was wonderful. On land, we discovered the culinary treasures of Puglia and spent whole days wandering through the narrow streets of charming seaside towns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffzwbp7xl1zkn4pytzrz2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffzwbp7xl1zkn4pytzrz2.png" alt="Italy" width="780" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The dream trip of my wife, who has wanted to see the world of &lt;em&gt;Anne of Green Gables&lt;/em&gt; live since childhood. We spent two weeks in &lt;strong&gt;Canada&lt;/strong&gt;, visiting Montreal, Toronto, Niagara Falls, and Prince Edward Island.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6qdgboueivd7pwfow6py.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6qdgboueivd7pwfow6py.png" alt="Canada" width="780" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the autumn, another dream of my wife led us to Africa for a safari. Masai Mara National Park in &lt;strong&gt;Kenya&lt;/strong&gt; and Serengeti and Ngorongoro (extinct volcano) in &lt;strong&gt;Tanzania&lt;/strong&gt; were filled with amazing views and encounters with wild animals.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F06bjq4zwi6xmd9gq5u3s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F06bjq4zwi6xmd9gq5u3s.png" alt="Safari" width="780" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Traditionally, my year of travel ends with a trip to &lt;strong&gt;Las Vegas&lt;/strong&gt; for re:Invent. The best cloud event in the world!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fahbmbep5on0uhgoly00b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fahbmbep5on0uhgoly00b.png" alt="Las Vegas" width="780" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To sum up, 2023 was a year of discovering &lt;strong&gt;as many as eight new countries&lt;/strong&gt;, bringing me closer to the magic number of 50 visited countries.&lt;/p&gt;

&lt;h2&gt;
  
  
  Concerts
&lt;/h2&gt;

&lt;p&gt;Last year I only mentioned concerts. Reflecting on them made me realize how much I enjoy them, so I decided to include a list of concerts in a separate section. Each of them brought me a lot of joy and I wouldn't want these precious memories to fade over time.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Elton John - May - Berlin&lt;/li&gt;
&lt;li&gt;Pantera - June - Łódź&lt;/li&gt;
&lt;li&gt;Metallica and Pantera - August - Montreal&lt;/li&gt;
&lt;li&gt;Christmas Jazz - December - Wrocław&lt;/li&gt;
&lt;li&gt;Bryan Adams - December - Gliwice&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Books
&lt;/h2&gt;

&lt;p&gt;I'm still not a bookworm and I prefer &lt;em&gt;doing&lt;/em&gt; over reading. However, I managed to get my hands on a few things and even read and listened to a few. Although, to be honest, I buy more books than I read - which is obviously a problem, as the pile of shame 💩 is growing.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.amazon.com/Almanack-Naval-Ravikant-Wealth-Happiness/dp/1544514220/"&gt;The Almanack of Naval Ravikant&lt;/a&gt; is not only a collection of business advice but also deep reflections on the meaning of life. In the book, you'll find an abundance of wisdom and intriguing observations from Naval Ravikant - an American entrepreneur, engineer, and investor. This book not only inspires but also provokes one's own thoughts.
The history of its creation, which I discovered on &lt;em&gt;Visualize Value&lt;/em&gt;, is also interesting. Jack Butcher presents its author as an example of a &lt;em&gt;permissionless apprentice&lt;/em&gt;. The book was compiled by Eric Jorgenson, compiling content from tweets, podcasts, and interviews with Ravikant. The purpose of this publication is to make Ravikant's philosophy and wisdom available to a wider audience, touching on topics such as happiness, wealth, and personal development.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.amazon.com/Decoded-Science-Behind-Why-Buy-dp-1119673089/dp/1119673089/ref=dp_ob_title_bk"&gt;Decoded: The Science Behind Why We Buy&lt;/a&gt; by Phil P. Barden, released in 2022, is a fascinating exploration of the mechanisms governing our purchasing decisions. The book, purchased for the optimization of the &lt;a href="https://cloudpouch.dev/"&gt;CloudPouch&lt;/a&gt; sales page, turned out to be an invaluable source of knowledge in a much broader sense. Barden takes us on a journey through the nooks and crannies of the human mind to discover what drives us to buy. If I were Rafał Mazur, I would probably keep this title to myself, as it's material that, when used appropriately, can give an incredible advantage 😉&lt;/li&gt;
&lt;li&gt;Since I've already mentioned this man, &lt;a href="https://lubimyczytac.pl/ksiazka/4923273/zostan-drapieznikiem"&gt;Become a Predator&lt;/a&gt; - Rafał Mazur, Marcin Osman.&lt;/li&gt;
&lt;li&gt;After two, maybe three years, I finally finished the audiobook of &lt;a href="https://www.amazon.com/Atlas-Shrugged-Ayn-Rand-ebook/dp/B003V8B5XO/"&gt;Atlas Shrugged&lt;/a&gt;. While Ayn Rand's message is close to me, oh my God, the length is exaggerated!&lt;/li&gt;
&lt;li&gt;Before the trip to Africa, I chose to read &lt;a href="https://www.amazon.com/Factfulness-Reasons-World-Things-Better-ebook/dp/B0756J1LLV/"&gt;Factfulness&lt;/a&gt; by Hans Rosling, as it offers a novel perspective on reality, breaking negative stereotypes and showing how progress changes the world for the better. It's good to read about positive changes, especially when we are bombarded with negative news daily, such as those about wars.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.amazon.com/Be-Obsessed-Average-Grant-Cardone-ebook/dp/B016VRFTR4/"&gt;Be Obsessed or Be Average&lt;/a&gt; by Grant Cardone - I read it for the second time. After a few years, equipped with new knowledge, I perceive it much better! The first time, Grant seemed like a charlatan. I don't see him that way anymore. Now I see many mechanisms and principles between the lines 🙂&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.amazon.com/Blood-Elves-Witcher-Book-1-ebook/dp/B00276HAEY/"&gt;Blood of Elves&lt;/a&gt; - Andrzej Sapkowski - to remind myself and compare with the next season of the Witcher series on Netflix.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And two classic titles on fascinating &lt;em&gt;behavioral economics&lt;/em&gt;, which intrigued me a lot this year:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.amazon.com/Predictably-Irrational-Revised-Expanded-Decisions-ebook/dp/B002C949KE/"&gt;Predictably Irrational: The Hidden Forces That Shape Our Decisions&lt;/a&gt; - Dan Ariely&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.amazon.com/Thinking-Fast-Slow-Daniel-Kahneman-ebook/dp/B00555X8OA/"&gt;Thinking, Fast and Slow&lt;/a&gt; - Daniel Kahneman&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Other
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mastermind Group&lt;/strong&gt; - more in &lt;a href="https://dev.to/aws-heroes/year-in-review-2022-1edk"&gt;last year's post&lt;/a&gt; - it's still active, we manage to meet almost regularly, and what can I say, I really grew fond of these guys!&lt;/li&gt;
&lt;li&gt;In 2022 in this section, I presented a few things I bought. This year, however, I will focus exclusively on &lt;strong&gt;recommending an ultra-wide screen monitor&lt;/strong&gt;. This equipment significantly changes the way of working, elevating it to a higher level. You can find a detailed review of my monitor at &lt;a href="https://dev.to/aws-builders/mini-review-of-the-ultra-wide-samsung-ls49a950uiuxen-monitor-a5"&gt;this link&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;It's my second year of &lt;strong&gt;learning Italian&lt;/strong&gt; 🇮🇹. It brings me great joy, as I treat it as a hobby, but I am still at the stage of realizing how little I know ;-)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F13f28fh9nsbr5m71ymqi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F13f28fh9nsbr5m71ymqi.png" alt="Riding in the mountains" width="780" height="891"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Since March, I have started &lt;strong&gt;amateur mountain biking training&lt;/strong&gt; under the guidance of an &lt;a href="https://www.skillschoolmtb.com/"&gt;experienced trainer&lt;/a&gt;. The goal is to improve my skills in navigating mountain trails. Regular exercises and refining my riding technique bring me immense satisfaction. At the same time, overcoming fear, especially before jumps, is a completely new challenge for me. I believe that these aspects together toughen the spirit and strengthen the willpower. An additional benefit is the fantastic group of people I train with. If you are from Wrocław and are keen on enduro, I warmly invite you to join our team!&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;It was a beautiful, successful year.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Thank you for your attention, and I hope you took something away from this post. Let me know if it inspired you to do anything.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I wish you a wonderful 2024!&lt;br&gt;
Paweł Zubkiewicz&lt;/em&gt;&lt;/p&gt;

</description>
      <category>review</category>
      <category>travel</category>
      <category>recap</category>
      <category>career</category>
    </item>
    <item>
      <title>How to prepare for re:Invent in Las Vegas?</title>
      <dc:creator>Pawel Zubkiewicz</dc:creator>
      <pubDate>Wed, 18 Oct 2023 08:43:48 +0000</pubDate>
      <link>https://forem.com/aws-heroes/how-to-prepare-for-reinvent-in-las-vegas-4hj1</link>
      <guid>https://forem.com/aws-heroes/how-to-prepare-for-reinvent-in-las-vegas-4hj1</guid>
      <description>&lt;p&gt;[Last update: Nov 2025]&lt;/p&gt;

&lt;p&gt;First of all, congratulations on attending re:Invent! It's an unforgettable experience, and you're sure to be amazed. I'm still excited at the thought of going, even though this will be my third time. I can't wait to be in Las Vegas again!&lt;br&gt;
re:Invent is a fantastic four-day conference that dazzles with its scale and can be overwhelming at times. That's why it's worth being well-prepared.&lt;/p&gt;

&lt;p&gt;I've gathered several tips for you. Some of them are obvious and widely known for years, but even if you've heard about them, read all the way through, as some are unique and &lt;em&gt;based on my own experiences&lt;/em&gt;. 🙂&lt;/p&gt;

&lt;h2&gt;
  
  
  00. Travel insurance
&lt;/h2&gt;

&lt;p&gt;This is obvious, but worth mentioning. You need to insure yourself against accidents, as healthcare in the US is paid for and very expensive.&lt;/p&gt;

&lt;h2&gt;
  
  
  01. Footwear
&lt;/h2&gt;

&lt;p&gt;Everyone has been talking about this for a long time, and it's the number one advice to follow. Twenty thousand steps a day at re:Invent is not a big deal. Every day, for four days. That's why &lt;strong&gt;take comfortable shoes&lt;/strong&gt; for walking. This time, I'm taking two pairs. I recommend lightweight, breathable running shoes for walking on pavement. It is also worth taking plasters for grazes with you.&lt;/p&gt;

&lt;h2&gt;
  
  
  02. Dry Air Essentials (Skincare)
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Las Vegas is in the desert.&lt;br&gt;&lt;br&gt;
It's a known fact, but most of us don't deal with such a climate on a daily basis. Especially in the winter. So, it's worth stocking up on supplies to help us function in such conditions.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;Creams (including for the face)&lt;/li&gt;
&lt;li&gt;Lip balm&lt;/li&gt;
&lt;li&gt;Eye drops / artificial tears&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;for me, this is a basic kit. These things can also come in handy on long flights, so it's worth packing them in your carry-on bag.&lt;/p&gt;

&lt;p&gt;I've also heard that people bring air humidifiers with them or request a hotel room equipped with one to counteract dry air.&lt;/p&gt;

&lt;h2&gt;
  
  
  03. Throat Soothers (+medications)
&lt;/h2&gt;

&lt;p&gt;At re:Invent, you'll meet thousands of people, and you'll probably be talking to hundreds. Excessive talking can cause a sore throat for me. To tackle it, it's a good idea to bring something for your throat. Strepsils candies work for me.&lt;br&gt;
Additionally, when traveling, it's always a good idea to remember to bring tested medicines, for example, for colds, that we trust. This way, in case of sickness, there's no need to search for a CVS and figure out which American medications are equivalent to those you would buy in your own country.&lt;/p&gt;

&lt;h2&gt;
  
  
  04. Attire for re:Play
&lt;/h2&gt;

&lt;p&gt;The Thursday party takes place outdoors and in huge tents. Last year, it was quite windy and rather cold. It's a good idea to have a jacket and warm shoes with you.&lt;br&gt;
That's all that comes to mind regarding the weather and climate in Las Vegas.&lt;/p&gt;

&lt;h2&gt;
  
  
  05. US Power Outlets / Adapter / Extension Cord
&lt;/h2&gt;

&lt;p&gt;This is rather obvious, but it's worth a reminder. The USA has different electrical outlets, so you'll need an adapter. Usually, we only use chargers for phones and laptops, so there's no need for a converter.&lt;/p&gt;

&lt;p&gt;Additionally, whenever I have space in my luggage, I bring a regular extension cord. Firstly, in combination with one adapter, it gives me Polish sockets (I'm from Poland). Secondly, if there's no socket near the nightstand in the room, thanks to the extension cord, I'll always have my phone charging by the bed.&lt;/p&gt;

&lt;p&gt;There's another &lt;strong&gt;life-hack&lt;/strong&gt; regarding sockets. If you use Apple products, you can buy a different end for your charger. I did this and bought adapters for American outlets (on the left in the picture).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fufu250w7jr7xnzrb489f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fufu250w7jr7xnzrb489f.png" alt="Different socket ends (adapters) for Apple charger" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can also buy a universal charger for phones and laptops with adapters, e.g., Baseus GaN5 65W – I've had one for a few years now, and it's awesome! It has two charging ports and allows you to quickly charge your phone (if yours is compatible with quick charging) and can easily replace the power adapter for a MacBook Pro with an M processor. And it has three plugs/adapters: for Europe/Poland, the US, and the UK and Asia (I recently used it in Hong Kong, for example). Overall, I recommend this device 🙂&lt;/p&gt;

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

&lt;h2&gt;
  
  
  06. USB-A Cables
&lt;/h2&gt;

&lt;p&gt;Sometimes, the sockets by the bed in hotels have USB outputs. They're always USB-A. The same goes for multimedia panels on the plane. So even if you've been using newer USB-C for a long time, it's worth having a USB-A to USB-C (or Lightning if you use an iPhone) cable to charge your phone.&lt;/p&gt;

&lt;h2&gt;
  
  
  07. Power Bank
&lt;/h2&gt;

&lt;p&gt;I take a lot of slide photos during presentations, so my phone quickly runs out of battery. That's why I bring my trusted power bank with me. There are charging stations at the conference, and companies will surely be giving away power banks as goodies, but in my opinion, it's better to have your own.&lt;/p&gt;

&lt;h2&gt;
  
  
  08. Mobile Internet in the USA
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Wi-Fi is available everywhere at re:Invent&lt;/strong&gt;. There can be minor issues with it, but personally, I think you can survive without mobile internet on a GSM network.&lt;/p&gt;

&lt;p&gt;But why bother, right? 😉&lt;/p&gt;

&lt;p&gt;I've been using eSIM cards for many international trips. They only work with iPhones and Samsungs (the more expensive ones). It's a pure software solution, so you don't need to buy a physical SIM card, e.g., at the airport. And you don't need a phone that supports dual-sim.&lt;/p&gt;

&lt;p&gt;I highly recommend the &lt;a href="https://ref.airalo.com/zPXS" rel="noopener noreferrer"&gt;Airalo&lt;/a&gt; app/service. I've used it in the USA, Canada, Montenegro, Mexico, and Belize. By creating an account through &lt;a href="https://ref.airalo.com/zPXS" rel="noopener noreferrer"&gt;this link&lt;/a&gt;, you and I will each receive $3 to use for purchasing eSIM cards.&lt;/p&gt;

&lt;p&gt;A few days before departure, I buy an eSIM and set it up on my phone while still at home. After landing in the destination country, the eSIM connects to its network and only becomes active from that moment on. Sometimes, the first network login takes up to 20 minutes, but I usually have internet even before I leave the plane.&lt;/p&gt;

&lt;h2&gt;
  
  
  09. Leave Empty Space in Your Suitcase
&lt;/h2&gt;

&lt;p&gt;On the last re:Invent, I flew with a half-empty suitcase. I collected so much &lt;strong&gt;swag&lt;/strong&gt; that I could barely close it. If you like cheap t-shirts, socks, and stickers, leave some free space in your luggage to bring back home all those things. 🎁&lt;/p&gt;

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

&lt;h2&gt;
  
  
  10. Online Hotel Check-In
&lt;/h2&gt;

&lt;p&gt;If possible, do an online check-in at your hotel. It significantly reduces your time at the reception.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. Unnecessary Items
&lt;/h2&gt;

&lt;p&gt;Not everything you need to take with you, some things you will receive on-site.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Water bottle&lt;/em&gt;. Each participant receives one in the standard gadget pack, so I think it doesn't make much sense to bring one.&lt;/li&gt;
&lt;li&gt;AWS has also been giving &lt;em&gt;hoodies&lt;/em&gt; to everyone for years, so you can take one less from home.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  What to Do in Las Vegas After Hours?
&lt;/h1&gt;

&lt;p&gt;re:Invent is a cloud celebration, but it's also worth coming down to earth and exploring a bit. Below are a few suggestions from me.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. Grand Canyon and Hoover Dam
&lt;/h2&gt;

&lt;p&gt;When visiting Las Vegas, it's worth taking the time to visit the Grand Canyon and Hoover Dam, which are unforgettable attractions near the city.&lt;/p&gt;

&lt;p&gt;The Grand Canyon is one of the most impressive natural wonders in the world, captivating with its immense depth and majestic rock formations. It's a place that provides unforgettable experiences associated with nature, tranquility, and peace, serving as a getaway from the hustle and bustle of Las Vegas.&lt;/p&gt;

&lt;p&gt;The Hoover Dam, located on the Colorado River, is also an impressive structure, not only an important part of the infrastructure but also a tourist attraction. A walk across the bridge towering over the dam allows you to admire beautiful views of the Colorado River and the surrounding landscapes. Furthermore, the dam is a place steeped in history and engineering, making a visit there an educational experience.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;The most impressive experience is admiring the Grand Canyon and Hoover Dam from a helicopter&lt;/strong&gt;. It's a unique and unforgettable experience that adds even more majesty to these already impressive places. A helicopter ride over the Grand Canyon allows you to admire stunning views from an aerial perspective, fully showcasing the monumentality of the canyon and its diverse rock formations. The view of the surrounding landscapes and the impressive work of nature is breathtaking. Similarly, a helicopter ride over the Hoover Dam offers an extraordinary opportunity to see this monumental structure.&lt;/p&gt;

&lt;p&gt;I went on the tour in 2019. I bought the ticket at one of the kiosks on The Strip. Its price was rather low for such a magnificent trip. I highly recommend it, as it is one of the best places in the world for helicopter tours.&lt;/p&gt;

&lt;h2&gt;
  
  
  13. The Strip
&lt;/h2&gt;

&lt;p&gt;A walk along "The Strip," the main street in Las Vegas, is an unforgettable experience that allows you to feel the pulse of the sin city, gambling, and entertainment. Majestic hotels and casinos showcase their impressive facades, inviting you to explore interiors filled with luxury and opulence. Strolling along this iconic street, you can admire fascinating light shows and fountains that create spectacular displays, especially after sunset.&lt;/p&gt;

&lt;h2&gt;
  
  
  14. The Sphere
&lt;/h2&gt;

&lt;p&gt;This is the newest attraction in Las Vegas. The world's largest dome that also serves as a huge display from the inside and outside. It is simply an entertainment hall that, thanks to its multimedia structure, can provide unforgettable experiences.&lt;/p&gt;

&lt;h2&gt;
  
  
  15. Old Las Vegas (Fremont Street Experience)
&lt;/h2&gt;

&lt;p&gt;It's not the most fantastic place in the world, but it's worth visiting to form your opinion. It was a bit tacky for me, but I don't regret going there.&lt;/p&gt;

&lt;h2&gt;
  
  
  16. Accompanying Events
&lt;/h2&gt;

&lt;p&gt;During re:Invent, many accompanying events sponsored by vendors take place. It's usually a good idea for a free drink and snack. Sometimes it's a good opportunity to personally meet someone we know from the internet. That's how I met the founder of A Cloud Guru in 2019 - a cool thing because I started learning about the cloud from his courses a long time ago.&lt;/p&gt;

&lt;p&gt;You can find the list of events at &lt;a href="https://conferenceparties.com/reinvent2025/" rel="noopener noreferrer"&gt;https://conferenceparties.com/reinvent2025/&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Summary
&lt;/h1&gt;

&lt;p&gt;Those are all the good tips I have for you. I hope they prove helpful and assist you in having the best week in Las Vegas! 😃&lt;/p&gt;

&lt;p&gt;If you think something is missing from this list, please add a comment so that others can benefit from your knowledge and experiences.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>reinvent</category>
      <category>conference</category>
      <category>lasvegas</category>
    </item>
    <item>
      <title>Mini-review of the ultra-wide Samsung LS49A950UIUXEN monitor</title>
      <dc:creator>Pawel Zubkiewicz</dc:creator>
      <pubDate>Fri, 14 Jul 2023 09:26:35 +0000</pubDate>
      <link>https://forem.com/aws-builders/mini-review-of-the-ultra-wide-samsung-ls49a950uiuxen-monitor-a5</link>
      <guid>https://forem.com/aws-builders/mini-review-of-the-ultra-wide-samsung-ls49a950uiuxen-monitor-a5</guid>
      <description>&lt;p&gt;Working daily with the cloud, we are usually separated from hardware by many layers of abstraction and dozens of automations. Just look at the EC2 instance family.&lt;/p&gt;

&lt;p&gt;You might even develop a dismissive attitude towards hardware. Assuming that we meet the requirements for computing power and memory, every machine will work well. The rest is tuning and cost optimization. We practically never consider choosing from a full range of instance types consisting of hundreds of items. As a result, hardware loses its significance (commodification).&lt;/p&gt;

&lt;p&gt;However, there is another category of hardware that we should pay much more attention to. I am talking about devices we use personally, not remotely, because they affect our health and well-being.&lt;/p&gt;

&lt;p&gt;While working in an office, our choice is limited to what the employer provides. But in remote work, we are only limited by budget (or wife 😉).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Today I will present my journey to decide on purchasing a new monitor and describe what it's like to work on it after six weeks.&lt;br&gt;&lt;br&gt;
&lt;b&gt;Are you perhaps thinking about changing your monitor but have been putting it off? In that case, I hope this article will encourage you to consider changes at your own desk.&lt;/b&gt;&lt;br&gt;&lt;br&gt;
I unnecessarily lost a few months to deliberations and pondering the topic. If someone had advised me at the beginning, offered knowledge that I am about to pass on to you, I would have saved time and enjoyed a better workplace much earlier.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Choice - the path leading to the goal
&lt;/h2&gt;

&lt;p&gt;The impact of a display on the eyes is obvious. This was the main driver for me to change.&lt;/p&gt;

&lt;p&gt;I had two very old Full HD LG monitors, which did not have any solutions to protect my eyesight. I had them connected via a docking station and KVM switch to a PC and a work MacBook.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QtfduYGg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8w8mjsqsmquqyc23nks5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QtfduYGg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8w8mjsqsmquqyc23nks5.png" alt="Image description" width="780" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is how they looked a few years ago. All in all, they were good to work with. Unfortunately, the autumn-winter period, when dusk falls right after lunch, strongly affected the fatigue of my eyes.&lt;/p&gt;

&lt;p&gt;Around November or December, I started looking for new monitors.&lt;/p&gt;

&lt;p&gt;Since from my first job in 2006 I have always used two monitors, I still wanted to stay with this setup. The space I have allows for the installation of two twenty-seven-inch (27") monitors. That's what I started looking for.&lt;/p&gt;

&lt;p&gt;While it is currently difficult to find hardware without eye protection features (no flickering + blue light filtering), I had other &lt;strong&gt;requirements that posed a challenge&lt;/strong&gt;. I wanted to get rid of the tangle of cables under the desk along with additional devices (docking station and KVM switch).&lt;/p&gt;

&lt;p&gt;My requirement became &lt;em&gt;&lt;strong&gt;Daisy Chaining&lt;/strong&gt;&lt;/em&gt;, also known as MST, allowing two monitors to be serially connected together, so that only one cable needs to be run from the computer to the first monitor.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Yes, it definitely solved my first world problem: connecting a MacBook Pro with two UBS-C/Thunderbolt cables - was to become a thing of the past 😉&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Unfortunately, it soon turned out as follows (this is a story for at least two 🍻 beers, so I'll shorten it a lot):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apple does not support MST over USB-C&lt;/li&gt;
&lt;li&gt;Apple may support MST over Thunderbolt 3/4, but it is safest to have M2 chip hardware&lt;/li&gt;
&lt;li&gt;Monitors with Thunderbolt are at least 2 times more expensive than those with USB-C&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In general, dozens of hours spent looking for equipment resulted in finding a model that might work with a MacBook, supported &lt;em&gt;&lt;strong&gt;Daisy Chaining, and also had a built-in KVM switch&lt;/strong&gt;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;The price was only ~1000 USD. Per piece. (&lt;a href="https://www.amazon.com/BenQ-PD2725U-Thunderbolt-Mac-Ready-Accurate/dp/B0918QXTGN"&gt;BenQ PD2725U&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Unfortunately, someone figured out that when a monitor has Thunderbolt ports, it falls under the category of applications "&lt;em&gt;computer graphics&lt;/em&gt;" and such equipment should be priced accordingly.&lt;/p&gt;

&lt;p&gt;As you might guess, I don't care about the colors in VS Code and Chrome 😉 so I wasn't going to pay for parameters I didn't need.&lt;/p&gt;

&lt;p&gt;At that point, I returned to the idea of a single Ultra-wide monitor, which physically replaces two 27-inch monitors. I write "returned" because such a thought crossed my mind at the very beginning, but I quickly dismissed it. At that time, I believed that 49-inch monitors were a segment for gamers (crazy refresh rates, low input lag, etc.) - and again, I would be paying for something I wouldn't use.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;And here's another digression. It's us, programmers, who push this entire IT business forward, and yet there isn't even a segment of monitors for coding and the internet for us. And nobody will convince me that "office" is our segment because "office" is simply ordinary equipment without anything special for pro users like us.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The obvious advantage of a single monitor is the lack of the need for MST and Thunderbolt support. This significantly lowers the price and also positively impacts the minimalism of the final effect on the desk. That's why...&lt;/p&gt;

&lt;h2&gt;
  
  
  I started looking for a 49-inch Ultra-wide monitor.
&lt;/h2&gt;

&lt;p&gt;The choice isn't vast (at least in Poland), and from several models available on the market from different manufacturers, I quickly decided on Samsung.&lt;/p&gt;

&lt;p&gt;Wide, but not for gamers! Exactly what I needed 🎯&lt;/p&gt;

&lt;p&gt;The exact model is &lt;a href="https://www.samsung.com/pl/monitors/gaming/s95ua-49-inch-dqhd-curved-ls49a950uiuxen/?mc_cid=c85ac558a0&amp;amp;mc_eid=ed279eb1d0"&gt;LS49A950UIUXEN&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--feXc25fY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ycskx93ntrtug8pw8hb6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--feXc25fY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ycskx93ntrtug8pw8hb6.png" alt="Samsung marketing materials" width="711" height="351"&gt;&lt;/a&gt;Source: Manufacturer's materials, Samsung.&lt;/p&gt;

&lt;p&gt;I bought it for less than 1300 USD. That's half the price of two BenQ 27-inch monitors. 👍&lt;br&gt;
Unfortunately, it quickly turned out that I needed to buy a desk mount, as the Samsung stand takes up a ton of space. I chose the Ergotron HX Desk Monitor Arm for only 380 USD 😬.&lt;/p&gt;

&lt;p&gt;The monitor is 5K, meaning its resolution is 5120 by 1440 pixels, and the screen aspect ratio is 32:9.&lt;/p&gt;

&lt;h1&gt;
  
  
  Curved R1800 screen
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3Zg53GH---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a8c7kz3ukau1mpfsax7f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3Zg53GH---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a8c7kz3ukau1mpfsax7f.png" alt="Image description" width="634" height="182"&gt;&lt;/a&gt; Source: Manufacturer's materials, Samsung.&lt;/p&gt;

&lt;p&gt;Since my old monitors were also set at an angle, I essentially wanted a curved monitor. However, there are two types of them: R1800 and R1000. 'R' as in the radius of the circle of which the screen is a part. 1800 gives a lesser curvature, while 1000 gives a greater one.&lt;/p&gt;

&lt;h1&gt;
  
  
  First impression
&lt;/h1&gt;

&lt;p&gt;Very positive.&lt;/p&gt;

&lt;p&gt;Although I must admit, on such a wide monitor this curvature could be greater, so R = 1000 would also be suitable. This type dominates in monitors intended for gaming due to a greater immersion in the game world. Unfortunately, I didn't find any 49" monitor on display anywhere in my home town to sit in front of, so I bought it blindly.&lt;/p&gt;

&lt;p&gt;The transition from twice Full HD (1920 x 1080) to 5120 x 1440 pixels also did the job. The difference in the vertical is very noticeable for the better, although the physical dimension is the same as in the old equipment.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;monitor&lt;/strong&gt;, even with a new desk mount, &lt;strong&gt;protrudes much more from the wall than my old monitors&lt;/strong&gt;, thereby taking up space above the desk and shortening the distance to the screen. In the center it is 22 cm, and on the sides 32 cm from the wall.&lt;/p&gt;

&lt;p&gt;The last note is about the rear panel of the monitor and connecting cables - a real torment, they made it very inconvenient.&lt;/p&gt;

&lt;h1&gt;
  
  
  Current setup
&lt;/h1&gt;

&lt;p&gt;My &lt;strong&gt;Mac Book Pro is connected to the monitor with a single USB-C cable&lt;/strong&gt; (and it is charged from it). The old PC, on the other hand, is connected via two HDMI cables (in Picture-by-Picture monitor mode - for the PC it's like two physical 27" monitors). I got rid of the docking station and KVM switch under the desk (along with dozens of cables). &lt;strong&gt;It's now simpler and more minimalistic&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Unfortunately, the KVM switch built into the monitor only half works. That is, it only switches the image, but not everything that is plugged into the monitor via USB. In practice, this means that my Logitech mouse and keyboard must be switched separately between computers (each device has such a switch - the Easy Switch technology in Logitech Unifying Receiver).&lt;/p&gt;

&lt;p&gt;Perhaps I am too stupid to figure it out, and honestly, I didn't want to invest more time in it because I use the PC sporadically, and these three clicks don't annoy me (monitor, keyboard, and mouse). In summary, I have a lot of devices plugged into the monitor, and everything communicates with the laptop via a single USB-C cable along with the image - and that's a great thing.&lt;/p&gt;

&lt;h1&gt;
  
  
  Impressions after 6 weeks of use
&lt;/h1&gt;

&lt;p&gt;Not much to say - &lt;em&gt;&lt;strong&gt;it's awesome&lt;/strong&gt;&lt;/em&gt; and that's why I'm writing about it.&lt;/p&gt;

&lt;p&gt;Perhaps you are thinking about changing your monitor, but you have put it off until later? Or maybe you didn't even know that there are such ultra-wide ones? In that case, I hope this article will encourage you to consider upgrading your workspace. If someone had advised me earlier, I could have enjoyed better equipment for longer. I, personally, recommend it.&lt;/p&gt;

&lt;p&gt;For me, &lt;strong&gt;the biggest surprise is how big a difference the lack of bezels (frames) in the middle of the screen makes&lt;/strong&gt; compared to a setup of two monitors.&lt;/p&gt;

&lt;p&gt;For years I sat slightly crooked because my left monitor was the main one. Now I sit totally perpendicular and look straight ahead (area no. 2 in the picture).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The lack of a bezel in the middle enables better work&lt;/strong&gt;. For years, I worked in two work areas (right and left monitor). Now I work on three.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--GdvQAs-P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jwyvrb8u48xcd7xqng5q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--GdvQAs-P--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jwyvrb8u48xcd7xqng5q.png" alt="3 areas" width="750" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I have divided the screen into 3 areas, where the middle one is centrally located and is about 20% wider than the side ones. It works incredibly well!&lt;/strong&gt; The side areas are auxiliary, for example, email and company messenger. To define these working areas and manage windows, I use an application on MacOS called &lt;a href="https://rectangleapp.com/pro?mc_cid=c85ac558a0&amp;amp;mc_eid=ed279eb1d0"&gt;Rectangle Pro&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The comfort of work and the health benefits of sitting straight and looking straight are incomparably better than with two monitors. I know, I am very excited about it, but I still feel that I do not accurately convey how big a difference the lack of bezels makes!&lt;/p&gt;

&lt;p&gt;I must also add that before the change, I was very afraid of not having two monitors, because of how the fullscreen mode works on Mac. For those who don't know, I will just say that it creates a virtual desktop for each maximized window. This was a feature I used heavily with two monitors. On one, it only makes sense with some applications (for example, Miro looks awesome 😀👍, video editing or VS Code), but in most cases it is hopeless, for example, maximized Chrome, or YouTube leaves a lot of empty, unused space on the sides. Fortunately, the aforementioned screen areas work so well that I don't miss the Mac's virtual desktops at all!&lt;/p&gt;

&lt;h1&gt;
  
  
  Summary
&lt;/h1&gt;

&lt;p&gt;I am very pleased with the change, even though it is not perfect (lack of one-button computer switching). The quality of work has definitely improved, and importantly, I have taken care of my body (eyes and spine).&lt;/p&gt;

&lt;p&gt;Ultra-wide 49" monitors are still relatively rare equipment, so I hope this article will be helpful for you in making or not the purchase decision.&lt;/p&gt;

</description>
      <category>hardware</category>
    </item>
    <item>
      <title>Year in review, 2022</title>
      <dc:creator>Pawel Zubkiewicz</dc:creator>
      <pubDate>Sat, 31 Dec 2022 10:51:10 +0000</pubDate>
      <link>https://forem.com/aws-heroes/year-in-review-2022-1edk</link>
      <guid>https://forem.com/aws-heroes/year-in-review-2022-1edk</guid>
      <description>&lt;p&gt;Year 2022 was full of many events that I decided to gather in one place.&lt;/p&gt;

&lt;p&gt;I think this text will provide you with a lot of value, whether professionally or even travel-wise (inspiration for trips). After reading it, you will certainly get to know me better.&lt;/p&gt;

&lt;p&gt;However, I must admit that I am also writing this summary for myself, to possibly come back here in the future and reminisce.&lt;/p&gt;

&lt;p&gt;I divided the summary into:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Career&lt;/li&gt;
&lt;li&gt;Failures&lt;/li&gt;
&lt;li&gt;Presentations and publications&lt;/li&gt;
&lt;li&gt;Travels&lt;/li&gt;
&lt;li&gt;Books&lt;/li&gt;
&lt;li&gt;Other&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Career
&lt;/h2&gt;

&lt;p&gt;While working for TT PSC, after more than 3 years, I ended my project cooperation with the US client PTC and moved on to another project in the PMI organization as Master Solutions Architect. Such a bit of a promotion, and a bit of a change of environment, new challenges and other problems. Standard.&lt;/p&gt;

&lt;h3&gt;
  
  
  It was much more interesting on the private front
&lt;/h3&gt;

&lt;p&gt;In June, I responded to the Call for Papers for members of the AWS Community Builders program and sent my presentation proposals for the re:Invent 2022 conference. In mid-September, I received an extremely nice email:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Congratulations on becoming a re:Invent speaker!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The joy was endless 😀 It is an incredible honor because I was the first non-formally affiliated with AWS speaker from Poland at the re:Invent conference! It also meant that I would fly to Las Vegas, which was not so obvious before. At that time, I was only at re:Invent 2019 once, but I really wanted to be there again in 2022. Being chosen as a speaker meant a ticket to the conference, literally and figuratively 😉. Fortunately for me, &lt;a href="https://ttpsc.com/" rel="noopener noreferrer"&gt;TT PSC&lt;/a&gt; agreed to sponsor the trip. My goal and dream was now within reach.&lt;/p&gt;

&lt;p&gt;All I had to do was prepare the presentation. The deadline for submitting finished materials was set for October 17th. I remember well the last two weeks of sitting on the speech every day. Luckily, hard work paid off, and the presentation was completed on time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Dreams come true!
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Will you be our Hero?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I couldn't believe it when I saw this titled email in my inbox. Although I had been dreaming for a long time to be among the prestigious group of AWS Heroes, on that November evening I was completely surprised because I didn't think it would happen this year.&lt;/p&gt;

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

&lt;p&gt;On November 15, 2022, the information was officially announced, and &lt;strong&gt;I became the first Polish&lt;/strong&gt; &lt;a href="https://aws.amazon.com/developer/community/heroes/pawel-zubkiewicz/" rel="noopener noreferrer"&gt;AWS Serverless Hero&lt;/a&gt;. &lt;strong&gt;At the end of 2022, there were 253 AWS Heroes in total, and in the serverless category only 42.&lt;/strong&gt; This is a really small group and an incredible honor to be one of them.&lt;/p&gt;

&lt;h3&gt;
  
  
  re:Invent
&lt;/h3&gt;

&lt;p&gt;So, as a brand-new &lt;em&gt;hero&lt;/em&gt;, I went to Las Vegas and gave my presentation &lt;em&gt;COM314 Automated testing for serverless applications&lt;/em&gt;. I rehearsed the speech itself a dozen times while still in Poland and then in the hotel room to deliver it as well as I could. The work paid off.&lt;/p&gt;

&lt;p&gt;I remember that during the presentation, the connection to the display went down three times and ended up with me switching to a different laptop. However, these failures did not deter either me or the audience. &lt;strong&gt;97&lt;/strong&gt; people stayed until the very end, and then a large group of listeners besieged me with additional questions. Unfortunately, my speech was not recorded.&lt;/p&gt;

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

&lt;p&gt;Professionally, I ended the year in December by bringing &lt;a href="https://www.linkedin.com/search/results/content/?heroEntityKey=urn%3Ali%3Aautocomplete%3A62006023&amp;amp;keywords=awsugwro&amp;amp;origin=SWITCH_SEARCH_VERTICAL&amp;amp;position=0&amp;amp;searchId=20a7ae12-b5f9-41c8-a357-f1643fadea37&amp;amp;sid=%40.C" rel="noopener noreferrer"&gt;AWS User Group Wrocław&lt;/a&gt; back to life, along with a phenomenal group of friends. At our first meeting, we discussed the conference and the news announced at re:Invent.&lt;/p&gt;

&lt;h2&gt;
  
  
  Failures
&lt;/h2&gt;

&lt;p&gt;Successes do not necessarily mean the absence of failures. They are naturally incorporated into everything we do, so there is no point in hiding them.&lt;/p&gt;

&lt;p&gt;So, what sucked in 2022?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;broken ribs on a bike (if at least there was an impressive jump, unfortunately there wasn't 🤦🏻)&lt;/li&gt;
&lt;li&gt;poor adoption of &lt;a href="https://cloudpouch.dev/" rel="noopener noreferrer"&gt;CloudPouch&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;lack of customers for AWS cloud cost consulting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It might seem that in these times savings are a priority and everything that allows for significant reduction of unnecessary IT costs should sell like hotcakes (not to mention ecology). Nothing could be further from the truth. We devoted the last half year to the Polish market, and the results are far from satisfactory.&lt;/p&gt;

&lt;h2&gt;
  
  
  Presentations and publications
&lt;/h2&gt;

&lt;p&gt;Year in a Nutshell&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Article: &lt;a href="https://dev.to/aws-builders/aws-step-functions-refactor-to-native-integrations-with-aws-api-2028"&gt;AWS Step Functions - Refactor to native integrations with AWS API&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Presentation: conference 4Developers - April 5, 2022 - Cost optimization in the AWS cloud (in Polish)&lt;/li&gt;
&lt;li&gt;Article: &lt;a href="https://dev.to/aws-builders/4-ways-of-executing-lambda-function-via-http-endpoint-a-comparison-560b"&gt;4 ways of executing Lambda function via HTTP endpoint - a comparison&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Article: &lt;a href="https://dev.to/aws-builders/simple-serverless-scheduler-25c7"&gt;Simple Serverless Scheduler&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Presentation: conference Cloud Summit 2022 - May 19, 2022 - Cost optimization in the AWS cloud (in Polish)&lt;/li&gt;
&lt;li&gt;Presentation: conference AWS Community Day Warsaw 2022 - October 14, 2022 - Industrialization and other mechanisms of public cloud evolution (in Polish)&lt;/li&gt;
&lt;li&gt;Article: &lt;a href="https://dev.to/aws-builders/reduce-aws-cost-how-ive-saved-18890-monthly-on-ebs-drives-528a"&gt;Reduce AWS costs: How I've saved $18,890 monthly on EBS drives?&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Article: &lt;a href="https://dev.to/aws-builders/add-types-to-your-javascript-lambda-functions-3pgn"&gt;Add types to your JavaScript Lambda functions&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Article: Serverless pre:Invent announcements (in Polish)&lt;/li&gt;
&lt;li&gt;Presentation: conference AWS re:Invent - November 30, 2022 - COM314 Automated testing for serverless applications&lt;/li&gt;
&lt;li&gt;Resurrection and co-organization of the &lt;a href="https://www.meetup.com/pl-PL/aws-ug-wroclaw/" rel="noopener noreferrer"&gt;AWS User Group Wrocław&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Presentation: Lighting talk - December 12, 2022 - re:Invent from a participant's perspective&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It is also worth mentioning the (nearly) regular weekly dispatch of the largest AWS and serverless newsletter in Poland.&lt;/p&gt;

&lt;h2&gt;
  
  
  Travels
&lt;/h2&gt;

&lt;p&gt;The first year after the pandemic, in which covid restrictions disappeared completely, was very generous to me in terms of travel.&lt;/p&gt;

&lt;p&gt;It started with Portugal, specifically the beautiful, green, and mountainous Madeira in February.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqy6tyvqtl484huys4sfd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqy6tyvqtl484huys4sfd.png" alt="Madeira" width="780" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then my wife and I did a road trip from home through the Czech Republic, Slovakia, Hungary, and Austria.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxeobsi8blqlua3wah5p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxeobsi8blqlua3wah5p.png" alt="Roadtrip" width="780" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In May, we visited Italy. Our base was Pisa, from which we went to see Siena, Florence, and the sea to visit the charming villages called Cinque Terre.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4505b9vzr32b5p5epc69.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4505b9vzr32b5p5epc69.png" alt="Italy Cinque Terre" width="780" height="440"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsaa7r5qzv79xf82vmnwp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsaa7r5qzv79xf82vmnwp.png" alt="Italy" width="780" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next trip was in June, after a few days in Istanbul we began a journey through Turkey. We visited the east of the country, Cappadocia (that's where you fly hot air balloons 😉).&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqk1bfwjfxo939whm4sn9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqk1bfwjfxo939whm4sn9.png" alt="Turkey" width="780" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At the end of August and beginning of September, we made a quick trip to the Baltic countries (Latvia and Estonia) and Finland on one trip.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftp4cy79zk0uf0q0i93gt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftp4cy79zk0uf0q0i93gt.png" alt="Finland" width="780" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In October, there was a city break in Barcelona - a birthday present for my wife.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9umzyv94acfsj0kpdhi6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9umzyv94acfsj0kpdhi6.png" alt="Barcelona" width="780" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We ended the year of travels with a winter trip to Cyprus. When Poland turned gray in November, we were swimming in the sea under the palm trees. 🏝&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb4m873t3sywp4h5p25c7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb4m873t3sywp4h5p25c7.png" alt="Cyprus" width="780" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All of the above trips were organized by my wife ❤️, who is a master of travel planning. Of course, except for her present (Barcelona), which I planned. I also went to a conference in Las Vegas in November, which I mentioned earlier.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvbonor4f50bil15djk16.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvbonor4f50bil15djk16.png" alt="Las Vegas" width="780" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The year 2022 was full of travel, but only a few countries were new to me: Latvia, Estonia, Finland, and Cyprus. However, I managed to reach the level of &lt;strong&gt;40&lt;/strong&gt; visited countries in the world.&lt;/p&gt;

&lt;h2&gt;
  
  
  Books
&lt;/h2&gt;

&lt;p&gt;Lately, I am not a fan of reading. Of course, I'm only talking about books related to technology, business, marketing, or sales. But I rarely read for entertainment either. Reading is a veiled form of procrastination. To make matters worse, it reinforces the pattern of &lt;em&gt;"I have to know and predict everything before I start"&lt;/em&gt;, which is impossible and effectively immobilizes you from the very start.&lt;/p&gt;

&lt;p&gt;That's why I replace books with video trainings and mental masturbation with &lt;em&gt;recognition in battle&lt;/em&gt;. Or at least I try to act that way 😉&lt;/p&gt;

&lt;p&gt;Taking all this into account, the following completely short list of positions should not surprise you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.amazon.com/Product-Led-Growth-Build-Product-Itself-ebook/dp/B07P6288ZF" rel="noopener noreferrer"&gt;Product-Led Growth: How to Build a Product That Sells Itself&lt;/a&gt; - a compendium of knowledge on product building. Don't let the name fool you, this book is equally about discovering the needs of your customers and fulfilling them as it is about marketing and sales itself. Reading it with &lt;a href="https://cloudpouch.dev/" rel="noopener noreferrer"&gt;CloudPouch&lt;/a&gt; in mind, I have already made several decisions about changes in my application that have not yet been implemented (lack of time), but will certainly contribute to greater customer satisfaction and wider use of this tool.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.amazon.com/Traction-Startup-Achieve-Explosive-Customer-ebook/dp/B00TY3ZOMS/ref=tmm_kin_swatch_0?_encoding=UTF8&amp;amp;qid=&amp;amp;sr=" rel="noopener noreferrer"&gt;Traction&lt;/a&gt; - a highly recommended, popular book about the fact that in marketing everything depends on, and you need to try many ways to verify what will work for us. It doesn't blow your mind, but it is very concise.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://www.amazon.com/48-Laws-Power-Robert-Greene-ebook/dp/B0024CEZR6/ref=tmm_kin_swatch_0?_encoding=UTF8&amp;amp;qid=&amp;amp;sr=" rel="noopener noreferrer"&gt;The 48 Laws of Power&lt;/a&gt; - a definitely interesting position with patterns identified throughout history for those wanting to gain and maintain power. But even if you don't have such ambitions, you can treat this list as a cheet sheet and have fun analyzing the behavior of characters from various series such as Game of Thrones, Succession, or others and identifying which patterns they are using. 😉&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Other
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Mastermind group&lt;/strong&gt; - another factor contributing to the abandonment of reading is a group of three people I regularly meet with and discuss all topics for almost two years now. Originally, we started with a plan to study Wardley's maps, but quite quickly we have moved beyond that and cover all topics that interest us. Of course, we didn't part with the maps, but rather treat them as a tool for a better understanding of the world around us and the changes taking place in it, rather than the goal itself. In other words, we get excited about driving a car, not the machine itself. These sessions give me more than any book could offer! They show different points of view, stimulate reflection, and challenge me with topics outside my bubble.
One of the really interesting topics I learned about through this group is the theory of psychopaths in companies. 🤯 I'm sure you haven't heard of it, even though the concept is over 10 years old. This is not the time or place for me to develop it here, so I'll leave you with just the &lt;a href="https://www.ribbonfarm.com/2009/10/07/the-gervais-principle-or-the-office-according-to-the-office/" rel="noopener noreferrer"&gt;link&lt;/a&gt;. It fits in perfectly with the 48 Laws of Power 🙂 &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv572qyi9690ja8ck83x6.png" alt="Company hierarchy" width="400" height="218"&gt;
&lt;/li&gt;
&lt;li&gt;Purchase of Sennheiser Momentum 3 headphones - all my life I used some crappy headphones, these are still not audiophile grade, but for me the difference is huge. The money spent is definitely worth it for good sound every day at home and when walking the dog. I'm writing about this because if someone had told me beforehand: &lt;em&gt;Dude, get yourself some good headphones&lt;/em&gt; I would have been able to enjoy this a long time ago... so if you haven't already, &lt;em&gt;get yourself some good headphones!&lt;/em&gt; 😃&lt;/li&gt;
&lt;li&gt;While we're on the subject of music, I enjoyed myself at concerts: Tool, Iron Maiden, Ed Sheeran, Machine Head, Martin Garrix.&lt;/li&gt;
&lt;li&gt;I also purchased a Scott Spark bike after waiting for over a year. It's a blast 💪😃 &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1i2h4xvadfu4292tab8h.png" alt="Scott Spark" width="547" height="839"&gt;
&lt;/li&gt;
&lt;li&gt;Since January, I've been learning Italian 🇮🇹. It brings me a lot of joy because I treat it as a hobby. It's also a nice reminder of how difficult the basics can be for someone who is just starting - it gives me food for thought in the context of my trainings and advocacy of serverless architecture.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That, in a nutshell, is what my 2022 looked like on paper and through the lens.&lt;/p&gt;

</description>
      <category>emptystring</category>
    </item>
    <item>
      <title>Add types to your JavaScript Lambda functions</title>
      <dc:creator>Pawel Zubkiewicz</dc:creator>
      <pubDate>Sat, 29 Oct 2022 15:48:01 +0000</pubDate>
      <link>https://forem.com/aws-builders/add-types-to-your-javascript-lambda-functions-3pgn</link>
      <guid>https://forem.com/aws-builders/add-types-to-your-javascript-lambda-functions-3pgn</guid>
      <description>&lt;p&gt;If you need to add types to your Lambda functions written in JavaScript (Node.js) then you can do it very easily, using VS Code's built-in JSDoc support. How it works in other editors I don't know, because I haven't had the need to leave VS Code for many years 😃&lt;/p&gt;

&lt;p&gt;Types library includes events and other objects that occur in AWS. They come in handy when defining an &lt;code&gt;event&lt;/code&gt; that calls Lambda functions, which is the first parameter of the &lt;code&gt;handler&lt;/code&gt; method:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// extract data from event&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;By installing this library as a dev dependency&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

npm i --save-dev @types/aws-lambda


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;we can add this information to our code:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;

&lt;span class="cm"&gt;/**
 *
 * @param {import('aws-lambda').APIGatewayProxyEventV2} event
 * @returns
 */&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;handler&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;event&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// extract data from event&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;...&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Such a small change allows VS Code to display a relevant list of prompts as we write code. &lt;/p&gt;

&lt;p&gt;This is what it looks like for the API Gateway HTTP API:&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%2Ftir0ki51d1etb3me0ldy.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%2Ftir0ki51d1etb3me0ldy.png" alt="Types in JavaScript"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My next Lambda function is triggered by DynamoDB Stream, so we define &lt;code&gt;event&lt;/code&gt; as &lt;code&gt;DynamoDBStreamEvent&lt;/code&gt;. Please notice that even inside the loop editor prompts valid types in sub-properties:&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%2Fhar8p0h824sc14xukpuj.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%2Fhar8p0h824sc14xukpuj.png" alt="Types in JavaScript"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Of course, JSDoc definition can be added on any method, not just on the &lt;code&gt;handler&lt;/code&gt; called by the Lambda service. You can annotate any JavaScript function that process AWS type with this method to have better &lt;em&gt;intellisense&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;There is a huge number of types in the whole package &lt;a href="https://www.npmjs.com/package/@types/aws-lambda" rel="noopener noreferrer"&gt;&lt;code&gt;@types/aws-lambda&lt;/code&gt;&lt;/a&gt;, and not just &lt;em&gt;events&lt;/em&gt;. We also have &lt;em&gt;responses&lt;/em&gt; and other objects available.&lt;/p&gt;

&lt;p&gt;As an example, consider the &lt;code&gt;context&lt;/code&gt; object, which we sometimes need in a Lambda function.&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%2F5x74vxb62v19ljr4edho.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%2F5x74vxb62v19ljr4edho.png" alt="Types in JavaScript"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I'm sure you will find this small convenience useful.  I hope it would ease switching from strongly typed languages to JavaScript. This article, was based on this &lt;a href="https://www.youtube.com/shorts/60zUEc_vs1o" rel="noopener noreferrer"&gt;short video&lt;/a&gt; published by &lt;a href="https://loige.co/" rel="noopener noreferrer"&gt;Luciano Mammino&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;At this point, it's probably worth repeating myself (since I wrote about it a long time ago) and answer the following question.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why am I writing in JavaScript and not TypeScript?
&lt;/h2&gt;

&lt;p&gt;The transition from Java to JavaScript was neither easy nor pleasant for me. The lack of types didn't help. But that was years ago and now I wouldn't go back to Java for the world's sake.&lt;/p&gt;

&lt;p&gt;Of course, there is still (for some time) place for Java in this world. 😉&lt;/p&gt;

&lt;p&gt;However, &lt;strong&gt;in Lambda functions the scope of the problem and the amount of code is so small that we don't need types&lt;/strong&gt; to understand what's going on. By complete coincidence, in recent days Yan Cui - AWS Serverless Hero - also wrote about this, and I paste his graphic and comment here:&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%2F4q2ikbzkz1prl3wbz5tw.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%2F4q2ikbzkz1prl3wbz5tw.png" alt="Yan Cui's skyscraper"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In a Node.js app, say, an Express.js API, the complexity ceiling is really high - multiple abstraction layers, lots of modules and a "user" variable can mean different things every time you see one. Types are crucial for managing that complexity and communicating intent.&lt;br&gt;But the complexity ceiling of a Lambda function is much much lower. I only need to look at 2/3 modules to understand what the function does. To the point that the (relatively small) overhead of bringing in TypeScript just doesn't feel necessary in most cases.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Source: &lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:6986994844820725760/" rel="noopener noreferrer"&gt;Yan Cui in LinkedIn&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The bottom line is that it's better to break through and implement functions in JavaScript than to harness TypeScript, just to have types everywhere. Especially since TypeScript entails some inconveniences.&lt;/p&gt;

&lt;p&gt;The lack of defining &lt;em&gt;explicit&lt;/em&gt; types is very convenient because the code is shorter and easier to read, and sometimes you can even go a little bit crazy with it... 😉&lt;/p&gt;

</description>
      <category>aws</category>
      <category>serverless</category>
      <category>lambd</category>
      <category>javascript</category>
    </item>
    <item>
      <title>Reduce AWS costs: How I've saved $18,890 monthly on EBS drives?</title>
      <dc:creator>Pawel Zubkiewicz</dc:creator>
      <pubDate>Fri, 03 Jun 2022 11:26:58 +0000</pubDate>
      <link>https://forem.com/aws-builders/reduce-aws-cost-how-ive-saved-18890-monthly-on-ebs-drives-528a</link>
      <guid>https://forem.com/aws-builders/reduce-aws-cost-how-ive-saved-18890-monthly-on-ebs-drives-528a</guid>
      <description>&lt;p&gt;This is a case study of a &lt;strong&gt;real&lt;/strong&gt; project, where one simple change in configuration resulted in almost a quarter of a million dollars savings per year.&lt;/p&gt;

&lt;p&gt;There was a single AWS account which had around 17,000 EBS volumes, which totaled to 944,875 GB (almost 1000 TB). That's a serious amount of disk space for which you pay serious money.&lt;/p&gt;

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

&lt;p&gt;A &lt;a href="https://cloudpouch.dev/?utm_source=devto" rel="noopener noreferrer"&gt;CloudPouch&lt;/a&gt; tool identified possible savings on that account (screenshot above) regarding EBS Volumes. That was a starting point, which started the whole endeavor.&lt;/p&gt;

&lt;p&gt;Before optimization, &lt;code&gt;EBS:VolumeUsage.gp2&lt;/code&gt; cost was around $100,000 monthly. That's just disk drive space, nothing else! All of those drives were of type &lt;code&gt;GP2&lt;/code&gt;, which stands for &lt;em&gt;General Purpose 2&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;According to the CloudPouch tool, conversion to newer drive type &lt;code&gt;GP3&lt;/code&gt; would save 20%, which was $18,890 monthly in this case.&lt;/p&gt;

&lt;h2&gt;
  
  
  EBS &lt;code&gt;GP3&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;AWS &lt;a href="https://aws.amazon.com/about-aws/whats-new/2020/12/introducing-new-amazon-ebs-general-purpose-volumes-gp3/" rel="noopener noreferrer"&gt;introduced new GP3 drives&lt;/a&gt; in December 2020. They provide up to &lt;strong&gt;20% lower price-point&lt;/strong&gt; per GB than existing &lt;code&gt;GP2&lt;/code&gt; volumes, and their performance is no longer coupled with their size! Which means you don't need to over-provision size to get expected performance.&lt;/p&gt;

&lt;p&gt;If you're interested in detailed comparison this &lt;a href="(https://aws.amazon.com/blogs/storage/migrate-your-amazon-ebs-volumes-from-gp2-to-gp3-and-save-up-to-20-on-costs/)"&gt;AWS blog post&lt;/a&gt; is the best place to start. The below table summarizes most important differences pretty well; it was copied from the over-mentioned blog post.&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Migration from &lt;code&gt;GP2&lt;/code&gt; to &lt;code&gt;GP3&lt;/code&gt;
&lt;/h2&gt;

&lt;p&gt;After learning more about &lt;code&gt;GP3&lt;/code&gt;, migration sounded like a no-brainer. 😃&lt;/p&gt;

&lt;p&gt;The newer drive type should result in immediate decrease in costs by 20% without any performance impact on our drives, which were between 50 to 250GB each.&lt;/p&gt;

&lt;p&gt;From a technical perspective, migration seemed pretty easy to conduct. AWS states:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Customers can easily migrate gp2 volumes to gp3 volumes using Elastic Volumes, which is an existing feature of Amazon EBS. Elastic Volumes allow customers to modify the volume type, IOPS, or throughput of their existing EBS volumes &lt;strong&gt;without interrupting their Amazon EC2 instances&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;After confirming with AWS representative, that conversion from &lt;code&gt;GP2&lt;/code&gt; to &lt;code&gt;GP3&lt;/code&gt; &lt;strong&gt;does not impact&lt;/strong&gt; running EC2 instance at all, I was ready to start.&lt;/p&gt;

&lt;p&gt;The change can be applied manually in the web console, as showed in the image below. All you need to do is to select new type:&lt;/p&gt;

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

&lt;p&gt;Of course, when you have 17,000 drives, you want to automate that!&lt;/p&gt;

&lt;p&gt;Fortunately, you can do that using &lt;strong&gt;AWS SDK&lt;/strong&gt;. It's surprisingly simple, given how much money you can save 😀&lt;/p&gt;

&lt;p&gt;You need to get the list of all your EBS volumes using &lt;code&gt;EC2.describeVolumes()&lt;/code&gt; method, and then modify those having &lt;code&gt;VolumeType === 'gp2'&lt;/code&gt; to &lt;code&gt;gp3&lt;/code&gt; using another SDK method &lt;code&gt;EC2.modifyVolume()&lt;/code&gt;. It really doesn't get any simpler than that. 😀&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;EC2.modifyVolume()&lt;/code&gt; request &lt;strong&gt;asynchronously&lt;/strong&gt; starts the migration, so the whole script runs pretty fast. Based on my research and discussions with AWS representatives, the whole operation can take up to 6 hours per drive, depending on size and other factors.&lt;/p&gt;

&lt;p&gt;What's really important and amazing at the same time is that migration takes place in the background without interrupting EC2 instances. Also, we pay only for &lt;code&gt;GP3&lt;/code&gt; drive since the very start of the migration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Results
&lt;/h2&gt;

&lt;p&gt;Well, you already know the results but lets show them in the form of a chart.&lt;/p&gt;

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

&lt;p&gt;The &lt;code&gt;EBS:VolumeUsage.gp2&lt;/code&gt; UsageType costs (yellow) were replaced with &lt;code&gt;EBS:VolumeUsage.gp3&lt;/code&gt; (red).&lt;/p&gt;

&lt;p&gt;As expected, EBS Volumes costs dropped by 20%. In the case of this particular account, &lt;strong&gt;I was able to save $18,890 monthly - almost a quarter of a million dollars per year!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The migration took place at the end of 2021 year, we haven't had even a single problem with any EBS or EC2 instance using them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ongoing migrations
&lt;/h2&gt;

&lt;p&gt;In the environment, where you can't control newly deployed EC2 instances and their EBS drives, you can deploy a Lambda Function, that would regularly migrate newly created drives to &lt;code&gt;GP3&lt;/code&gt; version. It's really easy to write and can save a lot of money.&lt;/p&gt;

&lt;h3&gt;
  
  
  Disclaimer
&lt;/h3&gt;

&lt;p&gt;In most of the cases migration from &lt;code&gt;GP2&lt;/code&gt; to &lt;code&gt;GP3&lt;/code&gt; can be safely executed. However, preliminary analysis is recommended, especially to check if your existing drives have any special settings, like provisioned IOPS. Don't do this without thorough preparation.&lt;/p&gt;

&lt;h2&gt;
  
  
  CloudPouch
&lt;/h2&gt;

&lt;p&gt;Everything described in this article can be done without &lt;a href="https://cloudpouch.dev/?utm_source=devto" rel="noopener noreferrer"&gt;CloudPouch&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;However, if you want to examine all your AWS accounts and have immediate response about potential savings, &lt;strong&gt;CloudPouch is the tool to use!&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Start in the &lt;code&gt;Current month&lt;/code&gt; and scroll down to the &lt;em&gt;AWS Services&lt;/em&gt; table.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Select the &lt;code&gt;EC2 - Other&lt;/code&gt; row, it will expend showing UsageType cost chart.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Next, click on &lt;code&gt;Check Cost Insights 🔍&lt;/code&gt; button. Now CloudPouch is connecting to your AWS account to get information about deployed resources.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ul&gt;
&lt;li&gt;After a moment, a summary is displayed.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fazcvfw6hyhsjpg2bv9d3.png" alt="Cost Insights summary" width="800" height="350"&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The &lt;strong&gt;Cost Insights&lt;/strong&gt; summary includes not only &lt;code&gt;GP2&lt;/code&gt; to &lt;code&gt;GP3&lt;/code&gt; migration check, but also recommendations about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"orphaned" drives - &lt;strong&gt;unattached EBS&lt;/strong&gt; Volumes that are &lt;strong&gt;not used&lt;/strong&gt; by any EC2 instance, &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Elastic IPs&lt;/strong&gt; - reserved but not used,&lt;/li&gt;
&lt;li&gt;and needless &lt;strong&gt;NAT Gateways&lt;/strong&gt; - sometimes people forget to remove them from VPCs that are no longer used. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All those resources can be considered &lt;em&gt;&lt;strong&gt;waste&lt;/strong&gt;&lt;/em&gt; - you don't use them, but you pay for them.&lt;/p&gt;

&lt;p&gt;The summary also gives you an amount of potential savings, so you can make a data-driven decision whether it's worth optimizing.&lt;/p&gt;

</description>
      <category>ebs</category>
      <category>costs</category>
      <category>cloud</category>
      <category>aws</category>
    </item>
    <item>
      <title>Simple Serverless Scheduler</title>
      <dc:creator>Pawel Zubkiewicz</dc:creator>
      <pubDate>Sat, 14 May 2022 09:29:32 +0000</pubDate>
      <link>https://forem.com/aws-builders/simple-serverless-scheduler-25c7</link>
      <guid>https://forem.com/aws-builders/simple-serverless-scheduler-25c7</guid>
      <description>&lt;p&gt;When I was working on the license key management solution for my application &lt;a href="https://cloudpouch.dev/?utm_source=devto" rel="noopener noreferrer"&gt;CloudPouch&lt;/a&gt; I had to face the &lt;em&gt;&lt;strong&gt;deferred cancelation&lt;/strong&gt;&lt;/em&gt; of paid subscriptions problem.&lt;/p&gt;

&lt;p&gt;When a user cancels his/her subscription for some reason, the license key must work until the end of the current billing period. Since the use case is not complicated, I decided to solve it as simple as possible, using the available Serverless services, following the principles of architecture-controlled architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Serverless scheduler
&lt;/h2&gt;

&lt;p&gt;The topic of the serverless scheduler has been appearing fairly regularly for years. In my opinion, this is a repetitive problem that AWS should provide us with a managed solution. Discussions in the AWS Community Builders Slack channel have not brought any effects, and we still need to implement it by ourselves.&lt;/p&gt;

&lt;p&gt;Fortunately, AWS provides several primitives that you can use while building your own scheduler. The most popular options are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;DynamoDB TTL&lt;/li&gt;
&lt;li&gt;CRON in EventBridge (used to be in CloudWatch)&lt;/li&gt;
&lt;li&gt;StepFunctions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Selection of a solution for a business problem
&lt;/h2&gt;

&lt;p&gt;The solutions mentioned above differ significantly from each other.&lt;/p&gt;

&lt;p&gt;Foremost, they offer &lt;strong&gt;different accuracy of operation (delay)&lt;/strong&gt; in terms of the period between the designated and the actual time of calling. For example, for &lt;a href="https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/howitworks-ttl.html" rel="noopener noreferrer"&gt;Dynamodb TTL it can be up to 48 hours&lt;/a&gt;. While using CRON in EventBridge, we can invoke a Lambda function &lt;strong&gt;every minute&lt;/strong&gt;. Huge difference, right?&lt;/p&gt;

&lt;p&gt;This is the most important, functional characteristic because it directly affects the implementation of business requirements. In numerous instances, it is difficult to imagine business stakeholders accepting a two-day hold-up in a response to a user action.&lt;/p&gt;

&lt;p&gt;Other characteristics that we can describe these solutions are also important. For many, the maximum number of scheduled  actions will be as important as accuracy. Another feature will be the maximum time to postpone the action in the future. And of course, whether the action is cyclical or one-off.&lt;/p&gt;

&lt;p&gt;Going further, one cannot forget about the cost of running,  and the level of complexity of the solution, directly affecting the time of implementation.&lt;/p&gt;

&lt;p&gt;Taking all these characteristics into account, it quickly turns out that there are many options and the final solution depends on the requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Business case
&lt;/h2&gt;

&lt;p&gt;The &lt;a href="https://cloudpouch.dev/?utm_source=devto" rel="noopener noreferrer"&gt;CloudPouch&lt;/a&gt; tool is a &lt;strong&gt;desktop&lt;/strong&gt; application for analysis and optimization of the AWS cloud costs. It is available in the subscription model, for a small monthly or annual fee. Each customer has the opportunity to cancel their subscription at any time. In such case, the license key must be valid until the end of the current billing period, for which the fee has already been charged. Take a look at &lt;em&gt;t1&lt;/em&gt; time point presented in the diagram.&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%2Fjji2nw670wr4ucmxf70d.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%2Fjji2nw670wr4ucmxf70d.png" alt="Time graph"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The mechanism must work analogously for annual subscriptions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Selection of the solution
&lt;/h2&gt;

&lt;p&gt;Given the business requirements and the characteristics of AWS services, I decided to choose a solution that will be the easiest to implement and use. It was a classic &lt;em&gt;architectural trade-off&lt;/em&gt; because the simplicity of implementation was obtained at the cost of accuracy.&lt;/p&gt;

&lt;p&gt;Choosing the &lt;strong&gt;Dynamodb TTL (Time to Live)&lt;/strong&gt; mechanism turned out to be the best in this case because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Accuracy (delay) is not the most important for me, in the worst-case scenario my customer will receive 2 extra days of subscription for free 😉&lt;/li&gt;
&lt;li&gt;I do not need cyclical calls - a particular license can be  canceled only once&lt;/li&gt;
&lt;li&gt;It's simple to implement - the DynamoDB table itself and its &lt;em&gt;stream&lt;/em&gt; are all you need&lt;/li&gt;
&lt;li&gt;It is in line with the &lt;em&gt;Event-Driven Architecture&lt;/em&gt;, AWS will automatically trigger scheduled action in the future - &lt;em&gt;push&lt;/em&gt; instead of &lt;em&gt;pull&lt;/em&gt; approach. &lt;/li&gt;
&lt;li&gt;Allows you to easily check which licenses are to be canceled in the future - just view the elements in the DynamoDB table&lt;/li&gt;
&lt;li&gt;is the cheapest, although, with my scale, every solution would be free 😉&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Implementation of the solution
&lt;/h2&gt;

&lt;p&gt;The solution is very simple and consists of a Lambda function and a DynamoDB table with a &lt;em&gt;stream&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffij5msnyxhcwh9khsr0e.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%2Ffij5msnyxhcwh9khsr0e.png" alt="Solution architecture"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In response to the cancelation of a subscription performed by the user, an event is sent to the &lt;code&gt;eventBus&lt;/code&gt; in the EventBridge. Thanks to the defined rules, this event is redirected to the Lambda function &lt;code&gt;Scheduler&lt;/code&gt; (in the real solution, other components consume this event as well). The Lambda function 'Scheduler' saves in the &lt;code&gt;Scheduling&lt;/code&gt; table information about the license to be canceled. This element ("record") has a basic structure, it  consists of information that allows you to identify the license in the table &lt;code&gt;Paidlicenses&lt;/code&gt; and the time when this is going to happen.&lt;/p&gt;

&lt;p&gt;The cancelation date is saved in the &lt;a href="https://en.wikipedia.org/wiki/unix_time" rel="noopener noreferrer"&gt;Unix time&lt;/a&gt; format under the attribute specified in the configuration of the DynamoDB table. I called this attribute &lt;code&gt;ttl&lt;/code&gt;, it was defined in CloudFormation definition of the table, at line &lt;code&gt;10&lt;/code&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;SchedulingTable&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;Type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;AWS::DynamoDB::Table&lt;/span&gt;
  &lt;span class="na"&gt;Properties&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;AttributeDefinitions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;AttributeName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;PK&lt;/span&gt;
        &lt;span class="na"&gt;AttributeType&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;S&lt;/span&gt;
    &lt;span class="na"&gt;KeySchema&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;AttributeName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;PK&lt;/span&gt;
        &lt;span class="na"&gt;KeyType&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;HASH&lt;/span&gt;
    &lt;span class="na"&gt;TimeToLiveSpecification&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="c1"&gt;# ttl definition&lt;/span&gt;
        &lt;span class="na"&gt;AttributeName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ttl&lt;/span&gt;
        &lt;span class="na"&gt;Enabled&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;
    &lt;span class="na"&gt;BillingMode&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;PAY_PER_REQUEST&lt;/span&gt;
    &lt;span class="na"&gt;TableName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Scheduling&lt;/span&gt;
    &lt;span class="na"&gt;StreamSpecification&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;StreamViewType&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;OLD_IMAGE&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When using Node.js (JavaScript), pay attention to the &lt;code&gt;ttl&lt;/code&gt; calculation. It must be provided in seconds and not milliseconds. Hence, the division by 1000:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;floor&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Date&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;cancelationDateAsString&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;getTime&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  How does it work
&lt;/h3&gt;

&lt;p&gt;The AWS DynamoDB service constantly monitors our table and when the &lt;code&gt;ttl&lt;/code&gt; value is older than the current time, it will delete the element.&lt;/p&gt;

&lt;p&gt;For the whole solution to make sense, we must react to the &lt;em&gt;deletion&lt;/em&gt; events of elements. We do it with a &lt;em&gt;stream&lt;/em&gt;, which triggers the &lt;code&gt;DeactivatePaidLicense&lt;/code&gt; function. The payload sent to this function contains all the data of the element that was previously stored in the 'Scheduling' table, thanks to which the function knows which license to cancel by making the appropriate update in the table &lt;code&gt;PaidLicenses&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;The connection between the &lt;em&gt;stream&lt;/em&gt; and the Lambda function is defined in the &lt;code&gt;serverless.yml&lt;/code&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;functions&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;deactivatePaidLicense&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;handler&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;src/deactivatePaidLicense/function.handler&lt;/span&gt;
    &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Deactivate license upon Paddle event&lt;/span&gt;
    &lt;span class="na"&gt;events&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;stream&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;dynamodb&lt;/span&gt;
          &lt;span class="na"&gt;arn&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kt"&gt;!GetAtt&lt;/span&gt; &lt;span class="s"&gt;SchedulingTable.StreamArn&lt;/span&gt;
          &lt;span class="na"&gt;maximumRetryAttempts&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
          &lt;span class="na"&gt;batchSize&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
          &lt;span class="na"&gt;filterPatterns&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;eventName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;REMOVE&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I used a filter here, thanks to which &lt;strong&gt;the function will be called only as a result of removing the element from the table&lt;/strong&gt;. In this way, we transfer logic from our code to the configuration of the AWS infrastructure, which is of course the &lt;em&gt;best practice&lt;/em&gt; 😃&lt;/p&gt;

&lt;p&gt;Note:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The &lt;code&gt;Scheduling&lt;/code&gt; table is an independent table that only stores scheduled cancelations. I didn't use the &lt;em&gt;single-table design&lt;/em&gt; approach here, so I don't have to worry about removals of other entity types.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Solution in action
&lt;/h2&gt;

&lt;p&gt;My &lt;em&gt;cursory&lt;/em&gt; tests have shown that the DynamoDB in the &lt;code&gt;us-east-1&lt;/code&gt; region &lt;strong&gt;deletes the elements with a delay of 10 to 12 minutes&lt;/strong&gt; after a designated time in the &lt;code&gt;ttl&lt;/code&gt; attribute. It is much faster than over mentioned 48 hours limit, but still may not be acceptable for many solutions. In addition, I want to highlight that while those are &lt;em&gt;typical&lt;/em&gt; delay times, we have no guarantee that they will always be like that.&lt;/p&gt;

&lt;p&gt;My observations coincide with &lt;a href="https://theburningmonk.com/2019/03/dynamodb-ttl-as-an-ad-hoc-scheduling-mechanism/" rel="noopener noreferrer"&gt;tests&lt;/a&gt; carried out by Yan Cui some time ago.&lt;/p&gt;

&lt;p&gt;In summary, I must conclude that minimal time spent on implementation delivered a fully functional solution that meets my business needs &amp;amp; is easy to operate. And that's what I was aiming for 😃&lt;/p&gt;

&lt;h2&gt;
  
  
  CloudPouch
&lt;/h2&gt;

&lt;p&gt;If you are curious about the &lt;a href="https://cloudpouch.dev/?utm_source=devto" rel="noopener noreferrer"&gt;CloudPouch&lt;/a&gt; application, which I've built, please use a &lt;strong&gt;&lt;em&gt;free 7-day trial&lt;/em&gt;&lt;/strong&gt; or just watch this short demo video (1:30).&lt;/p&gt;

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

</description>
      <category>serverless</category>
      <category>aws</category>
      <category>dynamodb</category>
      <category>serverlessframework</category>
    </item>
    <item>
      <title>4 ways of executing Lambda function via HTTP endpoint - a comparison</title>
      <dc:creator>Pawel Zubkiewicz</dc:creator>
      <pubDate>Fri, 08 Apr 2022 10:07:12 +0000</pubDate>
      <link>https://forem.com/aws-builders/4-ways-of-executing-lambda-function-via-http-endpoint-a-comparison-560b</link>
      <guid>https://forem.com/aws-builders/4-ways-of-executing-lambda-function-via-http-endpoint-a-comparison-560b</guid>
      <description>&lt;p&gt;Recent &lt;a href="https://aws.amazon.com/blogs/aws/announcing-aws-lambda-function-urls-built-in-https-endpoints-for-single-function-microservices/"&gt;release of Lambda Function URLs&lt;/a&gt; is a great reason to write up a small summary describing possible ways of executing Lambda functions over HTTP endpoints.&lt;/p&gt;

&lt;p&gt;There are four ways to invoke a Lambda function over HTTP:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API Gateway REST API&lt;/li&gt;
&lt;li&gt;API Gateway HTTP API&lt;/li&gt;
&lt;li&gt;Application Load Balancer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NEW&lt;/strong&gt; Lambda Function URLs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once again, AWS released new functionality, but it's up to us how, and more importantly, when we are going to use it. I hope this brief comparison will give you a head start, and make it easier to decided which option to select.&lt;/p&gt;

&lt;h2&gt;
  
  
  Comparison table
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;API GW REST&lt;/th&gt;
&lt;th&gt;API GW HTTP&lt;/th&gt;
&lt;th&gt;ALB&lt;/th&gt;
&lt;th&gt;Lambda URL&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Authentication&lt;/td&gt;
&lt;td&gt;AWS_IAM, Custom authorizers&lt;/td&gt;
&lt;td&gt;AWS_IAM, Custom authorizers, JWT&lt;/td&gt;
&lt;td&gt;Social and corporate Identity Providers&lt;/td&gt;
&lt;td&gt;AWS_IAM&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CORS&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;CORS headers need to be provided in a response from Lambda function.&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Custom domain names&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Timeout [seconds]&lt;/td&gt;
&lt;td&gt;29&lt;/td&gt;
&lt;td&gt;30&lt;/td&gt;
&lt;td&gt;60 default, max 4000 (The load balancer waits until your Lambda function responds or times out.)&lt;/td&gt;
&lt;td&gt;Equal to Lambda's timeout, max 900&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Throttle quota&lt;/td&gt;
&lt;td&gt;10,000 requests per second (RPS) per region shared among other resources&lt;/td&gt;
&lt;td&gt;10,000 requests per second (RPS) per region shared among other resources&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pricing&lt;/td&gt;
&lt;td&gt;First 333 million = $3.5&lt;/td&gt;
&lt;td&gt;First 300 million = $1.0&lt;/td&gt;
&lt;td&gt;Complex to explain, cheaper than API GW over 500,000 requests per day&lt;/td&gt;
&lt;td&gt;Free, CloudFront proxying to Lambda URL = ~ $1.0 to $1.2&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Payload size&lt;/td&gt;
&lt;td&gt;API GW 10 MB, but Lambda's is 6 MB.&lt;/td&gt;
&lt;td&gt;API GW 10 MB, but Lambda's is 6 MB&lt;/td&gt;
&lt;td&gt;1 MB&lt;/td&gt;
&lt;td&gt;6 MB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Validation&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data transformations&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API Proxy&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;API caching&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Private endpoints&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;td&gt;❌&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Lambda alias support&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;td&gt;✅  (via target groups)&lt;/td&gt;
&lt;td&gt;✅&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Additional info&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;td&gt;Not serverless. AWS WAF supported&lt;/td&gt;
&lt;td&gt;Custom domain are not supported but can be mapped via CloudFront&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Short summary&lt;/td&gt;
&lt;td&gt;Expensive but feature-rich&lt;/td&gt;
&lt;td&gt;Cheaper and faster. Probably you should use that in enterprise software.&lt;/td&gt;
&lt;td&gt;Makes sense for huge scale because of pricing.&lt;/td&gt;
&lt;td&gt;Free, simple and easy. Tiny projects &amp;amp; automations.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Disclaimer
&lt;/h3&gt;

&lt;p&gt;This summary was created to the best of my knowledge. If you found some mistakes, or think that something important should be added that to it, please let me know.&lt;/p&gt;

&lt;h4&gt;
  
  
  Sources
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/aws/announcing-aws-lambda-function-urls-built-in-https-endpoints-for-single-function-microservices/"&gt;https://aws.amazon.com/blogs/aws/announcing-aws-lambda-function-urls-built-in-https-endpoints-for-single-function-microservices/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/elasticloadbalancing/latest/application/application-load-balancers.html#connection-idle-timeout"&gt;https://docs.aws.amazon.com/elasticloadbalancing/latest/application/application-load-balancers.html#connection-idle-timeout&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html"&gt;https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-limits.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/apigateway/latest/developerguide/limits.html"&gt;https://docs.aws.amazon.com/apigateway/latest/developerguide/limits.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html"&gt;https://docs.aws.amazon.com/elasticloadbalancing/latest/application/lambda-functions.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener-authenticate-users.html"&gt;https://docs.aws.amazon.com/elasticloadbalancing/latest/application/listener-authenticate-users.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/lambda/latest/dg/services-alb.html"&gt;https://docs.aws.amazon.com/lambda/latest/dg/services-alb.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-http.html"&gt;https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-api-as-simple-proxy-for-http.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.serverless.com/guides/aws-http-apis"&gt;https://www.serverless.com/guides/aws-http-apis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.learnaws.org/2020/09/12/rest-api-vs-http-api/"&gt;https://www.learnaws.org/2020/09/12/rest-api-vs-http-api/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.tinystacks.com/aws-api-gateway-rest-http"&gt;https://blog.tinystacks.com/aws-api-gateway-rest-http&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:6917825431224090624/"&gt;https://www.linkedin.com/feed/update/urn:li:activity:6917825431224090624/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://blog.tinystacks.com/battle-of-the-serverless-api-routers-alb-vs-api-gateway-pricing"&gt;https://blog.tinystacks.com/battle-of-the-serverless-api-routers-alb-vs-api-gateway-pricing&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>lambda</category>
      <category>serverless</category>
      <category>apigateway</category>
      <category>aws</category>
    </item>
  </channel>
</rss>
