<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Cloud with Chris</title>
    <description>The latest articles on DEV Community by Cloud with Chris (@cloudwithchris).</description>
    <link>https://dev.to/cloudwithchris</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F4132%2F094af7b0-3278-418e-a2df-a5d5925f1a22.png</url>
      <title>DEV Community: Cloud with Chris</title>
      <link>https://dev.to/cloudwithchris</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cloudwithchris"/>
    <language>en</language>
    <item>
      <title>Tales from the Real World - Architecting the Transformation</title>
      <dc:creator>Chris Reddington</dc:creator>
      <pubDate>Sun, 12 Sep 2021 12:34:31 +0000</pubDate>
      <link>https://dev.to/cloudwithchris/tales-from-the-real-world-architecting-the-transformation-51bp</link>
      <guid>https://dev.to/cloudwithchris/tales-from-the-real-world-architecting-the-transformation-51bp</guid>
      <description>&lt;p&gt;&lt;strong&gt;This post was originally published on Fri, Sep 10, 2021 at &lt;a href="https://www.cloudwithchris.com/episode/architecting-the-transformation/"&gt;cloudwithchris.com&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most organizations engaged in transformation today are moving from left to right in digitally-driven maturity models. The objectives are well known: increase agility, boost productivity, and provide seamless digital experiences for consumers.&lt;/p&gt;

&lt;p&gt;Architects play a pivotal role as the curators of this transformation. In this session, Asanka will share his experience on how architects can contribute and introduce a framework to follow on refactoring enterprises.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/TPPujJ7N8tM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>architect</category>
      <category>architecture</category>
      <category>productivity</category>
      <category>agile</category>
    </item>
    <item>
      <title>Shift Left and Increase your Code Quality with Azure DevOps Branch Policies</title>
      <dc:creator>Chris Reddington</dc:creator>
      <pubDate>Sun, 12 Sep 2021 12:31:39 +0000</pubDate>
      <link>https://dev.to/cloudwithchris/shift-left-and-increase-your-code-quality-with-azure-devops-branch-policies-243d</link>
      <guid>https://dev.to/cloudwithchris/shift-left-and-increase-your-code-quality-with-azure-devops-branch-policies-243d</guid>
      <description>&lt;p&gt;&lt;strong&gt;This post was originally published on Thu, Sep 9, 2021 at &lt;a href="https://www.cloudwithchris.com/blog/use-branch-policies-azure-devops/" rel="noopener noreferrer"&gt;cloudwithchris.com&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What are Branch Policies?
&lt;/h2&gt;

&lt;p&gt;This post is similar to another I recently wrote on &lt;a href="//www.cloudwithchris.com/blog/use-github-branch-protection-rules"&gt;using Branch Protection Rules in GitHub&lt;/a&gt;. Instead of focusing on GitHub, we'll be looking at how you can use Branch Policies in Azure DevOps (specifically, Azure Repos). If you're using Azure Repos, but not using Branch Policies - I'd encourage you to start using them! I hope this post helps you learn how!&lt;/p&gt;

&lt;p&gt;In the world of DevOps, there is a term known as Shift Left. This term effectively means 'find and prevent issues early'. There are several studies that have shown that the most effective way to prevent issues is to find them early in the software delivery lifecycle. This is because the more issues you find early, the more likely it is that they will be identifiable, and therefore fixed.&lt;/p&gt;

&lt;p&gt;Let me play devil's advocate for a moment. What happens if you have no barriers to push your code into the main line of development? If there are no quality checks, then you could be pushing code to your production codebase that isn't up to scratch. If you have no automated tests, or code review process, then you don't have the ability to identify and fix issues early. This means you're going to have to wait until the end of the software delivery cycle to find the first issue, which is a waste of time and money. Wouldn't it be better if you could find the first issue as soon as possible?&lt;/p&gt;

&lt;p&gt;This is where Branch Policies come in. Branch Policies are used to enforce workflows for one or more branches in your Git repository hosted on Azure Repos. These rules are enforced by the service and can be configured by anyone who has permissions as per the repository security configuration.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; To control who which users or groups can Edit Branch Policies, in addition to other repository-level actions, navigate to your Azure DevOps &lt;strong&gt;Project Settings&lt;/strong&gt;. Under the Project Settings, you will see a section for &lt;strong&gt;Repos&lt;/strong&gt;, and an item called &lt;strong&gt;Repositories&lt;/strong&gt;. You can specify permissions across all repositories within the project, or a specific repository. This can be achieved by specifying Azure DevOps Groups or individual users, and then selecting the appropriate permissions for them. You can find an example in the screenshot below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faw03b5t20djyr9z1l0yq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faw03b5t20djyr9z1l0yq.jpg" alt="Screenshot showing the user interface to update permissions for Azure DevOps Groups within a repository"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In essence, before you commit to a certain branch (or a set of branches), you need to fulfil a set of conditions. If you don't, then you won't be able to commit to that branch. These conditions include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need to have a minimum number of reviewers that have approved your change, before code can be merged.&lt;/li&gt;
&lt;li&gt;You need to have work items associated with your change, before code can be merged. This allows for traceability, so you know what changes are associated with each change to the codebase.&lt;/li&gt;
&lt;li&gt;All active comments (i.e. discussions, rather than code comments) must be resolved before a Pull Request can be merged.&lt;/li&gt;
&lt;li&gt;Restricting changes to be merged in a specific way (This could be its own entire blog post, so we'll gloss over this one for the purposes of this post.)&lt;/li&gt;
&lt;li&gt;Trigger a build automatically when a Pull Request is triggered. This enables you to run builds, automatic tests, and other automated processes to automatically verify whether some changes may have broken the codebase.&lt;/li&gt;
&lt;li&gt;Ensure a successful status check from External Services (Perhaps some external code scanner that you have a dependency upon?) before a Pull Request can be merged.&lt;/li&gt;
&lt;li&gt;Automatically include code reviewers on a Pull Request if certain areas of code have changed. This is a nice alternative for the CODEOWNERS concept if you are familiar with it from GitHub.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Branch policies can be configured from the Branches page under Azure Repos. You can action these by hitting the ellipses (three dots) on the branch that you would like to protect. In the screenshot below, you can see that the main branch has been protected as it has a small icon (which looks a little like a medal), next to the branch name.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhtrezeynznipvia0j0zr.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhtrezeynznipvia0j0zr.jpg" alt="Screenshot showing the Branch Protection Rules configured for the main branch of the cloudwithchris.com repository. It shows that signed commits are required. It showed that require pull request reviews before merging, require status checks to pass before merging, require conversation resolution before merging, require linear history and include administrators are not required."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So, in summary - you need to have a set of conditions that you can fulfil before you can commit to a branch. If you don't, then you won't be able to commit to that branch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up Branch Policies
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;In Azure DevOps, Navigate to the branches section of Azure Repos in your Azure DevOps project.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Make sure that you have the appropriate repository selected at the very top of the page. (You can house several Git repositories within the same Azure DevOps project, so it's important to ensure you're working in the appropriate context!)&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flhr74jbgbo66qd8vu4lb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flhr74jbgbo66qd8vu4lb.jpg" alt="Screenshot showing multiple options for the Git Repository in the dropdown at the top of the Branches page in Azure Repos"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Hover over the appropriate branch, and select the ellipsis (three dots) on the right hand side. Select the Branch Policies option.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc80ni44g6ztwhbg3x00o.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc80ni44g6ztwhbg3x00o.jpg" alt="Screenshot showing multiple options for the Git Repository in the dropdown at the top of the Branches page in Azure Repos"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You will see a list of settings, some of which will have subsettings within them This is the list of branch policies that you can configure for the branch that you wish to protect. There is no save button on this form, as the options are saved automatically.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdgxoeggy7vrutbaljas0.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdgxoeggy7vrutbaljas0.jpg" alt="Screenshot showing several Branch Policy configuration options, which include a minimum number of reviewer count of 1, allowing requestors to approve their own changes. It also includes a requirement for linked work items, and for all comments to be resolved before a Pull Request can be merged."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Configure the rules as appropriate for your branch. I typically configure some variation of the following: &lt;code&gt;Require a minimum number of reviewers&lt;/code&gt;, &lt;code&gt;Check for linked work items&lt;/code&gt;, &lt;code&gt;Check for comment resolution&lt;/code&gt; and &lt;code&gt;Build validation&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; There is some great detail in the &lt;a href="https://docs.microsoft.com/en-us/azure/devops/repos/git/branch-policies?view=azure-devops" rel="noopener noreferrer"&gt;Azure Docs&lt;/a&gt; about each of the Branch policies that you can configure. Rather than re-writing the same detail here, I encourage you to dive in and take a look over there!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;Navigate back to the branches page under Azure Repos. If you did not previously have a Branch Policy configured, you should now notice a small icon (which looks a little like a medal) next to the branch name.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkbkuuefc1vwmjrcezz87.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkbkuuefc1vwmjrcezz87.jpg" alt="Screenshot showing that a branch policy has been configured on the main branch."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As an example, I made some changes to my master branch protection policy. I now have the &lt;code&gt;Require a minimum number of reviewers&lt;/code&gt; set to 1, and &lt;code&gt;allow requestors to approve their own changes&lt;/code&gt; enabled. Consider this a warning - this configuration means that I can review my own PRs and approve them, somewhat defeating the point of a Pull Request workflow. However, given it's just myself that works on the project - It makes some sense here. I have set &lt;code&gt;Check for linked work items&lt;/code&gt; to on, and &lt;code&gt;Check for comment resolution&lt;/code&gt; to on as well.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; You aren't limited to applying branch policies to individual repositories. You can navigate to the Project Settings, and navigate to the Repositories option underneath the Repos section. Click on the policies tab, and you will see a section for Branch Policies. Here, it says that you can "Protect important branch namespaces across all repositories in this project"&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Figa6ptnfkzk7b7jde7cw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Figa6ptnfkzk7b7jde7cw.jpg" alt="Screenshot showing that branch protection can be configured at a project level. This can be done on a default branch, or branches matching a specified naming pattern."&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, we'll want to check whether our Branch Policies are working! After navigating to my readme.md, and wanting to make a dummy change - You will notice that I am prevented from committing the change to the main branch.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi3voe0ymklz3munozyp7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi3voe0ymklz3munozyp7.jpg" alt="Screenshot showing that a commit directly to the main branch is no longer allowed. Instead, a Pull Request must be used to pass an update to that branch."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead, we can use the same User Interface to commit the change in a new branch and raise a Pull Request. Pull Requests can also be raised under the Azure Repos section, by clicking on the Pull Requests item.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcfkmhhj8iynmscmeumfa.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcfkmhhj8iynmscmeumfa.jpg" alt="Screenshot showing that a commit is being made against a new branch called feature/readme-adjustment, and a Pull Request is being immediately created."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After creating a Pull Request with the default settings, you can see that I have been taken to the Pull Request page to review the changes. Based on the settings that I had configured, even if I approve the Pull Request, I will not be able to merge the changes. This is because I have not linked a work item to the changes, and therefore have not met the conditions to merge.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fquq6skk3bebgzo7kyb9u.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fquq6skk3bebgzo7kyb9u.jpg" alt="Screenshot showing a Pull Request which requires a work item to be linked, 1 reviewer and 1 reviewer to approve."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At this stage, I have now proceeded to link a work item with the Pull Request. You can see that the Pull Request now just requires 1 reviewer to approve.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4pcijxp4px37qqmlfk2n.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4pcijxp4px37qqmlfk2n.jpg" alt="Screenshot showing a Pull Request which requires 1 reviewer and 1 reviewer to approve."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, after approving the Pull Request, I can now merge the changes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F194mve49gxf9w5yjfurp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F194mve49gxf9w5yjfurp.jpg" alt="Screenshot showing that the pull request has completed all checks and is ready to be merged into the main branch."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;There we go! Throughout this blog post, we have begun our journey of shifting left. We are no longer allowing any code to be directly committed to our production codebase. Instead, we are enforcing a set of rules so that a consistent workflow is maintained. That workflow may include peer reviews, build validation, ensuring work items are linked and more! This is only one part of the journey in shifting left. Azure Pipelines are incredibly powerful, and could be used to automate your builds, tests and more when using build validation. Why not create an Azure Pipelines that is triggered when a Pull Request is created or updated? I hope that you can see how this wider story may continue. But, of course - that's for another day!&lt;/p&gt;

&lt;p&gt;Are Branch Policies something that you are already using? Perhaps in Azure DevOps, GitHub, or with another tool? I'd love to hear how you're using them, and some of the practices that you may have picked up along the way. Drop me a message over on &lt;a href="https://twitter.com/reddobowen" rel="noopener noreferrer"&gt;Twitter, @reddobowen&lt;/a&gt;. In the meantime, I hope this has been useful! Thanks for reading, and bye for now.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>azuredevops</category>
      <category>developer</category>
      <category>devsecops</category>
    </item>
    <item>
      <title>Migrating to the Cloud</title>
      <dc:creator>Chris Reddington</dc:creator>
      <pubDate>Sun, 12 Sep 2021 12:17:22 +0000</pubDate>
      <link>https://dev.to/cloudwithchris/migrating-to-the-cloud-50c9</link>
      <guid>https://dev.to/cloudwithchris/migrating-to-the-cloud-50c9</guid>
      <description>&lt;p&gt;&lt;strong&gt;This post was originally published on Wed, Sep 8, 2021 at &lt;a href="https://www.cloudwithchris.com/episode/migrating-to-the-cloud/"&gt;cloudwithchris.com&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this episode, Chris is joined by Susanne Tedrick. Susanne is an Azure Infrastructure Specialist for Microsoft and the award-winning author of "Women of Color in Tech". They will discuss the basic technical and business considerations to be made when migrating applications and workloads to the cloud, based on the Cloud Adoption Framework.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/D_yM0XcYQ0Y"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>azure</category>
      <category>azuremigrate</category>
      <category>cloudmigration</category>
      <category>cloudadoptionframework</category>
    </item>
    <item>
      <title>Fix for .bashrc not executing on startup in Ubuntu on Windows Subsystem for Linux</title>
      <dc:creator>Chris Reddington</dc:creator>
      <pubDate>Sun, 12 Sep 2021 12:14:32 +0000</pubDate>
      <link>https://dev.to/cloudwithchris/fix-for-bashrc-not-executing-on-startup-in-ubuntu-on-windows-subsystem-for-linux-4di3</link>
      <guid>https://dev.to/cloudwithchris/fix-for-bashrc-not-executing-on-startup-in-ubuntu-on-windows-subsystem-for-linux-4di3</guid>
      <description>&lt;p&gt;&lt;strong&gt;This post was originally published on Mon, Sep 6, 2021 at &lt;a href="https://www.cloudwithchris.com/blog/fix-bashrc-not-executing-wsl/"&gt;cloudwithchris.com&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In case you haven't heard, I'm planning to do some livestreams in the near future which are focused on live development / building in the cloud. I'm working on a few ideas, but if you have any suggestions - please throw them my way! To prepare for this, I've recently spent some time making sure my local development environment is in order. Windows Terminal and Windows Subsystem for Linux (WSL) are a couple of the key tools in my local development environment. Windows Subsystem for Linux is the focus for this post.&lt;/p&gt;

&lt;p&gt;Windows Terminal is an awesome tool. I've written &lt;a href="https://dev.to/blog/windows-terminal-productive-azure"&gt;another blog post&lt;/a&gt; on how it can make you productive with Azure. If you aren't familiar with it, or want some productivity tips - I definitely recommend checking out the post!&lt;/p&gt;

&lt;p&gt;For my local development, I typically use Ubuntu in Windows Subsystem for Linux. From my university days, the computer terminals were all Linux-based (I think a flavour of Debian?), and I used a Macbook Pro throughout my time at university as well. I've built up a bit of a natural preference for the Linux command-line over that time, so it now comes more naturally to me. Hence why Windows Subsystem for Linux, Windows Terminal and Ubuntu are my go-to local command-line tools.&lt;/p&gt;

&lt;p&gt;As you'll have guest from the title of this post, I've been having some issues with my Ubuntu environment. Nothing significant, but several papercuts that kept getting in the way of my productivity. I'll talk about other issues that I've been working on fixing in separate blog posts.&lt;/p&gt;

&lt;p&gt;My goal was to have a consistent usability experience configured across the PowerShell and Ubuntu environments, considering tools such as &lt;a href="https://ohmyposh.dev/docs/"&gt;ohmyposh&lt;/a&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; If you haven't heard of ohmyposh, then it's worth looking into. &lt;a href="https://www.hanselman.com/blog/my-ultimate-powershell-prompt-with-oh-my-posh-and-the-windows-terminal"&gt;Scott Hanselman has done a brilliant write-up&lt;/a&gt; on how you can get this setup in your environment.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I was following one of his posts, but couldn't seem to get the prompt working successfully. Scott's guidance and posts are awesome. I've followed the same post before, so I know that it works. There had to be something else going on in my environment. I made the changes to my &lt;code&gt;~\.bashrc&lt;/code&gt; file as suggested throughout several blog posts and docs, but nothing seemed to reflect the modifications to &lt;code&gt;~\.bashrc&lt;/code&gt; when a new shell was created. There was no pretty prompt, and my aliases were not working.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uA2tbzFD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ogxxr1w6cbcanhkr4qi.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uA2tbzFD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ogxxr1w6cbcanhkr4qi.jpg" alt="Windows Terminal not showing any ohmyposh configuration"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My next troubleshooting step is likely the one that most of you would try next. Clearly, there was something in my &lt;code&gt;~\.bashrc&lt;/code&gt; preventing the full file from executing. It must be failing to execute mid-way through. Let's figure out how far the script is able to execute and debug from there.&lt;/p&gt;

&lt;p&gt;The troubleshooting step? It's of course the highly-advanced (sarcasm intended!) use of echo statements throughout the script to identify at what stage the script is failing.&lt;/p&gt;

&lt;p&gt;I shut down the WSL environment by using &lt;code&gt;wsl.exe --shutdown&lt;/code&gt; and reopened a new Linux Tab in the Windows Terminal to ensure this was a fresh instance. I was surprised to find that none of my new echo statements were being invoked. This led me to the conclusion that &lt;code&gt;~\.bashrc&lt;/code&gt; wasn't being executed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uA2tbzFD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ogxxr1w6cbcanhkr4qi.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uA2tbzFD--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3ogxxr1w6cbcanhkr4qi.jpg" alt="Windows Terminal not showing any ohmyposh configuration"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I had to test the theory. To achieve this I executed the command &lt;code&gt;source ~\.bashrc&lt;/code&gt; in the Ubuntu tab that had already been opened.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; The &lt;code&gt;source&lt;/code&gt; command reads and executes the commands within a file, so would certainly load the &lt;code&gt;~\.bashrc&lt;/code&gt; file, and set the desired configurations.&lt;/p&gt;

&lt;p&gt;Because of its nature,you make sure that you're only using the &lt;code&gt;source&lt;/code&gt; command on a file where you trust the contents!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The series of echo statements printed into the terminal immediately. I was also greeted by a new, prettier looking prompt - ohmyposh! My theory held true. The &lt;code&gt;~\.bashrc&lt;/code&gt; file wasn't being executed when a new Linux Tab was created in Windows Terminal. This was also the case when directly opening Ubuntu in WSL.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--NSVuKQWv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pommnbnspet4g5p4itqb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--NSVuKQWv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pommnbnspet4g5p4itqb.jpg" alt="Windows Terminal showing the ohmyposh configuration alongside the printed echo statements"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This led onto the next line of investigation. Why was it not executing on start up? As it turns out, there's a fairly simple explanation. The summary on the &lt;a href="https://www.man7.org/linux/man-pages/man1/bash.1.html"&gt;man pages for bash&lt;/a&gt; gives us a clearer understanding of the potential problem (quoted below).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;When bash is invoked as an interactive login shell, or as a non-interactive shell with the &lt;code&gt;--login&lt;/code&gt; option, it first reads and executes commands from the file &lt;code&gt;/etc/profile&lt;/code&gt;, if that file exists.  After reading that file, it looks for &lt;code&gt;~/.bash_profile&lt;/code&gt;, &lt;code&gt;~/.bash_login&lt;/code&gt;, and &lt;code&gt;~/.profile&lt;/code&gt;, in that order, and reads and executes commands from the first one that exists and is readable. The &lt;code&gt;--noprofile&lt;/code&gt; option may be used when the shell is started to inhibit this behavior.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HP2R8ZJm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/07ntyihp03h7bjrnuoik.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HP2R8ZJm--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/07ntyihp03h7bjrnuoik.jpg" alt="Using the list command to view the hidden files within the home directory"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, how is &lt;code&gt;~/.bashrc&lt;/code&gt; being executed in the first place? After looking in my home directory, I could see that I have a file called &lt;code&gt;~/.profile&lt;/code&gt;. This file includes the following code snippet, which loads the &lt;code&gt;~/.bashrc&lt;/code&gt; file if it exists.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# if running bash&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-n&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$BASH_VERSION&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
    &lt;span class="c"&gt;# include .bashrc if it exists&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt; &lt;span class="nt"&gt;-f&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.bashrc"&lt;/span&gt; &lt;span class="o"&gt;]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
        &lt;span class="nb"&gt;.&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$HOME&lt;/span&gt;&lt;span class="s2"&gt;/.bashrc"&lt;/span&gt;
    &lt;span class="k"&gt;fi
fi&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As a next step, I investigated the other files available in the home directory. I noticed that a &lt;code&gt;~/.bash_profile&lt;/code&gt; file exists (which would have taken precedence over the other files). At some point, I must have followed a set of instructions to install some software and mistakenly created a .bash_profile file instead of putting it into the &lt;code&gt;~/.bashrc&lt;/code&gt; file, as there was only one line (which was also present in my &lt;code&gt;~/.bashrc&lt;/code&gt; file).&lt;/p&gt;

&lt;p&gt;I then removed the &lt;code&gt;~/.bash_profile&lt;/code&gt; file and used the &lt;code&gt;wsl.exe --shutdown&lt;/code&gt; command to shutdown the WSL environment, so that I can determine whether this fixed the execution problem by launching a fresh environment. Guess what? It was the problem! After removing the superfluous &lt;code&gt;~/.bash_profile&lt;/code&gt; file, the &lt;code&gt;~/.bashrc&lt;/code&gt; file executed without any problems - The echo statements, ohmyposh, and all of the aliases that I had expected to be configured.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--nPpL9gNN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ue9w0i8xs9drw122gw5p.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--nPpL9gNN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ue9w0i8xs9drw122gw5p.jpg" alt="After shutting down the WSL environment, relaunching the Windows Terminal gives the expected results"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So what's the morale of the story here? Be careful when you're following instructions! Adding a file here or there can seem trivial, but might have some side-effects based upon the wider system. Map the instructions back to your own environment, and what makes sense (i.e. Whenever I made the change previously - rather than creating a &lt;code&gt;~/.bash_profile&lt;/code&gt; and adding the contents, I should have just added them to the &lt;code&gt;~/.bashrc&lt;/code&gt; file).&lt;/p&gt;

&lt;p&gt;Now, I have an environment that has all of my aliases, ohmyposh and wider configuration preferences set up correctly. It's a small tweak, but has a big impact on my own productivity.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MCdPPfFo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0ikxfmfknrmulkl5gbwy.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MCdPPfFo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0ikxfmfknrmulkl5gbwy.jpg" alt="Environment setup after removing the echo 'Checkpoint' statements, relaunching the Windows Terminal to give the final result with ohmyposh"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I hope that you've found this post useful. Have you had your own challenges getting your local Linux Environment setup? Let me know over on &lt;a href="https://twitter.com/reddobowen"&gt;Twitter, @reddobowen&lt;/a&gt;, perhaps we can share some tips!&lt;/p&gt;

&lt;p&gt;In the meantime, thanks for reading this post. Stay tuned for some additional tips in the near future - bye for now!&lt;/p&gt;

</description>
      <category>linux</category>
      <category>developer</category>
      <category>windowsterminal</category>
      <category>commandline</category>
    </item>
    <item>
      <title>Tales from the Real World - Leveraging Azure as a Telco provider</title>
      <dc:creator>Chris Reddington</dc:creator>
      <pubDate>Sat, 04 Sep 2021 07:05:19 +0000</pubDate>
      <link>https://dev.to/cloudwithchris/tales-from-the-real-world-leveraging-azure-as-a-telco-provider-1kk0</link>
      <guid>https://dev.to/cloudwithchris/tales-from-the-real-world-leveraging-azure-as-a-telco-provider-1kk0</guid>
      <description>&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1UoHPXrX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jd5xb1fbjt71bs5zwgg5.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1UoHPXrX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jd5xb1fbjt71bs5zwgg5.jpg" alt="Tales from the Real World - Leveraging Azure as a Telco provider"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This post was originally published on Fri, Sep 3, 2021 at &lt;a href="https://www.cloudwithchris.com/episode/leveraging-azure-as-telco-provider/"&gt;cloudwithchris.com&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this session Chris is joined by Ivo who will explain how Telco providers are leveraging Azure to offer services to their customers. He will explain how they transform and what the future will be. He will also cover the benefits and struggles that they faced on the way.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/dmVfw4PPE0s"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>azure</category>
      <category>industry</category>
      <category>telco</category>
    </item>
    <item>
      <title>CGN7 - Cloud Gaming Notes Episode 7 - Game Streaming and Cloud-Powered Gaming</title>
      <dc:creator>Chris Reddington</dc:creator>
      <pubDate>Sat, 04 Sep 2021 07:00:11 +0000</pubDate>
      <link>https://dev.to/cloudwithchris/cgn7-cloud-gaming-notes-episode-7-game-streaming-and-cloud-powered-gaming-2i03</link>
      <guid>https://dev.to/cloudwithchris/cgn7-cloud-gaming-notes-episode-7-game-streaming-and-cloud-powered-gaming-2i03</guid>
      <description>&lt;p&gt;&lt;strong&gt;This post was originally published on Wed, Sep 1, 2021 at &lt;a href="https://www.cloudwithchris.com/episode/game-streaming/"&gt;cloudwithchris.com&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this session, Chris is once again joined by Lee Williams. Chris and Lee talk through industry trends around Game Streaming (i.e. streaming games to your device, rather than livestreaming what you're playing to others), and the opportunities this brings to game creators and consumers.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/T6x-53wVsE8"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>cloud</category>
      <category>gaming</category>
      <category>streaming</category>
      <category>gamedev</category>
    </item>
    <item>
      <title>Shift Left and Increase your Code Quality with GitHub Branch Protection Rules</title>
      <dc:creator>Chris Reddington</dc:creator>
      <pubDate>Mon, 30 Aug 2021 17:01:20 +0000</pubDate>
      <link>https://dev.to/cloudwithchris/shift-left-and-increase-your-code-quality-with-github-branch-protection-rules-2o96</link>
      <guid>https://dev.to/cloudwithchris/shift-left-and-increase-your-code-quality-with-github-branch-protection-rules-2o96</guid>
      <description>&lt;h2&gt;
  
  
  What are Branch Protection Rules?
&lt;/h2&gt;

&lt;p&gt;If you're using GitHub as your source control provider, then I'd encourage you to using Branch Protection Rules if you're not already doing so! In this blog post, we'll cover what Branch Protection Rules are and how they can increase your code quality.&lt;/p&gt;

&lt;p&gt;In the world of DevOps, there is a term known as Shift Left. This term effectively means 'find and prevent issues early'. There are several studies that have shown that the most effective way to prevent issues is to find them early in the software delivery lifecycle. This is because the more issues you find early, the more likely it is that they will be identifiable, and therefore fixed.&lt;/p&gt;

&lt;p&gt;Let me play devil's advocate for a moment. What happens if you have no barriers to push your code into the main line of development? If there are no quality checks, then you could be pushing code to your production codebase that isn't up to scratch. If you have no automated tests, or code review process, then you don't have the ability to identify and fix issues early. This means you're going to have to wait until the end of the software delivery cycle to find the first issue, which is a waste of time and money. Wouldn't it be better if you could find the first issue as soon as possible?&lt;/p&gt;

&lt;p&gt;This is where Branch Protection Rules come in. GitHub Branch Protection Rules are used to enforce workflows for one or more branches in your Git repository hosted on GitHub. These rules are enforced by GitHub and can be configured by the organization or individual repository owner.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pEqyRroK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/su2evukcm31emhpwkgo4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pEqyRroK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/su2evukcm31emhpwkgo4.png" alt="Screenshot showing the Branch Protection Rules overview page for cloudwithchris.com. It contains a Branch Protection Rule for the main branch and the dev branch"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In essence, before you commit to a certain branch (or a set of branches), you need to fulfil a set of conditions. If you don't, then you won't be able to commit to that branch. These conditions include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You need to have a certain number of approvals from the approvers list.&lt;/li&gt;
&lt;li&gt;You need to have status checks to pass before you can commit.&lt;/li&gt;
&lt;li&gt;All conversations on code must be resolved before a Pull Request can be merged.&lt;/li&gt;
&lt;li&gt;Commits must be signed.&lt;/li&gt;
&lt;li&gt;Require a linear history (i.e. commits can't be pushed out of order. This could be caused by merging a feature branch based on an old version of master, for example). There is a good write-up on linear vs non-linear history &lt;a href="https://www.bitsnbites.eu/a-tidy-linear-git-history/"&gt;here&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Ensure that all restrictions also apply to administrators.&lt;/li&gt;
&lt;li&gt;Restrict which people, teams or apps can push to any branches which match the convention you've set.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---ki_F9AF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/37zk6ntuuwwkexbwncj1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---ki_F9AF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/37zk6ntuuwwkexbwncj1.png" alt="Screenshot showing the Branch Protection Rules configured for the main branch of the cloudwithchris.com repository. It shows that signed commits are required. It showed that require pull request reviews before merging, require status checks to pass before merging, require conversation resolution before merging, require linear history and include administrators are not required."&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So, in summary - you need to have a set of conditions that you can fulfil before you can commit to a branch. If you don't, then you won't be able to commit to that branch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setting up Branch Protection Rules
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Navigate to a GitHub Repository that you own. For example, I am the organization owner of &lt;a href="https://github.com/CloudWithChris/"&gt;CloudWithChris&lt;/a&gt;, so will navigate to &lt;a href="https://github.com/CloudWithChris/cloudwithchris.com"&gt;my cloudwithchris.com repository&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click on the &lt;strong&gt;Settings&lt;/strong&gt; tab.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9DrEsQxE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rs7vhv9yzq7dm7ep8g4x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9DrEsQxE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rs7vhv9yzq7dm7ep8g4x.png" alt="Arrow pointing to the settings option in the menu of the cloudwithchris.com GitHub Repository"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click on the &lt;strong&gt;Branches&lt;/strong&gt; tab.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bKVRd-j1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4snlyobq7n4uw5m8eb12.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bKVRd-j1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4snlyobq7n4uw5m8eb12.png" alt="Arrow pointing to the Branches option in the settings page of the cloudwithchris.com GitHub Repository"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click on the &lt;strong&gt;Add Rule&lt;/strong&gt; button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0e6R5Lw1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e7d8ldnlfw10gmrtwgyi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0e6R5Lw1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e7d8ldnlfw10gmrtwgyi.png" alt="Arrow pointing to the Add rule button on the Branch settings page of the cloudwithchris.com GitHub repository"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You will now see a form to create a new Branch Protection Rule. The first thing you need to do is complete a Branch name pattern. This pattern is used to match branches in your repository. For example, if you have a branch called &lt;code&gt;master&lt;/code&gt;, then you would enter &lt;code&gt;master&lt;/code&gt; in the pattern field. If you had several branches that start with preview, e.g. &lt;code&gt;preview/mynewfeature&lt;/code&gt; or &lt;code&gt;preview/myothernewfeature&lt;/code&gt;, then you would enter &lt;code&gt;preview/*&lt;/code&gt; in the pattern field.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--U9LZzpzM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zajwkpsw86hrjeszoqqr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--U9LZzpzM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zajwkpsw86hrjeszoqqr.png" alt="Arrow pointing to the Branch name pattern input box on the Add new Branch Protection Rules Page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Configure the rules as appropriate for your branch. I typically configure some variation of the following: &lt;code&gt;Require pull request reviews before merging&lt;/code&gt;, &lt;code&gt;Require status checks to pass before merging&lt;/code&gt;, &lt;code&gt;Require conversation resolution before merging&lt;/code&gt;, &lt;code&gt;Require signed commits&lt;/code&gt; and &lt;code&gt;Require all restrictions to apply to administrators&lt;/code&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; Here are some extra insights when setting these rules -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Require pull request reviews before merging&lt;/strong&gt; - You will need to specify the needed number of reviews to allow the Pull Request to be merged. This ensures that you have had a minimum number of peer reviews. Careful not to set this too high, as otherwise you'll be waiting on others to review your Pull Request. And potentially continually reviewing other people's requests!&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Require status checks to pass before merging&lt;/strong&gt; - If you have setup &lt;a href="https://docs.github.com/en/github/collaborating-with-pull-requests/collaborating-on-repositories-with-code-quality-features/about-status-checks"&gt;status checks&lt;/a&gt; on your repository, then you can configure the Branch Protection Rule to require that specific status checks pass before the Pull Request can be merged. Great for additional external validation if you depend on external services for verifying your code quality.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Require conversation resolution before merging&lt;/strong&gt;* - If there is an ongoing discussion on code around implementation details, you may not want the Pull Request to be merged until the discussion is resolved. This is a good way to ensure that you don't accidentally merge a Pull Request that has not been fully resolved.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Require signed commits&lt;/strong&gt; - This enforces that all commits on the branch must be signed. This may be required under certain Software Licenses, or if you wish to prove that someone committing is indeed who they say they are. You can find extra detail on &lt;a href="https://docs.github.com/en/github/authenticating-to-github/managing-commit-signature-verification/about-commit-signature-verification"&gt;commit signature verification on the GitHub docs&lt;/a&gt;, or a &lt;a href="//www.cloudwithchris.com/blog/gpg-git-part-1"&gt;walkthrough that I put together on setting this up for your own commits&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Require all restrictions to apply to administrators&lt;/strong&gt; - This helps you ensure that Administrators are not 'above the law', and have to follow the same rules as any other contributor (i.e. not able to override).&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;Click on the &lt;strong&gt;Save changes&lt;/strong&gt; button.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YkS9G18B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rfvcum422hc5dw6fuitf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YkS9G18B--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rfvcum422hc5dw6fuitf.png" alt="Arrow pointing to the Save changes button on the Add new Branch Protection Rules Page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You should now see that an additional rule has been added to your Branch Protection Rules list. Repeat this as many times as you need to, so that you can set up the workflow that best suits your branching strategy.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LydFufLG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4nuubl27xoqhlitpah1i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LydFufLG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/4nuubl27xoqhlitpah1i.png" alt="Box highlighting the branch protection rules (One for master, one for dev, and one for preview/*) on the Branch Protection Rules pages"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As an example, I made some changes to my master branch protection policy. I now have the &lt;code&gt;Require pull request reviews before merging&lt;/code&gt; set to 1 (which means I just need one review on the PR), and &lt;code&gt;Require signed commits&lt;/code&gt; set to true. I also have the &lt;code&gt;Require all restrictions to apply to administrators&lt;/code&gt; set to true.&lt;/p&gt;

&lt;p&gt;After navigating to my readme.md, and wanting to make a dummy change - You will notice that I am prevented from making the change.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WyJ5r7XN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vwmr1wimomj4l6qt3iu4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WyJ5r7XN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vwmr1wimomj4l6qt3iu4.png" alt="Arrow pointing to the line item that shows 'You can't commit to master because it is a protected branch'"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Tip:&lt;/strong&gt; A word of warning. If you're working on a pet project where it's mainly yourself contributing (e.g. Cloud With Chris). If you enable the require pull requests before merging, &lt;strong&gt;and&lt;/strong&gt; apply restrictions to all administrators, then you will have to wait for someone else to review your Pull Request. There is no ability for a Pull Request author to approve their own changes. If you disable the &lt;code&gt;Require all restrictions to apply to administrators&lt;/code&gt;, then you will be able to merge the pull request (though this would be true for any other administrators of your repository as well).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sHgC0sfX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3n8cbzubj9wjk0kdetnd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sHgC0sfX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3n8cbzubj9wjk0kdetnd.png" alt="Arrow pointing to the popup that shows users cannot approve their own changes in a Pull Request"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;There we go! Throughout this blog post, we have begun our journey of shifting left. We are no longer allowing any code to be directly committed to our production codebase. Instead, we are enforcing a set of rules so that a consistent workflow is maintained. That workflow may include peer reviews, status checks, and other validation. This is only one part of the journey in shifting left. GitHub Actions is incredibly powerful, and could be used to automate your builds, tests and more. Why not create a GitHub Action that triggers on a Pull Request to a target branch? I hope that you can see how this wider story may continue. But, of course - that's for another day!&lt;/p&gt;

&lt;p&gt;Are Branch Protection Rules something that you are already using? Perhaps in GitHub, or with another tool? I'd love to hear how you're using them, and some of the practices that you may have picked up along the way. Drop me a message over on &lt;a href="https://twitter.com/reddobowen"&gt;Twitter, @reddobowen&lt;/a&gt;. In the meantime, I hope this has been useful! Thanks for reading, and bye for now.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>github</category>
      <category>developer</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Getting into DevRel</title>
      <dc:creator>Chris Reddington</dc:creator>
      <pubDate>Fri, 27 Aug 2021 14:34:39 +0000</pubDate>
      <link>https://dev.to/cloudwithchris/getting-into-devrel-2i81</link>
      <guid>https://dev.to/cloudwithchris/getting-into-devrel-2i81</guid>
      <description>&lt;p&gt;&lt;strong&gt;This post was originally published on Fri, Aug 27, 2021 at &lt;a href="https://www.cloudwithchris.com/episode/tales-from-real-world-get-into-devrel/"&gt;cloudwithchris.com&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this session, Chris is joined by Martin Woodward - Director of Developer Relations at GitHub to talk about building communities, building experience talking and leading communities and then of Developer Relations, what it means and how to get into that role as your job.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/3KNm612ZQXM"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>community</category>
      <category>developer</category>
      <category>github</category>
      <category>devrel</category>
    </item>
    <item>
      <title>Why you should care about Azure Front Door Standard and Premium</title>
      <dc:creator>Chris Reddington</dc:creator>
      <pubDate>Fri, 27 Aug 2021 09:25:34 +0000</pubDate>
      <link>https://dev.to/cloudwithchris/why-you-should-care-about-azure-front-door-standard-and-premium-3ec1</link>
      <guid>https://dev.to/cloudwithchris/why-you-should-care-about-azure-front-door-standard-and-premium-3ec1</guid>
      <description>&lt;p&gt;&lt;strong&gt;This post was originally published on Thu, Aug 26, 2021 at &lt;a href="https://www.cloudwithchris.com/blog/azure-front-door-standard-premium/"&gt;cloudwithchris.com&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Azure Front Door - It's an Azure Service that has been generally available for quite some time. It went &lt;a href="https://azure.microsoft.com/en-us/updates/azure-front-door-service-is-now-available/"&gt;Generally Available (GA) in April of 2019&lt;/a&gt; after being in &lt;a href="https://azure.microsoft.com/en-us/updates/azure-front-door-service-in-public-preview/"&gt;Public Preview since September 2018&lt;/a&gt;. It's had several updates since, including a slew of Web Application Firewall enhancements, Rules Engine support and much more. But did you know Microsoft released the Azure Front Door Standard and Premium SKUs in preview in Februrary of 2021? So, what are they? How do they compare to the aforementioned Azure Front Door offering? And when would you want to think about using Azure Front Door compared with Azure CDN? We'll be covering all of those points in this post.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Azure Front Door?
&lt;/h2&gt;

&lt;p&gt;Let's first set the scene, making sure we're all on the same page. What even is Azure Front Door? If you haven't deployed it for your own solution, it's quite likely that you've used it as a consumer. There is a great case study on how &lt;a href="https://customers.microsoft.com/en-gb/story/841393-linkedin-professional-services-azure-front-door-service"&gt;LinkedIn uses Azure Front Door&lt;/a&gt; as part of their own infrastructure stack. Not a LinkedIn user? Well, the &lt;a href="https://azure.microsoft.com/en-gb/blog/azure-front-door-service-is-now-generally-available/"&gt;original Azure Front Door general availability blog post&lt;/a&gt; notes that Office 365, Xbox Live, MSN and Azure DevOps had all adopted Azure Front Door. So, like I mentioned - if you haven't already deployed it - it's quite likely you've already used it!&lt;/p&gt;

&lt;p&gt;Azure Front Door is a global service, which is typically used as an entry point for web applications. It's well-suited for this task, as it operates at Layer 7 (HTTP/HTTPS-based) of the networking stack. However, calling it a load balancer would be underselling it. Azure Front Door uses the Microsoft Global Edge network to accept traffic from end-users. You can associate a Web Application Firewall (WAF) with it, to protect your applications from potential threats.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; There are different types of Load Balancing options. For example, Azure Load Balancer operates at Layer 4. Azure Traffic Manager is a DNS based load balancer. The difference between these is where they operate in the networking stack. Layer 4 is the transport layer, whereas Layer 7 is the application layer.&lt;/p&gt;

&lt;p&gt;Therefore, the decisions that can be made at Layer 4 are typically based around the TCP and UDP protocols. There is no context or option to make decisions based upon information at the application level (e.g. Path based filtering, etc.). Layer 7 load balancing allows you to make load balancing decisions based upon some information/context from the application. Think about aspects like Request Headers, Request Paths, etc. A good comparison would be Azure Load Balancer (Layer 4) vs Azure Application Gateway (Layer 7).&lt;/p&gt;

&lt;p&gt;You can find some additional information on Layer 4 vs Layer 7 load balancing on the &lt;a href="https://www.nginx.com/resources/glossary/layer-7-load-balancing/"&gt;NGINX Website&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How do Azure Front Door Classic, Standard and Premium compare?
&lt;/h2&gt;

&lt;p&gt;Azure Front Door Standard and Premium &lt;a href="https://azure.microsoft.com/en-us/updates/azure-front-door-standard-and-premium-now-in-public-preview/"&gt;went into preview in February 2021&lt;/a&gt;. The explanation of Azure Front Door in the previous section is true for Azure Front Door (Classic), as well as Azure Front Door Standard and Premium.&lt;/p&gt;

&lt;p&gt;However, Azure Front Door Standard and Premium has additional enhancements. Depending on the type of traffic - You can either accelerate traffic by using Dynamic Site Acceleration (DSA) to the appropriate source, or serve up cached contents through it's Content Delivery Network functionality. In the Standard and Premium SKUs, Azure Front Door combines the capabilities of Azure Front Door, Azure CDN and Azure Web Application Firewall (WAF).&lt;/p&gt;

&lt;p&gt;Both Azure Front Door Standard and Premium contain several common features, including -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Custom Domains&lt;/li&gt;
&lt;li&gt;SSL Offload&lt;/li&gt;
&lt;li&gt;Caching&lt;/li&gt;
&lt;li&gt;Compression&lt;/li&gt;
&lt;li&gt;Global load balancing&lt;/li&gt;
&lt;li&gt;Layer 7 routing&lt;/li&gt;
&lt;li&gt;URL rewrite&lt;/li&gt;
&lt;li&gt;Enhanced Metrics and diagnostics&lt;/li&gt;
&lt;li&gt;Traffic report&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Azure Front Door premium contains the following features, in addition to the previous list -&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Private Origin (Private Link)&lt;/li&gt;
&lt;li&gt;Web Application Firewall (WAF) support&lt;/li&gt;
&lt;li&gt;Bot Protection&lt;/li&gt;
&lt;li&gt;Security Report&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Private Origin (Private Link) support is a big deal in my opinion. Before Azure Front Door Standard/Premium, I've seen a few scenarios where an organisation wants to build an Architecture of Azure Front Door in front of Azure API Management. The only way to achieve this at the time was by restricting traffic inbound, based upon Request Headers sent from Azure Front Door.&lt;/p&gt;

&lt;p&gt;With Azure Private Origin (Private link), you can still route traffic to your backend origins, even if they are only accessible privately.&lt;/p&gt;

&lt;p&gt;Why would you care about this pattern? So that you can guarantee traffic is not being bypassed to your backend services, and is being routed through Azure Front Door. Perhaps you have adopted some rules in your WAF that you wish to process before traffic reaches your application. Having a private backend, while having a public entry point at the edge allows you to achieve this.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It's worth mentioning that (at time of writing), Azure Front Door Standard and Premium are in a preview state. Azure Front Door (Classic) is Generally Available. However, the &lt;a href="https://docs.microsoft.com/en-gb/azure/frontdoor/standard-premium/overview#why-use-azure-front-door-standardpremium-preview"&gt;docs call out many reasons&lt;/a&gt; to use Azure Front Door Standard or Premium. It's important to note that it's not recommended for production workloads until it exists a preview state.&lt;/p&gt;

&lt;p&gt;There is a difference in the pricing models between Azure Front Door (Classic) and Azure Front Door Standard / Premium. Azure Front Door classic had a more involved pricing structure, based upon outbound data transfers, routing rules, inbound data transfers and frontend hosts. The WAF capability was an additional cost if enabled, with custom rules / managed rulesets also having an additional price per unit.&lt;/p&gt;

&lt;p&gt;In contrast, Azure Front Door Standard / Premium's pricing model is simplified. There is a base fee for either the Standard or Premium SKU. On top of that, there are charges based upon outbound data transfers (i.e. data going out of Front Door POPs to the client), inbound data transfers from POPs to origin and requests incoming from client to Front Door POPs.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; It's important to note that Azure Front Door Premium includes Web Application Firewall (WAF) at no additional cost. This is an additional cost in Azure Front Door (Classic). Of course, the finer details of the pricing model can change over time. For the latest and greatest, please review the &lt;a href="https://azure.microsoft.com/en-gb/pricing/details/frontdoor/"&gt;Azure Pricing Page&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Azure Front Door vs Azure CDN
&lt;/h2&gt;

&lt;p&gt;Based on the previous section, you've likely noticed that Azure Front Door (Standard/Premium) and Azure CDN now share some common functionality around caching, and the rules engine.&lt;/p&gt;

&lt;p&gt;If you've previously used Azure Front Door (Classic), then you may have previously had an architecture that used both Azure Front Door as well as Azure CDN. However, even Azure Front Door (Classic) had &lt;a href="https://docs.microsoft.com/en-us/azure/frontdoor/front-door-caching"&gt;caching capabilities built-in as per the Azure Docs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You'll notice that the adjustments for Azure Front Door Standard and Premium, make this feel like a much more integrated experience, as it is part of the setup process of your new Azure Front Door Resource (as explained in the &lt;a href="https://azure.microsoft.com/en-gb/blog/azure-front-door-enhances-secure-cloud-cdn-with-intelligent-threat-protection/"&gt;blog post announcing Azure Front Door Standard and Premium&lt;/a&gt;). The idea behind this new Azure Front Door experience is a single unified platform to accelerate static and dynamic content acceleration. All that, with the combined functionality of Web Application Firewall (as explained in the opening of this post).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; What is the difference between Static Content/Site Acceleration and Dynamic Content/Site Acceleration?&lt;/p&gt;

&lt;p&gt;Think of Static Content/Site Acceleration as caching the files closer to your end-users. So, a typical CDN scenario. This is how the Cloud With Chris website, as well as Cloud With Chris Podcast MP3 files are delivered to you. They are hosted in a central location (e.g. Azure Static Web App or Azure Storage Account), and are cached at Points of Presence on the Microsoft Edge closer to you.&lt;/p&gt;

&lt;p&gt;But what about Dynamic Site Acceleration? The fact that it's dynamic means that we can't cache the content, as it's likely going to change over time. That strategy may not work here. Fundamentally, the internet is an unreliable place. Routes become unavailable, transient issues can impact our path. Dynamic Site Acceleration uses route optimization techniques to choose the most optimal path to the origin, so that users can be sent  via the fastest and most reliable route possible.&lt;/p&gt;

&lt;p&gt;Dynamic Site Acceleration can often use additional TCP optimizations to ensure the traffic is routed efficiently and effectively. For example, eliminating TCP slow start, leveraging persistent connections and tuning TCP packet parameters are just some typical examples (these are general examples to illustrate the point, and not specific to Azure Front Door).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  How does Azure Front Door work?
&lt;/h2&gt;

&lt;p&gt;As a service, your usage of Azure Front Door is primarily around configuration (i.e. setting up your endpoint name, your origin details and additional configuration around caching, compression and WAF options).&lt;/p&gt;

&lt;p&gt;From a scalability perspective, the service deals with this transparently.You won't see any sliders to specify the minimum, maximum or desired number of instances. You don't need to specify autoscale rules or similar. The service will scale automatically for you.&lt;/p&gt;

&lt;p&gt;Now, I've hinted a few times that Azure Front Door is a global service. This means that Azure Front Door's edge nodes (sometimes known as points of presence) are global in nature. This point is worth thinking about in some further detail.&lt;/p&gt;

&lt;p&gt;One of the configuration options that you have in Azure Front Door is adjust the health probes used from the edge nodes to your origin.&lt;/p&gt;

&lt;p&gt;Why is this important? As Azure Front Door is global, it's going to have many of these edge environments all across the globe. That means that each of those edge environments will be sending a health probe at some point. If you're particularly aggressive with your probe timeout settings (e.g. every few seconds), then this will cause a significant increase in the requests to your backend origin.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; This is particularly important to consider if your origin wasn't designed for scale, and you may need to consider the additional load from these probes.&lt;/p&gt;

&lt;p&gt;Alternatively, if you are using a serverless tier (based on pay-per-execution), then your health probe configuration will have a tangible impact on your costs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;In summary, Azure Front Door Standard / Premium are some welcome evolutions on the Azure Front Door (Classic) offering. It has a new pricing model which is simpler to understand, and contains some notable feature updates (e.g. Private Origin Support (Private Link)). Azure Front Door Standard is content-delivery optimised as opposed to premium which is security optimised.&lt;/p&gt;

&lt;p&gt;Azure Front Door can bring value if you have a distributed set of users that you want to serve content to. The content can either be dynamic (and leverage the Dynamic Site Acceleration capabilities of Azure Front Door) or static (and leveraging the caching capabilities of Azure Front Door). Don't forget, the premium SKU is security optimized and has Web Application Firewall (WAF) capabilities built-in. A great addition to the entry point for your Web Application!&lt;/p&gt;

&lt;p&gt;If you want to learn more about Azure Front Door, I recommend that you take a look at the &lt;a href="https://docs.microsoft.com/en-us/learn/modules/intro-to-azure-front-door/"&gt;Introduction to Azure Front Door&lt;/a&gt; Microsoft Learn Module, as well as the Azure Documentation. Be aware that there is a separate documentation hub for &lt;a href="https://docs.microsoft.com/en-us/azure/frontdoor/front-door-overview"&gt;Azure Front Door (Classic)&lt;/a&gt; and &lt;a href="https://docs.microsoft.com/en-us/azure/frontdoor/standard-premium/overview"&gt;Azure Front Door (Standard/Premium)&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Are you already using Azure Front Door? Are you using Classic, Standard or Premium? Perhaps you're considering using Azure Front Door after scanning through this post? I'd love to hear more over on &lt;a href="https://twitter.com/reddobowen"&gt;Twitter, @reddobowen&lt;/a&gt;. If there's anything that you'd like me to explore in a hands-on blog post, please let me know! I'm already considering a blog post which compares Azure Front Door (Classic) with Azure API Management to Azure Front Door (Premium) with Azure API Management, and the private link capabilities (which I hinted a little further up in the article). Thanks for reading, and bye for now!&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>azure</category>
      <category>resilience</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Why closed captions in your public speaking may make a difference</title>
      <dc:creator>Chris Reddington</dc:creator>
      <pubDate>Fri, 27 Aug 2021 09:23:51 +0000</pubDate>
      <link>https://dev.to/cloudwithchris/why-closed-captions-in-your-public-speaking-may-make-a-difference-a22</link>
      <guid>https://dev.to/cloudwithchris/why-closed-captions-in-your-public-speaking-may-make-a-difference-a22</guid>
      <description>&lt;p&gt;&lt;strong&gt;This post was originally published on Wed, Aug 25, 2021 at &lt;a href="https://www.cloudwithchris.com/episode/closed-captions-make-a-difference/"&gt;cloudwithchris.com&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;People with hearing impairments are often overlooked, yet they are actually in greater numbers most people believe. In this talk, I’ll give insight to those people. I know this of my own experience since I am deaf user with Cochlear Implants which gives me a hearing back, but it is not a full hearing as you might hope for. I also can give some insights for other people who are less impaired because I’ve am a co-founder of two national associations in Switzerland.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/tP2QlZZXIcY"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>a11y</category>
      <category>inclusion</category>
      <category>diversity</category>
      <category>people</category>
    </item>
    <item>
      <title>43 - A Decentralized Reference Architecture for Cloud-native Applications</title>
      <dc:creator>Chris Reddington</dc:creator>
      <pubDate>Fri, 20 Aug 2021 21:46:18 +0000</pubDate>
      <link>https://dev.to/cloudwithchris/43-a-decentralized-reference-architecture-for-cloud-native-applications-3g8g</link>
      <guid>https://dev.to/cloudwithchris/43-a-decentralized-reference-architecture-for-cloud-native-applications-3g8g</guid>
      <description>&lt;p&gt;&lt;strong&gt;This post was originally published on Fri, Aug 20, 2021 at &lt;a href="https://www.cloudwithchris.com/episode/decentralised-reference-architecture-cloud-native/"&gt;cloudwithchris.com&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The number of microservices running in enterprises increases daily. As a result, service composition, governance, security, and observability are becoming a challenge to implement and incorporate. A "cell-based" architecture is an approach that can be applied to current or desired development and technologies to address these issues. This technology-neutral approach helps cloud-native dev teams become more efficient, act in a more self-organized manner, and speed overall release times.&lt;/p&gt;

&lt;p&gt;In this talk, Asanka will introduce the "cell-based" reference architecture, which is decentralized, API-centric, cloud-native and microservices friendly. He will explain the role of APIs in the cell-based approach, as well as examine how real applications are built as cells. Asanka will explore the metrics and approaches that can be used to measure the effectiveness of the architecture and explore how organizations can implement the cell approach.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/SrJMqU_vHhA"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>microservices</category>
      <category>api</category>
      <category>monitoring</category>
      <category>cloudarchitecture</category>
    </item>
    <item>
      <title>Discussing the Cloud with Chris Integration Platform</title>
      <dc:creator>Chris Reddington</dc:creator>
      <pubDate>Fri, 20 Aug 2021 21:43:56 +0000</pubDate>
      <link>https://dev.to/cloudwithchris/discussing-the-cloud-with-chris-integration-platform-3ke5</link>
      <guid>https://dev.to/cloudwithchris/discussing-the-cloud-with-chris-integration-platform-3ke5</guid>
      <description>&lt;p&gt;&lt;strong&gt;This post was originally published on Thu, Aug 19, 2021 at &lt;a href="https://www.cloudwithchris.com/episode/discussing-cloud-with-chris-integration/"&gt;cloudwithchris.com&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In this session, Chris is joined by Karl Cooke, Blogger at &lt;a href="https://irishtechie.com"&gt;https://irishtechie.com&lt;/a&gt;. Chris and Karl talk all about the CloudWithChris.com integration platform, and the numerous automation/integration activities that Chris has in place to save time and focus on building content!&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/dNjG8ohgavs"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>azure</category>
      <category>architecture</category>
      <category>integration</category>
      <category>appdevelopment</category>
    </item>
  </channel>
</rss>
