Reading List 2021

I always feel like I have not spent enough time reading so thought I would start tracking my reading lists per year. Looking back I think I actually covered a decent amount of material and am glad to see that my reading list does not just include IT related reading.

The Exponential Age: How Accelerating Technology is Transforming Business, Politics and Society by [Azeem Azhar]

The Exponential Age: How Accelerating Technology is Transforming Business, Politics and Society by [Azeem Azhar]


Really enjoyed reading this book. If you work in IT, you should read this book to help you to appreciate the fact that we are living in a transformative era which is changing the world, much as the invention of the steam engine, telephone and the widespread adoption of electricity.

The Stone Sky (The Broken Earth Book 3) by [N. K. Jemisin]

The Stone Sky (The Broken Earth Book 3) by [N. K. Jemisin]

Book 3 of the fantasy trilogy. Not hard to understand why all 3 books received the Hugo award individually.

The Invention of Nature: Alexander von Humboldt's New World by [Andrea Wulf]

The Invention of Nature: Alexander von Humboldt’s New World by [Andrea Wulf]

Got this book as a birthday gift from my daughter. I also love good history books and this one was especially good. Not only did I learn about Humbolt and all of the things he came up with but also the times he lived in and his contemporaries.

Burn: New Research Blows the Lid Off How We Really Burn Calories, Lose Weight, and Stay Healthy by [Herman Pontzer]

Burn: New Research Blows the Lid Off How We Really Burn Calories, Lose Weight, and Stay Healthy by [Herman Pontzer]

Non-fiction, not related at all to IT or technology in general. Great insight into how we burn calories. Read it to better understand how to stay healthy through diet and what the effect of diet vs. exercise have on overall fitness.

The End of Everything: (Astrophysically Speaking) by [Katie Mack]

The End of Everything: (Astrophysically Speaking) by [Katie Mack]

I enjoy popular science and this astrophysics book was fascinating, even though it was a bit depressing given the end of everything, is really the end of everything.

Azure ARM Templates

Spending a lot of time working with customers to define an Azure adoption framework, so thought I would look into ARM templates to get a better feel for how to automate and code-ify the deployment of Azure resources and policies.

ARM templates can be deployed in a similar manner to GCP deployment manager templates. ARM templates are defined in JSON, GCP DM in YAML/Jinja. Both have a deployment manager where you can monitor the success or failure of the deployment in the console.

ARM templates consist of 3 basic parts; parameters, variables and resources. Parameters define the inputs needed to execute the template (including the type, default value and acceptable values if you need to limit them), variables are a way of providing parameter values dynamically or by building them based on a standard structure (e.g. a naming convention). Resources are the definition of which resources need to be deployed in the template.

{
 "$schema":"https://schema.management.azure.com/schemas/2018
 -05-01/subscriptionDeploymentTemplate.json#",
 "contentVersion": "1.0.0.0",
 "parameters": {
   "budgetName": {
      "type": "string",
      "defaultValue": "MyBudget",
      "metadata": {
         "description": "Name of the Budget. It should be
         unique within a resource group."
      }
    },
   "amount": {
     "type": "string",
     "defaultValue": "1000",
     "metadata": {
       "description": "The total amount of cost or usage to
       track with the budget"
     }
   },
...
 }
},
 "variables": {
   "uniquebudgetName": "[concat(parameters('amount'), '-',
   parameters('firstThreshold'), '-budget')]"
},
 "resources": [
   {
   "type": "Microsoft.Consumption/budgets",
   "apiVersion": "2019-10-01",
   "name": "[variables('uniquebudgetName')]",
   "properties": {
     "timePeriod": {
       "startDate": "2021-02-01T00:00:00Z",
       "endDate": "2022-02-01T00:00:00Z"
     },
   "timeGrain": "[parameters('timeGrain')]",
...
   }
 ]
}

Parameter inputs which are not defined already via variables, can be defined either at run time through the command line, via a parameter file or via the console with an input form.

{
 "$schema": "https://schema.management.azure.com/
 schemas/2019-04-01/deploymentParameters.json#",
 "contentVersion": "1.0.0.0",
 "parameters": {
   "budgetName": {
     "value": "budget1"
   },
   "startDate": {
   "value": "2021-02-01T00:00:00Z"
   },
   "endDate": {
     "value": "2022-02-01T00:00:00Z"
   },
   "timeGrain": {
     "value": "Monthly"
   },
   "amount": {
     "value": "10"
   },
   "firstThreshold": {
     "value": "10"
   },
   "contactEmails": {
     "value": [
       "chris@broccolifamily.net"
     ]
   }
 }
}

There are a couple of ways to execute a template file. Either through the console (didn’t bother with this since it seems counter productive), CLI, or a CI/CD pipeline.

az deployment group create \
  --name armbudget \
  --resource-group resourcegroup1 \
  --template-file $templateFile \
  --parameters $prodParameterFile

Of course the two environment variables, need to be set to point to the appropriate files. The –parameter flag can also have a list of parameters and their values instead of pointing to the file.

My tests followed one of the canned tutorials but I extended it to add my own parameter file. Executing a CI/CD pipeline requires a parameter file to be used if you don’t want to keep updating the pipeline every time you change a parameter value (just update the parameter file and the pipeline can just run triggering on the change to the parameter file).

The final template which I used, along with the working parameter file are located here.

The result in the console looks like this…

Book Notes – Site Reliability Engineering

Notes from Chapter 1 of the Site Reliability Engineering book.

SRE teams are characterized by both rapid innovation and large acceptance of change.

SRE teams are responsilbe for the availability, latency, performance, efficiency, change management, monitoring and capacity planning of their services.

Core Tenants of Google SRE:

  • Ensuring a Durable Focus on Engineering – Ensure that 50% of an SRE’s time is spent on Engineering and the other 50% on operations. Safety valves exist in case the volume of operational effort exceeds 50%. This ensures they will have enough time to respond to the incident, restore service and conduct a postmortem.
  • Pursue Maximum Change Velocity without violating the SLO – Having an SLO budget allows for change to happen and does not require adhering to a 100% uptime target.
  • Keep track of system health and availability through Monitoring – 3 kinds of valid outputs: alerts, tickets and logging.
  • Ensure an effective Emergency Response by reducing MTTR – Leverage Playbooks to ensure consistent and efficient responses by all members of the team.
  • Reduce bad changes by automating Change Management – Use automation to implement progressive rollouts, quickly and accurately detect problems and rollback changes safely if necessary.
  • Ensure sufficient capacity and redundancy to serve projected future demand through Demand Forecasting and Capacity Planning – Should take both organic and inorganic growth into account.
  • Provisioning should be conducted quickly and only when necessary – Adding capacity is expensive so must only be done as necessary but when done must be correct so that it will work when needed.
  • Efficiency and Performance ensure effective management of a services costs – Demand, capacity and software efficiency are a large part of a systems efficiency. SREs provision to meet a capacity target at a specific response speed.