<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Al3x' Tech Blog on Al3x' personal home page</title><link>https://a.l3x.in/blog/</link><description>Recent content in Al3x' Tech Blog on Al3x' personal home page</description><generator>Hugo</generator><language>en-us</language><copyright>This work is licensed under a Creative Commons Attribution-ShareAlike 4.0 International License.</copyright><atom:link href="https://a.l3x.in/blog/index.xml" rel="self" type="application/rss+xml"/><item><title>Deploy AWS Lambda with Terraform without storing the Zip archive</title><link>https://a.l3x.in/blog/terrafom-lambda-no-archive-in-git/</link><pubDate>Sat, 18 Sep 2021 00:00:00 +0000</pubDate><guid>https://a.l3x.in/blog/terrafom-lambda-no-archive-in-git/</guid><description>&lt;p>&lt;a href="https://www.terraform.io/">Terraform by &lt;em>HashiCorp&lt;/em>&lt;/a> is a powerful (and probably underrated) OpenSource tool well known to every software engineer that has to manage some kind of workload in &lt;em>the cloud&lt;/em>. Actually I don&amp;rsquo;t think it&amp;rsquo;s an overstatement to say it&amp;rsquo;s already since a while the standard &lt;em>de-facto&lt;/em> when talking about cloud-agnostic Infrastructure as Code (&lt;em>IaC&lt;/em>).&lt;/p>
&lt;p>As for every tool though there are places where they shine and others where they do less so and managing &lt;em>AWS Lambda Functions&lt;/em> is arguably falling in the second category, at least from my experience and judging on popular blog posts with titles like &lt;a href="https://johnroach.io/2020/09/04/deploying-lambda-functions-with-terraform-just-dont">&amp;ldquo;Deploying AWS Lambda functions with Terraform: Just Don&amp;rsquo;t&amp;rdquo;&lt;/a>, or simply witnessing &lt;a href="https://duckduckgo.com/?q=how+to+aws+lambda+terraform">the number of different blog entries&lt;/a> and various articles on this very topic.&lt;/p></description></item><item><title>Building a basic Jamstack webmail client with Vue 3</title><link>https://a.l3x.in/blog/serverless-web-client-with-vue-cli/</link><pubDate>Tue, 15 Sep 2020 10:44:55 +0300</pubDate><guid>https://a.l3x.in/blog/serverless-web-client-with-vue-cli/</guid><description>&lt;p>Vue is arguably one of the most interesting web framework out there and, even though the upcoming version 3 &lt;a href="https://isvue3readyyet.com/">is not ready yet&lt;/a>, is currently in &lt;em>release candidate&lt;/em> state so all Vue developers are encouraged to try it out and help report any bug that might still be lurking there.&lt;/p>
&lt;p>TL;DL: it&amp;rsquo;s probably not ready for production but it might already make sense to use Vue 3 for internal and/or personal projects, for example using Vue v2 with backported features from v3, or in general to have some fun with v3 and play around with the new features&amp;hellip; and enjoy the smaller build footprint it promises.&lt;/p></description></item><item><title>Automate database backups with AWS Fargate, S3 and CDK</title><link>https://a.l3x.in/blog/mongodb-backups-with-aws-cdk/</link><pubDate>Wed, 12 Aug 2020 00:00:00 +0000</pubDate><guid>https://a.l3x.in/blog/mongodb-backups-with-aws-cdk/</guid><description>&lt;p>Even if I consider myself a Serverless fanboy I listen to all the arguments &lt;em>against&lt;/em> it and I have to agree some of them are valid. Heck, that&amp;rsquo;s true for basically every technology: they all come with &lt;em>pros&lt;/em> and &lt;em>cons&lt;/em>.&lt;/p>
&lt;p>One of the most valuable benefits I see in Serverless and I believe hard to confute though is, well&amp;hellip; that less toil work dedicated to server administration means that as an engineer you can focus on arguably more valuable tasks at hand and, probably, the end result of what you build will be a more robust and reliable infrastructure too.&lt;/p></description></item><item><title>Setup free WHOIS monitoring to avoid unwanted domain expirations with Serverless on AWS</title><link>https://a.l3x.in/blog/free-whois-monitoring-with-serverless-on-aws/</link><pubDate>Thu, 23 Jul 2020 00:00:00 +0000</pubDate><guid>https://a.l3x.in/blog/free-whois-monitoring-with-serverless-on-aws/</guid><description>&lt;p>So it happened again: a few days ago I receive a (small, but still&amp;hellip;) alert storm notifying me of service interruptions, the cause being something like &lt;code>NO DOMAIN FOUND&lt;/code> so the culprit is pretty clear from the beginning.&lt;/p>
&lt;p>I forgot to renew one of my domains that I thought I&amp;rsquo;ve asked the domain registrar to keep &lt;em>auto-renewing&lt;/em> for me, which apparently was not the case.&lt;/p>
&lt;p>I confess this already happened to me in the past and thankfully this time the damage has not been as painful as it has been once, but still&amp;hellip; these kind of disservices are probably the most frustrating ones because they are so&amp;hellip; low-tech 😆&lt;/p></description></item><item><title>For simple tasks plain vanilla is still my favorite flavour of JavaScript</title><link>https://a.l3x.in/blog/js-simple-mix-player/</link><pubDate>Wed, 17 Jun 2020 00:00:00 +0000</pubDate><guid>https://a.l3x.in/blog/js-simple-mix-player/</guid><description>&lt;p>In the last months I&amp;rsquo;ve been developing the habit of pushing to GitHub anything tech-related that I&amp;rsquo;ve been working on and might be remotely interesting to anyone else (today or in the far future, thanks to search engines). It also have the side benefit of forcing me to keep the project a bit more tidy than I might do otherwise, adding at least a decent README and maybe a &lt;a href="https://keepachangelog.com/en/1.0.0/">CHANGELOG&lt;/a> too if I already plan to develop it any further.&lt;/p></description></item><item><title>Add free performance monitoring to your websites with Lighthouse and AWS CDK</title><link>https://a.l3x.in/blog/add-pagespeed-check-with-serverless/</link><pubDate>Sat, 30 May 2020 00:00:00 +0000</pubDate><guid>https://a.l3x.in/blog/add-pagespeed-check-with-serverless/</guid><description>&lt;h2 id="the-burden-of-performance">The Burden of Performance&lt;/h2>
&lt;p>Nowadays, regardless of the size of the business, basically &lt;em>everyone&lt;/em> needs some kind of web presence, might it be a &lt;em>Software as a Service&lt;/em> offering, an &lt;em>e-commerce&lt;/em> website, a blog or a simple landing page to capture some new audience or just provide basic information.&lt;/p>
&lt;p>And we all know the mantra too: if your website doesn&amp;rsquo;t perform, (potentially new) users will be lost, &lt;em>search engines positioning&lt;/em> will suffer terribly and you&amp;rsquo;ll eventually be out of business. I know, a bit contrived&amp;hellip; but it gets to the point.&lt;/p></description></item><item><title>Centralise GNU/Linux email delivery like it's 2020</title><link>https://a.l3x.in/blog/centralise-linux-email-delivery/</link><pubDate>Thu, 14 May 2020 00:00:00 +0000</pubDate><guid>https://a.l3x.in/blog/centralise-linux-email-delivery/</guid><description>&lt;blockquote>
&lt;p>It&amp;rsquo;s quicker, easier, and involves less licking&lt;/p>
&lt;p>― Douglas Adams&lt;/p>
&lt;/blockquote>
&lt;p>For a change today I won&amp;rsquo;t talk about &lt;em>AWS&lt;/em> nor &lt;em>serverless&lt;/em> or &lt;em>event-driven architectures&lt;/em>. Today it&amp;rsquo;s all about &lt;em>Linux server administration&lt;/em>, the &lt;strong>good ol&amp;rsquo; email&lt;/strong> and its evergreen (even if outdated and patched in all the thinkable ways) &lt;code>SMTP&lt;/code> protocol.&lt;/p>
&lt;p>I understand not everyone has migrated all business logics to a bunch of &lt;strong>Function as a Service&lt;/strong> (&lt;em>FaaS&lt;/em>) and/or cloud-managed &lt;strong>orchestrated containers&lt;/strong> yet (&lt;a href="https://a.l3x.in/2020/01/29/my-quest-for-identity-in-software-engineering.html">my bet here&lt;/a> is that all of us eventually will 😈) and still has to deal with &lt;a href="https://xkcd.com/705/">&lt;em>old style&lt;/em> server administration&lt;/a> daily. This doesn&amp;rsquo;t mean sysadmin tasks have to be done like it was still 1980.&lt;/p></description></item><item><title>Setup Atom/RSS feed as event source for AWS Lambda invocation with CDK</title><link>https://a.l3x.in/blog/setup-blog-feed-as-lambda-trigger/</link><pubDate>Thu, 07 May 2020 00:00:00 +0000</pubDate><guid>https://a.l3x.in/blog/setup-blog-feed-as-lambda-trigger/</guid><description>&lt;blockquote>
&lt;p>Now everyone has a license to speak, it’s a question of who gets heard.&lt;/p>
&lt;p>― Aaron Swartz&lt;/p>
&lt;/blockquote>
&lt;p>Recently I&amp;rsquo;ve found myself blogging extensively about my findings when developing simple &lt;em>serverless event-driven applications&lt;/em> with the help of &lt;strong>AWS Cloud Development Kit (CDK)&lt;/strong>.&lt;/p>
&lt;p>In a &lt;a href="https://a.l3x.in/2020/02/17/serverless-publish-to-multiple-social-media.html">previous blog post&lt;/a> for example I shared the outcomes of developing &lt;a href="https://github.com/shaftoe/api-l3x-in/blob/0.9.0/lib/stacks/publish_to_social/__init__.py">&lt;code>publish-to-social&lt;/code>&lt;/a>, a simple app that gives me a convenient and extensible way to update (almost all&amp;hellip;) my social media feeds whenever there&amp;rsquo;s a new blog post published and ready to be shared.&lt;/p></description></item><item><title>Automate router WiFi bridge setup with Raspberry Pi, Node.js, Puppeteer and Ansible</title><link>https://a.l3x.in/blog/fix-router-with-raspberry-node-puppeteer/</link><pubDate>Mon, 27 Apr 2020 00:00:00 +0000</pubDate><guid>https://a.l3x.in/blog/fix-router-with-raspberry-node-puppeteer/</guid><description>&lt;blockquote>
&lt;p>One does not accumulate but eliminate. It is not daily increase but daily decrease. The height of cultivation always runs to simplicity.&lt;/p>
&lt;p>― Bruce Lee&lt;/p>
&lt;/blockquote>
&lt;p>I&amp;rsquo;ve been a frequent traveller for the last few years and I learnt along the way that reducing the clutter that comes with me to the bare minimum is a &lt;em>very good trend&lt;/em> to follow.&lt;/p>
&lt;p>For example I drastically reduced the amount of clothes that I own to the point they all fit into a cabin luggage, and I&amp;rsquo;m generally mindful when I buy &lt;strong>any&lt;/strong> new object because I know that either has to fit in my luggages or has to be sold/gifted/trashed next time I&amp;rsquo;ll relocate.&lt;/p></description></item><item><title>Replace p2k.co (Pocket to Kindle) SaaS with an event-driven serverless application based on AWS</title><link>https://a.l3x.in/blog/replace-p2k-with-serverless-app/</link><pubDate>Fri, 03 Apr 2020 00:00:00 +0000</pubDate><guid>https://a.l3x.in/blog/replace-p2k-with-serverless-app/</guid><description>&lt;blockquote>
&lt;p>A mind needs books as a sword needs a whetstone if it is to keep its edge.&lt;/p>
&lt;p>― George R.R. Martin, &lt;em>A Game of Thrones&lt;/em>&lt;/p>
&lt;/blockquote>
&lt;p>Growing our professional skillset while keeping an eye on a few different other topics (and exploring fantastic new worlds) is something that many of us find valuable (and pleasant). In time it is then inevitable to develop some kind of &lt;em>reading habit&lt;/em> that fuels that constant growth combined with a workflow that keeps the habit alive.&lt;/p></description></item><item><title>An AWS Lambda execution report webpage built with Lambda Destinations, CDK and Svelte</title><link>https://a.l3x.in/blog/lambda-reports-with-destinations/</link><pubDate>Thu, 27 Feb 2020 00:00:00 +0000</pubDate><guid>https://a.l3x.in/blog/lambda-reports-with-destinations/</guid><description>&lt;p>Until recently the only built-in way to programmatically react to AWS Lambda asynchronous execution (failures) was the &lt;a href="https://docs.aws.amazon.com/lambda/latest/dg/invocation-async.html#dlq">&lt;em>dead letter queue&lt;/em>&lt;/a> feature. This was suboptimal to say little because for example it didn&amp;rsquo;t give developers any way to programmatically act upon Lambda &lt;em>successes&lt;/em> leaving us with only a few convoluted options like parsing &lt;em>CloudWatch Logs&lt;/em> events.&lt;/p>
&lt;p>To fill that gap AWS recently announced &lt;a href="https://aws.amazon.com/blogs/compute/introducing-aws-lambda-destinations/">Lambda Destinations&lt;/a>. Quoting from the announcement post:&lt;/p>
&lt;blockquote>
&lt;p>With Destinations, you can route asynchronous [Lambda] function results as an execution record to a destination resource without writing additional code. An execution record contains details about the request and response in JSON format including version, timestamp, request context, request payload, response context, and response payload. For each execution status such as Success or Failure you can choose one of four destinations: another Lambda function, SNS, SQS, or EventBridge. Lambda can also be configured to route different execution results to different destinations.&lt;/p></description></item><item><title>Setup AWS Lambda-to-Lambda invocations between CDK Stacks</title><link>https://a.l3x.in/blog/manage-aws-lambda-invocations-cdk/</link><pubDate>Tue, 25 Feb 2020 00:00:00 +0000</pubDate><guid>https://a.l3x.in/blog/manage-aws-lambda-invocations-cdk/</guid><description>&lt;p>In this brief article I showcase one way to organize AWS resources in CDK &lt;em>Stacks&lt;/em> and make them general purpose and easily reusable.&lt;/p>
&lt;p>More specifically, it is commonly accepted as a good practice in the &lt;em>FaaS space&lt;/em> to keep functions small and ideally single-purposed as much as possible.&lt;/p>
&lt;p>In the actual case I&amp;rsquo;m presenting here I had a very simple Lambda &lt;em>proxy&lt;/em> function responsible for accepting HTTP requests proxied by API Gateway originated by a web client (some POST data from an actual HTML Form), validating the request and sending a push notification with the HTML form content to my iPhone using the &lt;a href="https://pushover.net/">Pushover&lt;/a> notification service.&lt;/p></description></item><item><title>Automate social media status updates with AWS Lambda, SNS and CDK</title><link>https://a.l3x.in/blog/serverless-publish-to-multiple-social-media/</link><pubDate>Mon, 17 Feb 2020 00:00:00 +0000</pubDate><guid>https://a.l3x.in/blog/serverless-publish-to-multiple-social-media/</guid><description>&lt;p>As some of you have noticed, recently I&amp;rsquo;ve been blessed with some extra time and decided to take &lt;a href="https://a.l3x.in/2020/01/29/my-quest-for-identity-in-software-engineering.html">the chance&lt;/a> to finally &lt;a href="https://a.l3x.in/2020/01/31/updating-curriculum-with-web-tech.html">come up&lt;/a> with some fresh &lt;a href="https://a.l3x.in/2020/02/04/migrating-from-terraform-to-cdk.html">new content&lt;/a> for this blog.&lt;/p>
&lt;p>How to choose a new pet project in the IT world where the choice of things to be learnt and practiced to stay relevant is simply overwhelming?&lt;/p>
&lt;p>With a &lt;em>green field&lt;/em> pet project I generally move from fresh itches that I&amp;rsquo;d like to scratch because, well&amp;hellip; there&amp;rsquo;s never a shortage of them, no matter how serious you are in trying to automate them all away.&lt;/p></description></item><item><title>Introducing AWS CDK with a real life Lambda and API gateway example</title><link>https://a.l3x.in/blog/migrating-from-terraform-to-cdk/</link><pubDate>Tue, 04 Feb 2020 00:00:00 +0000</pubDate><guid>https://a.l3x.in/blog/migrating-from-terraform-to-cdk/</guid><description>&lt;p>Amazon Web Services &lt;a href="https://aws.amazon.com/blogs/aws/aws-cloud-development-kit-cdk-typescript-and-python-are-now-generally-available/">recently announced&lt;/a> a new tool meant to ease the management of AWS resources in a fully programmatic way: &lt;strong>AWS Cloud Development Kit&lt;/strong> (&lt;strong>CDK&lt;/strong> for short).&lt;/p>
&lt;p>As stated in the &lt;a href="https://aws.amazon.com/cdk/">project homepage&lt;/a>:&lt;/p>
&lt;blockquote>
&lt;p>[&lt;em>CDK is&lt;/em>] an open source software development framework to model and provision your cloud application resources using familiar programming languages.&lt;/p>
&lt;/blockquote>
&lt;p>To me it represents a welcome addition to the likes of &lt;a href="https://aws.amazon.com/serverless/sam/">AWS SAM&lt;/a> and HashiCorp&amp;rsquo;s &lt;a href="https://www.terraform.io/">Terraform&lt;/a>, extending the realm of what&amp;rsquo;s possible today with &lt;em>Infrastructure as Code&lt;/em> (IaC) on AWS.&lt;/p></description></item><item><title>Remaking my curriculum vitæ with modern web technologies</title><link>https://a.l3x.in/blog/updating-curriculum-with-web-tech/</link><pubDate>Fri, 31 Jan 2020 00:00:00 +0000</pubDate><guid>https://a.l3x.in/blog/updating-curriculum-with-web-tech/</guid><description>&lt;p>As I wrote in my &lt;a href="https://a.l3x.in/2020/01/29/my-quest-for-identity-in-software-engineering.html">previous blog article&lt;/a>, recently I became quite hooked by the web and all that&amp;rsquo;s orbiting around it.&lt;/p>
&lt;p>This time I&amp;rsquo;m going to show you a simple project developed following Jamstack guidelines:&lt;/p>
&lt;ul>
&lt;li>HTML5 for responsive and accessible markup&lt;/li>
&lt;li>CSS3 to lay out the presentation&lt;/li>
&lt;li>Hugo to statically generate the content&lt;/li>
&lt;li>GitHub for source hosting&lt;/li>
&lt;li>Netlify for content hosting and (fast) delivery&lt;/li>
&lt;/ul>
&lt;h2 id="the-project">The project&lt;/h2>
&lt;p>In the past I&amp;rsquo;ve been relying on a free offer from &lt;a href="https://www.visualcv.com">VisualCV&lt;/a> to host my curriculum vitæ online. Recently though (end of 2019) they changed their terms and removed the free offer, so no more CV online for free.&lt;/p></description></item><item><title>My quest for identity in Software Engineering</title><link>https://a.l3x.in/blog/my-quest-for-identity-in-software-engineering/</link><pubDate>Wed, 29 Jan 2020 00:00:00 +0000</pubDate><guid>https://a.l3x.in/blog/my-quest-for-identity-in-software-engineering/</guid><description>&lt;blockquote>
&lt;p>Keep walking. If I look back I am lost.&lt;/p>
&lt;p>― George R.R. Martin, &lt;em>A Dance with Dragons&lt;/em>&lt;/p>
&lt;/blockquote>
&lt;p>They say that the sum of all our past choices and experiences makes up most of who we are. Despite that knowledge I never liked to invest much of my free time thinking about the past.&lt;/p>
&lt;p>I always thought there&amp;rsquo;s such a thing as the right to forget and to be forgotten, that the opposite (to look &lt;em>forward&lt;/em>, to imagine how the future could be, some might say &lt;a href="https://open.spotify.com/track/3uYrVtgRuz4XiOOXDV805X">&lt;em>to dream&lt;/em>&lt;/a>) is one choice that more consistently brings better outcomes.&lt;/p></description></item><item><title>Setup a custom domain REST API endpoint on AWS Lambda: a step by step tutorial</title><link>https://a.l3x.in/blog/lambda-api-custom-domain-tutorial/</link><pubDate>Wed, 25 Jul 2018 00:00:00 +0000</pubDate><guid>https://a.l3x.in/blog/lambda-api-custom-domain-tutorial/</guid><description>&lt;p>Since I discovered the main concepts and benefits of Serverless applications, I&amp;rsquo;m gradually migrating the few services I run on my personal server(s) towards solutions which require no need for me to keep any (virtual) server running. The reason is simple: there are so many other interesting things to do than keeping an online system in good shape. If that&amp;rsquo;s not enough, leveraging FaaS (at least for very small workloads) usually brings cheaper bills compared to traditional hosting.&lt;/p></description></item><item><title>Migrating the blog to Jekyll and Firebase</title><link>https://a.l3x.in/blog/moving-to-jekyll-and-firebase/</link><pubDate>Sat, 21 Jul 2018 00:00:00 +0000</pubDate><guid>https://a.l3x.in/blog/moving-to-jekyll-and-firebase/</guid><description>&lt;p>It&amp;rsquo;s been a while since I last updated the blog, to the point I almost forgot where it was hosted&amp;hellip;
The full story is that at some point in time I felt like to share some techical content which couldn&amp;rsquo;t fit into a tweet.
I eventually landed on Tumblr, mainly because of the &lt;strong>native Markdown support&lt;/strong>, but I was never really satisfied with it: I needed none of its social features, even less its ads, and I wanted to have a proper HTTPS URL not ending in &lt;code>tumblr.com&lt;/code>.&lt;/p></description></item><item><title>sslnotify.me - yet another OpenSource Serverless MVP</title><link>https://a.l3x.in/blog/sslnotifyme/</link><pubDate>Tue, 30 May 2017 00:00:00 +0000</pubDate><guid>https://a.l3x.in/blog/sslnotifyme/</guid><description>&lt;p>After ~10 years of experience in managing servers at small and medium scales, and despite the fact that I still love &lt;em>doing sysadmin stuff&lt;/em> and I constantly try to learn new and better ways to approach and solve problems, there&amp;rsquo;s one thing that I think I&amp;rsquo;ve learned very well: it&amp;rsquo;s hard to get the operation part right, &lt;em>very&lt;/em> hard.&lt;/p>
&lt;p>Instead of dealing with not-so-interesting problems like patching critical security bugs or adding/removing users or troubleshooting obscure network connectivity issues, what if we could just cut to the chase and invest most of our time in what we as engineers are usually hired for, i.e. solving non-trivial problems?&lt;/p></description></item><item><title>Lastversion: a Go serverless proof of concept developed on OpenWhisk</title><link>https://a.l3x.in/blog/lastversion/</link><pubDate>Tue, 28 Feb 2017 00:00:00 +0000</pubDate><guid>https://a.l3x.in/blog/lastversion/</guid><description>&lt;p>It seems that recently every &lt;a href="https://en.wikipedia.org/wiki/Open-source_software_movement">OSS&lt;/a> tool I&amp;rsquo;ve &lt;a href="https://www.terraform.io/">been&lt;/a> &lt;a href="https://www.docker.com/">using&lt;/a> &lt;a href="https://www.packer.io/">during&lt;/a> my working day (together with &lt;a href="https://kubernetes.io/">many&lt;/a> &lt;a href="https://prometheus.io/">other&lt;/a> &lt;a href="http://grafana.org/">cool&lt;/a> projects) is written in &lt;a href="https://golang.org/">Go&lt;/a>, so I decided to teach myself a little bit of it having fun in the meanwhile, in the not-too-rare case I&amp;rsquo;ll need to troubleshoot one of them, or simply understand better how it works. Unsurprisingly enough, the Net is full of &lt;a href="https://github.com/golang/go/wiki/Learn">excellent documentation material&lt;/a> if you want to dig into Go programming without spending a single cent.&lt;/p></description></item></channel></rss>