Skip to main content

DigitalOcean droplet provisioning with Pulumi

The snowflake VM I run my experiments on has a serious flaw. I can't remember what I have installed there. It is embarrassing as some essential services to me run there.

As an enterprisey developer, my attention draws naturally towards IaC solutions for this particular memory issue. The code of the experimentations is in git, so why not the infra. Some would say it is a major overkill since we are talking literally about one domain running on the puniest DigitalOcean droplet. I say I have a weekend to spare on silly stuff.


The easiest choice is to write some Terraform. Yet come to think of it, is it still an obvious pick in 2022? I've never written anything too complex with it but having heard so much backlash against Terraform language, is it time for something new? The answer turns out to be a yes.


The IaC solution for me in 2022 is Pulumi. It has a catchy name, a base for a good dad joke for a Finn. Besides that, Pulumi has some attractive qualities to it.


  • It is declarative
  • I can write the code in TS or Go
  • I can store the state for free in their service


The actual Pulumi code is super simple in my case. I struggled somewhat with how to pass configs stored in Pulumi around. Here is a snippet of how to do that for a user data script (yes, this is old-school stuff)


Comments

Popular posts from this blog

Bird is causing high CPU on my macOS

There is no lack of people complaining about MacOS Tahoe, mostly about rounded corners and inconsistent design decisions. I have not paid that much attentention to that, but there is one mac bug i have paid attention to. It hasn't been a visual or ux but rather few system processes pegging the CPU. trustd , alongside with ecosystemd and ecosystemanalyticsd all reported high CPU usage. I can't exactly recall when this started, it might have predated my Tahoe upgrade but anyway, the trio of processes all had high CPU usage. Sure, it may have been the virtual efficiency cores and whether it affeced battery life or slowed down other processes i don't know to be hon...

How my work has changed in the past few years

When I started at my current job 3ish years ago, we had nothing but a few PowerPoint slides and a Figma prototype. I recall talking with one of the founders, whom I had worked with some 10 years ago, and pointing out that the very next step after PowerPoint and Figma was still the same as it had always been: translating those slides and mockups into CRUDs, forms, and other basic building blocks. Sure, all the new fancy tools and frameworks (we had jQuery then) help, but I still had to tinker with very basic primitives like tables and forms. I could not just say, "here is a table, here is a form." Well, yes, technically I could, but I still needed to write a lot of code to make a working form or table. This was around the time of GPT-3, Copilot beta, and very early Cursor. I did attempt to use them, but they could only perform very basic tasks and were pretty much useless for frontend work. We, being one of the first-wave "ChatGPT wrapper" startups has naturally pus...

Building a OTel sink that follows GenAI semantic conventions

I've been working on an OTel sink recently. To be more specific, it concerns receiving telemetry data from LLM interactions. Fortunately, there is a spec for all of this called GenAI Semantic Conventions . That is what I based my work on, so I can make assumptions about key attributes to highlight in the sink's UI, which is actually a CLI in my case. I dogfooded my handrolled sink using Pydantic AI (my favorite LLM framework), and all good, it follows the spec well. Key attributes flow in as specified. Pydantic AI also includes some of its own attributes, but that is expected. However, pick something like Claude Code, (via anthropic agent sdk), the reality is a bit different. It does not follow the spec at all. It has its own custom attribute layout . Same direction, different flavor with LangChain. The Python source has zero opentelemetry imports anywhere. None. The ls_* namespace ( ls_provider , ls_model_name , ls_temperature ) is its own thing, with LangSmith as the on...