<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Posts on Sander Knape</title>
    <link>https://sanderknape.com/post/</link>
    <description>Recent content in Posts on Sander Knape</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Tue, 07 Apr 2026 09:00:00 +0000</lastBuildDate>
    <atom:link href="https://sanderknape.com/post/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>The Organization of the Future: Smaller Teams, Harder Constraints</title>
      <link>https://sanderknape.com/2026/04/organization-future-smaller-teams-harder-constraints/</link>
      <pubDate>Tue, 07 Apr 2026 09:00:00 +0000</pubDate>
      <guid>https://sanderknape.com/2026/04/organization-future-smaller-teams-harder-constraints/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://sanderknape.com/2025/03/engineering-moving-up-the-stack/&#34;&gt;first post&lt;/a&gt; in this series argued that AI is moving engineering up the stack, away from implementation and toward systems, architecture, and governance. The &lt;a href=&#34;https://sanderknape.com/2025/03/engineer-future-builder-to-orchestrator/&#34;&gt;second&lt;/a&gt; argued that this changes what engineers do: judgment replaces implementation as the primary constraint, and the best engineers become orchestrators rather than builders.&lt;/p&gt;&#xA;&lt;p&gt;The third question—the one boards and executive teams most need to answer—is what this means for how engineering organizations are designed.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s not mainly a question of how many engineers to hire, or which AI tools to buy. It&amp;rsquo;s a structural question about how organizations produce, govern, and sustain software at all.&lt;/p&gt;</description>
    </item>
    <item>
      <title>The Engineer of the Future: From Builder to Orchestrator</title>
      <link>https://sanderknape.com/2026/04/engineer-future-builder-to-orchestrator/</link>
      <pubDate>Tue, 07 Apr 2026 08:00:00 +0000</pubDate>
      <guid>https://sanderknape.com/2026/04/engineer-future-builder-to-orchestrator/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://sanderknape.com/2025/03/engineering-moving-up-the-stack/&#34;&gt;previous post&lt;/a&gt; argued that AI is moving engineering up the stack, shifting effort from writing code to designing systems and governing software in production. That has implications for strategy and organizational design. But it also changes something more personal: what it actually means to do this job.&lt;/p&gt;&#xA;&lt;p&gt;If implementation is no longer the constraint, what is? My argument is judgment. And if judgment is the constraint, the engineer&amp;rsquo;s role has to change around that.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Engineering Is Moving Up the Stack</title>
      <link>https://sanderknape.com/2026/04/engineering-moving-up-the-stack/</link>
      <pubDate>Tue, 07 Apr 2026 07:00:00 +0000</pubDate>
      <guid>https://sanderknape.com/2026/04/engineering-moving-up-the-stack/</guid>
      <description>&lt;p&gt;The debate about AI and software development is stuck on the wrong question.&lt;/p&gt;&#xA;&lt;p&gt;Most discussions ask whether AI writes good enough code, whether it matches human craftsmanship, whether it introduces bugs, whether developers can trust it. Reasonable questions. Increasingly beside the point.&lt;/p&gt;&#xA;&lt;p&gt;The shift that matters more isn&amp;rsquo;t about code quality. It&amp;rsquo;s about where engineering effort is required at all.&lt;/p&gt;&#xA;&lt;p&gt;AI is moving engineering up the stack, from writing code to designing systems to managing the lifecycle of software in production. The work doesn&amp;rsquo;t disappear. It shifts upward, toward broader and more structural concerns.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Terraform &#39;data source will be read during apply&#39; messages - What is it and how to fix</title>
      <link>https://sanderknape.com/2024/11/terraform-data-source-read-during-apply-messages-fix/</link>
      <pubDate>Sat, 09 Nov 2024 12:43:02 +0200</pubDate>
      <guid>https://sanderknape.com/2024/11/terraform-data-source-read-during-apply-messages-fix/</guid>
      <description>&lt;p&gt;Terraform users will likely be familiar with &amp;ldquo;data source will be read during apply&amp;rdquo; messages that may appear in the plan output. These messages can be confusing and may even lead to unexpected re-creation of resources. Typically, these messages are related to using data sources in combination with Terraform modules and explicit dependencies.&lt;/p&gt;&#xA;&lt;p&gt;Data sources and modules are two powerful and essential concepts. Data sources allow you to fetch information from existing resources and pass that data to other resources. Modules promote reusability and hiding complexity by encapsulating collections of resources into sharable, versioned packages. Explicit dependencies are also valid to use in various situations. But combining these concepts can lead to confusion and unexpected behavior.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Measure your golden signals with GKE Managed Prometheus and the nginx-ingress</title>
      <link>https://sanderknape.com/2022/05/measure-golden-signals-gke-managed-prometheus-nginx-ingress/</link>
      <pubDate>Mon, 23 May 2022 08:47:02 +0200</pubDate>
      <guid>https://sanderknape.com/2022/05/measure-golden-signals-gke-managed-prometheus-nginx-ingress/</guid>
      <description>&lt;p&gt;Getting started with setting up proper monitoring dashboards for your application and infrastructure can be challenging. Where to begin? My typical answer to such a question would be to start with the &amp;ldquo;Golden Signals&amp;rdquo;. This blog post will dive into the golden signals and share how you can get started with these signals in Google Cloud using Managed Prometheus and the nginx-ingress controller.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-golden-signals&#34; class=&#34;relative group&#34;&gt;The Golden Signals &lt;span class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100&#34;&gt;&lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34; style=&#34;text-decoration-line: none !important;&#34; href=&#34;#the-golden-signals&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h2&gt;&lt;p&gt;The four golden signals - &lt;a href=&#34;https://sre.google/sre-book/monitoring-distributed-systems/#xref_monitoring_golden-signals&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;coined by the Google SRE book&lt;/a&gt; - can be considered a guide as to what &lt;em&gt;at least&lt;/em&gt; to monitor for your applications. The golden signals are:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Shift left AWS tag enforcement with Terraform and tfsec</title>
      <link>https://sanderknape.com/2021/05/shift-left-aws-tag-enforcement-terraform-tfsec/</link>
      <pubDate>Mon, 03 May 2021 21:03:01 +0200</pubDate>
      <guid>https://sanderknape.com/2021/05/shift-left-aws-tag-enforcement-terraform-tfsec/</guid>
      <description>&lt;p&gt;There are many ways to improve the developer experience of deploying infrastructure into the Cloud. One such method is by shifting left: provide early feedback to shorten the feedback loop and speed up development.&lt;/p&gt;&#xA;&lt;p&gt;When deploying infrastructure into AWS with an infrastructure as code tool such as Terraform, you can validate that code as part of a CI/CD pipeline. A pull request can automatically receive feedback about the configuration of resources, thus enforcing the environment to stay compliant with the organization&amp;rsquo;s policies.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Go crazy with GitHub Actions</title>
      <link>https://sanderknape.com/2021/01/go-crazy-github-actions/</link>
      <pubDate>Wed, 13 Jan 2021 16:32:12 +0200</pubDate>
      <guid>https://sanderknape.com/2021/01/go-crazy-github-actions/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://github.com/features/actions&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;GitHub Actions&lt;/a&gt; is a component of GitHub that allows you to create automated workflows. Through the many different &lt;a href=&#34;https://docs.github.com/en/free-pro-team@latest/actions/reference/events-that-trigger-workflows&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;events&lt;/a&gt; that can trigger workflows you are free to build whatever automation you want. While the most common use case is building CI/CD pipelines, the possibilities are pretty much endless. Check out this list of &lt;a href=&#34;https://github.com/sdras/awesome-actions&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;awesome actions&lt;/a&gt; to get some inspiration.&lt;/p&gt;&#xA;&lt;p&gt;Having spent quite a bit of time with GitHub Actions in the last few months I came across some features that aren&amp;rsquo;t very well documented. It&amp;rsquo;s therefore very well possible that not everyone is familiar with these capabilities. Let&amp;rsquo;s dive into five neat features that you can go crazy with.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A Serverless Payment Workflow using AWS Lambda and the AWS CDK</title>
      <link>https://sanderknape.com/2020/12/serverless-payment-workflow-lambda-cdk/</link>
      <pubDate>Tue, 15 Dec 2020 17:38:12 +0200</pubDate>
      <guid>https://sanderknape.com/2020/12/serverless-payment-workflow-lambda-cdk/</guid>
      <description>&lt;p&gt;Serverless technology is getting more popular by the day. More and more people are starting to experiment with it and learn for which use cases it can add value. In this blog post I share an example of what a fully Serverless workflow can achieve.&lt;/p&gt;&#xA;&lt;p&gt;For a while now I&amp;rsquo;ve been curious how one would implement a payment workflow on a website. I was aware that platforms like &lt;a href=&#34;https://stripe.com/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Stripe&lt;/a&gt;, &lt;a href=&#34;https://www.adyen.com/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Adyen&lt;/a&gt; and &lt;a href=&#34;https://www.mollie.com/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Mollie&lt;/a&gt; exist, but I never knew how much work would be required to set up a fully functioning workflow. I therefore decided to give it a try using nothing but Serverless technology.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Nuances around centralized platform teams</title>
      <link>https://sanderknape.com/2020/11/nuances-around-centralized-platform-teams/</link>
      <pubDate>Fri, 20 Nov 2020 13:49:11 +0200</pubDate>
      <guid>https://sanderknape.com/2020/11/nuances-around-centralized-platform-teams/</guid>
      <description>&lt;p&gt;The popularity of centralized platform teams is rising. The latest &lt;a href=&#34;https://puppet.com/blog/2020-state-of-devops-report-is-here/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Puppet State of DevOps Report&lt;/a&gt; shows that 63% of the respondents have at least one internal platform. Platforms are vital enablers for a more DevOps way of working as they provide self-service capabilities that development teams can autonomously utilize.&lt;/p&gt;&#xA;&lt;p&gt;The definition of a &amp;ldquo;platform&amp;rdquo; isn&amp;rsquo;t set in stone though. Many organizations still struggle to put together a platform team that is really able to add value to the development teams. It&amp;rsquo;s a challenge to build a team with the proper mindset and an organization that supports that team in the right way. The biggest challenges aren&amp;rsquo;t technical: it&amp;rsquo;s the organizational and cultural challenges that must be tackled to ensure such a team&amp;rsquo;s effectiveness.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Amazon Cognito JWTs to authenticate with an Amazon HTTP API</title>
      <link>https://sanderknape.com/2020/08/amazon-cognito-jwts-authenticate-amazon-http-api/</link>
      <pubDate>Sun, 02 Aug 2020 16:29:33 +0200</pubDate>
      <guid>https://sanderknape.com/2020/08/amazon-cognito-jwts-authenticate-amazon-http-api/</guid>
      <description>&lt;p&gt;Last year AWS released a new iteration of their API Gateway product: &lt;a href=&#34;https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api.html&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;HTTP APIs&lt;/a&gt;. This new version promises lower prices, improved performance and some new features. Some features that are available in the older REST API are not (yet) available for HTTP APIs, though. The official &lt;a href=&#34;https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-vs-rest.html&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;comparison page&lt;/a&gt; gives a good overview of which features are available in both products.&lt;/p&gt;&#xA;&lt;p&gt;My favorite new feature available for HTTPs APIs is &lt;a href=&#34;https://docs.aws.amazon.com/apigateway/latest/developerguide/http-api-jwt-authorizer.html&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;JWT Authorizers&lt;/a&gt;. It is now possible to have the HTTP API validate a JWT coming from an OIDC or OAuth 2.0 provider. While this was already possible using a Lambda Authorizer, now this can be achieved in a fully managed way with only a minimum amount of work required. It&amp;rsquo;s even easier now to build secure APIs with proper authentication.&lt;/p&gt;</description>
    </item>
    <item>
      <title>From toil to self-service: automate what matters</title>
      <link>https://sanderknape.com/2020/06/from-toil-self-service-automate-matters/</link>
      <pubDate>Mon, 22 Jun 2020 11:44:02 +0200</pubDate>
      <guid>https://sanderknape.com/2020/06/from-toil-self-service-automate-matters/</guid>
      <description>&lt;p&gt;There are a few reasons that I love my job. One of the most important ones is the variety of work. As a cloud/platform engineer, every day is different. Work goes from writing automation in some programming language, setting up a dashboard in a monitoring/logging tool, hardening Linux machines, writing Infrastructure as Code, building (standardized) CI/CD pipelines, giving workshops, analyzing costs, and more.&lt;/p&gt;&#xA;&lt;p&gt;This wide variety of work wouldn&amp;rsquo;t be possible without automation. You have more time to spend on all these things when manual, repetitive work is automated. SRE &lt;a href=&#34;https://landing.google.com/sre/sre-book/chapters/eliminating-toil/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;defines toil&lt;/a&gt; as follows:&lt;/p&gt;</description>
    </item>
    <item>
      <title>Deploy your pull requests with GitHub Actions and GitHub Deployments</title>
      <link>https://sanderknape.com/2020/05/deploy-pull-requests-github-actions-deployments/</link>
      <pubDate>Wed, 06 May 2020 12:49:31 +0200</pubDate>
      <guid>https://sanderknape.com/2020/05/deploy-pull-requests-github-actions-deployments/</guid>
      <description>&lt;p&gt;Performing (automated) tests on pull requests is a powerful mechanism to reduce the feedback loop on code changes. Known as &lt;a href=&#34;https://en.wikipedia.org/wiki/Shift-left_testing&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;shift left&lt;/a&gt;, the idea is that the earlier you find an issue with your code, the easier it is to fix it. For one, as you wrote the code recently it&amp;rsquo;s easier to get back into it. And of course, any code issue that doesn&amp;rsquo;t hit production is another potential issue for your end-users prevented.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why it&#39;s great to write blog posts</title>
      <link>https://sanderknape.com/2020/04/why-great-write-blog-posts/</link>
      <pubDate>Fri, 17 Apr 2020 06:32:55 +0200</pubDate>
      <guid>https://sanderknape.com/2020/04/why-great-write-blog-posts/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been blogging for close to four years now. I started blogging because I wanted to pick up a new skill (writing) and challenge myself to do something new. Because I blog about what is both my work and hobby - software development and more specifically, cloud/platform engineering - it&amp;rsquo;s relatively simple to come up with new subjects and I also grow my knowledge as I write these posts.&lt;/p&gt;&#xA;&lt;p&gt;In fact: I believe that writing blog posts can be super valuable for pretty much everyone. Of course you will potentially help, inform or inspire others with your content. But you definitely also benefit personally from writing blog posts in many different ways.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Running self-hosted GitHub Actions runners in your Kubernetes cluster</title>
      <link>https://sanderknape.com/2020/03/self-hosted-github-actions-runner-kubernetes/</link>
      <pubDate>Mon, 16 Mar 2020 09:23:33 +0200</pubDate>
      <guid>https://sanderknape.com/2020/03/self-hosted-github-actions-runner-kubernetes/</guid>
      <description>&lt;p&gt;Last year November GitHub released &lt;a href=&#34;https://github.com/features/actions&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;GitHub Actions&lt;/a&gt;, a CI/CD solution build on top of GitHub&amp;rsquo;s Source Code Management. GitHub Actions is very convenient to use when your source code is already stored in GitHub as no additional tool is required for your CI/CD requirements. This blog is for example updated through a &lt;a href=&#34;https://github.com/SanderKnape/blog/blob/master/.github/workflows/publish.yml&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;GitHub Actions workflow&lt;/a&gt; whenever I push an update to my GitHub repository (like I just did with this post).&lt;/p&gt;&#xA;&lt;p&gt;Earlier this year GitHub released support for &lt;a href=&#34;https://help.github.com/en/actions/hosting-your-own-runners/about-self-hosted-runners&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;self-hosted runners&lt;/a&gt;. These runners run in your own infrastructure which has several advantages. Especially useful is the fact that these runners can access any private resources in your infrastructure such as staging environments for automated testing or secret/artifact management solutions not exposed publicly.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a static serverless website using S3 and CloudFront</title>
      <link>https://sanderknape.com/2020/02/building-a-static-serverless-website-using-s3-cloudfront/</link>
      <pubDate>Wed, 12 Feb 2020 19:25:02 +0200</pubDate>
      <guid>https://sanderknape.com/2020/02/building-a-static-serverless-website-using-s3-cloudfront/</guid>
      <description>&lt;p&gt;Hosting static websites is great. As they only contain static assets to be downloaded by the visitor&amp;rsquo;s browser - think HTML, CSS, Javascript, Fonts, images - no server-side code such as Java or PHP needs to be run. They&amp;rsquo;re therefore typically faster to load than dynamic websites, they have a smaller attack surface, and are easier to cache for even better performance.&lt;/p&gt;&#xA;&lt;p&gt;That is why some time ago I moved this blog from a Wordpress installation hosted on EC2 to a static website. As I was already in AWS, and I knew that S3 + CloudFront was a popular choice for hosting static websites, I decided to host my blog in S3 with CloudFront in front of it as the CDN.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Roundup of the most important pre-re:Invent 2019 releases - so far</title>
      <link>https://sanderknape.com/2019/11/most-important-pre-reinvent-releases/</link>
      <pubDate>Mon, 25 Nov 2019 11:04:24 +0200</pubDate>
      <guid>https://sanderknape.com/2019/11/most-important-pre-reinvent-releases/</guid>
      <description>&lt;p&gt;The most exciting time of the year for AWS Enthusiasts is upon us. In exactly seven days, AWS re:Invent 2019 will kick off and everyone is excited to see what great features will be released and announced this time around.&lt;/p&gt;&#xA;&lt;p&gt;This year especially though, many new features are already released the weeks leading up to re:Invent. If you haven&amp;rsquo;t been paying attention, it was easy to much some great new announcements. Therefore, in this blog post, a roundup of the (in my opinion) most important AWS releases in the past few weeks.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Five ways to enable developer autonomy in AWS</title>
      <link>https://sanderknape.com/2019/07/five-ways-enable-developer-autonomy-aws/</link>
      <pubDate>Tue, 23 Jul 2019 12:00:00 +0200</pubDate>
      <guid>https://sanderknape.com/2019/07/five-ways-enable-developer-autonomy-aws/</guid>
      <description>&lt;p&gt;It hasn&amp;rsquo;t been that long since it was normal to request compute capacity at some operations department within your organization. In fact, it&amp;rsquo;s probably still pretty common in some organizations. With the move to virtualization and especially the cloud, this process of course has changed dramatically for the good. Not only compute capacity for applications, but also resources such as databases, queues, load balancers and storage are now available virtually unlimited.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Installing private Git repositories through npm install in Docker</title>
      <link>https://sanderknape.com/2019/06/installing-private-git-repositories-npm-install-docker/</link>
      <pubDate>Mon, 17 Jun 2019 13:30:02 +0200</pubDate>
      <guid>https://sanderknape.com/2019/06/installing-private-git-repositories-npm-install-docker/</guid>
      <description>&lt;p&gt;How do you properly use an SSH key in a Dockerfile? There are many ways to do it, including many ways to do it wrong. What you will want to prevent is that your ssh key ends up in one of your intermediate images or layers. These are the layers that Docker creates with pretty much every command in your Dockerfile. You may think that you properly clean up your secrets later in the Dockerfile, but the secret will then still be available in one of these layers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building serverless applications with the AWS CDK - and testing them locally</title>
      <link>https://sanderknape.com/2019/05/building-serverless-applications-aws-cdk/</link>
      <pubDate>Fri, 31 May 2019 16:35:02 +0200</pubDate>
      <guid>https://sanderknape.com/2019/05/building-serverless-applications-aws-cdk/</guid>
      <description>&lt;p&gt;The &lt;a href=&#34;https://github.com/awslabs/aws-cdk&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;AWS Cloud Development Kit&lt;/a&gt; (AWS CDK) is a new framework for defining Infrastructure as Code (IaC) by AWS. It allows you to write IaC in a set of different languages. At the moment the following languages are supported: Javascript, Typescript, Python, Java, .NET. Support for other languages is coming.&lt;/p&gt;&#xA;&lt;p&gt;Of course, other methods like CloudFormation and Terraform already exist to write IaC. Using these tools you write declarative code in YAML, JSON or the Hashicorp Configuration Language (HCL) in a mostly declarative state. These tools will also support some basic operators such as if-statements and for-loops. Especially HCL has many of these capabilities with the latest &lt;a href=&#34;https://www.hashicorp.com/blog/announcing-terraform-0-12&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;0.12.0 release&lt;/a&gt;. However, it will always be different from using a &amp;ldquo;real&amp;rdquo; programming language. And it requires you to use a new tool, instead of using a language you already know.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Improving Kubernetes deployments with Helm</title>
      <link>https://sanderknape.com/2019/03/improving-kubernetes-deployments-helm/</link>
      <pubDate>Fri, 15 Mar 2019 22:47:02 +0200</pubDate>
      <guid>https://sanderknape.com/2019/03/improving-kubernetes-deployments-helm/</guid>
      <description>&lt;p&gt;I recently blogged about &lt;a href=&#34;https://sanderknape.com/2019/02/automated-deployments-kubernetes-gitlab/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;automated deployments to Kubernetes using GitLab&lt;/a&gt;. One of the steps required when automating deployments is replacing the Docker tag with the correct value in the Kubernetes Deployment. In that blog post, this looks like the following:&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;deployment.yaml&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-yaml&#34; data-lang=&#34;yaml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;apiVersion&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;apps/v1&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;kind&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;Deployment&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;metadata&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  [&lt;span style=&#34;color:#ae81ff&#34;&gt;...]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;spec&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  &lt;span style=&#34;color:#f92672&#34;&gt;template&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#f92672&#34;&gt;spec&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;      &lt;span style=&#34;color:#f92672&#34;&gt;containers&lt;/span&gt;:&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;          &lt;span style=&#34;color:#f92672&#34;&gt;image&lt;/span&gt;: &lt;span style=&#34;color:#ae81ff&#34;&gt;sanderknape/go-hello-world:&amp;lt;VERSION&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  [&lt;span style=&#34;color:#ae81ff&#34;&gt;...]&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The &lt;code&gt;&amp;lt;VERSION&amp;gt;&lt;/code&gt; string is then replaced in the GitLab pipeline as follows:&lt;/p&gt;&#xA;&lt;p&gt;&lt;code&gt;sed -i &amp;quot;s/&amp;lt;VERSION&amp;gt;/${CI_COMMIT_SHORT_SHA}/g&amp;quot; deployment.yaml&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;This grabs the short SHA hash of the current Git commit that is checked out. Earlier in the pipeline, a Docker image has been built and tagged with that SHA, and pushed to a Docker registry.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Kubernetes Helm to push ConfigMap changes to your Deployments</title>
      <link>https://sanderknape.com/2019/03/kubernetes-helm-configmaps-changes-deployments/</link>
      <pubDate>Thu, 07 Mar 2019 08:47:02 +0200</pubDate>
      <guid>https://sanderknape.com/2019/03/kubernetes-helm-configmaps-changes-deployments/</guid>
      <description>&lt;p&gt;In recent years Kubernetes has quickly gained a lot of popularity and it currently has huge momentum. Adoption is rising while at the same time, new users find out the areas where Kubernetes is still lacking.&lt;/p&gt;&#xA;&lt;p&gt;One such area is the lifecycle management of application configuration. The construct in Kubernetes to store such configuration is the &lt;a href=&#34;https://kubernetes.io/docs/tasks/configure-pod-container/configure-pod-configmap/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;ConfigMap&lt;/a&gt;. These ConfigMaps can be referenced from Pods or Deployments and the values can be injected to the container using environment variables or files through volumes.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automated deployments to Kubernetes with GitLab</title>
      <link>https://sanderknape.com/2019/02/automated-deployments-kubernetes-gitlab/</link>
      <pubDate>Thu, 28 Feb 2019 13:47:02 +0200</pubDate>
      <guid>https://sanderknape.com/2019/02/automated-deployments-kubernetes-gitlab/</guid>
      <description>&lt;p&gt;In this blog post we&amp;rsquo;ll go through the steps of creating an automated deployment pipeline for Kubernetes using GitLab. In the end we&amp;rsquo;ll have a simple Go application running that very excitingly returns &amp;ldquo;Hello, World!&amp;rdquo;.&lt;/p&gt;&#xA;&lt;h1 id=&#34;prerequisites&#34; class=&#34;relative group&#34;&gt;Prerequisites &lt;span class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100&#34;&gt;&lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34; style=&#34;text-decoration-line: none !important;&#34; href=&#34;#prerequisites&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;p&gt;Before we can begin our quest for automation, we&amp;rsquo;ll need to set up some tools. Many alternatives of course exist to the tools that I pick. Feel free to use any other option, but make sure to make any necessary changes if you are following along with this post.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Blocking account-wide creation of public S3 buckets through a CloudFormation custom resource</title>
      <link>https://sanderknape.com/2018/11/blocking-account-wide-creation-public-s3-buckets-cloudformation-custom-resource/</link>
      <pubDate>Fri, 16 Nov 2018 17:25:02 +0200</pubDate>
      <guid>https://sanderknape.com/2018/11/blocking-account-wide-creation-public-s3-buckets-cloudformation-custom-resource/</guid>
      <description>&lt;p&gt;Yesterday, AWS announced the release of an important and much-wanted new feature for S3: &lt;a href=&#34;https://aws.amazon.com/blogs/aws/amazon-s3-block-public-access-another-layer-of-protection-for-your-accounts-and-buckets/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;blocking the creation of public S3 buckets on an account-wide&lt;/a&gt;. Enough has been written already about open S3 buckets on the internet. Given that it is very simple to create a public S3 bucket, we regularly learn about new (big) companies that have exposed privacy-sensitive data to the world through such buckets.&lt;/p&gt;&#xA;&lt;p&gt;The confusion is mainly around opening up your bucket to &amp;ldquo;everyone&amp;rdquo;. Where people expect this to mean &amp;ldquo;everyone in the AWS account&amp;rdquo;, it actually means &amp;ldquo;&lt;em&gt;everyone in the world&lt;/em&gt;&amp;rdquo;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to easily test your AWS IAM credentials locally</title>
      <link>https://sanderknape.com/2018/09/easily-test-aws-iam-credentials-locally/</link>
      <pubDate>Sun, 02 Sep 2018 18:30:02 +0200</pubDate>
      <guid>https://sanderknape.com/2018/09/easily-test-aws-iam-credentials-locally/</guid>
      <description>&lt;p&gt;It is still very common to develop an application locally on a laptop/desktop before pushing it to a production-like environment. The local development environment is kept as close as possible to production using technology such as Docker or AWS SAM when working with AWS Lambda. However, when working with AWS resources through Identity and Access Management (IAM) policies, local IAM permissions are typically different from the permissions the application will have in AWS. This inconsistency can cause issues later in the development workflow: an application that fully worked locally can run into errors when ran in AWS if the IAM permission there are different.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Two years with CloudFormation: lessons learned</title>
      <link>https://sanderknape.com/2018/08/two-years-with-cloudformation-lessons-learned/</link>
      <pubDate>Thu, 09 Aug 2018 12:43:02 +0200</pubDate>
      <guid>https://sanderknape.com/2018/08/two-years-with-cloudformation-lessons-learned/</guid>
      <description>&lt;p&gt;It&amp;rsquo;s been close to two years since I started working with &lt;a href=&#34;https://aws.amazon.com/cloudformation&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;AWS CloudFormation&lt;/a&gt;, the Infrastructure as Code solution by and for AWS. With CloudFormation you can describe and provision your entire AWS infrastructure in code.&lt;/p&gt;&#xA;&lt;p&gt;The entire AWS environment I work with is provisioned through CloudFormation - we only have read-only access to our AWS accounts. We now work with a number of different VPCs and many different AWS services. We currently have close to 300 stacks provisioned, describing the foundational networking and over a hundred different applications. All these stacks are deployed in three different accounts (testing, acceptance and production), with CloudFormation giving us the confidence that all these accounts are almost exactly the same (with minor exceptions such as that we run less resources in testing and acceptance to reduce costs).&lt;/p&gt;</description>
    </item>
    <item>
      <title>The hidden challenges of Serverless: from VM to function</title>
      <link>https://sanderknape.com/2018/08/hidden-challenges-serverless-vm-function/</link>
      <pubDate>Thu, 02 Aug 2018 12:29:02 +0200</pubDate>
      <guid>https://sanderknape.com/2018/08/hidden-challenges-serverless-vm-function/</guid>
      <description>&lt;p&gt;Serverless is a relatively new term. It&amp;rsquo;s a software development paradigm where the entire concept of a &amp;ldquo;server&amp;rdquo; is abstracted away from the development process. You essentially only use managed services that handle scaling, and you pay only for what you use. You no longer need to think about operating systems, security patches, scaling configuration and more. All this is handled for you behind the scenes. The most well-known example is AWS Lambda, though as we will see in this blog post, serverless is much more than that.&lt;/p&gt;</description>
    </item>
    <item>
      <title>How to manage any kind of secret with AWS Secrets Manager</title>
      <link>https://sanderknape.com/2018/07/manage-custom-secrets-aws-secrets-manager/</link>
      <pubDate>Sat, 07 Jul 2018 20:04:02 +0200</pubDate>
      <guid>https://sanderknape.com/2018/07/manage-custom-secrets-aws-secrets-manager/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://aws.amazon.com/secrets-manager/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;AWS Secrets Manager&lt;/a&gt; is a service recently released designed to make the management of secrets easier. It provides built-in support for Amazon RDS, making it very easy to set and rotate secrets and use the CLI or an SDK to retrieve secrets from applications. Through the use of custom Lambda functions, essentially any database or an otherwise protected endpoint is supported.&lt;/p&gt;&#xA;&lt;p&gt;Setting up Secrets Manager for a non-RDS database is less trivial as you need to write your own functionality using AWS Lambda. In this blog post we&amp;rsquo;ll go through the process of creating a Lambda function for rotating a MongoDB user. First, let&amp;rsquo;s dive in a bit more into what Secrets Manager can do for us.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Secret management design decisions: theory plus an example</title>
      <link>https://sanderknape.com/2018/03/secret-management-design-decisions-theory-plus-an-example/</link>
      <pubDate>Thu, 08 Mar 2018 22:29:02 +0200</pubDate>
      <guid>https://sanderknape.com/2018/03/secret-management-design-decisions-theory-plus-an-example/</guid>
      <description>&lt;p&gt;Secret management is one of those security topics that is often an after-thought while designing systems. Passwords are set up manually, shared through non-secure methods such as e-mail or Slack, and password rotation is often neglected because it&amp;rsquo;s time-consuming and error-prone.&lt;/p&gt;&#xA;&lt;p&gt;This is a shame because with some effort, secret management can definitely be automated. If done properly, less manual work is required to build and maintain applications, and of course security is increased reducing risk.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Comparing AWS SAM with the Serverless framework</title>
      <link>https://sanderknape.com/2018/02/comparing-aws-sam-with-serverless-framework/</link>
      <pubDate>Thu, 22 Feb 2018 20:39:02 +0200</pubDate>
      <guid>https://sanderknape.com/2018/02/comparing-aws-sam-with-serverless-framework/</guid>
      <description>&lt;p&gt;Serverless applications are everywhere these days. Having been introduced some years ago with the introduction of AWS Lambda, today serverless is much more then Function as a Service (FaaS). AWS is even starting to use the term in their products: at AWS re:Invent 2017 &amp;ldquo;Aurora Serverless&amp;rdquo; was introduced, a fully managed RDMS database.&lt;/p&gt;&#xA;&lt;p&gt;How do you build such applications? Given that you properly like the Infrastructure as Code mindset as much as I do, the question is how to properly specify serverless applications provisioned in AWS in code. Two main options are out there: the Serverless Framework and AWS SAM. Both frameworks allow you to make it easier to build serverless applications.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Creating a serverless API using AWS API Gateway and DynamoDB</title>
      <link>https://sanderknape.com/2017/10/creating-a-serverless-api-using-aws-api-gateway-and-dynamodb/</link>
      <pubDate>Sat, 14 Oct 2017 14:54:02 +0200</pubDate>
      <guid>https://sanderknape.com/2017/10/creating-a-serverless-api-using-aws-api-gateway-and-dynamodb/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;https://aws.amazon.com/api-gateway/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;AWS API Gateway&lt;/a&gt; is a managed service from Amazon Web Services that allows you to easily create an API endpoint. An incoming request can either be forwarded to an HTTP endpoint, can invoke a Lambda function, or connect to an AWS service. Arguably, the Lambda integration is most commonly used as it allows you to invoke a piece of code without managing a server or operating system (thus, combined with API Gateway, creating a serverless api). A common use case is to store and retrieve data to/from a database.&lt;/p&gt;</description>
    </item>
    <item>
      <title>A custom CloudFormation resource example for CodeDeploy</title>
      <link>https://sanderknape.com/2017/08/custom-cloudformation-resource-example-codedeploy/</link>
      <pubDate>Thu, 17 Aug 2017 21:25:02 +0200</pubDate>
      <guid>https://sanderknape.com/2017/08/custom-cloudformation-resource-example-codedeploy/</guid>
      <description>&lt;p&gt;CloudFormation is the AWS product for Infrastructure as Code. It allows you to provision AWS resources through a template that describes how to configure that resource. Unfortunately, CloudFormation will sometimes be behind on new features released by AWS. Where the AWS console and API will allow you to deploy resources with a certain configuration, in CloudFormation specific settings might simply not yet be available. If its your goal to deploy your AWS environment completely through Infrastructure as Code, this will block you from doing that. Luckily, through &lt;a href=&#34;http://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-custom-resources.html&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;custom resources&lt;/a&gt;, CloudFormation allows you to extend the templating language and still give you the option to provision resources entirely through CloudFormation.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using pre-signed URLs to upload a file to a private S3 bucket</title>
      <link>https://sanderknape.com/2017/08/using-pre-signed-urls-upload-file-private-s3-bucket/</link>
      <pubDate>Tue, 08 Aug 2017 18:12:02 +0200</pubDate>
      <guid>https://sanderknape.com/2017/08/using-pre-signed-urls-upload-file-private-s3-bucket/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve written about serverless architectures before (&lt;a href=&#34;https://sanderknape.com/2017/05/building-a-serverless-website-in-aws/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;a serverless website in S3&lt;/a&gt; and &lt;a href=&#34;https://sanderknape.com/2017/02/dynamic-image-generation-with-aws-api-gateway-and-lambda/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;dynamic image generation with Lambda&lt;/a&gt;). I strongly believe in this notion as it minimizes required maintenance and makes the initial setup much easier. Of course, there is no silver bullet for every problem but use cases definitely exist where a serverless architecture makes a lot of sense.&lt;/p&gt;&#xA;&lt;p&gt;One such use case for serverless is a small piece of functionality that you just need to run. &lt;em&gt;Somewhere&lt;/em&gt;. You want to care as little as possible about this &lt;em&gt;somewhere&lt;/em&gt; because the functionality is so small that pretty much any work you put into the &lt;em&gt;somewhere&lt;/em&gt; is more than the time you spend on the actual functionality.&lt;/p&gt;</description>
    </item>
    <item>
      <title>CloudFormation StackSets: automated cross-account/region deployments</title>
      <link>https://sanderknape.com/2017/07/cloudformation-stacksets-automated-cross-account-region-deployments/</link>
      <pubDate>Wed, 26 Jul 2017 19:53:02 +0200</pubDate>
      <guid>https://sanderknape.com/2017/07/cloudformation-stacksets-automated-cross-account-region-deployments/</guid>
      <description>&lt;p&gt;Yesterday, AWS released &lt;a href=&#34;https://aws.amazon.com/blogs/aws/use-cloudformation-stacksets-to-provision-resources-across-multiple-aws-accounts-and-regions/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;CloudFormation StackSets&lt;/a&gt;. A StackSet is a set of CloudFormation stacks that can easily be deployed to multiple AWS accounts and/or multiple AWS regions. Before, each stack had to be deployed separately and custom scripts were required to orchestrate deploying to multiple accounts/regions. Therefore, this feature is bound to make the lives of AWS administrators a bit easier.&lt;/p&gt;&#xA;&lt;p&gt;There are loads of use cases for deploying stacks to multiple locations. For example, it&amp;rsquo;s considered a best practice to &lt;a href=&#34;https://www.slideshare.net/AmazonWebServices/aws-security-best-practices&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;enable AWS Config in every region&lt;/a&gt;. This service keeps track of resources in an AWS account and changes to those resources. AWS Config needs to be enabled in every region separately, so a CloudFormation stack is required for every region.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Integrating ReactJS with the Google Maps widget</title>
      <link>https://sanderknape.com/2017/07/integrating-reactjs-google-maps-widget/</link>
      <pubDate>Mon, 10 Jul 2017 20:25:02 +0200</pubDate>
      <guid>https://sanderknape.com/2017/07/integrating-reactjs-google-maps-widget/</guid>
      <description>&lt;p&gt;ReactJS is a Javascript library for building user interfaces. The way it ties in with HTML makes it very easy to create interactive components that can easily be reused among different locations within your application. Typically, people build Single Page Applications (SPA) using React. This way, much of the logic required to display a webpage is brought to the visitors&amp;rsquo; browser. Instead of HTML, the web server often returns JSON and React grabs this to build the HTML within the browser.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Building a serverless website in AWS</title>
      <link>https://sanderknape.com/2017/05/building-a-serverless-website-in-aws/</link>
      <pubDate>Mon, 01 May 2017 19:25:02 +0200</pubDate>
      <guid>https://sanderknape.com/2017/05/building-a-serverless-website-in-aws/</guid>
      <description>&lt;p&gt;Maintaining a web server for your website is not ideal. It&amp;rsquo;s tedious, takes a lot of time if done properly and distracts from what you really want to do: sell a product, share information, e.t.c. The more time and money you spend on the platform, the less is available to spend on the website and your core business. Unless you&amp;rsquo;re a hosting company of course, but then this blog post isn&amp;rsquo;t really for you.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Use Infrastructure as Code for automated security in the deployment pipeline</title>
      <link>https://sanderknape.com/2017/05/infrastructure-as-code-automated-security-deployment-pipeline/</link>
      <pubDate>Mon, 01 May 2017 19:25:02 +0200</pubDate>
      <guid>https://sanderknape.com/2017/05/infrastructure-as-code-automated-security-deployment-pipeline/</guid>
      <description>&lt;p&gt;Infrastructure as Code (IaC) is a very powerful concept. The idea is that you put all infrastructure resources - networks, subnets, load balancers, firewalls and so on - in code. You then deploy your infrastructure the same way application developers deploy their code: through a continuous integration / continuous deployment (CI/CD) pipeline. Other benefits already reaped by application developers that become available are code linting, automated testing and an audit trail of your changes if combined with a version control system. The most well known IaC tools are &lt;a href=&#34;https://www.terraform.io/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Terraform&lt;/a&gt; (supports many different services) and &lt;a href=&#34;https://aws.amazon.com/cloudformation&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;CloudFormation&lt;/a&gt; (specifically for the AWS cloud).&lt;/p&gt;</description>
    </item>
    <item>
      <title>Dynamic image generation with AWS API Gateway and Lambda</title>
      <link>https://sanderknape.com/2017/02/dynamic-image-generation-with-aws-api-gateway-and-lambda/</link>
      <pubDate>Tue, 21 Feb 2017 20:49:02 +0200</pubDate>
      <guid>https://sanderknape.com/2017/02/dynamic-image-generation-with-aws-api-gateway-and-lambda/</guid>
      <description>&lt;p&gt;The combination of API Gateway and Lambda is very powerful. It allows you to build some complex functionalities without maintaining any virtual machines yourself. Lambda can be hooked up to many other (AWS) Services including DynamoDB, Kinesis and S3. This paradigm, better known as &lt;em&gt;serverless&lt;/em&gt;, is truly upcoming for years now and its certainly time to jump on the bandwagon if you haven&amp;rsquo;t done so already.&lt;/p&gt;&#xA;&lt;p&gt;One of the better-known use cases of AWS Lambda is the &lt;a href=&#34;http://docs.aws.amazon.com/lambda/latest/dg/with-s3-example.html&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;generation of thumbnail images&lt;/a&gt; as images are inserted into S3. In this blog post we will go one step further and generate images based on the URL and return the image as a binary through API Gateway. The number of possibilities this unlocks are pretty much countless, including the generation of charts, bar codes, dynamic icons and much more.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting started with AWS Cognito</title>
      <link>https://sanderknape.com/2017/02/getting-started-with-aws-cognito/</link>
      <pubDate>Sat, 04 Feb 2017 23:32:02 +0200</pubDate>
      <guid>https://sanderknape.com/2017/02/getting-started-with-aws-cognito/</guid>
      <description>&lt;p&gt;Did you ever write your own authentication service? In essence it&amp;rsquo;s quite trivial: allow a user to enter a username and a password. Next, look in a database for a row/document that matches the received data. If found, login. If not, be gone. It becomes harder when you start thinking more about proper security. And what about features such as password resets, login throttling or logins with Google/Facebook? Surely a managed service must exist that can make all this much easier for us.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Securing your server&#39;s SSH configuration</title>
      <link>https://sanderknape.com/2016/11/securing-your-server-ssh-configuration/</link>
      <pubDate>Sun, 06 Nov 2016 12:43:02 +0200</pubDate>
      <guid>https://sanderknape.com/2016/11/securing-your-server-ssh-configuration/</guid>
      <description>&lt;p&gt;Are your SSH log files flooding with failing login attempts? I&amp;rsquo;ve seen many questions on websites such as Stackoverflow and Stackexchange from worried people that someone is actively targeting their servers with brute-force password logins attempts. Let me get one thing straight first: &lt;em&gt;you are not special!&lt;/em&gt; It&amp;rsquo;s part of internet life: many botnets constantly attempt to login to servers. These can be random IP addresses or known ranges such as Amazon AWS EC2 instances or DigitalOcean droplets. There&amp;rsquo;s nothing much you can do about this except for making sure that your server is securely set up.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Get insight into your server with Datadog</title>
      <link>https://sanderknape.com/2016/10/insight-server-datadog/</link>
      <pubDate>Sun, 09 Oct 2016 17:44:02 +0200</pubDate>
      <guid>https://sanderknape.com/2016/10/insight-server-datadog/</guid>
      <description>&lt;p&gt;I have been running my blog for a few months now on a DigitalOcean droplet. Apart from the few metrics DigitalOcean provides, I never really had any insight into how my server is performing. This includes metrics like CPU and Memory, but also metrics from the applications I run to host my blog, in particular Nginx, php-fpm and MySQL.&lt;/p&gt;&#xA;&lt;p&gt;To get more insight into these metrics, I decided to install the &lt;a href=&#34;https://www.datadoghq.com/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Datadog&lt;/a&gt; agent on my server. Datadog comes with a large selection of &lt;a href=&#34;https://www.datadoghq.com/product/integrations/&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;integrations&lt;/a&gt; for various different applications, including all the applications I am running. The great thing is that Datadog comes with a free plan for up to 5 hosts, although the biggest downside is that the data retention is only for a single day. It is easy to upgrade to a paid plan however, so I might decide to do that sometime in the future.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Integration tests with Travis CI</title>
      <link>https://sanderknape.com/2016/09/integration-tests-travis-ci/</link>
      <pubDate>Tue, 20 Sep 2016 19:46:02 +0200</pubDate>
      <guid>https://sanderknape.com/2016/09/integration-tests-travis-ci/</guid>
      <description>&lt;p&gt;Do you write integration tests? What about unit tests? I believe that more people say &amp;ldquo;Yes&amp;rdquo; to the second question than to the first. Which is kinda weird - for many applications, it really isn&amp;rsquo;t that hard to write integration tests. It might not even be necessary to setup your own infrastructure to run these tests. Many CI tools these days allow you to install databases, queues and such on their build agents. With your external dependencies available on your build server, a complementary sets of tests can be run next to your unit tests.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Using Let&#39;s Encrypt for free automated SSL certificates</title>
      <link>https://sanderknape.com/2016/09/lets-encrypt-automated-ssl-certificates/</link>
      <pubDate>Thu, 01 Sep 2016 13:07:02 +0200</pubDate>
      <guid>https://sanderknape.com/2016/09/lets-encrypt-automated-ssl-certificates/</guid>
      <description>&lt;p&gt;If you maintain your own server or servers with SSL certicates, you might know how annoying it can be to keep those certificates up to date. Especially when you have a multitude of servers, some possibly even serving the same certificates, this is a hassle to manage. Luckily, there is a solution, and its called Let&amp;rsquo;s Encrypt.&lt;/p&gt;&#xA;&lt;h1 id=&#34;introducing-lets-encrypt&#34; class=&#34;relative group&#34;&gt;Introducing Let&amp;rsquo;s Encrypt &lt;span class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100&#34;&gt;&lt;a class=&#34;group-hover:text-primary-300 dark:group-hover:text-neutral-700&#34; style=&#34;text-decoration-line: none !important;&#34; href=&#34;#introducing-lets-encrypt&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&lt;/span&gt;&lt;/h1&gt;&lt;p&gt;Let&amp;rsquo;s Encrypt is a Certificate Authority (CA) that provides an automated method for requesting and renewing free Domain Validated (DV) SSL certificates. It is not possible to request the other certificate types (Organization Validation (OV) and Extended Validation (EV)) through Let&amp;rsquo;s Encrypt. These certificate types require some manual work from the CA and can thus not be automated. If you have good reason to go for an OV or EV certificate, Let&amp;rsquo;s Encrypt is not an option for you. Remember though: each certificate type is equally secure for your website visitors.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Multi-datacenter container orchestration with Nomad and Consul</title>
      <link>https://sanderknape.com/2016/08/nomad-consul-multi-datacenter-container-orchestration/</link>
      <pubDate>Fri, 26 Aug 2016 19:17:02 +0200</pubDate>
      <guid>https://sanderknape.com/2016/08/nomad-consul-multi-datacenter-container-orchestration/</guid>
      <description>&lt;p&gt;Nomad is a distributed, multi-datacenter scheduler for containers, virtual machines and more. It&amp;rsquo;s a tool from Hashicorp, the company that also brings us Consul, a service-discovery tool that allows you to register and discover services. With the latest big release of Nomad (version 0.4), integration with Consul is improved which promises to significantly simplify the creation of a (multi-datacenter) Nomad cluster. You can read more about this release on Hashicorp&amp;rsquo;s &lt;a href=&#34;https://www.hashicorp.com/blog/nomad-0-4.html#clustering&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;blog&lt;/a&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Getting a Qualys SSL Labs A&#43; rating with Nginx</title>
      <link>https://sanderknape.com/2016/06/getting-ssl-labs-rating-nginx/</link>
      <pubDate>Sun, 19 Jun 2016 12:01:02 +0200</pubDate>
      <guid>https://sanderknape.com/2016/06/getting-ssl-labs-rating-nginx/</guid>
      <description>&lt;p&gt;Setting up SSL for your server may seem like a daunting task. In addition, why would you do it? What are the benefits? There are multiple, actually, with some of the most important ones being:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;It’s better for SEO. Back in 2014, Google &lt;a href=&#34;https://webmasters.googleblog.com/2014/08/https-as-ranking-signal.html&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;announced&lt;/a&gt; they would start with giving HTTPS websites a little boost in the search results.&lt;/li&gt;&#xA;&lt;li&gt;It’s not slower than HTTP. In fact - it will even be faster with HTTP2 enabled. Check the “&lt;a href=&#34;https://istlsfastyet.com&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Is TLS Fast Yet?&lt;/a&gt;” website for details.&lt;/li&gt;&#xA;&lt;li&gt;It’s free. Ok, it’s not free if you want that spiffy, large green browser bar for your customer. If you are happy enough with a green lock (in Google Chrome at least), it’s free.&lt;/li&gt;&#xA;&lt;li&gt;You can automate it! Which is especially great when you manage multiple servers with multiple SSL certificates.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;In this post we&amp;rsquo;ll setup an Nginx configuration in such a way that you will get an A+ rating on the &lt;a href=&#34;https://www.ssllabs.com/ssltest&#34; target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;Qualys SSL Labs test&lt;/a&gt;. If you want to follow along with this blog, you’ll need the following things already set up:&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
