<?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>The Ops Community ⚙️: Erik Lundevall Zara</title>
    <description>The latest articles on The Ops Community ⚙️ by Erik Lundevall Zara (@eriklz).</description>
    <link>https://community.ops.io/eriklz</link>
    <image>
      <url>https://community.ops.io/images/fO7t5I28SKyWWrAlzFyEw0o-klsoTY0D5tymJFHzMJI/rs:fill:90:90/g:sm/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL3Vz/ZXIvcHJvZmlsZV9p/bWFnZS8yNDgvOTNi/ZDJkODctMjg1NS00/NGVhLWE0NjktOTEy/MWFmNTdiNzcwLmpw/ZWc</url>
      <title>The Ops Community ⚙️: Erik Lundevall Zara</title>
      <link>https://community.ops.io/eriklz</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://community.ops.io/feed/eriklz"/>
    <language>en</language>
    <item>
      <title>Tidy Cloud AWS - Shift focus to solutions from tools</title>
      <dc:creator>Erik Lundevall Zara</dc:creator>
      <pubDate>Wed, 11 Oct 2023 07:28:00 +0000</pubDate>
      <link>https://community.ops.io/eriklz/tidy-cloud-aws-shift-focus-to-solutions-from-tools-46n2</link>
      <guid>https://community.ops.io/eriklz/tidy-cloud-aws-shift-focus-to-solutions-from-tools-46n2</guid>
      <description>&lt;p&gt;Hello all!&lt;/p&gt;

&lt;p&gt;Welcome to this issue of the &lt;strong&gt;Tidy Cloud AWS&lt;/strong&gt; newsletter!&lt;/p&gt;

&lt;p&gt;In this issue I write a few reflections on Pulumi, and also OpenTofu vs Terraform. There are many things to write about tools and vendors, but I hope we focus less on the details of specific tools. Instead, the focus should be more on solving the problems and issues we are trying to solve.&lt;/p&gt;

&lt;p&gt;Whether we use Neovim, Visual Studio Code, or Intellij, it doesn't affect problem-solving in software development. For some problems, we can ignore that relational database we use, as long as it supports some flavour of SQL.&lt;/p&gt;

&lt;p&gt;Will we get to that point with cloud infrastructure automation? I hope we will, in a few years.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pulumi gets more ka-tching
&lt;/h2&gt;

&lt;p&gt;Last week, Pulumi announced they had got &lt;a href="https://www.pulumi.com/blog/series-c/"&gt;more funding from investors, 41 million USD to be more&lt;br&gt;
precise&lt;/a&gt;. This means they have received about 98.5 million USD in funding, if my numbers are correct.&lt;br&gt;
They also announce that they have now over 100 employees, over 2000 customers on their &lt;strong&gt;Pulumi Cloud&lt;/strong&gt; platform,&lt;br&gt;
and over 150000 community members - people who use their tools.&lt;/p&gt;

&lt;p&gt;I am not sure of what the revenue and profit numbers may be for the company. I have seen estimates of both 1.4 and 3.6 million USD in revenue for 2022. So the company might not be profitable yet, in that case. As far as I can see, they have more than doubled the company size, employee-wise, in the past year. &lt;/p&gt;

&lt;p&gt;They have fewer employees than &lt;a href="https://www.hashicorp.com"&gt;HashiCorp&lt;/a&gt; (around 2000), and may be larger or about the same size as &lt;a href="https://www.upbound.io"&gt;Upbound&lt;/a&gt; (creator of &lt;a href="https://www.crossplane.io"&gt;Crossplane&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;I think they are in a good spot in the market, though. If you have a software development background, I think it is one of the more approachable offerings out there to manage cloud infrastructure. &lt;/p&gt;

&lt;p&gt;Not only is the documentation getting better and better, there are also multiple examples and templates to start a project with. Plus, you can also use their Pulumi AI tool to kick you off to get some idea on how to write the infrastructure. It can be a good starting point.&lt;/p&gt;

&lt;p&gt;The strength with Pulumi is that they are on a good path &lt;strong&gt;to make the core Pulumi tool itself less relevant.&lt;/strong&gt; &lt;em&gt;Instead better tools and services will be built on top of Pulumi - either by Pulumi themselves, or by others.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Pulumi AI statistics
&lt;/h2&gt;

&lt;p&gt;In Pulumi's newsletter &lt;strong&gt;The Pulumipus #27&lt;/strong&gt;, they included a small infographic picture about the usage of their&lt;br&gt;
Pulumi AI tool. So far, people have sent about 100,000 prompts, with approximately half of them being for AWS.&lt;br&gt;
Also, Typescript and Python are clearly the dominating languages here.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://community.ops.io/images/yVFbmzdtjih-qwgB_sxKJnc3JHx2vgUh1iPV6Qb8qF4/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3BzcGF0/cW5veHVkZDd3YjUz/aDdjLmdpZg" class="article-body-image-wrapper"&gt;&lt;img src="https://community.ops.io/images/yVFbmzdtjih-qwgB_sxKJnc3JHx2vgUh1iPV6Qb8qF4/rt:fit/w:800/g:sm/q:0/mb:500000/ar:1/aHR0cHM6Ly9jb21t/dW5pdHkub3BzLmlv/L3JlbW90ZWltYWdl/cy91cGxvYWRzL2Fy/dGljbGVzL3BzcGF0/cW5veHVkZDd3YjUz/aDdjLmdpZg" alt="Pulumi AI infographics" width="" height=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most likely, these statistics reflect what people use or prefer to use. It could also be where they have the most pain and difficulties, or a combination of those...&lt;/p&gt;

&lt;h2&gt;
  
  
  Infrastructure as Tofu
&lt;/h2&gt;

&lt;p&gt;If you have an interest in the Terraform ecosystem, you may know that HashiCorp changed their license for all of their core products to no longer be open source, but use a business source license. This includes Terraform, arguably their most widely used tool. &lt;/p&gt;

&lt;p&gt;This resulted in a fork being created from Terraform 1.5.x, which still has the open source license, then called &lt;strong&gt;OpenTF&lt;/strong&gt;. Apparently, the name was too close to the original with the &lt;strong&gt;TF&lt;/strong&gt; part, so the name had to change, and it became &lt;a href="https://opentofu.org"&gt;&lt;strong&gt;OpenTofu&lt;/strong&gt;&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Despite the horrible name, OpenTofu might become a significant part of the infrastructure as code space.&lt;br&gt;
Companies that have been betting on HashiCorp's multi-cloud strategy and use many of their tools will most likely stay with Terraform. Other companies that rely on various non-Hashicorp products and services built on top of Terraform will more likely go with OpenTofu.&lt;/p&gt;

&lt;p&gt;My prediction is that in the long run it will not matter that much in a few years. In the long run, we won't care or may not even know if it is Terraform, OpenTofu, or something else, because tooling will mostly hide it in a few years.&lt;/p&gt;

&lt;p&gt;The products and services that will succeed are the ones that make it easier to build better interfaces and solutions on top. We are not there yet though, so in the short term, it will still be important.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Those who will make the Terraform vs OpenTofu choice irrelevant for the rest of us will be the winners, I think.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;You can find older newsletters and more at &lt;a href="https://tidycloudaws.com"&gt;Tidy Cloud AWS&lt;/a&gt;. &lt;br&gt;
There you can also find other articles to help your cloud engineering work be more productive, efficient,&lt;br&gt;
and enjoyable!&lt;/p&gt;

&lt;p&gt;Until next time,&lt;/p&gt;

&lt;p&gt;/Erik&lt;/p&gt;

</description>
      <category>aws</category>
      <category>pulumi</category>
      <category>terraform</category>
      <category>opentofu</category>
    </item>
    <item>
      <title>Tidy Cloud AWS - command-line productivity</title>
      <dc:creator>Erik Lundevall Zara</dc:creator>
      <pubDate>Mon, 04 Sep 2023 08:03:00 +0000</pubDate>
      <link>https://community.ops.io/eriklz/tidy-cloud-aws-command-line-productivity-34dh</link>
      <guid>https://community.ops.io/eriklz/tidy-cloud-aws-command-line-productivity-34dh</guid>
      <description>&lt;p&gt;While I enjoy graphical user interfaces and use that every day - much of the time I still spend with the command-line. It can be development tasks, troubleshooting, trying out various things - I do a large portion via the command line.&lt;/p&gt;

&lt;p&gt;In this issue, I want to include a few tips on command-line tools that I have found to be quite useful. They are all open source, so you can try them out for a bit - you only will commit a bit of time for it.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;




&lt;h2&gt;
  
  
  TaskWarrior
&lt;/h2&gt;

&lt;p&gt;The first command-line tool I am covering in this issue is &lt;a href="https://taskwarrior.org"&gt;TaskWarrior&lt;/a&gt;. I find it an amazingly versatile to-do-list type of tool. &lt;/p&gt;

&lt;p&gt;In the past, I have used GUI tools like &lt;a href="https://todoist.com"&gt;Todoist&lt;/a&gt; for many years. I have also tried to use plugins in &lt;a href="https://obsidian.md"&gt;Obsidian&lt;/a&gt; to organise my tasks as well. I also have to deal with Jira boards for various customers, as well as GitHub issues. &lt;/p&gt;

&lt;p&gt;I discovered TaskWarrior through a YouTube video that discussed making a user interface for the program. I got curious about what TaskWarrior was all about, and investigated.&lt;/p&gt;

&lt;p&gt;The idea of a to-do-list tool on the command-line intrigued me, and I installed it (&lt;code&gt;brew install task&lt;/code&gt;) and tried it out. It is easy to get started with the basics of adding and completing tasks. Digging further into the documentation, I found it was quite rich in features.&lt;/p&gt;

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

&lt;p&gt;TaskWarrior can handle simple tasks, recurring tasks, and tasks that should only appear after a certain time. It handles due dates; it handles dependencies between tasks. You can set priorities on tasks. You can annotate tasks with extra notes, and these are automatically time-stamped.&lt;/p&gt;

&lt;p&gt;Projects can have associated tasks, and we can create a hierarchical structure. You can tag task with tags of your choice, and you have extensive filtering and reporting capabilities. You can define different contexts, so that you, for example, only see work-related tasks if you have a context defined for work.&lt;/p&gt;

&lt;p&gt;TaskWarrior arranges tasks in an "urgency order" using information like priority, age, and due dates that you provide. You can also adjust the weights that are used to perform the urgency calculations.&lt;/p&gt;

&lt;p&gt;As it has all these capabilities, it has a relatively simple interface and you can just use some bare basics. As any command-line tool,  you can create scripts and aliases to help you perform more complex tasks or reduce typing.&lt;/p&gt;

&lt;h3&gt;
  
  
  My workflow
&lt;/h3&gt;

&lt;p&gt;I am a fan of the &lt;a href="https://gettingthingsdone.com"&gt;Getting Things Done (GTD)&lt;/a&gt; method, and I found this to work out well with TaskWarrior. For multi-step tasks, I use projects to keep the steps together. I can use dependencies to set which order they should be done, and I can use the &lt;em&gt;wait&lt;/em&gt; feature to hide tasks until some future date/time. &lt;/p&gt;

&lt;p&gt;By default, TaskWarrior sorts the tasks by urgency and shows the ones that can be performed next, and I rarely find it necessary to change their priority. &lt;/p&gt;

&lt;p&gt;I can use the tagging feature to add extra information such as location, if there is a need. So far I think it works better than any other to-do-list tool I have used.&lt;/p&gt;

&lt;p&gt;It is a very versatile tool, and also quite accessible.&lt;/p&gt;

&lt;p&gt;There is also plugin and hook mechanism, which allows to extend the features of TaskWarrior. There is a list of various tools on the website, but I want to mention two of them which I think are quite nice: &lt;strong&gt;taskopen&lt;/strong&gt; and &lt;strong&gt;bugwarrior&lt;/strong&gt;, see below.&lt;/p&gt;

&lt;p&gt;I can also include some YouTube videos here, which I found quite useful to get an idea of what you can do with TaskWarrior and how to use it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=7t7CJAob0II"&gt;Manage all your tasks with TaskWarrior - Paul Fenwick | Craft 2018&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=rRTnF-EMey0"&gt;TaskWarrior is THE task management system you need&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=tijnc65soEI"&gt;A Dive into Taskwarrior Ecosystem with Tomas Babej&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Taskopen
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://github.com/jschlatow/taskopen"&gt;Taskopen&lt;/a&gt; is a simple and useful tool. If you add an annotation with a URL or a file path in it, you can reference the task with taskopen, and it will open the URL or file for you. You can also add a "Notes" entry in an annotation, and taskopen will open a text editor to put in more long-form text. I keep these notes in my Obsidian writing vault along with other notes, and I can also add references/links there.&lt;/p&gt;

&lt;p&gt;Taskopen is written in nim, and you need to check out the GitHub repository and run the build script to get the executable. Plus, you need to install nim.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bugwarrior
&lt;/h3&gt;

&lt;p&gt;If you want to integrate TaskWarrior with other task tracking systems, chances are that &lt;a href="https://bugwarrior-docs.readthedocs.io/en/latest/"&gt;bugwarrior&lt;/a&gt; is what you need. It supports various applications like Trello, Jira, Bitbucket, GitHub, GitLab, etc. Also, it integrates with Gmail.&lt;/p&gt;

&lt;p&gt;So far I have used it to integrate with Jira, and can run &lt;strong&gt;bugwarrior-pull&lt;/strong&gt; to sync the Jira issues with my task warrior tasks. It works well. They include the comment history from the Jira issues as annotations in the TaskWarrior tasks.&lt;/p&gt;

&lt;p&gt;The integration is one-way though, so if I complete the task in TaskWarrior, it will not automatically be completed in Jira. It is still much better than to need to jump around in multiple systems just to check what tasks are there. &lt;/p&gt;

&lt;p&gt;Bugwarrior is written in Python, so you need to have Python installed in your environment to use it.&lt;/p&gt;

&lt;h2&gt;
  
  
  TimeWarrior
&lt;/h2&gt;

&lt;p&gt;All that task management sounds great you may say, but what about tracking the time I spend on these tasks?&lt;/p&gt;

&lt;p&gt;Glad you asked!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://timewarrior.net"&gt;TimeWarrior&lt;/a&gt; is a companion tool to TaskWarrior, which is developed by the same group of people. It focuses on being a quite nice tool for time tracking, and it can integrate with TaskWarrior - if you add a hook, any task you work on in TaskWarrior will automatically be tracked in TimeWarrior.&lt;/p&gt;

&lt;p&gt;TimeWarrior has a quite simple user interface as well, and in its simplest form you just start and stop time tracking. You can add tags to each time interval tracked to categorize time in any way you want.&lt;/p&gt;

&lt;p&gt;You can add missed time periods and edit times later.&lt;/p&gt;

&lt;p&gt;You can adjust time periods absolutely or relatively, split or merge them, and remove them. You can track your time by setting specific periods, and the timer will skip non-working hours, weekends, and holidays if you configure that.&lt;/p&gt;

&lt;p&gt;It also has nice filtering and reporting capabilities. &lt;/p&gt;

&lt;p&gt;In the past, I used Toggl Track to track my time, and it worked well - but it was a GUI, and did not integrate with the systems I had to put in the time into. I still transfer the time manually right now, but the time summary and entries to copy have become simpler for me with TimeWarrior.&lt;/p&gt;

&lt;p&gt;TimeWarrior is still relatively new for me, but it has been working well so far.&lt;/p&gt;

&lt;h2&gt;
  
  
  Git branchless
&lt;/h2&gt;

&lt;p&gt;I have mentioned &lt;a href="https://github.com/arxanas/git-branchless"&gt;Git branchless&lt;/a&gt; in a previous issue of the newsletter, and it is something I have used more extensively in the past month. &lt;/p&gt;

&lt;p&gt;As the name implies, it is a set of extensions to regular git which try to make &lt;strong&gt;trunk-based development&lt;/strong&gt; nicer, and avoid feature branching and pull request type workflows. It does not stop you from using branches, but it allows you more freedom to work in parallel with stacks of associated commits. It allows for more experimentation, and better safety nets from messing up your main branch.&lt;/p&gt;

&lt;p&gt;The git branchless tools took more effort to work with than I thought. The documentation could have been better in explaining good practices. Straightforward at the concept level, sometimes harder when you get into the nitty-gritty details.&lt;/p&gt;

&lt;p&gt;However, I am happy to have started down this path, and now I run a &lt;code&gt;git branchless init&lt;/code&gt; on most of the repositories I work on.&lt;/p&gt;




&lt;p&gt;You can find older newsletters and more at &lt;a href="https://tidycloudaws.com"&gt;Tidy Cloud AWS&lt;/a&gt;. You will also find other useful articles around AWS automation and infrastructure-as-software.&lt;/p&gt;

&lt;p&gt;Until next time,&lt;/p&gt;

&lt;p&gt;/Erik&lt;/p&gt;

</description>
      <category>productivity</category>
    </item>
    <item>
      <title>Tidy Cloud AWS - Go for the future</title>
      <dc:creator>Erik Lundevall Zara</dc:creator>
      <pubDate>Fri, 01 Sep 2023 08:14:00 +0000</pubDate>
      <link>https://community.ops.io/eriklz/tidy-cloud-aws-go-for-the-future-i69</link>
      <guid>https://community.ops.io/eriklz/tidy-cloud-aws-go-for-the-future-i69</guid>
      <description>&lt;p&gt;Today I want to talk a bit about &lt;a href="https://go.dev"&gt;Go&lt;/a&gt; - the programming language, &lt;a href="https://en.wikipedia.org/wiki/Go_(game)"&gt;not the board game&lt;/a&gt;. I want to talk about why I think some features of the language and its ecosystem are great for cloud engineering work, and also what could improve.&lt;/p&gt;

&lt;p&gt;There will be an added focus on Go in the next coming weeks from my end, both in the newsletter and in blog posts on &lt;a href="https://tidycloudaws.com"&gt;Tidy Cloud AWS&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;




&lt;h2&gt;
  
  
  Benefits of Go
&lt;/h2&gt;

&lt;p&gt;The creators of Go intentionally designed it to be a language that should be relatively easy to learn and work with. Google made Go, which is used for many popular cloud software tools such as Docker, Kubernetes, Pulumi, Terraform, and others. &lt;/p&gt;

&lt;p&gt;There are a few reasons which I think make Go a very interesting language:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Small language&lt;/strong&gt;. There is a limited set of features in the core language itself. It is thus relatively easy to learn and keep in your head.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Great bundled tooling&lt;/strong&gt;. The bundled &lt;strong&gt;go&lt;/strong&gt; tool has helpful features for testing, documentation, code checking, and formatting. It is all there, no complex process of installation and set-up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast compilation&lt;/strong&gt;. Go is a compiled language, but the compilation is quick. You can compile and run code without worrying about delays, most of the time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simple deployment&lt;/strong&gt;. Go programs compile to a single binary, which makes it easy to deploy. No complex runtime environments to set up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compatibility&lt;/strong&gt;. The designers of Go are very careful about not introducing breaking changes in the language. This makes upgrades of Go uneventful things. Go code that was written many years ago will probably still compile and run.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Good community&lt;/strong&gt;. You can find documentation and learning material for Go in many places, and I find people often being quite helpful overall.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note that I have mentioned no features of the language itself here. Instead, most of these benefits are things that make the general life of maintaining solutions build in Go easier. For cloud engineering work with infrastructure and operations, I find this &lt;strong&gt;precious&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Of course, there are also language features that I think are nice, as well as missing features that would be nice to have.&lt;/p&gt;

&lt;h2&gt;
  
  
  Picking a language for cloud engineering
&lt;/h2&gt;

&lt;p&gt;In my day-to-day tasks, I often engage with multiple customers, as well as internal teams. Some use Terraform, other use AWS CDK, or tools like Serverless Framework, or AWS Copilot. Those that use AWS CDK may use different languages as well.&lt;/p&gt;

&lt;p&gt;Many of the languages and tools in place can be pretty ok, once all the bits and pieces are in place - and you spend at least 40-50% of your work week with them. The problems arise when you have solutions you only touch occasionally, because you seldom need to do any changes.&lt;/p&gt;

&lt;p&gt;If there are complex runtime environments (compilers, build tools, testing tools, packaging tools, etc.) that can be painful to juggle. Setting up a specific in a docker container image may ease that pain, but can still be a lot of work. Not only the setup itself, but to re-learn all the different tools and options in place. &lt;/p&gt;

&lt;p&gt;For example, I like both TypeScript and Python as languages, but not the complexities of the environments they need to run and maintain the solutions in. Go is much simpler to work with in that regard.&lt;/p&gt;

&lt;p&gt;However, with tools like &lt;a href="https://docs.aws.amazon.com/cdk/v2/guide/work-with-cdk-go.html"&gt;AWS Cloud Development Kit (AWS CDK)&lt;/a&gt; the experience with Go leaves a bit to be desired. When you work with AWS CDK, the primary language is Typescript (JavaScript) - all other languages are second class languages. The Typescript-oriented flavour of the tools is noticeable with Go. There are also very few examples for Go - even AWS own documentation lacks Go examples.&lt;br&gt;
&lt;a href="https://www.pulumi.com/docs/languages-sdks/go/"&gt;Pulumi&lt;/a&gt; does a better job here. It's not surprising that Pulumi does a better job here since it's written in Go.&lt;/p&gt;

&lt;p&gt;We will explore using both AWS CDK and Pulumi with Go in separate blog posts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning Go
&lt;/h2&gt;

&lt;p&gt;For programming and software development, &lt;strong&gt;learning by doing&lt;/strong&gt; is a key aspect. There are many books and video courses for learning Go. Just reading or viewing video does not work though, instead you &lt;strong&gt;need to do stuff&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A few resources that I think are good are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://exercism.org/"&gt;Exercism&lt;/a&gt; - this website has learning tracks for many languages, including Go. You have some learning material for the language itself. They combine this with small and relatively simple exercises to learn different concepts of the language. Some prior programming experience is good, but you do not need to know Go before starting here.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://quii.gitbook.io/learn-go-with-tests/"&gt;Learn Go with tests&lt;/a&gt; - This is an excellent website which teaches you Go by using Test Driven Development (TDD). You should have development experience in another language before starting this, but you do not need prior knowledge of Go.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://gophercises.com"&gt;Gophercises&lt;/a&gt; - This is a free course which contains a few mini projects to learn specific concepts and areas of Go programming. You should have some knowledge of Go before jumping into this one.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://go.dev"&gt;The main Go website&lt;/a&gt; has &lt;a href="https://go.dev/tour/welcome/1"&gt;A Tour of Go&lt;/a&gt;, plus references to &lt;a href="https://go.dev/learn/"&gt;multiple tutorials and guides&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I am a big fan of Learn Go with Tests and I also like Exercism. A word of caution - if you have a tool like GitHub Copilot or AWS CodeWhisperer active, it may be too helpful for you to actually learn sometimes. Consider turning them off, if you have any of them active normally.&lt;/p&gt;

&lt;p&gt;Last, I also want to mention the &lt;a href="https://play.golang.com"&gt;Go Playground&lt;/a&gt;. It is a useful place to try out small snippets of Go code, and it is also very useful to share code with others. For example, if you run into a problem and want to ask for help. It will be much easier for people to see the code that is not working and try it out themselves with a shared code snippet via the Go Playground.&lt;/p&gt;

&lt;h2&gt;
  
  
  Parting thoughts
&lt;/h2&gt;

&lt;p&gt;Using a programming language is much more than just the specific syntax and features of the language itself. That is good to keep in mind when picking a specific language for a task, be it Go or another language. For cloud engineering related work I think Go is a quite good option to consider.&lt;/p&gt;




&lt;p&gt;You can find older newsletters and more at &lt;a href="https://tidycloudaws.com"&gt;Tidy Cloud AWS&lt;/a&gt;. You will also find other useful articles around AWS automation and infrastructure-as-software.&lt;/p&gt;

&lt;p&gt;Until next time,&lt;/p&gt;

&lt;p&gt;/Erik&lt;/p&gt;

</description>
      <category>cloudops</category>
      <category>go</category>
      <category>development</category>
    </item>
    <item>
      <title>Tidy Cloud AWS - Hashicorp goes BSL</title>
      <dc:creator>Erik Lundevall Zara</dc:creator>
      <pubDate>Tue, 15 Aug 2023 19:02:24 +0000</pubDate>
      <link>https://community.ops.io/eriklz/tidy-cloud-aws-hashicorp-goes-bsl-5222</link>
      <guid>https://community.ops.io/eriklz/tidy-cloud-aws-hashicorp-goes-bsl-5222</guid>
      <description>&lt;p&gt;Hello all!&lt;/p&gt;

&lt;p&gt;Welcome to the next issue of the Tidy Cloud AWS newsletter! In this issue, I reflect a bit on Hashicorp's recent change to a Business Source License for their products.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;




&lt;p&gt;Hashicorp changed their &lt;a href="https://www.hashicorp.com/blog/hashicorp-adopts-business-source-license"&gt;licensing to BSL from open source a few days ago&lt;/a&gt;. Others, like Elasticsearch, Redis and Cockroach Labs, have done the same in the past. How will this impact users of their products?&lt;/p&gt;

&lt;h2&gt;
  
  
  Not as open as before
&lt;/h2&gt;

&lt;p&gt;What this means is that the products will still be free to use for many of the customers. However, competitors to HashiCorp cannot use or embed the source code and products in their offerings. They need to get a special licensing deal with Hashicorp in order to do so. See also &lt;a href="https://www.hashicorp.com/license-faq"&gt;Hashicorp's frequently asked questions&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So what are these products then? HashiCorp's website lists Terraform, Packer, Vault, Consul, Boundary, Nomad, Waypoint, and Vagrant as their products. Vagrant does not have a commercial offering, and a few of the other products make more sense if you are into the Hashicorp ecosystem.&lt;/p&gt;

&lt;p&gt;The main two products that a good deal of may use without the rest of the Hashicorp ecosystem are Terraform and Packer, I think. The competition mostly revolves around Terraform usage, so the license change will affect those using old Terraform Cloud and Terraform Enterprise, now called Hashicorp Cloud Platform.&lt;/p&gt;

&lt;p&gt;Companies like &lt;a href="https://spacelift.io"&gt;Spacelift&lt;/a&gt;, &lt;a href="https://www.scalr.com"&gt;Scalr&lt;/a&gt;, and &lt;a href="https://www.env0.com"&gt;Env0&lt;/a&gt;, and maybe &lt;a href="https://terramate.io"&gt;Terramate&lt;/a&gt; Cloud, are among the competitors. A less obvious one is &lt;a href="https://www.oracle.com/devops/resource-manager/"&gt;Oracle Cloud's Resource Manager&lt;/a&gt;, which is a managed service that helps manage infrastructure based on Terraform.&lt;/p&gt;

&lt;p&gt;Hashicorp confirms they will keep all Terraform providers, SDKs, and Cloud Development Kit (CDKTF) open source. &lt;/p&gt;

&lt;p&gt;Hashicorp's Business Source License is for new releases only. The existing release still has the old open source license. Hashicorp will do security patches on the open source releases until December 31st, 2023.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who will be affected?
&lt;/h2&gt;

&lt;p&gt;While Hashicorp claims only competitors to their commercial offerings will be affected, I believe it could affect others as well. The direct effect is on competitors, but customers who chose them are also affected. &lt;br&gt;
A problem here, though, is that the definition of a competitor is very vague, so it seems to be at the whim of Hashicorp if they decide you are a competitor. If not today, then perhaps tomorrow. Or if you are not competing with their products today, perhaps they will release a competing product to your product later?&lt;/p&gt;

&lt;p&gt;There is a lot of uncertainty about this license.&lt;/p&gt;

&lt;p&gt;Contrary to companies like Elasticsearch and Redis Labs, the main competitor targets seem to be not the hyper-scale cloud providers. Instead, it seems to be smaller businesses like Spacelift, Env0, and others. Hashicorp themselves has over 2400 employees with a &lt;a href="https://ir.hashicorp.com/news-releases/news-release-details/hashicorp-announces-fourth-quarter-and-fiscal-year-2023"&gt;$100+ million in revenue per quarter&lt;/a&gt;, some of their competitors only a handful of people. They are not making a profit, though, so this is probably a way for them to make the company profitable.&lt;/p&gt;

&lt;p&gt;Spacelift wrote a &lt;a href="https://spacelift.io/blog/hashicorps-license-change"&gt;short note about this&lt;/a&gt;, stating that it is certainly legal for Hashicorp to do this, but questioning of this is ethical to do. Joe Duffy from Pulumi also wrote a &lt;a href="https://www.pulumi.com/blog/pulumi-hearts-opensource/"&gt;short note on this topic&lt;/a&gt; as well.&lt;/p&gt;

&lt;p&gt;Pulumi should not be affected, since they have their own core engine for infrastructure-as-code. License change won't affect Terraform providers used to access resources which do not have Pulumi providers yet.&lt;/p&gt;

&lt;p&gt;Many people think Pulumi is based on Terraform, but it's not. This is a communication challenge for Pulumi.&lt;/p&gt;

&lt;p&gt;Oracle Cloud may make a deal with Hashicorp about their Resource Manager offering, but it won't be a big problem for them..&lt;/p&gt;

&lt;p&gt;AWS will not care much either. I do not think they use anything of the Terraform core or any of the other Hashicorp products. &lt;/p&gt;

&lt;p&gt;But there are many relatively smaller companies that certainly will care and worry about their business.&lt;/p&gt;

&lt;h3&gt;
  
  
  OpenTF
&lt;/h3&gt;

&lt;p&gt;Gruntwork's Yevgeniy Brikman wrote a great post titled &lt;a href="https://blog.gruntwork.io/the-future-of-terraform-must-be-open-ab0b9ba65bca"&gt;The future of Terraform must be open&lt;/a&gt;. He outlines a lot of what is bad with this new license, and presents a new initiative, called the &lt;a href="https://opentf.org"&gt;OpenTF manifesto&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The idea is to convince Hashicorp to revert to an open source license for Terraform. If they do not do that, they will fork the open source licensed version of Terraform and work on a version of Terraform that will be open source, &lt;strong&gt;forever.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The manifesto has a &lt;a href="https://github.com/opentffoundation/manifesto"&gt;GitHub repository&lt;/a&gt; where you can show your support by signing up.. Several companies and a few individuals have signed. They may provide development support for a fork.&lt;/p&gt;

&lt;p&gt;I applaud this initiative, and I hope that Terraform will stay open source.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final thoughts
&lt;/h3&gt;

&lt;p&gt;I am a bit torn about this topic. It is fine if a company uses a Business Source License for their products, and Hashicorp is not pretending it is an open source license after the change. As they are not profitable and publicly traded, they most likely need to satisfy the investors. For many users of their products, it will not be much or any difference.&lt;/p&gt;

&lt;p&gt;However, this is done after several years of being open source, and basically changed overnight. There are probably several smaller companies that might get into difficulties. Their products aren't bad and the competition isn't better, but the conditions they competed under changed a lot. It remains to see which license deals these companies get. It is not a nice way to try to get ahead of the competition.&lt;/p&gt;

&lt;p&gt;What do you think?&lt;/p&gt;




&lt;p&gt;You can find older newsletters and more at &lt;a href="https://tidycloudaws.com"&gt;Tidy Cloud AWS&lt;/a&gt;. You will also find other useful articles around AWS automation and infrastructure-as-software.&lt;/p&gt;

&lt;p&gt;Until next time,&lt;/p&gt;

&lt;p&gt;/Erik&lt;/p&gt;

</description>
      <category>cloudops</category>
      <category>terraform</category>
    </item>
    <item>
      <title>Tidy Cloud AWS - FinOps</title>
      <dc:creator>Erik Lundevall Zara</dc:creator>
      <pubDate>Fri, 04 Aug 2023 10:19:52 +0000</pubDate>
      <link>https://community.ops.io/eriklz/tidy-cloud-aws-finops-1nig</link>
      <guid>https://community.ops.io/eriklz/tidy-cloud-aws-finops-1nig</guid>
      <description>&lt;p&gt;Hello all!&lt;/p&gt;

&lt;p&gt;Welcome to the next issue of the Tidy Cloud AWS newsletter! &lt;strong&gt;FinOps&lt;/strong&gt; is about including cloud cost in engineering work for business value, and promoting collaboration.&lt;/p&gt;

&lt;p&gt;Cloud costs may be part of project architecture, but often lack feedback and adaptation. More often, when costs are not as expected, there are specific tasks to optimize costs by dedicated people. The work then is to either optimize and cut costs, or to explain why costs are the way they are. After that, nothing particular happens until the next surprise in costs pop up.&lt;/p&gt;

&lt;p&gt;We can do better than that, which is what FinOps is about.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;




&lt;h2&gt;
  
  
  FinOps
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;FinOps&lt;/strong&gt; combines &lt;strong&gt;Finance&lt;/strong&gt; and &lt;strong&gt;DevOps&lt;/strong&gt;, underscoring the significance of financial and business teamwork with developers and operations. A key goal behind &lt;em&gt;FinOps&lt;/em&gt; is to &lt;em&gt;optimize cloud spend to maximize business value.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This means establishing practices to get both engineering and business/finance "on the same team" and work together. Companies can appoint specialists in FinOps to assist with that.&lt;/p&gt;

&lt;p&gt;Engineers must consider cloud costs in architecture and design. A FinOps practitioner would make it easier for software and finance teams to collaborate.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://finops.org"&gt;FinOps Foundation website&lt;/a&gt; is a great resource for information on FinOps. There is a lot of good material available there that explains the ideas and principles behind FinOps. The foundation has a FinOps framework with roles, assessment, and learning material available.&lt;/p&gt;

&lt;p&gt;The organisation also has a &lt;a href="https://www.youtube.com/@finopsfoundation"&gt;YouTube channel&lt;/a&gt; with plenty of videos and talks around FinOps.&lt;/p&gt;

&lt;p&gt;The FinOps Foundation is organised under the &lt;a href="https://www.linuxfoundation.org/about"&gt;Linux Foundation&lt;/a&gt; and has over 10000 persons as members from over 3500 companies. &lt;/p&gt;

&lt;p&gt;The foundation has defined six &lt;strong&gt;FinOps Principles&lt;/strong&gt; that guide the activities around FinOps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Teams need to collaborate.&lt;/strong&gt;  Teams in finance, product, engineering teams should work together, in near real time and for continuous improvement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decisions are driven by the business value of the cloud.&lt;/strong&gt; Value-based metrics and suitable unit economics to better show business impact. It is about business value, not cost cutting.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Everyone takes ownership of their cloud usage.&lt;/strong&gt; Engineers are accountable for usage and cost, and empowered to make their own decisions of usage against their budget. Cost is an efficiency metric to consider.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;FinOps data should be accessible and timely.&lt;/strong&gt; Cost data should be processed and shared as soon as possible with stakeholders, with fast feedback loops and consistent visibility throughout the organisation.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A centralized team drives FinOps.&lt;/strong&gt; This is an idea of "Cloud cost center of excellence", a centralized support team for the rest of the organisation around cloud cost matters.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Take advantage of the variable cost model of the cloud.&lt;/strong&gt; Look at the variable cost model as an opportunity to be agile and flexible to drive value, not a risk factor. Apply various techniques to be have fast feedback loops for iterative planning, change, and to be proactive.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;FinOps is still a relatively young practice, and there is not a single answer to how to do this, but there is a good foundation to start from and adapt.&lt;/p&gt;




&lt;p&gt;You can find older newsletters and more at &lt;a href="https://tidycloudaws.com"&gt;Tidy Cloud AWS&lt;/a&gt;. You will also find other useful articles around AWS automation and infrastructure-as-software.&lt;/p&gt;

&lt;p&gt;Until next time,&lt;/p&gt;

&lt;p&gt;/Erik&lt;/p&gt;

</description>
      <category>cloudops</category>
      <category>finops</category>
    </item>
    <item>
      <title>Tidy Cloud AWS - container optimisation</title>
      <dc:creator>Erik Lundevall Zara</dc:creator>
      <pubDate>Wed, 26 Jul 2023 13:47:00 +0000</pubDate>
      <link>https://community.ops.io/eriklz/tidy-cloud-aws-container-optimisation-pk5</link>
      <guid>https://community.ops.io/eriklz/tidy-cloud-aws-container-optimisation-pk5</guid>
      <description>&lt;p&gt;Hello all!&lt;/p&gt;

&lt;p&gt;Welcome to the next issue of the Tidy Cloud AWS newsletter! In this issue, I will cover a few things about running containers in AWS. and making that better, cheaper, faster, more productive.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;




&lt;h2&gt;
  
  
  Faster container startup in Fargate
&lt;/h2&gt;

&lt;p&gt;AWS introduced Seekable OCI, a technology that enables lazy loading of container image content, almost a year ago.&lt;/p&gt;

&lt;p&gt;This technology reduces the load times of container images at startup. Depending on the container image setup, not all files and data in an image are used, or used right away. So by only loading the content that is actually used and needed, startup times can be reduced.&lt;/p&gt;

&lt;p&gt;Recently, AWS posted a blog post that &lt;a href="https://aws.amazon.com/blogs/aws/aws-fargate-enables-faster-container-startup-using-seekable-oci/"&gt;Seekable OCI is now supported in AWS Fargate&lt;/a&gt; - further down in the post it states that it is specifically for Fargate on AWS ECS, so perhaps Fargate with EKS is still out of luck?  &lt;/p&gt;

&lt;p&gt;The container images remain the same. New manifests were added that show file locations and sizes in the container image layers.. So any existing container image can be made into a “seekable OCI” and thus can lazy load in AWS ECS Fargate, assuming that the image is loaded from AWS ECR.&lt;/p&gt;

&lt;p&gt;The blog post is quite good and presents both a command-line tool (&lt;strong&gt;soci&lt;/strong&gt;) and a deployable lambda solution to make the images seekable. The post also compares start-up times for images that are seekable vs. non-seekable.&lt;/p&gt;

&lt;p&gt;Both the results of the blog post and from some customer quotes point to an improvement in startup time by around 50%. &lt;/p&gt;

&lt;p&gt;The steps to make image seekable seem straightforward, so should be a useful addition for container deployment in ECS Fargate.&lt;/p&gt;

&lt;p&gt;Check also out the video on YouTube's "Containers from the couch" channel that discusses the new &lt;a href="https://www.youtube.com/watch?v=N2CLxDgMDDo"&gt;Seekable OCI feature in AWS Fargate&lt;/a&gt;. It is about an hour long.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better container images
&lt;/h2&gt;

&lt;p&gt;Another lovely blog post from AWS is one with the title &lt;a href="https://aws.amazon.com/blogs/containers/building-better-container-images/"&gt;Building better container images&lt;/a&gt;. It goes through a couple of items on handling secrets, signing and securing images, and optimising image content. It is a nice piece with some useful tips, most of them which are not specific to AWS.&lt;/p&gt;

&lt;p&gt;The blog post here also pointed to a command-line tool called &lt;a href="https://aws.amazon.com/blogs/opensource/introducing-finch-an-open-source-client-for-container-development/"&gt;Finch&lt;/a&gt;. It is a command-line tool for container-based development. You can consider it an alternative to the &lt;strong&gt;docker command-line interface&lt;/strong&gt;, without the &lt;em&gt;Docker Desktop user interface.&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;Finch is a wrapper around a few open-source tools in this space, including &lt;strong&gt;nerdctl&lt;/strong&gt;. These are packaged together to make the installation simple. Finch is currently macOS only, but there are plans for Windows and Linux support in the future.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fargate cost optimisation
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Compute Optimizer&lt;/strong&gt; is an AWS service that analyzes compute-oriented resources and recommends enhancements. Watch &lt;a href="https://www.youtube.com/watch?v=Cnmejv98sv0"&gt;Cost optimization on AWS Fargate&lt;/a&gt; video on Containers from the couch YouTube channel to learn about using Compute Optimizer for AWS Fargate, on ECS.&lt;br&gt;
 The Compute Optimizer considers optimisations for both performance and cost, with a preference for performance.&lt;/p&gt;

&lt;p&gt;The Compute Optimizer service is free, you just have to enable it. It can be enabled at the organisation level through AWS Organizations as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  ECS Blueprints
&lt;/h2&gt;

&lt;p&gt;For some time now, AWS has provided a set of &lt;strong&gt;ECS Blueprints&lt;/strong&gt; which are templates to make certain types of workloads in AWS ECS easier to set up. Initially they have been available for &lt;strong&gt;Terraform&lt;/strong&gt;, but now they have also added blueprints for &lt;strong&gt;AWS Cloud Development Kit&lt;/strong&gt;, as announced in a &lt;a href="https://aws.amazon.com/blogs/containers/accelerate-amazon-ecs-based-workloads-with-ecs-blueprints/"&gt;recent blog post&lt;/a&gt;. The code for the blueprints can be found in a GitHub repository &lt;a href="https://github.com/aws-ia/ecs-blueprints"&gt;https://github.com/aws-ia/ecs-blueprints&lt;/a&gt;, both for AWS CDK and for Terraform. The AWS CDK examples are written in Python.&lt;/p&gt;

&lt;p&gt;It is a nice addition that AWS added AWS CDK examples here, and I think it is also good that there are examples in Python. There need to be more example code in languages that are not called TypeScript.&lt;/p&gt;

&lt;p&gt;There is also an &lt;a href="https://catalog.workshops.aws/ecs-solution-blueprints/en-US"&gt;online workshop for the ECS Blueprints&lt;/a&gt;, which covers both Terraform and AWS CDK as well.&lt;/p&gt;




&lt;p&gt;You can find older newsletters and more at &lt;a href="https://tidycloudaws.com"&gt;Tidy Cloud AWS&lt;/a&gt;. You will also find other useful articles around AWS automation and infrastructure-as-software.&lt;/p&gt;

&lt;p&gt;Until next time,&lt;/p&gt;

&lt;p&gt;/Erik&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloudops</category>
      <category>ecs</category>
    </item>
    <item>
      <title>Tidy Cloud AWS - Achieving greater value</title>
      <dc:creator>Erik Lundevall Zara</dc:creator>
      <pubDate>Thu, 20 Jul 2023 08:00:00 +0000</pubDate>
      <link>https://community.ops.io/eriklz/tidy-cloud-aws-achieving-greater-value-2jdl</link>
      <guid>https://community.ops.io/eriklz/tidy-cloud-aws-achieving-greater-value-2jdl</guid>
      <description>&lt;p&gt;Hello all!&lt;/p&gt;

&lt;p&gt;Welcome to the next issue of the Tidy Cloud AWS newsletter! In this issue, I talk about the value of AWS certifications, based on a blog post from AWS. We have video recommendations about agile, meetings, and continuous delivery. There is also an alternative project template for AWS CDK in Python.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;




&lt;h2&gt;
  
  
  The value of AWS certifications
&lt;/h2&gt;

&lt;p&gt;I read a blog post from a new AWS solutions architect who accomplished &lt;a href="https://aws.amazon.com/blogs/training-and-certification/how-i-achieved-all-six-specialty-aws-certifications-on-first-attempt/"&gt;all six specialty AWS certifications on their first try&lt;/a&gt;. This kind of post strengthens my belief that there is &lt;strong&gt;not that much value in the AWS certifications if you already have a good amount of real world experience.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It is useful as a replacement for real experience when you are starting out. Not to diminish the accomplishment of the author of the post - it certainly takes some skill and dedication to pass all these certifications. But that it is possible at all diminishes the value of these certifications for experienced people in these areas, I think. &lt;/p&gt;

&lt;p&gt;There are four reasons to pursue AWS certifications:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;To get (better) jobs in cloud computing when you lack real world experience for that job&lt;/li&gt;
&lt;li&gt;Fulfil AWS Partner requirements to uphold a certain status&lt;/li&gt;
&lt;li&gt;To do a Pokemon thing of it - got to catch them all&lt;/li&gt;
&lt;li&gt;Give yourself a personal goal motivator to learn AWS stuff beyond what you do daily if you need something extra for it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For number 2, it does not help much to get many certifications nowadays, since AWS counts one certification per individual in the company. &lt;/p&gt;

&lt;p&gt;Personally, I have no interest in number 3 and I do not need number 4 for motivation to learn. &lt;/p&gt;

&lt;p&gt;Do you agree with my reasons here, and what do you think of the AWS certifications?&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS CDK project template for Python
&lt;/h2&gt;

&lt;p&gt;Recently I wrote a bit about an initial version of an &lt;a href="https://tidycloudaws.com/an-opinionated-aws-cdk-project-template-for-python/"&gt;AWS CDK project template for Python&lt;/a&gt;. The reason for making this &lt;em&gt;GitHub repository template&lt;/em&gt; is a slight frustration with the existing templates provided by AWS CDK. &lt;/p&gt;

&lt;p&gt;I usually rewrite the AWS CDK generated templates for my projects, or instead copy files from an old project. I noticed I was rewriting the same things every time. That’s why I made this template. It’s opinionated, but it is also made to be easily configurable and extensible.&lt;/p&gt;

&lt;p&gt;This project template is just for Python and includes some features and handling that AWS CDK itself does not help with. If that is of interest, &lt;a href="https://tidycloudaws.com/an-opinionated-aws-cdk-project-template-for-python/"&gt;​read the blog post​&lt;/a&gt; and &lt;a href="https://github.com/cloudgnosis/awscdk-python-template"&gt;​check out the template on GitHub​&lt;/a&gt;. It is a work in progress. Let me know what you think!&lt;/p&gt;

&lt;h2&gt;
  
  
  Video recommendations
&lt;/h2&gt;

&lt;h3&gt;
  
  
  How to make the most of meetings
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Aino Corry&lt;/strong&gt;, who is a contributor to the &lt;a href="https://www.youtube.com/@ContinuousDelivery"&gt;@Continuous Delivery YouTube channel&lt;/a&gt;, has a great video about how to make meetings better and more productive, titled &lt;a href="https://www.youtube.com/watch?v=GqkG8pVWb54"&gt;You're WASTING Everybody's TIME In Meetings!&lt;/a&gt;. She makes some very good points and offers suggestions on how to improve meetings and meeting culture. There are several points about good meetings that many of us know &lt;em&gt;should&lt;/em&gt; be part of a meeting, but we do not do it, anyway. Aino makes some good points on dividing up the things that we can do to make meetings better, if we need the meeting at all.&lt;/p&gt;

&lt;p&gt;Watch it, and watch it multiple times if you are not taking notes the first time.&lt;/p&gt;

&lt;h3&gt;
  
  
  How to actually work agile
&lt;/h3&gt;

&lt;p&gt;There is also a great video by &lt;strong&gt;Aino Corry&lt;/strong&gt; about working in an agile manner, titled &lt;a href="https://www.youtube.com/watch?v=bdSzvnccLQk"&gt;You're Probably Getting Agile Wrong - How To Fix It&lt;/a&gt;. I think this is an absolutely brilliant video! &lt;/p&gt;

&lt;p&gt;She presents the 12 agile principles, and continues with that there are too much for people to read, so they do not read them. The &lt;a href="https://agilemanifesto.org"&gt;Agile Manifesto&lt;/a&gt; simplifies this into 4 areas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Individuals and interactions&lt;/strong&gt; over &lt;em&gt;processes and tools&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Working software&lt;/strong&gt; over &lt;em&gt;comprehensive documentation&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Customer collaboration&lt;/strong&gt; over &lt;em&gt;contract negotiation&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Responding to change&lt;/strong&gt; over &lt;em&gt;following a plan&lt;/em&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;She continues with how these 4 areas get misunderstood in people may skip the right-hand side, which is not the point. Each area is covered and how to go about working in a good way with these.&lt;/p&gt;

&lt;p&gt;Aino also points out that agile is not equal to Scrum or any other "agile process framework" - doing Scrum does not make you agile necessarily. You can also be agile while not doing Scrum.&lt;/p&gt;

&lt;p&gt;Aino points out that "&lt;strong&gt;Individuals and interactions&lt;/strong&gt; over &lt;em&gt;processes and tools&lt;/em&gt;" is probably the one that may be hardest to get right, which I agree with. &lt;/p&gt;

&lt;p&gt;I definitely recommend watching this video!&lt;/p&gt;

&lt;h3&gt;
  
  
  Checklist for continuous delivery / DevOps
&lt;/h3&gt;

&lt;p&gt;The third video on my video recommendation list is the &lt;a href="https://www.youtube.com/watch?v=i2DrLsnETk4"&gt;14 step checklist to achieve continuous delivery / DevOps&lt;/a&gt; by Dave Farley. It is a long list, but also has many important steps to consider. Each step is a valuable piece to consider, and it is great to have these summarised like these.&lt;/p&gt;

&lt;p&gt;What the video itself does not cover is how to get there, as it is more of a summary on many of the topics that Dave covers in his YouTube channel. &lt;/p&gt;

&lt;p&gt;Dave created course and book material on this topic, and the &lt;a href="https://minimumcd.org/minimumcd/"&gt;Minimum CD&lt;/a&gt; website is a great source for understanding the minimum viable continuous delivery process, broken down.. Some of these pieces are further broken down into pieces as well.&lt;/p&gt;

&lt;p&gt;There are many good recommendations there to get an idea on how to achieve continuous delivery and deliver great quality software. You may still struggle to get this in place, but at least you will have some recommendations and material that can help you on the way.&lt;/p&gt;




&lt;p&gt;You can find older newsletters and more at &lt;a href="https://tidycloudaws.com"&gt;Tidy Cloud AWS&lt;/a&gt;. You will also find other useful articles around AWS automation and infrastructure-as-software.&lt;/p&gt;

&lt;p&gt;Until next time,&lt;/p&gt;

&lt;p&gt;/Erik&lt;/p&gt;

</description>
      <category>aws</category>
      <category>productivity</category>
      <category>cloudops</category>
    </item>
    <item>
      <title>An opinionated AWS CDK project template for Python</title>
      <dc:creator>Erik Lundevall Zara</dc:creator>
      <pubDate>Mon, 17 Jul 2023 12:15:00 +0000</pubDate>
      <link>https://community.ops.io/eriklz/an-opinionated-aws-cdk-project-template-for-python-253g</link>
      <guid>https://community.ops.io/eriklz/an-opinionated-aws-cdk-project-template-for-python-253g</guid>
      <description>&lt;p&gt;AWS Cloud Development Kit (AWS CDK) is a nice framework to use if you build infrastructure for AWS. It can be relatively quick to define various types of cloud infrastructure for AWS.&lt;/p&gt;

&lt;p&gt;However, I have found the experience to set up a new project to be lacking. This project template, found at &lt;a href="https://github.com/cloudgnosis/awscdk-python-template"&gt;https://github.com/cloudgnosis/awscdk-python-template&lt;/a&gt;, addresses some of these issues, specifically for Python users..&lt;/p&gt;

&lt;h3&gt;
  
  
  Template summary
&lt;/h3&gt;

&lt;p&gt;The summary here of what is included you can see here, to read a bit more about the reasoning, look further below:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adding config to CDK context automatically, from TOML files.&lt;/li&gt;
&lt;li&gt;Encourage a flatter, non-inheritance approach to resource composition to facilitate refactoring&lt;/li&gt;
&lt;li&gt;Simplified stack creation - automatic if single stack project, and always assign AWS account and region to stacks&lt;/li&gt;
&lt;li&gt;Simplified stack-level tagging of resources&lt;/li&gt;
&lt;li&gt;Modern package manager usage option - PDM&lt;/li&gt;
&lt;li&gt;Python development tools include:

&lt;ul&gt;
&lt;li&gt;black - code formatting&lt;/li&gt;
&lt;li&gt;ruff - fast linter&lt;/li&gt;
&lt;li&gt;pre-commit - Pre-commit hooks for formatting and linting&lt;/li&gt;
&lt;li&gt;pytest - testing framework&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Logging and print debugging

&lt;ul&gt;
&lt;li&gt;structlog&lt;/li&gt;
&lt;li&gt;icecream&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Extendable model and behaviour processing of project setup options&lt;/li&gt;
&lt;li&gt;Requires Python 3.10 or higher currently&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;This is a &lt;strong&gt;GitHub template repository&lt;/strong&gt;, so if you re using the GitHub GUI, you can click on &lt;strong&gt;Use this template&lt;/strong&gt; and select &lt;em&gt;Create a new repository&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/cloudgnosis/awscdk-python-template"&gt;https://github.com/cloudgnosis/awscdk-python-template&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Or just copy the files, or use the parts that fit your use cases. Either way, I hope you find some parts of it useful.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reasoning behind the template
&lt;/h3&gt;

&lt;p&gt;The core of the template comes from a frustration with the regular &lt;code&gt;cdk init&lt;/code&gt; templates, which is not that flexible. I rip out or change a lot of the content - to where I might have set it up from scratch instead.&lt;/p&gt;

&lt;p&gt;There is also a certain amount of boilerplate work for handling config data, stacks, tags, and AWS environment setup. I'm a fan of black (code formatting), ruff (code linting), pytest (testing) and pre-commit (run checks before git commit). So these are included by default.&lt;/p&gt;

&lt;p&gt;AWS CDK examples encourage building solutions with inheritance, and push most logic into constructors. Grouping resources through inheritance leads to (too) long resource identifiers. Keeping resources after refactoring is difficult because of CloudFormation's restrictions.&lt;/p&gt;

&lt;p&gt;Also, I think inheritance is overused. &lt;strong&gt;It might be useful for building specific reusable components, but not for everything in a CDK-based solution.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;There are multiple project scaffolding solutions that work for Python, but not so much aimed at issues with AWS CDK and Python.&lt;/p&gt;

&lt;p&gt;The intention is to provide a rather lightweight template for setting up AWS CDK projects, which may cover some common use cases. It is extendable and many behaviours can be replaced easily, if desired.&lt;/p&gt;

&lt;h3&gt;
  
  
  Examples
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;All examples below call a function &lt;code&gt;add_sqs_sns_example()&lt;/code&gt; to add an SQS queue and an SNS topic, with the SQS as a subscriber to that topic. This is very much like the default AWS CDK template generated, except that the stack to add them to is passed as a parameter to this function. The same pattern can be used for any resources.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Here is a rather simple example, which will have a single stack, and all resources tagged with &lt;code&gt;Environment = dev&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main_example&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ias&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;init_ias_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="s"&gt;"deployment_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"examples"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s"&gt;"tags"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
                &lt;span class="s"&gt;"Environment"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"dev"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;stack&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"stacks"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s"&gt;"default"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;add_sqs_sns_example&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stack&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;ias&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;generate_from_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This will set up a CDK App, and a single stack with id &lt;code&gt;default&lt;/code&gt;  and name &lt;code&gt;examples&lt;/code&gt;. All resources will be tagged with tag &lt;em&gt;Environment&lt;/em&gt; with value &lt;em&gt;dev&lt;/em&gt;. The &lt;strong&gt;model&lt;/strong&gt; object is a dictionary that contains the app, stack, and environment resources.&lt;/p&gt;

&lt;p&gt;You get the stack from the model, and can call functions to add resources to that stack. When this is done, the &lt;code&gt;generate_from_model()&lt;/code&gt; function will create the CloudFormation, the same as calling &lt;code&gt;app.synth()&lt;/code&gt; on the CDK App object.&lt;/p&gt;

&lt;p&gt;AWS account and region will be determined based on the currently active credentials, in this case. &lt;/p&gt;

&lt;p&gt;A slightly more complicated example may look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;main_example&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ias&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;init_ias_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="s"&gt;"deployment_name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"examples"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="s"&gt;"stacks"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"other"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
            &lt;span class="s"&gt;"tags"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="s"&gt;"Environment"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="s"&gt;"dev"&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="n"&gt;option_processors&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;ias&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;simple_config_defaults&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;main_stack&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"stacks"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s"&gt;"main"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;other_stack&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s"&gt;"stacks"&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="s"&gt;"other"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="n"&gt;add_sqs_sns_example&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;main_stack&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;add_sqs_sns_example&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;other_stack&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;ias&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;generate_from_model&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;Here there are two stacks, with ids &lt;code&gt;main&lt;/code&gt; and &lt;code&gt;other&lt;/code&gt; and stack names &lt;code&gt;examples-main&lt;/code&gt; and &lt;code&gt;examples-other&lt;/code&gt; . There is a different &lt;strong&gt;option processor&lt;/strong&gt;, which in this case includes reading config from TOML files. All config data is available though CDK context, so it can be retrieved via any CDK Construct-type object (Construct, Stack, Stage, App).&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;option processors&lt;/em&gt; are simply functions that update the input options and return a new set of input options. When all these processors have been executed, the actual model initialisation takes place.&lt;/p&gt;

&lt;p&gt;The example resource function that works for the main example functions above look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;add_sqs_sns_example&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cdk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Stack&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;config_group&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;node&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt; &lt;span class="c1"&gt;# Use CDK stack id as config group name
&lt;/span&gt;    &lt;span class="n"&gt;queue&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sqs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Queue&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"queue"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;visibility_timeout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;cdk&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Duration&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;seconds&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;300&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="n"&gt;topic&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sns&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Topic&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
        &lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s"&gt;"topic"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="n"&gt;topic_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;ias&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_context_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;scope&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;config_group&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s"&gt;"topic_name"&lt;/span&gt;&lt;span class="p"&gt;]),&lt;/span&gt;
    &lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;topic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;add_subscription&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;subs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;SqsSubscription&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;queue&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;

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

&lt;/div&gt;



&lt;p&gt;and the example TOML config file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight toml"&gt;&lt;code&gt;&lt;span class="nn"&gt;[main]&lt;/span&gt;
&lt;span class="py"&gt;topic_name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"my-topic"&lt;/span&gt;

&lt;span class="nn"&gt;[other]&lt;/span&gt;
&lt;span class="py"&gt;topic_name&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"other-topic"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Design considerations
&lt;/h3&gt;

&lt;p&gt;All options and the model structure use the &lt;strong&gt;TypedDict&lt;/strong&gt; feature. This is like a regular dictionary, but also includes typing information for the defined fields. Thus you can get type hints in your editor of choice for these structures, plus it allows for you to extend them yourself as well. It also uses &lt;strong&gt;structural typing&lt;/strong&gt;, meaning that as long as the dictionary includes the required fields, it is a valid data structure. No need to create class objects explicitly. It is kind of similar to the typing experience found in, for example, TypeScript.&lt;/p&gt;

&lt;p&gt;Rather than loading resources into the stack constructor, I suggest using regular functions to add them. This should help with building a bit more modular code without too much boilerplate.&lt;/p&gt;

&lt;h3&gt;
  
  
  Things to do
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Add handling for stack dependencies&lt;/li&gt;
&lt;li&gt;Generate API docs

&lt;ul&gt;
&lt;li&gt;Issues with getting &lt;strong&gt;pdoc&lt;/strong&gt; to work when JSII is involved&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Figure out reasonable scope without making it too heavy, for example

&lt;ul&gt;
&lt;li&gt;Wrappers for sharing data between stacks? (Parameter store, etc)&lt;/li&gt;
&lt;li&gt;Add (optional) default monitoring (e.g. via cdk-monitoring-constructs)?&lt;/li&gt;
&lt;li&gt;Add (optional) default security/policy processing (e.g. via cdk-nag)?&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Get more feedback&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;p&gt;This template is an attempt to make some nicer defaults for people developing AWS CDK solutions with Python. Check out &lt;a href="https://github.com/cloudgnosis/awscdk-python-template"&gt;https://github.com/cloudgnosis/awscdk-python-template&lt;/a&gt; and tell me what you think of it!&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloudops</category>
      <category>productivity</category>
      <category>cdk</category>
    </item>
    <item>
      <title>Tidy Cloud AWS - Rebuilding DevOps</title>
      <dc:creator>Erik Lundevall Zara</dc:creator>
      <pubDate>Wed, 05 Jul 2023 11:53:00 +0000</pubDate>
      <link>https://community.ops.io/eriklz/tidy-cloud-aws-rebuilding-devops-54gl</link>
      <guid>https://community.ops.io/eriklz/tidy-cloud-aws-rebuilding-devops-54gl</guid>
      <description>&lt;p&gt;Hello all!&lt;/p&gt;

&lt;p&gt;Welcome to the next issue of the Tidy Cloud AWS newsletter! This issue looks at System Initiative's announcement and their tools for DevOps work.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;




&lt;h2&gt;
  
  
  Infrastructure as model
&lt;/h2&gt;

&lt;p&gt;Recently I listened to &lt;a href="https://changelog.com/podcast/545"&gt;Changelog podcast #545&lt;/a&gt;, with the title &lt;strong&gt;Rebuilding DevOps from the ground up&lt;/strong&gt;. It is an interview with Adam Jacob, who is has been around in the DevOps space for a long time and was a co-founder of &lt;strong&gt;Chef&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;He is now the CEO of &lt;a href="https://www.systeminit.com"&gt;System Initiative&lt;/a&gt;. Their goal is to provide better DevOps tooling while still following DevOps principles.&lt;/p&gt;

&lt;p&gt;Read the blog post &lt;a href="https://www.systeminit.com/blog-devops-without-papercuts"&gt;DevOps without paper cuts&lt;/a&gt; to understand the pains and challenges System Initiative tries to address. Their very first public talk around what they do was done earlier this year in February: &lt;a href="https://www.youtube.com/watch?v=5lPa2U239C4"&gt;What if Infrastructure as Code never existed?&lt;/a&gt;. This talk focuses on the re-thinking process, and that there is a need to "break the rules" and do things differently. The blog post &lt;a href="https://www.systeminit.com/blog-five-breakthroughs"&gt;Five breakthroughs on the path to System Initiative&lt;/a&gt; outlines a few key items that they tried and changed to make the whole approach something that would improve DevOps-inspired work.&lt;br&gt;
They discuss digital twins of actual infrastructure, referring to infrastructure as a model.&lt;br&gt;
The software is currently in a private beta, with the intention that it will be open source. What System Initiative will make money on is packaging the whole solution as a coherent and production-ready solution. They compare it to RedHat's business model, which has this type of approach.&lt;/p&gt;

&lt;p&gt;I appreciate they do not require you to start from scratch. It can live in parallel with existing solutions. You should, in theory, be able to transition step by step in using this infrastructure as a model approach.&lt;br&gt;
This is thanks to the bi-directional support of infrastructure management via digital twin technology.&lt;/p&gt;

&lt;p&gt;I find this a very refreshing approach, and which comes from a different perspective than &lt;strong&gt;infrastructure from software&lt;/strong&gt;. System Initiative is very much coming from an &lt;em&gt;understanding of ops problems, and also the ideas behind DevOps in the first place with collaboration between operations and developers.&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;Infrastructure from software comes very much from a point of view of &lt;em&gt;making building solutions in the cloud easier for the developer, and trying to make infrastructure transparent/easier to cope with.&lt;/em&gt; &lt;/p&gt;

&lt;p&gt;The paper cuts in DevOps-related work is something I have in my work most days, so it is nice to see something that may be transformative here.&lt;/p&gt;




&lt;p&gt;You can find older newsletters and more at &lt;a href="https://tidycloudaws.com"&gt;Tidy Cloud AWS&lt;/a&gt;. You will also find other useful articles around AWS automation and infrastructure-as-software.&lt;/p&gt;

&lt;p&gt;Until next time,&lt;/p&gt;

&lt;p&gt;/Erik&lt;/p&gt;

</description>
      <category>devops</category>
      <category>cloudops</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Tidy Cloud AWS - working backwards</title>
      <dc:creator>Erik Lundevall Zara</dc:creator>
      <pubDate>Fri, 09 Jun 2023 11:30:00 +0000</pubDate>
      <link>https://community.ops.io/eriklz/tidy-cloud-aws-working-backwards-1li0</link>
      <guid>https://community.ops.io/eriklz/tidy-cloud-aws-working-backwards-1li0</guid>
      <description>&lt;p&gt;Hello all!&lt;/p&gt;

&lt;p&gt;Welcome to the next issue of the Tidy Cloud AWS newsletter! In this issue, I am coming back to a topic I have touched on before, which I think is worth bringing up again - working backwards and asking &lt;strong&gt;why?&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I will experiment with the content of the email newsletter, the &lt;a href="https://tidycloudaws.com"&gt;Tidy Cloud AWS website&lt;/a&gt;, and sites like &lt;a href="https://community.ops.io"&gt;The OPS community&lt;/a&gt;. The general idea is to adapt content more depending on where it is published. The schedules will be different also, with email newsletter being the most frequent.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;




&lt;h2&gt;
  
  
  How working backward is the best way forward
&lt;/h2&gt;

&lt;p&gt;Have you had a situation where you have chosen a specific solution to a set of problems because &lt;em&gt;it seemed to be the right thing to use&lt;/em&gt;, only to discover later that it did not work well at all, was too expensive or no one used it? &lt;br&gt;
I have been there multiple times. It's easy to solve problems without researching first.&lt;/p&gt;

&lt;p&gt;An example: At a former employer, we used &lt;a href="https://www.sumologic.com/"&gt;SumoLogic&lt;/a&gt; for a lot of log analytics and monitoring of AWS workloads. It worked very well, and it was quite useful for the operations group. Then some persons from that group joined a startup company and had to select the tooling to use when operating their AWS workloads. Here, it did not work out at all. The same tool was barely used, and the value was questionable.&lt;/p&gt;

&lt;p&gt;A key reason for this was that the tool was picked before properly understanding what was needed compared to the old company usage:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Different and smaller organization, different responsibilities and roles&lt;/li&gt;
&lt;li&gt;Workloads were not the same, use cases were different, although similar at a glance&lt;/li&gt;
&lt;li&gt;Priorities were different&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In short, the differences meant that applying the same solution pattern did not provide &lt;strong&gt;enough value to the organization&lt;/strong&gt;. Not that SumoLogic is a poor tool - on the contrary, I think it is a very capable tool and can provide significant value.&lt;/p&gt;

&lt;p&gt;Amazon and AWS pride themselves on customer-focused product development, beginning with a press release:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.quora.com/What-is-Amazons-approach-to-product-development-and-product-management"&gt;Working backward at Amazon&lt;/a&gt;&lt;br&gt;
You don't need a press release like Amazon, but the same idea stands.&lt;br&gt;
A bit of research going backward would have helped to make a better decision for the monitoring solution:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Identify stakeholders

&lt;ul&gt;
&lt;li&gt;What roles do need information about the state of the solution(s) and what are their responsibilities?&lt;/li&gt;
&lt;li&gt;What do information they require, in what form, and when?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Identify key performance indicators

&lt;ul&gt;
&lt;li&gt;What are the business values that we want to ensure are upheld for our customers?&lt;/li&gt;
&lt;li&gt;How is that measured?&lt;/li&gt;
&lt;li&gt;What is the definition of a healthy state for those values?&lt;/li&gt;
&lt;li&gt;At what point is that healthy state at risk?&lt;/li&gt;
&lt;li&gt;What actions should be performed when the healthy state is at risk?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Map KPIs and solution resources

&lt;ul&gt;
&lt;li&gt;Identify resources/components that can provide data&lt;/li&gt;
&lt;li&gt;Identify types of insights that can be gained (behaviour, faults, performance)&lt;/li&gt;
&lt;li&gt;Identify the type of information to collect (logs, metrics)&lt;/li&gt;
&lt;li&gt;Identify source to collect from (e.g. log files, system performance data)&lt;/li&gt;
&lt;li&gt;Figure out threshold and/or patterns in resources to use for alarms&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Reports, alerts, actions

&lt;ul&gt;
&lt;li&gt;What to report to who&lt;/li&gt;
&lt;li&gt;How to deliver report data&lt;/li&gt;
&lt;li&gt;Which formats to use&lt;/li&gt;
&lt;li&gt;Determine Severity&lt;/li&gt;
&lt;li&gt;Actions (automated, manual)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The above is an iterative process - both to get into enough detail to answer questions, and changes in requirements.&lt;/p&gt;

&lt;p&gt;The general pattern here applies to many areas, not just monitoring solutions. This also applies to automation. &lt;strong&gt;When should you automate a process or activity?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The answer is “it depends”, or rather &lt;strong&gt;it is not the right question to ask first&lt;/strong&gt;. If you ask a question like that, you may get answers such as &lt;em&gt;“When you have repeated it 3 times”&lt;/em&gt; or &lt;em&gt;“Always”&lt;/em&gt;. But there is no context in such answers.&lt;/p&gt;

&lt;p&gt;A better question to ask is &lt;strong&gt;why should this process or activity be automated?&lt;/strong&gt; At the surface level, answers that may come up could be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;To save time for repeated tasks&lt;/li&gt;
&lt;li&gt;To be (more) consistent&lt;/li&gt;
&lt;li&gt;To avoid human error&lt;/li&gt;
&lt;li&gt;To distill expert knowledge into something that others may use&lt;/li&gt;
&lt;li&gt;To have some documentation of the steps of the process or activity&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But these are still vague. They may all be valid to some extent, however, they should still go back to a defined business value or aim.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start with your customer and work backward&lt;/strong&gt;. It requires discipline though, and practice.&lt;/p&gt;

&lt;p&gt;Even with Amazon Web Services, where they presumably practice this every single day and it is a part of their corporate culture, they can still provide customer experiences that are quite crappy. I think there are other aspects at play as well though, plus it might not always be clear who is the customer from AWS point of view.&lt;/p&gt;

&lt;p&gt;What do you think about working backward from the customer?&lt;/p&gt;




&lt;p&gt;You can find older newsletters and more at &lt;a href="https://tidycloudaws.com"&gt;Tidy Cloud AWS&lt;/a&gt;. You will also find other useful articles around AWS automation and infrastructure-as-software.&lt;/p&gt;

&lt;p&gt;Until next time,&lt;/p&gt;

&lt;p&gt;/Erik&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>aws</category>
    </item>
    <item>
      <title>Tidy Cloud AWS #52 - infrastructure - as code, as software, from code</title>
      <dc:creator>Erik Lundevall Zara</dc:creator>
      <pubDate>Thu, 01 Jun 2023 10:23:30 +0000</pubDate>
      <link>https://community.ops.io/eriklz/tidy-cloud-aws-52-infrastructure-as-code-as-software-from-code-5acg</link>
      <guid>https://community.ops.io/eriklz/tidy-cloud-aws-52-infrastructure-as-code-as-software-from-code-5acg</guid>
      <description>&lt;p&gt;Hello all!&lt;/p&gt;

&lt;p&gt;Welcome to the next issue of the Tidy Cloud AWS newsletter! In this issue, I talk a bit about the terms &lt;strong&gt;infrastructure as code&lt;/strong&gt;, &lt;strong&gt;infrastructure as software&lt;/strong&gt;, and a relatively new term &lt;strong&gt;infrastructure from code&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Enjoy!&lt;/p&gt;




&lt;h2&gt;
  
  
  Managing and surviving infrastructure
&lt;/h2&gt;

&lt;p&gt;In this newsletter, I often cover matters related to &lt;strong&gt;infrastructure as code&lt;/strong&gt;, and sometimes also refer to &lt;strong&gt;infrastructure as software.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Infrastructure as code often uses text-based, machine-readable descriptions and version control solutions to manage changes.&lt;/p&gt;

&lt;p&gt;That is pretty much as far as the common description and understanding of the term goes. Other software engineering principles are often neglected. This can include things such as modular design, test driven design, test automation, refactoring.&lt;/p&gt;

&lt;p&gt;Part of the reason is that some tools are not so well adapted for this, and part of it may be a lack of insight on how to apply such principles to infrastructure.&lt;/p&gt;

&lt;p&gt;Infrastructure as software is a way to distinguish it as a form of software engineering, not just simply apply some software-related tools. &lt;br&gt;
It has also been used by Pulumi to describe &lt;em&gt;infrastructure as code, but with regular programming languages.&lt;/em&gt; (&lt;a href="https://www.pulumi.com/what-is/what-is-infrastructure-as-software/"&gt;https://www.pulumi.com/what-is/what-is-infrastructure-as-software/&lt;/a&gt;). &lt;/p&gt;

&lt;p&gt;It's more important to understand software engineering principles and methods rather than specific languages..&lt;/p&gt;

&lt;h3&gt;
  
  
  ...and now, infrastructure from code
&lt;/h3&gt;

&lt;p&gt;A relatively new term that has popped up is &lt;strong&gt;infrastructure from code&lt;/strong&gt;. The general idea here is that &lt;strong&gt;the infrastructure is derived from the application code, or that application and infrastructure code are the same.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;There are multiple approaches here. These include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;added annotations in the code for the infrastructure&lt;/li&gt;
&lt;li&gt;SDKs and frameworks&lt;/li&gt;
&lt;li&gt;new languages and environments built to abstract away the complexities of infrastructure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goals are like what proponents of &lt;strong&gt;serverless&lt;/strong&gt; were talking about almost a decade ago - simplify handling of the underlying infrastructure so developers can focus on building applications.&lt;/p&gt;

&lt;p&gt;A few players in this space include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.eventual.ai"&gt;Eventual&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://klo.dev"&gt;Klotho&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://getampt.com"&gt;Ampt&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nitric.io"&gt;Nitric&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.winglang.io"&gt;Wing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://darklang.com"&gt;Dark&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Wing and Dark are new languages, which can be a challenge to get adopted. Wing seems, though, that it should be able to leverage the Node.js ecosystem to some extent.&lt;/p&gt;

&lt;p&gt;Some of these tools will generate infrastructure code for other tools, such as Terraform, AWS CDK and Pulumi, under the hood.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reflections
&lt;/h2&gt;

&lt;p&gt;The &lt;strong&gt;infrastructure from code&lt;/strong&gt; tools are &lt;strong&gt;next generation serverless&lt;/strong&gt; tools, more so than &lt;strong&gt;next generation infrastructure as code&lt;/strong&gt;, in my mind. So I think the term &lt;em&gt;infrastructure from code&lt;/em&gt; is misleading. &lt;/p&gt;

&lt;p&gt;If you are in a position where you handle both application code and infrastructure code, and run in the cloud, then these tools make sense for some use cases.&lt;/p&gt;

&lt;p&gt;Existing infrastructure as code tools will remain useful. Good software engineering practices will help them thrive. To me, that aspect is key more than specific implementation details on how the infrastructure code is generated.&lt;/p&gt;

&lt;p&gt;If you want to read more extensive coverage on this topic, there are a few blog posts that are worth reading:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adam Ruka, former team member of the AWS CDK team, talks about &lt;a href="https://www.endoflineblog.com/history-and-future-of-infrastructure-as-code"&gt;different generations of infrastructure as code tools&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Ala Shiban from Klotho talks about &lt;a href="https://klo.dev/state-of-infrastructure-from-code-2023"&gt;state of infrastructure from code 2023&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Yehuda Cohen has written an extensive post &lt;a href="https://yehudacohen.substack.com/p/exploring-the-emerging-cloud-development"&gt;exploring different cloud development tools&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;You can find older newsletters and more at &lt;a href="https://tidycloudaws.com"&gt;Tidy Cloud AWS&lt;/a&gt;. You will also find other useful articles around AWS automation and infrastructure-as-software.&lt;/p&gt;

&lt;p&gt;Until next time,&lt;/p&gt;

&lt;p&gt;/Erik&lt;/p&gt;

</description>
      <category>aws</category>
      <category>productivity</category>
      <category>cloudops</category>
      <category>automation</category>
    </item>
    <item>
      <title>Tidy Cloud AWS #51 - fixing CloudFormation shortcomings</title>
      <dc:creator>Erik Lundevall Zara</dc:creator>
      <pubDate>Mon, 29 May 2023 09:57:00 +0000</pubDate>
      <link>https://community.ops.io/eriklz/tidy-cloud-aws-51-fixing-cloudformation-shortcomings-102i</link>
      <guid>https://community.ops.io/eriklz/tidy-cloud-aws-51-fixing-cloudformation-shortcomings-102i</guid>
      <description>&lt;p&gt;Hello all!&lt;/p&gt;

&lt;p&gt;Welcome to the next issue of the Tidy Cloud AWS newsletter! In this issue, I will cover a bit on fixing shortcomings in CloudFormation, at least for some specific use cases.&lt;br&gt;
Enjoy!&lt;/p&gt;




&lt;h2&gt;
  
  
  CloudFormation custom resource challenges
&lt;/h2&gt;

&lt;p&gt;CloudFormation has had &lt;strong&gt;custom resources&lt;/strong&gt; and &lt;strong&gt;custom resource types&lt;/strong&gt; for a while now. &lt;br&gt;
There were &lt;a href="https://aws.amazon.com/blogs/devops/customers-cloudformation-and-custom-resources/"&gt;examples of custom resources in the past as early as 2014&lt;/a&gt;; custom resource types arrived a few years later..&lt;br&gt;
The features have not been adopted widely, even with vendors creating custom resources.&lt;br&gt;
AWS has difficulty with consistent coverage across its Console, APIs, CLI, and CloudFormation. Custom resources handling has still been too much of a hurdle to be widely adopted to address these shortcomings.&lt;/p&gt;

&lt;h2&gt;
  
  
  AWS CDK to help
&lt;/h2&gt;

&lt;p&gt;AWS CDK (Cloud Development Kit) is a successful and convenient way to use custom resources with CloudFormation. AWS CDK has custom resources to help with CloudFormation rough edges for various services. &lt;/p&gt;

&lt;p&gt;Mostly, you only see that there are custom resources in action when your AWS CDK deployments include more AWS Lambda functions than you have defined yourself.&lt;br&gt;
AWS CDK also includes convenience features to make your own custom resources much simpler to define, at least for some use cases. &lt;/p&gt;

&lt;p&gt;Look at my article on &lt;a href="https://tidycloudaws.com/overcoming-shortcomings-in-cloudformation-using-aws-cdk/"&gt;overcoming CloudFormation shortcomings with AWS CDK&lt;/a&gt;, if you are interested in a concrete example.&lt;/p&gt;

&lt;p&gt;From a convenience point of view, it approaches &lt;a href="https://www.pulumi.com/blog/dynamic-providers/"&gt;Pulumi dynamic providers&lt;/a&gt;, although the underlying implementation is quite different.&lt;/p&gt;




&lt;p&gt;You can find older newsletters and more at &lt;a href="https://tidycloudaws.com"&gt;Tidy Cloud AWS&lt;/a&gt;. You will also find other useful articles around AWS automation and infrastructure-as-software.&lt;/p&gt;

&lt;p&gt;Until next time,&lt;/p&gt;

&lt;p&gt;/Erik&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloudformation</category>
      <category>cloudops</category>
      <category>awscdk</category>
    </item>
  </channel>
</rss>
