<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Google Cloud on Experiment, Fail, Learn, Repeat</title>
    <link>https://www.hairizuan.com/categories/google-cloud/</link>
    <description>Recent content in Google Cloud on Experiment, Fail, Learn, Repeat</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <copyright>Copyright © 2026 Hairizuan Noorazman</copyright>
    <lastBuildDate>Mon, 29 Sep 2025 13:58:15 +0800</lastBuildDate><atom:link href="https://www.hairizuan.com/categories/google-cloud/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>Using Alloy and Grafana for extracting metrics and pushing to dashboard</title>
      <link>https://www.hairizuan.com/using-alloy-and-grafana-for-extracting-metrics-and-pushing-to-dashboard/</link>
      <pubDate>Wed, 20 Aug 2025 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/using-alloy-and-grafana-for-extracting-metrics-and-pushing-to-dashboard/</guid>
      <description>&lt;p&gt;I need to deploy a metrics exporter to check for nodes on instances and push it into a grafana metrics dashboard&lt;/p&gt;&#xA;&lt;p&gt;We can demonstrate this with 2 instances&lt;/p&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Deploy alloy to collect Node Metrics&#xA;    &lt;div id=&#34;deploy-alloy-to-collect-node-metrics&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#deploy-alloy-to-collect-node-metrics&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;We would first install alloy of the instance we would want to monitor. Here are the reference for it: &lt;a href=&#34;https://grafana.com/docs/alloy/latest/set-up/install/linux/&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;https://grafana.com/docs/alloy/latest/set-up/install/linux/&lt;/a&gt;&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Container Signing Experimentation</title>
      <link>https://www.hairizuan.com/container-signing-experimentation/</link>
      <pubDate>Thu, 31 Jul 2025 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/container-signing-experimentation/</guid>
      <description>&lt;p&gt;One of the major things that I was researching on for security stuff for distributing software is the capability to answer &amp;ldquo;is this software produced from your company&amp;rdquo;? This led me to a rabbit hole for the signing mechanism for containers. The signing mechanism is somewhat similar to us install packages from rpm or deb repos for the various linux repos - there is a need to ensure that the package received is truly from the correct source.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Trying ZFS filesystems</title>
      <link>https://www.hairizuan.com/trying-zfs-filesystems/</link>
      <pubDate>Sun, 20 Jul 2025 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/trying-zfs-filesystems/</guid>
      <description>&lt;p&gt;There is a technical challenge and interesting requirement in my job that requires lightweight snapshot capability of a folder/set of files. Technically, it should be ok to simply create a volume snapshot on the cloud vendor of this - however - creating such snapshots actually take a lot of time and potentially, a lot of space - it&amp;rsquo;s not the cheapest solution for this.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>GKE as Gitlab Runner</title>
      <link>https://www.hairizuan.com/gke-as-gitlab-runner/</link>
      <pubDate>Tue, 08 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/gke-as-gitlab-runner/</guid>
      <description>&lt;p&gt;Part of my job involves me dealing with Gitlab on a daily basis. Gitlab is a complicated beast to handle and it took a while to get around the various features that the product offers. One of the offerings available is one where we can set an entire Kubernetes cluster as a potential target where we can then create containers and run tests on said cluster.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Configuring Compute Storage</title>
      <link>https://www.hairizuan.com/configuring-compute-storage/</link>
      <pubDate>Tue, 01 Apr 2025 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/configuring-compute-storage/</guid>
      <description>&lt;p&gt;When we initially start playing around with compute instances in the cloud, we generally just deploy instances without thinking too much about it. We don&amp;rsquo;t think about the application requirements or how CPU or Memory may require. But with experience, we then know the importance of providing sufficient resources to the applications that we install on the server - and a pretty huge one to think about the amount of storage we allocate to the server for our application.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Building RPMs and storing it in Artifact Registry</title>
      <link>https://www.hairizuan.com/building-rpms-and-storing-it-in-artifact-registry/</link>
      <pubDate>Wed, 27 Dec 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/building-rpms-and-storing-it-in-artifact-registry/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;Introduction&#xA;    &lt;div id=&#34;introduction&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#introduction&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;When one mentions about application packaging - the usual first thought that can cross a person&amp;rsquo;s mind is how the application would be packaged in docker containers. That is a somewhat fair thing to think about - containers have gotten pretty common in developer circles. Tools such as docker or podman make it especially simple to write a simple straight forward file that would include their application file into a nice package. With this nice package - the people that are involved with running it production environments would only deal with a single artifact.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Github actions for shopping list application</title>
      <link>https://www.hairizuan.com/github-actions-for-shopping-list-application/</link>
      <pubDate>Wed, 20 Dec 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/github-actions-for-shopping-list-application/</guid>
      <description>&lt;p&gt;I have a basic shopping list application that is available in the following code base: &lt;a href=&#34;https://github.com/hairizuanbinnoorazman/Go_Programming/tree/master/Apps/shopping-list&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;https://github.com/hairizuanbinnoorazman/Go_Programming/tree/master/Apps/shopping-list&lt;/a&gt;. This is a simple Golang application that also embeds a generated javascripts that has been transpiled into Javascript files. We can then embed the required CSS, Javascript and HTML files that would be the frontend of the shopping list. The frontend would then call some backend apis that would simply store shopping list items into some form of datastore - which in this case, is Google Cloud Datastore (a NoSQL database)&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Using Terraform for deploying databases and applications in Google Cloud</title>
      <link>https://www.hairizuan.com/using-terraform-for-deploying-databases-and-applications-in-google-cloud/</link>
      <pubDate>Wed, 13 Dec 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/using-terraform-for-deploying-databases-and-applications-in-google-cloud/</guid>
      <description>&lt;p&gt;Over the past few months, I have been toying with the idea of going all in with Ansible or all in with Terraform. Both tools are pretty popular tools when it comes to application and tools deployment. After tinkering around, I eventually somewhat come to conclusion where Terraform would be the &amp;ldquo;better&amp;rdquo; tool here. The main reason for this all comes down to this: &lt;a href=&#34;https://github.com/ansible-collections/google.cloud/issues/301&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;https://github.com/ansible-collections/google.cloud/issues/301&lt;/a&gt; - it seems that Ansible is not as &amp;ldquo;supported&amp;rdquo; as Terraform - and the more it seems that there are certain features that I may want to use to be missing. Rather than continue tinkering and hoping that something would happen (sometimes, these kind of code would never be resolved/fixed - it&amp;rsquo;s possible for me to dig into it to try to solve but I don&amp;rsquo;t feel like investing into this particular tool in depth)&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Access Cloud SQL from Google Cloud Run without Serverless VPC Access Connectors but via VPC</title>
      <link>https://www.hairizuan.com/access-cloud-sql-from-google-cloud-run-without-serverless-vpc-access-connectors-but-via-vpc/</link>
      <pubDate>Wed, 11 Oct 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/access-cloud-sql-from-google-cloud-run-without-serverless-vpc-access-connectors-but-via-vpc/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;Introduction&#xA;    &lt;div id=&#34;introduction&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#introduction&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Previously, Serverless VPC Access connector is a commonly used solution to connect Cloud Run to Cloud SQL securely. This option is still available for use today but with all the previous blog posts that cover how we can:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Serverless Applications with Cloud Run with Serverless MySQL from PlanetScale</title>
      <link>https://www.hairizuan.com/serverless-applications-with-cloud-run-with-serverless-mysql-from-planetscale/</link>
      <pubDate>Wed, 27 Sep 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/serverless-applications-with-cloud-run-with-serverless-mysql-from-planetscale/</guid>
      <description>&lt;p&gt;Serverless computing, as seen in platforms like Cloud Run or AWS Lambda, allows developers to run code without managing the underlying infrastructure. This is achieved by automatically scaling the resources based on the incoming requests, and users are billed based on the actual execution time and resources consumed during each function or container invocation.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Access Cloud SQL from Google Kubernetes Cluster without Cloud SQL Proxy</title>
      <link>https://www.hairizuan.com/access-cloud-sql-from-google-kubernetes-cluster-without-cloud-sql-proxy/</link>
      <pubDate>Wed, 20 Sep 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/access-cloud-sql-from-google-kubernetes-cluster-without-cloud-sql-proxy/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;Introduction&#xA;    &lt;div id=&#34;introduction&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#introduction&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Similar to my previous blog post, we would usually be connecting Google Kubernetes Engine (GKE) clusters to Cloud SQL databases by using the Cloud SQL Proxy. However, we can now use  Private Service Connect, which allows for private communication between different Google Cloud services, similar to how we did for connecting our application in Google Compute Engine (VM) to a Cloud SQL instance.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Access Cloud SQL from Google Compute Engine without Cloud SQL Proxy</title>
      <link>https://www.hairizuan.com/access-cloud-sql-from-google-compute-engine-without-cloud-sql-proxy/</link>
      <pubDate>Wed, 13 Sep 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/access-cloud-sql-from-google-compute-engine-without-cloud-sql-proxy/</guid>
      <description>&lt;p&gt;Traditionally, when connecting a Google Compute Engine instance to a Cloud SQL database, the Cloud SQL Proxy was commonly used to facilitate secure connections. The Cloud SQL Proxy acted as an intermediary between the application running on a Compute Engine instance and the Cloud SQL database. It helped to secure the connection by using the Cloud SQL IAM database authentication and provided a way to connect to the database using a Unix socket.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Persistance in Google Cloud Run with FUSE storage to Google Cloud Storage</title>
      <link>https://www.hairizuan.com/persistance-in-google-cloud-run-with-fuse-storage-to-google-cloud-storage/</link>
      <pubDate>Wed, 06 Sep 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/persistance-in-google-cloud-run-with-fuse-storage-to-google-cloud-storage/</guid>
      <description>&lt;p&gt;Google Cloud Run is a serverless compute platform that automatically scales applications in response to traffic. It is designed to run stateless containers, meaning that the instances of your application are ephemeral and can be spun up or down as needed. This design choice has implications for data storage, particularly when it comes to persistence.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Accessing Google Compute Instances via Cloud Run</title>
      <link>https://www.hairizuan.com/accessing-google-compute-instances-via-cloud-run/</link>
      <pubDate>Wed, 30 Aug 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/accessing-google-compute-instances-via-cloud-run/</guid>
      <description>&lt;p&gt;The typical way to access Google compute instances from Cloud Run is usually done via the Serverless VPC Access. However, setting this up would mean that we are essentially create an instance that would be used as a proxy to send traffic from Cloud Run to the Google Compute instance.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Using Emulators for testing Google Cloud Datastore integration</title>
      <link>https://www.hairizuan.com/using-emulators-for-testing-google-cloud-datastore-integration/</link>
      <pubDate>Wed, 26 Jul 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/using-emulators-for-testing-google-cloud-datastore-integration/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;Motivation for finding emulator for Google Cloud Datastore&#xA;    &lt;div id=&#34;motivation-for-finding-emulator-for-google-cloud-datastore&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#motivation-for-finding-emulator-for-google-cloud-datastore&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Many applications out there in the real world would require the use of databases to persist data. In the cases where an application depends on databases such as mysql or mariadb or postresql, we can create some form of &amp;ldquo;staging&amp;rdquo; server where we can test that the application works as expected. Additionally, we can even test to make sure that any database migration works as well without too much issues - we can import in some of the data from production and import it into the staging environment to make sure that it works.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Deploy Golang Apps that interact with headless service in Kubernetes</title>
      <link>https://www.hairizuan.com/deploy-golang-apps-that-interact-with-headless-service-in-kubernetes/</link>
      <pubDate>Wed, 12 Jul 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/deploy-golang-apps-that-interact-with-headless-service-in-kubernetes/</guid>
      <description>&lt;p&gt;In certain application scenarios - there is a need to have applications that need to do client side load balancing to a bunch of servers. Such cases are pretty rare - but we won&amp;rsquo;t be covering the exect reasons or scenarios or when these are needed. Instead, we will cover how we can do so with Golang applications in Kubernetes cluster.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Trying to create MariaDB replica server</title>
      <link>https://www.hairizuan.com/trying-to-create-mariadb-replica-server/</link>
      <pubDate>Wed, 28 Jun 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/trying-to-create-mariadb-replica-server/</guid>
      <description>&lt;p&gt;A common architectural pattern for relational databases is to create an additional replica server. This pattern usually come up due because most applications are usually read heavy - data is usually read to be presented to users.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Running kubectl in a Kubernetes Pod</title>
      <link>https://www.hairizuan.com/running-kubectl-in-a-kubernetes-pod/</link>
      <pubDate>Wed, 12 Apr 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/running-kubectl-in-a-kubernetes-pod/</guid>
      <description>&lt;p&gt;I have a little side project at work where it somewhat requires me to allow a pod within a kubernetes cluster to access and query and manipulate resources in a Kubernetes cluster. This would provide some sort of special development environment within pod with the required capability to update the cluster. In order to do this, we need to add a bunch of roles, clusterroles and its bindings (essentially the RBAC system in Kubernetes) to allow the pod to access said resources&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Creating a SSH Tunnel to expose a web application from a workstation</title>
      <link>https://www.hairizuan.com/creating-a-ssh-tunnel-to-expose-a-web-application-from-a-workstation/</link>
      <pubDate>Tue, 31 Jan 2023 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/creating-a-ssh-tunnel-to-expose-a-web-application-from-a-workstation/</guid>
      <description>&lt;p&gt;There are some cases where we would need to host an application on our workstation but need it to be exposed publicly so that people would be able to access the application over the internet. There could be a variety of reasons for this to happen; e.g. data locality (too much data to transfer to the cloud - it might cost too much to store it in public cloud), application sensitivity (there are certain aspects that might make it bad to have it only run from public cloud - there is a need for applicaiton to be available on local network if there is no internet available), or maybe application can only be run on certain types of environment (e.g. mac). Most cloud vendors usually only provide windows and linux - mac environments are a bit on the rare side.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Trying out Google Cloud Workflows</title>
      <link>https://www.hairizuan.com/trying-out-google-cloud-workflows/</link>
      <pubDate>Mon, 10 Oct 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/trying-out-google-cloud-workflows/</guid>
      <description>&lt;p&gt;Over the recent weekends, I&amp;rsquo;ve decided to take a gander and try another &amp;ldquo;serverless&amp;rdquo; tool called Google Cloud Workflows. The tool&amp;rsquo;s appeal is to be able coordinate a bunch of services in order to achieve a particular goal. The coordination effort (or workflow) can easily get pretty complex -&amp;gt; one way would be to script but if we want to have the capability to have the button to run the entire workflow from start to end with logging in place as well as capability to run the workflow based on particular triggers.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Leader Election in Kubernetes via Kubernetes Configmaps and Leases</title>
      <link>https://www.hairizuan.com/leader-election-in-kubernetes-via-kubernetes-configmaps-and-leases/</link>
      <pubDate>Sun, 28 Aug 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/leader-election-in-kubernetes-via-kubernetes-configmaps-and-leases/</guid>
      <description>&lt;p&gt;The leader election mechanism is a somewhat complex thing to kind of code up for an application. There are various Golang libraries that assist with this but it would be nicer if there were mechanisms within the environment that the application operate in which can help with this. In the case for the Kubernetes ecosystem - we can actual rely on the fact of how Kubernetes would usually etcd that does this leader election dance on our behalf. If we can tap on this mechanism, we can avoid introducing this mess of a complexity within our application.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Continuous Profiling of Applications in Kubernetes via Pyroscope</title>
      <link>https://www.hairizuan.com/continuous-profiling-of-applications-in-kubernetes-via-pyroscope/</link>
      <pubDate>Fri, 05 Aug 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/continuous-profiling-of-applications-in-kubernetes-via-pyroscope/</guid>
      <description>&lt;p&gt;The whole process of profiling an application is an attempt to identify hotspots within the application which consumes more resources or takes too much time - knowing this would allow us to identify how to further improve the code within the applications that we build in order to build applications that consume less resources or would respond better to external inputs. Profiling of an application is just another aspect to improve observability of application&amp;rsquo;s performance on top of the common usual tooling such as distributed traces, metrics and logs. Tools such as distributed traces, metrics and logs only can capture part of the picture of how an application performs within an environment but is different for profiling. Profiling would point out what is happening &amp;ldquo;internally&amp;rdquo; within the application such as amount of memory being allocated for particular functions, how much CPU time is being taken for a particular function, thereby providing even more visiblity to how the application works.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Experimenting with IP Tables</title>
      <link>https://www.hairizuan.com/experimenting-with-ip-tables/</link>
      <pubDate>Sun, 05 Jun 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/experimenting-with-ip-tables/</guid>
      <description>&lt;p&gt;While playing around with container technologies such as docker and kubernetes, one critical component that kind of comes up over and over again is the whole portion about managing network connections to the containers. If we are to just take an example of Kubernetes - the networking stack is handled by technologies that would interface with CNI as well kube proxy. In this post, we&amp;rsquo;ll be focusing on the linux feature that kube proxy kind of rely on (one of the modes that it runs on) which is IP Tables.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Restricting connections between pods in a Kubernetes Cluster (Network Policy)</title>
      <link>https://www.hairizuan.com/restricting-connections-between-pods-in-a-kubernetes-cluster-network-policy/</link>
      <pubDate>Sun, 15 May 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/restricting-connections-between-pods-in-a-kubernetes-cluster-network-policy/</guid>
      <description>&lt;p&gt;There is an old adage from security land that we should restrict access to resources/assets as much as we can. Users and applications should only access items that they need to operate themselves. Following this line of thought, that would mean that if we are to deploy application in a Kubernetes Cluster, we should ensure that pods should only accept communication that they&amp;rsquo;ve explicitly declared as &amp;ldquo;required&amp;rdquo;. Is there a way to do so?&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Private VPC Experimentation</title>
      <link>https://www.hairizuan.com/private-vpc-experimentation/</link>
      <pubDate>Thu, 05 May 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/private-vpc-experimentation/</guid>
      <description>&lt;p&gt;This blog post is kind of a blog post that provide some notes of some experimentation that I encountered while playing with Google Cloud Platform. The purpose of this experimentation was to do the following:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Debugging Distroless Kubernetes Pods</title>
      <link>https://www.hairizuan.com/debugging-distroless-kubernetes-pods/</link>
      <pubDate>Fri, 15 Apr 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/debugging-distroless-kubernetes-pods/</guid>
      <description>&lt;p&gt;There is a trend of images that follow the philosophy of minimizing the size of image by removing almost everything out of image. This helps with getting image downloaded more quickly by kubelet into the nodes as well as possibly reducing the attack surface of the container even further (I suppose it&amp;rsquo;s harder to do things in a container if utilities like shell or bash don&amp;rsquo;t exist within it). You would probably see errors such as this for those containers that have somewhat remove the shell/bash:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Kubernetes Ingress for applications with branded links on GKE</title>
      <link>https://www.hairizuan.com/kubernetes-ingress-for-applications-with-branded-links-on-gke/</link>
      <pubDate>Sun, 13 Feb 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/kubernetes-ingress-for-applications-with-branded-links-on-gke/</guid>
      <description>&lt;p&gt;While dealing with branded links during my course of work, I kind of wondered how it can be tackled if I were to do it in a Google Kubernetes Engine Cluster. The situation I would imagine that would need to solve is this:&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Bus Arrival App - Singapore</title>
      <link>https://www.hairizuan.com/bus-arrival-app-singapore/</link>
      <pubDate>Thu, 03 Feb 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/bus-arrival-app-singapore/</guid>
      <description>&lt;p&gt;This is a quick sample tool to retrieve bus arrivals in Singapore. In order to use it, we would need to find for the Bus Stop ID or Bus Stop Code from where we&amp;rsquo;re taking the bus from. After keying it, it would fetch the records from LTA Datamall&amp;rsquo;s real time bus arrival API and present those records in this tool.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Database migration via Cloud SQL Proxy for Cloud SQL in Google Compute Engine VM</title>
      <link>https://www.hairizuan.com/database-migration-via-cloud-sql-proxy-for-cloud-sql-in-google-compute-engine-vm/</link>
      <pubDate>Mon, 17 Jan 2022 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/database-migration-via-cloud-sql-proxy-for-cloud-sql-in-google-compute-engine-vm/</guid>
      <description>&lt;p&gt;Database migration is kind of a critical bit when it comes to running and operating applications. In Golang, it is kind of appealing to rely on ORM (Object Relational Mapping) libraries. It allows one to kind of map structs to tabular structures within the database storage. One such example of an ORM library that I&amp;rsquo;ve found on the first page of Google is &lt;a href=&#34;https://gorm.io/index.html&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;GORM&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Sending ggplot graphs to googleslides again</title>
      <link>https://www.hairizuan.com/sending-ggplot-graphs-to-googleslides-again/</link>
      <pubDate>Sun, 07 Nov 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/sending-ggplot-graphs-to-googleslides-again/</guid>
      <description>&lt;p&gt;There was a change to the Google Slides API that resulted in an inability to upload images from Google Drive into Google Slides programmatically. Refer to the following issue on the rgoogleslides github repo - &lt;a href=&#34;https://github.com/hairizuanbinnoorazman/rgoogleslides/issues/28&#34;  target=&#34;_blank&#34; rel=&#34;noreferrer&#34;&gt;https://github.com/hairizuanbinnoorazman/rgoogleslides/issues/28&lt;/a&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>RGoogleslides - using your own account client id and secret</title>
      <link>https://www.hairizuan.com/rgoogleslides-using-your-own-account-client-id-and-secret/</link>
      <pubDate>Sat, 30 Oct 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/rgoogleslides-using-your-own-account-client-id-and-secret/</guid>
      <description>&lt;p&gt;NOTE: BEFORE READING THIS - ALL SCREENSHOTS BELOW ARE TAKEN SOMETIME IN OCTOBER 2021. THE UI MAY CHANGE IN THE FUTURE - USE THIS AS A ROUGH GUIDE AND NOT AS ABSOLUTE TRUTH&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>App with Metrics, Logs and Distributed Traces</title>
      <link>https://www.hairizuan.com/app-with-metrics-logs-and-distributed-traces/</link>
      <pubDate>Wed, 29 Sep 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/app-with-metrics-logs-and-distributed-traces/</guid>
      <description>&lt;p&gt;In a previous post, it details some information of how to setup some open source tooling to capture logs, retrieve metrics as well as capture distributed trace information from apps. The previous blog post would cover the setup of logging system which is Loki, distributed tracing system which is Tempo and metrics collection system which is Prometheus. Refer to the link below here.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Setting up Observability Tooling in GKE</title>
      <link>https://www.hairizuan.com/setting-up-observability-tooling-in-gke/</link>
      <pubDate>Wed, 01 Sep 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/setting-up-observability-tooling-in-gke/</guid>
      <description>&lt;p&gt;Generally, most cloud providers come along with all the observability tooling that you need for your apps built-in with the platform. Some of the common observability tools such as logging, monitoring and nowadays, distributed tracing are usually made available and you can easily use said tools by reading up on the various documentation of how to setup each of these tooling. E.g. if your application is inside a virtual machine and if you need collect metrics and logs from the application, you may need to install an agent in the said VM. The agent would collect those information and send it to the centralized observability tooling in the cloud provider where the information would be provided to you via a UI. Most of the time, these tools are charged based on the amount of logs/metrics you generate from the application (so the less logs/metrics you generate, the cheaper it is monitor your application - a very understanable/reasonable situation). In cases where if your application runs in Kubernetes, maybe the cluster comes with agents pre-installed, making it easier to make use of the logging/metrics/distributed tracing that the cloud provider has.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Using Envoy for GRPC Applications in Kubernetes</title>
      <link>https://www.hairizuan.com/using-envoy-for-grpc-applications-in-kubernetes/</link>
      <pubDate>Thu, 15 Jul 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/using-envoy-for-grpc-applications-in-kubernetes/</guid>
      <description>&lt;p&gt;As of now, one of the common and easier way to have services communicate with each other would be over HTTP. In real world use cases, HTTPS is usually used (in order to ensure communications are secure) and this communication is done following some sort of REST framework. This provides some sort of structure of how to standardize such communications for the various software applications out there. It got to the point where entire companies are developing in order to support this: e.g. Apigee, SmartBear&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Notes for building apps to be deployed on client infrastructure</title>
      <link>https://www.hairizuan.com/notes-for-building-apps-to-be-deployed-on-client-infrastructure/</link>
      <pubDate>Wed, 30 Jun 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/notes-for-building-apps-to-be-deployed-on-client-infrastructure/</guid>
      <description>&lt;p&gt;This is definitely not an exhaustive list of items to consider but definitely some of the more obvious features that client side users would look out for and consider when attempting to install such third party apps and operate it on their infrastructure.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Building Nginx RPM from source</title>
      <link>https://www.hairizuan.com/building-nginx-rpm-from-source/</link>
      <pubDate>Sat, 01 May 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/building-nginx-rpm-from-source/</guid>
      <description>&lt;p&gt;NOTE: As software advances, some of the commands shown below may become depreciated/irrelevant. If one encounters errors - check the output logs to see what the issue is (e.g. missing library? missing dependency? wrong folder structure due to being unable to find a file)&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Python Flask Apps in Kubernetes</title>
      <link>https://www.hairizuan.com/python-flask-apps-in-kubernetes/</link>
      <pubDate>Sun, 18 Apr 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/python-flask-apps-in-kubernetes/</guid>
      <description>&lt;p&gt;This are some notes in the case where one wants to deploy a bunch of python &amp;ldquo;microservices&amp;rdquo; to a Google Kubernetes Engine cluster. These notes emphasize on the basics rather than the various nuances of running a &amp;ldquo;production&amp;rdquo; grade python application.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Cloud Run Websocket support now allows you to deploy a R Shiny Server as a serverless app to GCP Cloud Run</title>
      <link>https://www.hairizuan.com/cloud-run-websocket-support-now-allows-you-to-deploy-a-r-shiny-server-as-a-serverless-app-to-gcp-cloud-run/</link>
      <pubDate>Fri, 05 Mar 2021 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/cloud-run-websocket-support-now-allows-you-to-deploy-a-r-shiny-server-as-a-serverless-app-to-gcp-cloud-run/</guid>
      <description>&lt;p&gt;Sometime earlier this year (2021), Google Cloud Run started to support websocket support - which is one of the critical components in order to be able to run a R Shiny Dashboard application.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Trying Distributed Tracing with Jaeger</title>
      <link>https://www.hairizuan.com/trying-distributed-tracing-with-jaeger/</link>
      <pubDate>Sat, 04 Apr 2020 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/trying-distributed-tracing-with-jaeger/</guid>
      <description>&lt;p&gt;Let&amp;rsquo;s say we have a set of applications that was designed to be a set of microservices. Each of the applications would generally be designed to be focused on one specific domain and in order to achieve the overall goal of the platform. However,for the platform to work properly, the applications would generally need to work together as one which would involve the application contacting each other.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Trying Knative from scratch</title>
      <link>https://www.hairizuan.com/trying-knative-from-scratch/</link>
      <pubDate>Mon, 09 Mar 2020 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/trying-knative-from-scratch/</guid>
      <description>&lt;p&gt;&lt;strong&gt;This blog post is still being updated&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Various cloud providers started offering serverless containers as a service. This is a service where developers can just create a container and then, pass that container over to the cloud provider and then forget about it. The cloud provider would deal with the scaling, provisioning of resources to host the applications, deployment, monitoring etc.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Cookiecutter template for Google Cloud Run</title>
      <link>https://www.hairizuan.com/cookiecutter-template-for-google-cloud-run/</link>
      <pubDate>Sat, 05 Oct 2019 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/cookiecutter-template-for-google-cloud-run/</guid>
      <description>&lt;p&gt;While working on a couple of projects that would be deployed on Google Cloud Run, I realized that a couple of them tend to have some sort of similar structure. Due to the number of repositories I would typically handle on a personal basis as well as the amount of context switch I would need to move between projects; it would ideal that all of such projects are automated as much as possible.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>SSH configurations for going into Google Cloud Instances</title>
      <link>https://www.hairizuan.com/ssh-configurations-for-going-into-google-cloud-instances/</link>
      <pubDate>Thu, 01 Aug 2019 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/ssh-configurations-for-going-into-google-cloud-instances/</guid>
      <description>&lt;p&gt;A classic move to reduce the attack surface of Google Cloud Instances is follow the advice below:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;If service on instance don&amp;rsquo;t need Public IPs, don&amp;rsquo;t attach Public IPs to such instances&lt;/li&gt;&#xA;&lt;li&gt;If instance requires Public IPs, ensure that only specific ports that are required are exposed. Clamp down on the rest of the ports and ensure no ingress on them&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;With these basic principles, it would be simple to think how these would eventually lead to an architecture where users access the instances via a bastion host. A bastion host is a instance that would allow user to ssh in from the &amp;ldquo;outside&amp;rdquo; world. The more critical instances would linked together in a private network that is unaccessible from the outside (except for load balancers to receive traffic etc).&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Introduction to Google Cloud Run</title>
      <link>https://www.hairizuan.com/introduction-to-google-cloud-run/</link>
      <pubDate>Mon, 15 Apr 2019 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/introduction-to-google-cloud-run/</guid>
      <description>&lt;p&gt;There are various serverless compute solutions on the Google Cloud Platfrom; initially it used to be only Appengine and Google Cloud Function. Google Appengine is a solution that allow you to focus on writing up apps and allow Google to take of deployment/scaling/operations. Google Cloud Functions take a step further and allow you as a developer to develop just plain old functions and allow Google to handle the rest of it, thereby making it easier to split your app functionality to parts that require to scale and parts that don&amp;rsquo;t need to.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Private Go Modules in Google Cloud Build</title>
      <link>https://www.hairizuan.com/private-go-modules-in-google-cloud-build/</link>
      <pubDate>Fri, 01 Mar 2019 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/private-go-modules-in-google-cloud-build/</guid>
      <description>&lt;p&gt;So recently, I&amp;rsquo;ve been needing to automate my builds for my few Golang projects via Google Cloud Build. However, rather than building docker containers, I needed Golang binaries instead, which kind of meant that I would need to have the CI/CD pipeline have a Go environment/runtime to build them. However, when it comes to these CI/CD solutions, including private Golang packages/modules in siad projects is usually quite troublesome. Private Golang packages usually take the code from private Github/Bitbucket/Gitlab repos and getting the &lt;code&gt;go get&lt;/code&gt; command to fetch them successful require a bit of hacks here and there to make it work successfully.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Setting up a Private Pypi Server</title>
      <link>https://www.hairizuan.com/setting-up-a-private-pypi-server/</link>
      <pubDate>Fri, 01 Feb 2019 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/setting-up-a-private-pypi-server/</guid>
      <description>&lt;p&gt;As one writes several python applications to be targeted on the Google Cloud Functions platform, it becomes increasingly obvious to pull out the more common bits of code out into its own library. Let&amp;rsquo;s have an example on the reason for this.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Preparing for Google Cloud Developer Certification</title>
      <link>https://www.hairizuan.com/preparing-for-google-cloud-developer-certification/</link>
      <pubDate>Sat, 26 Jan 2019 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/preparing-for-google-cloud-developer-certification/</guid>
      <description>&lt;p&gt;Recently, Google has been launching a couple of certification programs that would help people dictate their knowledge and expertise levels with the Google Cloud Platform. At the moment (January 2019), there are 7 certifications including &lt;strong&gt;Professional Cloud Architect&lt;/strong&gt;, &lt;strong&gt;Cloud Developer&lt;/strong&gt; and &lt;strong&gt;Professional Data Engineer&lt;/strong&gt;.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Devops Tools with Google Cloud Platform</title>
      <link>https://www.hairizuan.com/devops-tools-with-google-cloud-platform/</link>
      <pubDate>Mon, 14 Jan 2019 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/devops-tools-with-google-cloud-platform/</guid>
      <description>&lt;p&gt;There are various tooling out there to make deployment of applications easier. Some tools are used in order to help developers and organizations attempt to reach the &amp;ldquo;12 factor app&amp;rdquo; standard of applications which are set of applications that are explicitly designed to be able to scale where needed.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Triggering analytics via Serverless Functions Part 2</title>
      <link>https://www.hairizuan.com/triggering-analytics-via-serverless-functions-part-2/</link>
      <pubDate>Sat, 10 Nov 2018 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/triggering-analytics-via-serverless-functions-part-2/</guid>
      <description>&lt;p&gt;This is a continuation of previous &lt;a href=&#34;https://www.hairizuan.com/triggering-analytics-via-serverless-functions-part-1/&#34; &gt;blog post&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;To summarize the previous related blog post.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Too painful to have people respond and react to report generation and compilation&lt;/li&gt;&#xA;&lt;li&gt;Too expensive to have machine lying around to pick up the slack and automate the reports; serverless solutions (pay on use) could be a useful model to use when running automated reports.&lt;/li&gt;&#xA;&lt;li&gt;Scenario presented for example purposes: 3 reports generated which are to be compiled to a single report. Previously mentioned 3 reports would be processed on the condition when the data files are dropped into the storage buckets. Event generated from it would automatically run the report&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&#xA;&lt;h2 class=&#34;relative group&#34;&gt;Compilating reports&#xA;    &lt;div id=&#34;compilating-reports&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#compilating-reports&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;The next part of resolving our above mentioned situation (read previous blog post - part 1 for more details on this) is to compile the report. There are several ways to handle, each with their own advantages and drawbacks respectively. We would use the terms &lt;code&gt;subreport&lt;/code&gt; to refer to reports for the initial set of reports that would then need to be compiled into a final &lt;code&gt;report&lt;/code&gt;. These are just possible solutions; the combination of products that can be used to achieve the final goal of checking subreports and then compiling into the final report.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Triggering analytics via Serverless Functions Part 1</title>
      <link>https://www.hairizuan.com/triggering-analytics-via-serverless-functions-part-1/</link>
      <pubDate>Tue, 06 Nov 2018 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/triggering-analytics-via-serverless-functions-part-1/</guid>
      <description>&lt;p&gt;Seeing how functions change the way one looks at compute workloads in terms of products makes me wonder how one/companies can look at their analytics workloads and try to see if it was possible to change the costing model in that direction.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Getting Meetup Stats with Google Cloud Functions</title>
      <link>https://www.hairizuan.com/getting-meetup-stats-with-google-cloud-functions/</link>
      <pubDate>Fri, 24 Aug 2018 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/getting-meetup-stats-with-google-cloud-functions/</guid>
      <description>&lt;p&gt;Meetup.com is a pretty nice site to setup meetups and sharings on technologies. The platform is pretty nice and easy to use when it comes to bookings but sometimes, the data provided by its web interface is not sufficient nor does it fit our use case. In this case, let&amp;rsquo;s say you are trying to understand the trend of the number of people attending a meetup. To an organizer, an important thing to him/her is to understand what kind of actions would lead to higher turnups/registrations for a meetup. So, by the end of this post, hopefully we would be able to have a pretty decently priced (free if possible) solution for an analytics solution which would only be called occasionally.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Summary of Google Cloud Next 2018</title>
      <link>https://www.hairizuan.com/summary-of-google-cloud-next-2018/</link>
      <pubDate>Sun, 29 Jul 2018 00:00:00 +0000</pubDate>
      
      <guid>https://www.hairizuan.com/summary-of-google-cloud-next-2018/</guid>
      <description>&lt;p&gt;Google recently had a Google Cloud conference where they feature all the exciting new technologies that are made available in Google Cloud. There are numerous product announcements that were mentioned in the various keynotes as well as the breakout sessions; so in an attempt to understand what&amp;rsquo;s exactly is happening in terms of major product releases, I did a textual overview of the videos with links to additional resources. This is to highlight some of the brand new google products and how they can be used to serve new business needs and capabilities.&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
