PAUL'S BLOG

Learn. Build. Share. Repeat.
The YouTube player can not be loaded with disabled JavaScript.
The following video is embedded here:
https://youtube.com/watch?v=LhJODembils

#MSBuild | Integrating Azure AI and Azure Kubernetes Service to build intelligent apps | BRK225H

2023-06-02 1 min read Speaking

I had the opportunity to speak at #MSBuild 2023. Build is Microsoft’s largest developer conference held every year in May. This year, we were lucky enough to get back to a full in-person experience with plenty of awesome sessions with tons of technical demos. I shared the stage with Jorge Palma from the AKS PM team, and we spoke about how you can to integrate Azure AI and Azure Kubernetes Service to build and run your intelligent apps.

Continue reading

Purging Deleted Azure Key Vaults

2023-02-27 1 min read Code Snippets

Do you constantly provision and delete Azure Key Vaults?

If so, you may have noticed attempts to recreate a recently deleted key vault will result in the following error:

The vault name is already in use.

This is because Azure Key Vaults are kept in a deleted state and not automatically purged. You must manually purge these key vaults to be able to reuse the name.

To confirm the key vault in question is in “deleted” state, you can run the following:

Continue reading

Effortlessly Deploy to Azure Kubernetes with Open Source Tools Draft and Acorn

2023-01-03 7 min read Tutorial

UPDATE On March 15, 2024 Acorn Labs announced that they will be shifting focus to developing an LLM app platform based on GPT-Script technology and has archived the Acorn Runtime project.

In this post, I’ll walk you through deploying a web application to Azure Kubernetes Service (AKS) without having to write any Docker or Kubernetes manifest files.

Using open-source command-line tools Draft and Acorn, we’ll containerize and deploy to AKS in just a few steps! Let’s go 🚀

Continue reading

Service Mesh Considerations

2022-12-14 9 min read Architecture

“Build microservices”, they said… “it’ll be fun”, they said…

There are many reasons why you would want to deploy a solution based on the microservices architectural pattern, but it comes at a cost. More microservices means more deployments to manage, more microservices to connect, more microservices to secure… yeah, it gets complex real quick.

If you’re just getting started with microservices or have a small number of microservices deployed, you may have heard of the term “service mesh”, but not needed one yet.

Continue reading

Re-visiting Dev Container Features

2022-12-02 3 min read Tutorial

A few months ago I wrote a post that described how you can add custom features to your Dev Containers. That didn’t age very well 😅

But good news is that there is a better way to add or extend functionality for your Dev Containers. 🥳

Since my original post, @BrigitMurtaugh published a post on the VS Code blog announcing new repos, the open dev container specification and discussed a new way of adding features. If you haven’t read the post, go check it out here.

Continue reading

Web Application Routing on AKS

2022-11-16 5 min read Architecture

Exposing your web applications on Azure Kubernetes Service (AKS) has gotten a little bit easier. In this post, I will cover the new Web Application Routing feature for AKS and discuss reasons why you may want to implement it within your cluster.

Exposing your app

You have a lot of options when it comes to exposing your application Pods to the world. If you’re using a managed-Kubernetes service in the cloud, you could deploy a Service and set the type to LoadBalancer and your cloud provider will provision one with a public IP. The Service sits in front of your Pods and if all you need is a public IP, you’re good to go.

Continue reading

Ubuntu Dev Tools

2022-11-11 3 min read Code Snippets

Is this the year of the Linux desktop? I’m not sure but I have been making more of an effort to “daily drive” a Linux desktop lately. I’m currently working off of an Ubuntu 22.10 machine and here is my script for installing common tools that I work with daily.

sudo apt-get update 
sudo apt-get upgrade

# add git repository
sudo add-apt-repository ppa:git-core/ppa

# install some basic tools
sudo apt-get update
sudo apt-get install -y \
    python3 \
    python3-pip \
    bpytop \
    tree \
    guvcview \
    vim \
    curl \
    git \
    gnupg2 \
    jq \
    sudo \
    zsh \
    build-essential \
    cmake \
    libssl-dev \
    openssl \
    unzip \
    pkg-config

# install brew tools
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
echo '# Set PATH, MANPATH, etc., for Homebrew.' >> /home/paul/.zshrc
echo 'eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"' >> /home/paul/.zshrc
eval "$(/home/linuxbrew/.linuxbrew/bin/brew shellenv)"
brew install gcc 

# install hugo 
brew install hugo

# install azure cli
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash

# install dotnet6
sudo apt-get install dotnet6

# install go
wget https://go.dev/dl/go1.19.3.linux-amd64.tar.gz
sudo rm -rf /usr/local/go && sudo tar -C /usr/local -xzf go1.19.3.linux-amd64.tar.gz
echo "export PATH=$PATH:/usr/local/go/bin" >> ~/.zshrc
rm go1.19.3.linux-amd64.tar.gz 

# install kubectl
sudo apt-get update
sudo apt-get install -y ca-certificates curl
sudo curl -fsSLo /usr/share/keyrings/kubernetes-archive-keyring.gpg https://packages.cloud.google.com/apt/doc/apt-key.gpg
echo "deb [signed-by=/usr/share/keyrings/kubernetes-archive-keyring.gpg] https://apt.kubernetes.io/ kubernetes-xenial main" | sudo tee /etc/apt/sources.list.d/kubernetes.list
sudo apt-get update
sudo apt-get install -y kubectl

# install docker desktop
sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
wget https://desktop.docker.com/linux/main/amd64/docker-desktop-4.13.1-amd64.deb
sudo apt-get update
sudo apt-get install -y ./docker-desktop-4.13.1-amd64.deb
rm docker-desktop-4.13.1-amd64.deb

# install rancher desktop
curl -s https://download.opensuse.org/repositories/isv:/Rancher:/stable/deb/Release.key | gpg --dearmor | sudo dd status=none of=/usr/share/keyrings/isv-rancher-stable-archive-keyring.gpg
echo 'deb [signed-by=/usr/share/keyrings/isv-rancher-stable-archive-keyring.gpg] https://download.opensuse.org/repositories/isv:/Rancher:/stable/deb/ ./' | sudo dd status=none of=/etc/apt/sources.list.d/isv-rancher-stable.list
sudo apt-get update
sudo apt-get install -y rancher-desktop

# install hashi tools
wget -O- https://apt.releases.hashicorp.com/gpg | gpg --dearmor | sudo tee /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com jammy main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt update
sudo apt-get install -y terraform packer consul nomad vault waypoint

# install node
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"  # This loads nvm
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"  # This loads nvm bash_completion
command -v nvm
nvm install 18

# install pulumi
curl -fsSL https://get.pulumi.com | sh

# install rust and toolchains
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
echo "source $HOME/.cargo/env" >> ~/.zshrc
source "$HOME/.cargo/env"
echo "PATH=$PATH:$HOME/.cargo/bin" >> ~/.zshrc
source ~/.zshrc

# install tools for building wasm apps
rustup install nightly
rustup component add rustfmt
rustup component add rustfmt --toolchain nightly
rustup component add clippy
rustup component add clippy --toolchain nightly
cargo install cargo-expand
cargo install cargo-edit
cargo install cargo-generate
cargo install --git https://github.com/bytecodealliance/wit-bindgen wit-bindgen-cli --tag v0.2.0
rustup target add wasm32-wasi
rustup target add wasm32-unknown-unknown

# install rustwasm
curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh

# install wasmtime
curl https://wasmtime.dev/install.sh -sSf | bash

# install snaps
sudo snap install --classic code
sudo snap install spotify
sudo snap install postman
sudo snap install zoom-client
sudo snap install sublime-text --classic
sudo snap install storage-explorer
sudo snap install obs-studio
sudo snap install discord
sudo snap install slack --classic
sudo snap install vlc
Older posts Newer posts