Deploying My Blog to Google Cloud Run

I recently moved this blog off of a Kubernetes cluster and onto Cloud Run, Google’s new container-based serverless environment. This article explores why serverless might make sense for a Jekyll-based static website like my blog, and walks through how to containerize a static site and deploy it to Cloud Run.

For the past few years, this blog has been hosted on a personal Kubernetes cluster. In addition to my blog, I used the cluster to host a few other websites, as well as run occasional compute jobs. Kubernetes is a great, very flexible technology, and since (full disclosure) I work at Google, throwing container images at a server infrastructure feels very natural to me. But maintaining a Kubernetes cluster means paying for the VMs, and lately I’ve been wondering if I can avoid those costs.

Yes, you should provide a client library for your API! (RubyConf 2018)

This RubyConf talk from Nov 13, 2018 discussed the benefits of providing client libraries for HTTP-based APIs, and some techniques for writing them.

On Nov 13, 2018, I spoke on "Yes, you should provide a client library for your API!" at RubyConf in Los Angeles, CA. The talk discussed the benefits of providing client libraries for HTTP-based APIs, and some techniques for writing them.

Containerizing Rails: Techniques, Pitfalls, and Best Practices (RailsConf 2018)

This RailsConf talk from April 18, 2018 discussed best practices for designing Docker containers for Rails applications.

On April 18, 2018, I spoke on "Containerizing Rails: Techniques, Pitfalls, and Best Practices" at RailsConf in Pittsburgh, PA. The talk discussed best practices for designing Docker containers for Rails applications.

Dispelling the Dark Magic: Inside a Ruby Debugger (RubyConf 2017)

This RubyConf talk from November 16, 2017 demonstrated how to implement a simple debugger for Ruby applications, and covered some of the techniques used in the implementation of the Stackdriver Debugger for Ruby.

On November 16, 2017, I spoke on "Dispelling the Dark Magic: Inside a Ruby Debugger" at RubyConf in New Orleans, LA. The talk demonstrated how to implement a simple debugger for Ruby applications, and covered some of the techniques used in the implementation of the Stackdriver Debugger for Ruby.

Family Ties part 10: My type of language

Part 10 of a series of articles on what I’ve learned about Erlang (and Elixir) from writing an Erlang-to-Elixir transpiler. This post covers records, the type system, and dialyzer support in both languages.

This is the tenth of a series of articles on what I’ve learned about Erlang (and Elixir) from writing Erl2ex, an Erlang-to-Elixir transpiler. This week we cover records, the type system, and dialyzer support in both languages.

Family Ties part 9: Curse of the Preprocessor

Part 9 of a series of articles on what I’ve learned about Erlang (and Elixir) from writing an Erlang-to-Elixir transpiler. This post continues our coverage of the Erlang preprocessor, discussing how preprocessor features can be reproduced using Elixir.

This is the ninth of a series of articles on what I’ve learned about Erlang (and Elixir) from writing Erl2ex, an Erlang-to-Elixir transpiler. This week we continue coverage of the Erlang preprocessor, discussing how preprocessor features can be reproduced using Elixir.

Family Ties part 8: Rise of the Preprocessor

Part 8 of a series of articles on what I’ve learned about Erlang (and Elixir) from writing an Erlang-to-Elixir transpiler. This post covers the Erlang preprocessor, probably the most significant Erlang feature that is not supported by Elixir.

This is the eighth of a series of articles on what I’ve learned about Erlang (and Elixir) from writing Erl2ex, an Erlang-to-Elixir transpiler. This week we study the Erlang preprocessor, probably the most significant Erlang feature that is not supported by Elixir.

Family Ties part 7: Lost and Found

Part 7 of a series of articles on what I’ve learned about Erlang (and Elixir) from writing an Erlang-to-Elixir transpiler. This post studies some of the “missing features” found in Erlang but omitted from Elixir, and how they can be reproduced in Elixir.

This is the seventh of a series of articles on what I’ve learned about Erlang (and Elixir) from writing Erl2ex, an Erlang-to-Elixir transpiler.

Family Ties part 6: Being On Guard

Part 6 of a series of articles on what I’ve learned about Erlang (and Elixir) from writing an Erlang-to-Elixir transpiler. This post compares guard clauses in the two languages, and uncovers some features known by Erlang developers but often overlooked in Elixir.

This is the sixth of a series of articles on what I’ve learned about Erlang (and Elixir) from writing Erl2ex, an Erlang-to-Elixir transpiler. This week we study guard clauses and learn why Elixir guards look the way they do.

Pagination


Blog   |   Series   |   Tags   |   Archives


©2025 Daniel Azuma

Powered by Hydejack v9.2.1