<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Parveen Singh]]></title><description><![CDATA[Helping Companies Secure and Automate their Cloud Environment]]></description><link>https://parveensingh.com/</link><image><url>https://parveensingh.com/favicon.png</url><title>Parveen Singh</title><link>https://parveensingh.com/</link></image><generator>Ghost 4.46</generator><lastBuildDate>Fri, 23 Feb 2024 06:54:49 GMT</lastBuildDate><atom:link href="https://parveensingh.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Using Python SDK to Interact with Azure Environment]]></title><description><![CDATA[Learn how to use Python SDK to Interact with Azure Resource Programatically.]]></description><link>https://parveensingh.com/using-python-sdk-to-interact-with-azure-environment/</link><guid isPermaLink="false">65604c7cd4ab0b60998b26d6</guid><category><![CDATA[Python]]></category><category><![CDATA[Azure]]></category><category><![CDATA[Development]]></category><dc:creator><![CDATA[Parveen Singh]]></dc:creator><pubDate>Fri, 24 Nov 2023 15:00:00 GMT</pubDate><media:content url="https://parveensingh.com/content/images/2023/11/PythonSDK-Azure.png" medium="image"/><content:encoded><![CDATA[<img src="https://parveensingh.com/content/images/2023/11/PythonSDK-Azure.png" alt="Using Python SDK to Interact with Azure Environment"><p>Python is a general-purpose programming language which has gained traction due to its wide range of capabilities and user demand. In the world of Cloud and DevOps, using a programming language such as Python has become even more vital for ongoing operations and management tasks.</p><!--kg-card-begin: markdown--><h2 id="table-of-content">Table of Content</h2>
<ol>
<li><a href="#understanding-azure-python-sdk-offering">Understanding Azure Python SDK Offering</a></li>
<li><a href="#setting-up-azure-environment">Setting up Azure Environment</a>
<ul>
<li><a href="#setting-up-a-service-principal-for-python-code-access">Setting up a Service Principal for Python Code Access</a></li>
<li><a href="#assigning-permissions-to-service-principal-on-azure-subscription">Assigning Permissions to Service Principal on Azure Subscription</a></li>
</ul>
</li>
<li><a href="#setting-up-a-development-environment-to-interact-with-azure">Setting up Development Environment to Interact with Azure</a></li>
<li><a href="#interacting-with-azure-using-python-sdk">Interacting with Azure using Python SDK</a></li>
<li><a href="#conclusion">Conclusion</a></li>
</ol>
<!--kg-card-end: markdown--><p>In this article, you will discover how you can use Python along with Azure-offered SDK for Python to interact with the Azure environment programmatically.</p><h2 id="understanding-azure-python-sdk-offering">Understanding Azure Python SDK Offering</h2><p>Microsoft Azure Cloud is one of the leading cloud platforms, offering a wide range of services that enable organizations to build, deploy, and manage their applications and infrastructure. If you are new to Azure, consider <a href="https://parveensingh.com/get-started-with-azure-cloud/">getting familiar with the Azure Cloud</a> environment to understand more about the basic offerings. The most common services offered by Azure are:</p><ul><li>Azure VM</li><li>Azure Functions</li><li><a href="https://parveensingh.com/up-and-running-with-azure-app-service/">Azure Web App</a></li><li>Azure Storage</li><li><a href="https://parveensingh.com/azure-cosmos-db-basics/">Azure CosmosDB</a></li><li>Azure Logic App</li><li><a href="https://parveensingh.com/step-by-step-guide-to-building-data-pipelines-with-azure-data-factory/">Azure Data Factory</a></li><li>Azure Log Analytics Workspace</li><li>Azure Virtual Network</li><li>Azure Front Door</li></ul><p>All these resources can be managed by either Azure Portal, which is the most common way to manage these resources, or by using certain programming tools such as <a href="https://parveensingh.com/powershell-basics/">Azure PowerShell</a> or <a href="https://parveensingh.com/azure-cli-basics/">Azure CLI</a>. Python SDK for Azure is also an additional method you can leverage to manage and orchestrate these resources without doing the manual repetitive work.</p><p>Python is a widely adopted and versatile programming language, allowing you to build custom scripts and applications tailored to your specific Azure management needs. This level of customization is often not achievable with pre-defined CLI or PowerShell commands. Moreover, Python SDK provides access to Azure&apos;s comprehensive set of APIs, enabling fine-grained control over Azure resources, automation, and integration with other services which streamline the management of the Azure environment.</p><h2 id="setting-up-azure-environment">Setting up Azure Environment</h2><p>Depending on how you plan to use Python SDK for your environment, the method to access the environment may differ. In this case, you will understand how you can set up the Azure environment to allow access to the Python application or code to access your Azure environment. This involves creating a service principal, followed by creating a secret to access and finally assigning necessary permissions on the subscription to allow access for the application code to interact with your resources.</p><h3 id="setting-up-a-service-principal-for-python-code-access">Setting up a Service Principal for Python Code Access</h3><p>The first step to setting up your local work environment to use Python for Azure SDK is to set up a service principal for Python SDK.</p><ul><li>Navigate to <strong>Entra ID</strong> in your Azure tenant and click on <strong>+ New Registration</strong>:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/11/01-entraid.png" class="kg-image" alt="Using Python SDK to Interact with Azure Environment" loading="lazy" width="1126" height="576" srcset="https://parveensingh.com/content/images/size/w600/2023/11/01-entraid.png 600w, https://parveensingh.com/content/images/size/w1000/2023/11/01-entraid.png 1000w, https://parveensingh.com/content/images/2023/11/01-entraid.png 1126w" sizes="(min-width: 720px) 720px"><figcaption>Entra ID App Reg</figcaption></figure><ul><li>Enter an appropriate name for your app and click <strong>Register</strong>:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/11/02-enterpriseapp.png" class="kg-image" alt="Using Python SDK to Interact with Azure Environment" loading="lazy" width="1350" height="1084" srcset="https://parveensingh.com/content/images/size/w600/2023/11/02-enterpriseapp.png 600w, https://parveensingh.com/content/images/size/w1000/2023/11/02-enterpriseapp.png 1000w, https://parveensingh.com/content/images/2023/11/02-enterpriseapp.png 1350w" sizes="(min-width: 720px) 720px"><figcaption>Entra ID App Reg</figcaption></figure><ul><li>On the <strong>Overview</strong> tab, observe and note down the <strong>Application ID</strong> and <strong>Tenant ID</strong> for the Service Principal:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/11/03-overview.png" class="kg-image" alt="Using Python SDK to Interact with Azure Environment" loading="lazy" width="1520" height="752" srcset="https://parveensingh.com/content/images/size/w600/2023/11/03-overview.png 600w, https://parveensingh.com/content/images/size/w1000/2023/11/03-overview.png 1000w, https://parveensingh.com/content/images/2023/11/03-overview.png 1520w" sizes="(min-width: 720px) 720px"><figcaption>App Registration App Overview</figcaption></figure><ul><li>Navigate to <strong>Certificates &amp; secrets</strong> and click <strong>+ New client secret</strong>. Save and store the secret when displayed the first time as you won&#x2019;t be able to see it again afterwards.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/11/04-secret.png" class="kg-image" alt="Using Python SDK to Interact with Azure Environment" loading="lazy" width="1068" height="526" srcset="https://parveensingh.com/content/images/size/w600/2023/11/04-secret.png 600w, https://parveensingh.com/content/images/size/w1000/2023/11/04-secret.png 1000w, https://parveensingh.com/content/images/2023/11/04-secret.png 1068w" sizes="(min-width: 720px) 720px"><figcaption>App Registration Credential Secret Page</figcaption></figure><p>At this point, you have the application configured to use for the deployments to your Azure subscription.</p><h3 id="assigning-permissions-to-service-principal-on-azure-subscription">Assigning Permissions to Service Principal on Azure Subscription</h3><p>With the service principal created, you must allow it to have permissions on Azure resources in order for it to access the resources. Ideally, you would want to give just enough permissions to do what is intended to do. In this case, you&#x2019;ll assign a contributor role to the Service Principal on a subscription.</p><ul><li>Navigate to your Azure Subscription of choice, click <strong>Access control (IAM)</strong> and <strong>Role assignments:</strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/11/05-IAM.png" class="kg-image" alt="Using Python SDK to Interact with Azure Environment" loading="lazy" width="1288" height="672" srcset="https://parveensingh.com/content/images/size/w600/2023/11/05-IAM.png 600w, https://parveensingh.com/content/images/size/w1000/2023/11/05-IAM.png 1000w, https://parveensingh.com/content/images/2023/11/05-IAM.png 1288w" sizes="(min-width: 720px) 720px"><figcaption>Azure Subscription IAM</figcaption></figure><ul><li>Click <strong>+ Add</strong> &#x2192; <strong>Add role assignment:</strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/11/06-role.png" class="kg-image" alt="Using Python SDK to Interact with Azure Environment" loading="lazy" width="442" height="168"><figcaption>Add Role Assignment</figcaption></figure><ul><li>Under <strong>Role</strong> tab, click <strong>Privileged administrator roles</strong> and select <strong>Contributor</strong>. Click <strong>Next</strong> to proceed:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/11/07-priv.png" class="kg-image" alt="Using Python SDK to Interact with Azure Environment" loading="lazy" width="908" height="1182" srcset="https://parveensingh.com/content/images/size/w600/2023/11/07-priv.png 600w, https://parveensingh.com/content/images/2023/11/07-priv.png 908w" sizes="(min-width: 720px) 720px"><figcaption>Selecting Contributor Role</figcaption></figure><ul><li>Under the <strong>Members</strong> tab, click <strong>+ select members</strong> and search the Service Principal by name. Click on the result and click <strong>Select</strong>. Click <strong>Review + assign</strong> once done.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/11/08-s.png" class="kg-image" alt="Using Python SDK to Interact with Azure Environment" loading="lazy" width="1672" height="1284" srcset="https://parveensingh.com/content/images/size/w600/2023/11/08-s.png 600w, https://parveensingh.com/content/images/size/w1000/2023/11/08-s.png 1000w, https://parveensingh.com/content/images/size/w1600/2023/11/08-s.png 1600w, https://parveensingh.com/content/images/2023/11/08-s.png 1672w" sizes="(min-width: 720px) 720px"><figcaption>Selecting Service Principal for IAM Access</figcaption></figure><ul><li>On the <strong>Review + assign</strong> tab, click <strong>Review + assign</strong>.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/11/09-reviewaccess.png" class="kg-image" alt="Using Python SDK to Interact with Azure Environment" loading="lazy" width="1060" height="962" srcset="https://parveensingh.com/content/images/size/w600/2023/11/09-reviewaccess.png 600w, https://parveensingh.com/content/images/size/w1000/2023/11/09-reviewaccess.png 1000w, https://parveensingh.com/content/images/2023/11/09-reviewaccess.png 1060w" sizes="(min-width: 720px) 720px"><figcaption>Review Azure IAM Role Assignment</figcaption></figure><p>The service principal is not configured to access your Azure subscription and the resources inside the resource groups. This will allow you to create and remove resources using Python SDK.</p><h2 id="setting-up-a-development-environment-to-interact-with-azure">Setting up a Development Environment to Interact with Azure</h2><p>Clone the <a href="https://github.com/singhparveen/python-sdk-azure">GitHub Repo for Azure Python SDK</a> prepared for you to use as a base layer.</p><p>You will use this repo to connect to your Azure account with the service principal credentials.</p><ul><li>Once cloned, open the folder in VS Code:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/11/10-vscode.png" class="kg-image" alt="Using Python SDK to Interact with Azure Environment" loading="lazy" width="1054" height="656" srcset="https://parveensingh.com/content/images/size/w600/2023/11/10-vscode.png 600w, https://parveensingh.com/content/images/size/w1000/2023/11/10-vscode.png 1000w, https://parveensingh.com/content/images/2023/11/10-vscode.png 1054w" sizes="(min-width: 720px) 720px"><figcaption>Azure Python SDK VS Code View</figcaption></figure><ul><li><strong>IMPORTANT!</strong> Read through the <code>README.md</code> file first to ensure you have Python and Python Virtual environment installed on your workstation.</li><li>The <code>src</code> folder container two files. The <code>config.py</code> file is used to gather environment variables for the code while the <code>func.py</code> file contains the code that will run against the Azure environment.</li><li>Click on the <code>requirements.txt</code> file and view the file content:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/11/12-pythonrequ.png" class="kg-image" alt="Using Python SDK to Interact with Azure Environment" loading="lazy" width="1082" height="890" srcset="https://parveensingh.com/content/images/size/w600/2023/11/12-pythonrequ.png 600w, https://parveensingh.com/content/images/size/w1000/2023/11/12-pythonrequ.png 1000w, https://parveensingh.com/content/images/2023/11/12-pythonrequ.png 1082w" sizes="(min-width: 720px) 720px"><figcaption>Python Requirements File</figcaption></figure><p>The file contains the Python SDK packages for Azure. You will add or remove packages based on the need of your code. You will see basic packages such as <code>azure-common, azure-core, azure-identity</code> those already added since they are needed to perform the initial authentication to Azure. You can add more packages from <a href="https://pypi.org/project/azure-mgmt/">official pip repository</a>. Each resource type in Azure has its own unique package for <strong>Management</strong> and <strong>Client-side</strong> configuration.</p><ul><li>The <code>init.sh</code> script prepares your local environment to use the appropriate packages for Python code.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/11/15-init.png" class="kg-image" alt="Using Python SDK to Interact with Azure Environment" loading="lazy" width="1354" height="738" srcset="https://parveensingh.com/content/images/size/w600/2023/11/15-init.png 600w, https://parveensingh.com/content/images/size/w1000/2023/11/15-init.png 1000w, https://parveensingh.com/content/images/2023/11/15-init.png 1354w" sizes="(min-width: 720px) 720px"><figcaption>Azure Python SDK Init</figcaption></figure><ul><li>Click on <code>func.py</code> file from the file explorer and observe the code:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/11/13-func.png" class="kg-image" alt="Using Python SDK to Interact with Azure Environment" loading="lazy" width="2000" height="905" srcset="https://parveensingh.com/content/images/size/w600/2023/11/13-func.png 600w, https://parveensingh.com/content/images/size/w1000/2023/11/13-func.png 1000w, https://parveensingh.com/content/images/size/w1600/2023/11/13-func.png 1600w, https://parveensingh.com/content/images/size/w2400/2023/11/13-func.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>Azure Python SDK Code</figcaption></figure><p>The function <code>handler</code> do all the work to initialize the Python connection and query the subscription. The resource client to use is defined on <code>line 3</code> which you can change based on your needs.</p><p>In this example, the code queries the subscription to find all the resource groups and finally prints the name of the resource group.</p><h2 id="interacting-with-azure-using-python-sdk">Interacting with Azure using Python SDK</h2><p>Now that you have the code environment on your local workstation, follow the instructions below to Authenticate to your Azure account and run the code.</p><ul><li>Rename the file <code>.env.sample</code> to <code>.env</code> and paste your Application ID, Subscription ID, App Secret and Tenant ID for the service principal created earlier.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/11/11-env.png" class="kg-image" alt="Using Python SDK to Interact with Azure Environment" loading="lazy" width="1516" height="444" srcset="https://parveensingh.com/content/images/size/w600/2023/11/11-env.png 600w, https://parveensingh.com/content/images/size/w1000/2023/11/11-env.png 1000w, https://parveensingh.com/content/images/2023/11/11-env.png 1516w" sizes="(min-width: 720px) 720px"><figcaption>Environment File Python</figcaption></figure><ul><li>Open your terminal and run the following script to prepare your local Python environment.</li></ul><pre><code class="language-python">chmod +x init.sh
./init.sh
</code></pre><p>A new folder named <code>venv</code> will appear. This folder will store all the packages locally in your repository folder.</p><ul><li>Once the script finishes, click F5 on your keyboard or click Debug to run the file.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/11/16-run.png" class="kg-image" alt="Using Python SDK to Interact with Azure Environment" loading="lazy" width="596" height="174"><figcaption>Debug a Code</figcaption></figure><ul><li>The terminal will show the output with the name of the resource group <code>Demo-RG</code>, in this case and return <strong>True</strong> if the results exist.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/11/14-run.png" class="kg-image" alt="Using Python SDK to Interact with Azure Environment" loading="lazy" width="2000" height="323" srcset="https://parveensingh.com/content/images/size/w600/2023/11/14-run.png 600w, https://parveensingh.com/content/images/size/w1000/2023/11/14-run.png 1000w, https://parveensingh.com/content/images/size/w1600/2023/11/14-run.png 1600w, https://parveensingh.com/content/images/2023/11/14-run.png 2118w" sizes="(min-width: 720px) 720px"><figcaption>Code Terminal Output</figcaption></figure><p>This confirms that the code successfully ran and retrieved the resource group information from the Azure account.</p><h2 id="conclusion">Conclusion</h2><p>By following the instructions in the article, you will be able to learn how to authenticate to an Azure account, run Python code to query and manipulate Azure resources and understand the structure of the code provided in the article.</p><p>Overall, I hope this article equips you with the knowledge and tools necessary to start working with Azure using Python SDK, enabling you to create and manage resources in Azure subscription efficiently.</p>]]></content:encoded></item><item><title><![CDATA[Writing Dockerfile For The First Time]]></title><description><![CDATA[Learn how to write a Dockerfile, the beginner's guide to containerization. Best practices and tips for successful container deployment.]]></description><link>https://parveensingh.com/writing-dockerfile-for-the-first-time/</link><guid isPermaLink="false">64f23247d4ab0b60998b2683</guid><category><![CDATA[Docker]]></category><dc:creator><![CDATA[Parveen Singh]]></dc:creator><pubDate>Fri, 01 Sep 2023 19:18:05 GMT</pubDate><media:content url="https://parveensingh.com/content/images/2023/09/DockerfileFirstTime.png" medium="image"/><content:encoded><![CDATA[<img src="https://parveensingh.com/content/images/2023/09/DockerfileFirstTime.png" alt="Writing Dockerfile For The First Time"><p>Are you exploring containerization for the first time and eager to comprehend how it works and a guide to your first steps on containerizing your application? Your best option to consider is Docker. Docker is an open-source platform with robust community support and a vast ecosystem, making it an excellent starting point for your containerization journey. This article aims to guide you through understanding Docker and the process of getting started with containerization using Docker.</p><!--kg-card-begin: markdown--><h2 id="table-of-contents">Table of Contents</h2>
<ol>
<li><a href="#introduction-to-docker-and-dockerfile">Introduction to Docker and Dockerfile</a></li>
<li><a href="#dockerfile-syntax-and-structure">Dockerfile Syntax and Structure</a></li>
<li><a href="#adding-comments-to-dockerfile">Adding Comments to Dockerfile</a></li>
<li><a href="#building-a-docker-image-using-dockerfile-step-by-step">Building a Docker Image using Dockerfile: Step-by-Step</a></li>
<li><a href="#conclusion">Conclusion</a></li>
</ol>
<!--kg-card-end: markdown--><h2 id="introduction-to-docker-and-dockerfile">Introduction to Docker and Dockerfile</h2><p>Docker is a robust containerization platform, it empowers developers to package their applications and dependencies within a portable and lightweight container image. These containers can be deployed consistently across diverse environments, facilitating smooth scalability and deployment.</p><p>Unlike virtual machines that require separate instances and resource allocation for each application, Docker containers efficiently share the resources of their host machine. This enables multiple applications to be spun up as container instances on the same host machine, optimizing resource utilization and promoting a more streamlined and resource-efficient environment.</p><p>A Dockerfile serves as the blueprint for constructing these containers. Dockerfile is a text file with a set of instructions for building a docker image. It specifies how docker builds your application. The Docker image serves as a blueprint for creating containers, making it easier to distribute and deploy applications with all their necessary components.</p><p>A Dockerfile should be placed at the root &#xA0;of your project as shown below using a Node.Js Application:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/09/image-1.PNG" class="kg-image" alt="Writing Dockerfile For The First Time" loading="lazy" width="674" height="376" srcset="https://parveensingh.com/content/images/size/w600/2023/09/image-1.PNG 600w, https://parveensingh.com/content/images/2023/09/image-1.PNG 674w"><figcaption>Location of your Dockerfile in your project</figcaption></figure><h2 id="dockerfile-syntax-and-structure">Dockerfile Syntax and Structure</h2><p>The Dockerfile has a straightforward syntax, consisting of a series of instructions that define how the Docker image should be constructed. Each instruction is executed in order, creating a new layer on top of the previous one. This layer-based approach ensures that only the changes in each step are stored, making the images efficient and shareable.</p><p>A basic Dockerfile typically starts with a <strong>FROM</strong> instruction, specifying the base image to use. Subsequent instructions include <strong>WORKDIR</strong> to set the working directory, <strong>COPY</strong> to add files to the image, <strong>RUN</strong> to execute commands during the build process, <strong>ENV</strong> to set environment variables, and CMD to define the default command to run when a container is started.</p><p>Here are the commonly used docker commands &#xA0;you should be familiar with :</p><h3 id="fromspecifies-the-base-image-for-your-application"><strong>FROM -</strong> &#xA0;specifies the base image for your application.</h3><p>A base image in Docker refers to the starting point for creating a Docker container. It serves as the foundation on which you build your application and includes the necessary operating system, libraries, and other dependencies required to run your application.</p><p>Base images are typically provided by the Docker community and official organizations, and they are hosted on Docker Hub, a public registry for Docker images. To find base images for your Docker projects, visit the <strong><a href="https://hub.docker.com">Docker Hub website</a></strong> and search for images related to the technologies or programming language you&apos;re using. For instance, if you&apos;re working with Node.js, you can search for the official Node.js base image. Similarly, you can find base images for Python, Java, Ruby, and many other popular languages and frameworks.</p><p>Below is an example of a FROM command, to use the official Node.js &#xA0;image from the Alpine project as the base image. Alpine Linux is much smaller than most distribution base images and uses the format &#xA0;<strong><code>node:&lt;version&gt;-alpine</code></strong></p><pre><code class="language-docker">FROM &lt;base image tag&gt;
#where &lt;base image tag&gt; is the tag for the base image 
#Exmple -- FROM node:14-alpine 
</code></pre><h3 id="workdirthis-is-used-to-set-the-working-directory-in-the-container">WORKDIR - This is used to set the working directory in the container.</h3><p>The working directory is the directory path within the container where any command, script, or file operation will be executed by default. The <strong>WORKDIR</strong> instruction also serves other file operational purposes, this includes:</p><ul><li>Setting the working directory helps organize the filesystem within the container. It ensures that all subsequent commands and file operations are relative to the specified directory</li><li>The WORKDIR instruction ensures that you have a consistent context for executing commands and managing files. When copying files or running commands inside the container, using relative paths can be error-prone if the working directory is not explicitly defined.</li></ul><p>An example of a WORKDIR command syntax is:</p><pre><code class="language-docker">WORKDIR &lt;path&gt;
# where &lt;path&gt; is replaced with the folder path 
#example -- WORKDIR /app 
</code></pre><h3 id="copycopy-the-application-source-code-to-the-container">COPY - Copy the application source code to the container</h3><p>The <strong>COPY</strong> instruction is used to copy files or directories from the host system (your local machine) into the Docker image being built. This allows you to include your application code, configuration files, and other required assets within the image.</p><p>The syntax for COPY instruction is as follows:</p><pre><code class="language-docker">COPY &lt;source&gt; &lt;destination&gt;
# &lt;source&gt; is the path to copy from and &lt;destination&gt; is the path to copy to

</code></pre><h3 id="runexecutes-a-command-during-the-build-process">RUN - Executes a command during the build process</h3><p>The RUN instruction is used to execute commands during the build process of a Docker image. It allows you to perform various tasks, such as installing dependencies, updating configurations, downloading and setting up the environment within the image</p><p>The syntax for RUN instruction is as follows:</p><pre><code class="language-docker">RUN &lt;command&gt;
# example to install requirement.txt for a Python app
# RUN pip install --no-cache-dir -r /requirements.txt
</code></pre><h3 id="exposespecifies-the-port-for-the-application-to-listen-to">EXPOSE - Specifies the port for the Application to listen to</h3><p>The EXPOSE instruction in a Dockerfile is used to inform Docker that the container, which will be created from the image, will listen on the specified network ports at runtime. However, it&apos;s essential to note that the EXPOSE instruction alone does not actually publish the specified ports to the host machine. To do that, you need to use the <strong>-p</strong> option when running the docker run command to explicitly bind container ports to corresponding host ports.</p><p>Here is the EXPOSE syntax :</p><pre><code class="language-docker">EXPOSE &lt;port&gt;
#example EXPOSE 3000
</code></pre><h3 id="cmdspecifies-the-default-command-for-the-container">CMD - Specifies the Default Command for the container</h3><p>CMD instruction is used to specify the default command to be executed when a container is running. This differs from the RUN instruction. While RUN is used during the Docker image build to modify the image&apos;s file system and configure it properly, the CMD instruction defines the default command to run when the container is started.</p><pre><code class="language-docker">CMD [&quot;executable&quot;, &quot;param1&quot;, &quot;param2&quot;, ...]
#Example - CMD [&quot;npm&quot;, &quot;start&quot;]
</code></pre><h3 id="envdefines-environment-variables-inside-the-container">ENV - Defines Environment variables inside the container</h3><p>Additionally the ENV, most times optional but can be very needful to define environment variables. Environment variables are key-value pairs that provide a way to configure the runtime environment of applications running inside the container.</p><p>The syntax of the ENV command is as follows:</p><pre><code class="language-docker">ENV &lt;key&gt;=&lt;value&gt;
</code></pre><p>Here, &lt;key&gt; represents the name of the environment variable, and &lt;value&gt; represents the value associated with that variable. It is important to note, that there should be no space around the &#x201C;=&#x201D; sign.</p><h2 id="adding-comments-to-dockerfile">Adding Comments to Dockerfile</h2><p>To add comments, simply begin a line with the # character, and your comment will be ignored during the build process.</p><p>Comments in a Dockerfile play a crucial role in documenting your instructions and providing clarity to other users who may interact with your Dockerfile.</p><pre><code class="language-docker">#this is a comment and will be ignored
</code></pre><h2 id="building-a-docker-image-using-dockerfile-step-by-step">Building a Docker Image using Dockerfile: Step-by-Step</h2><p>To create docker containers, you write a set of instructions for a textfile, that follows a particular format. This file with a set of instructions is known as a Dockerfile and can be placed at the root of your application. These instructions are built to produce an image. A running instance of an image is known as a container.</p><p>Dockerfile instructions are not case-sensitive, however, it follows a convention to use Uppercase for the docker commands and lowercase for values. The Dockerfile is executed sequentially, starting from the top and progressing downwards. During execution, each instruction is compared against cached layers to identify changes. In a case where changes are identified, instructions and subsequent instructions are processed as new container images. Consequently, it&apos;s important to note that the order of Instruction in a docker file is insignificant</p><h3 id="prerequisites">Prerequisites</h3><p>To proceed with writing your first Dockerfile, you have the following requirements:</p><ul><li>A Text Editor: You can use any text editor you prefer, such as Visual Studio Code, Sublime Text, or Notepad++.</li><li>A working application you intend to containerize. It&apos;s important to have a knowledge of your application dependencies</li><li>In a case where you need to build and run this container on your local machine, you must ensure Docker is installed on your machine. You can confirm this by running <code>docker version</code> on your CLI. Otherwise, navigate to <a href="https://docs.docker.com/engine/install/"><strong>Docker Docs</strong></a> for instructions on how to install Docker.</li><li>Alternatively, you can use any Docker Hosted environment such as Azure Container instances (ACI), or Amazon Elastic Container Services (ECS).</li></ul><h3 id="containerizing-a-nodejs-application-using-docker">Containerizing a NodeJS Application using Docker</h3><p>This demo explores how to containerize a simple app, using Dockerfile to build a container image and push this image to Docker Hub.</p><p>For this demo, ensure the following are in place:</p><ul><li>Git Installed</li><li>Code editor ( VS Code is used here)</li><li>Docker Installed</li><li>Docker Hub Account</li></ul><p>Once you can confirm the above, proceed with the instructions below:</p><ul><li>Open the <strong>Terminal on VS Code</strong> ( or any editor of choice) and run the command to clone below a sample application:</li></ul><pre><code class="language-bash">git clone &lt;https://github.com/Azure-Samples/nodejs-docs-hello-world.git&gt;
</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/09/2-vscode-terminal.JPG" class="kg-image" alt="Writing Dockerfile For The First Time" loading="lazy" width="1690" height="755" srcset="https://parveensingh.com/content/images/size/w600/2023/09/2-vscode-terminal.JPG 600w, https://parveensingh.com/content/images/size/w1000/2023/09/2-vscode-terminal.JPG 1000w, https://parveensingh.com/content/images/size/w1600/2023/09/2-vscode-terminal.JPG 1600w, https://parveensingh.com/content/images/2023/09/2-vscode-terminal.JPG 1690w" sizes="(min-width: 720px) 720px"><figcaption>Opening Terminal in VS Code</figcaption></figure><ul><li>Change the directory in the terminal to your project and create a file called dockerfile with no file extension using the commands below:`</li></ul><pre><code class="language-bash">#change Directory
cd nodejs-docs-hello-world/

#create a dockerfile
cat &gt; dockerfile
</code></pre><p>Now, you should see a dockerfile at the root of your project :</p><figure class="kg-card kg-image-card"><img src="https://parveensingh.com/content/images/2023/09/dokerfile-new.png" class="kg-image" alt="Writing Dockerfile For The First Time" loading="lazy" width="1204" height="498" srcset="https://parveensingh.com/content/images/size/w600/2023/09/dokerfile-new.png 600w, https://parveensingh.com/content/images/size/w1000/2023/09/dokerfile-new.png 1000w, https://parveensingh.com/content/images/2023/09/dokerfile-new.png 1204w" sizes="(min-width: 720px) 720px"></figure><ul><li>The first step to writing your dockerfile is to find a base image for your project. This is relative to your project requirements. For this demo ( NodeJs simple Hello World Project), A Linux NodeJS image will be used. Alpine Linux is much smaller than most distribution base images and uses the format - &#xA0;<strong>node</strong>:&lt;version&gt;-<strong>alpine</strong> &#xA0;<em>(Ref: <a href="https://hub.docker.com/_/node">https://hub.docker.com/_/node</a>)</em>. As shown below -</li></ul><pre><code class="language-docker"># Use the official Node.js image as the base image
FROM node:18-alpine
</code></pre><ul><li>Set the working directory for your image as shown below</li></ul><pre><code class="language-docker"># Create a working directory in the container
WORKDIR /app
</code></pre><ul><li>For a NodeJs Application, package.json, and package-lock.json files are necessary, copy this to the container.</li></ul><pre><code class="language-docker"># Copy all the packages.json files to the container
COPY package*.json ./
</code></pre><ul><li>Now you can visualize a Linux box with Node installed and all the <strong>package.json and package-lock.json</strong> files inside. &#xA0;You will need to install dependencies on the box using the RUN command below:</li></ul><pre><code class="language-docker"># Install the dependencies
RUN npm install
</code></pre><ul><li>Copy your source file to the box using the copy command, from the current location which is the root folder to the image root as shown below:</li></ul><pre><code class="language-docker"># Copy the application source code to the container
COPY . .
</code></pre><ul><li>Expose the application to a port:</li></ul><pre><code class="language-docker"># Expose a port for the application
EXPOSE 3000
</code></pre><ul><li>Run the application using the RUN command:</li></ul><pre><code class="language-docker"># Define the command to run the application
CMD [&quot;node&quot;, &quot;index.js&quot;]
</code></pre><p>Now your dockerfile should look the same as this below:</p><pre><code class="language-docker"># Use the official Node.js image as the base image
FROM node:18-alpine

# Create a working directory in the container
WORKDIR /app

# Copy the package.json and package-lock.json files to the container
COPY package*.json ./

# Install the dependencies
RUN npm install

# Copy the application source code to the container
COPY . .

# Expose a port for the application
EXPOSE 3000

# Define the command to run the application
CMD [&quot;node&quot;, &quot;index.js&quot;]
</code></pre><h3 id="build-the-image-and-upload-it-to-docker-hub">Build the image and upload it to Docker Hub</h3><ul><li>Open the terminal on your code editor, and navigate to the root of your project, where the dockerfile is located:</li></ul><pre><code class="language-bash">cd .\\nodejs-docs-hello-world\\
</code></pre><ul><li>Ensure Docker is running, and run the command to build the image. Replace <em>&lt;username&gt;</em> will your dockerhub username and <em>&lt;appname&gt;</em> with any name of choice	</li></ul><pre><code class="language-docker">docker build . -t &lt;username&gt;/&lt;appname&gt;
</code></pre><ul><li>Once the build is complete, you will find your container details when you run the command <code>docker ps</code>. Run your container using the command below:</li></ul><pre><code class="language-docker">docker run -p 32768:3000 -d &lt;your-docker-hub-username&gt;/&lt;your-app-name&gt;
</code></pre><p>Replace &lt;your-docker-hub-username&gt; with your username for dockerhub and &lt;your-app-name&gt; with any name of choice. &#xA0;Where 32768 is any random port assigned by you, this port is assigned to your host (your computer) and 3000 is the port your image is listening to</p><ul><li>Once your application is listening to a port, navigate to your browser and enter <a href="http://localhost:32769">http://localhost:32769</a></li></ul><figure class="kg-card kg-image-card"><img src="https://parveensingh.com/content/images/2023/09/application-running.JPG" class="kg-image" alt="Writing Dockerfile For The First Time" loading="lazy" width="482" height="224"></figure><ul><li>To push the built image to Docker Hub, you&apos;ll need to log in to Docker Hub from the terminal using the command:</li></ul><pre><code class="language-bash">docker login
</code></pre><ul><li>Enter your login credentials and run the command to push your image to your docker hub repository:</li></ul><pre><code class="language-bash">docker push &lt;your-docker-hub-username&gt;/&lt;your-app-name&gt;
</code></pre><figure class="kg-card kg-image-card"><img src="https://parveensingh.com/content/images/2023/09/app-on-dockerhub-1.JPG" class="kg-image" alt="Writing Dockerfile For The First Time" loading="lazy" width="1420" height="430" srcset="https://parveensingh.com/content/images/size/w600/2023/09/app-on-dockerhub-1.JPG 600w, https://parveensingh.com/content/images/size/w1000/2023/09/app-on-dockerhub-1.JPG 1000w, https://parveensingh.com/content/images/2023/09/app-on-dockerhub-1.JPG 1420w" sizes="(min-width: 720px) 720px"></figure><h2 id="conclusion">Conclusion</h2><p>As containerization continues to gain popularity, mastering Dockerfile creation becomes an essential skill for modern developers and system administrators. Docker&apos;s simplicity and flexibility make it an indispensable tool for enhancing the development, deployment, and scaling processes.</p><p>By leveraging the insights gained from this guide, readers can confidently adopt containerization practices, simplifying application management and fostering a more agile and efficient development ecosystem. Embrace Docker, write your first Dockerfile, and unlock the boundless possibilities of containerization for your projects.</p>]]></content:encoded></item><item><title><![CDATA[Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure]]></title><description><![CDATA[Learn how to containerize your applications using Azure DevOps, CI/CD pipelines, Docker containers, and Azure Container Registry. This article explores the benefits and demonstrates how to leverage other Azure resources for building, testing, and deploying containerized pipelines.]]></description><link>https://parveensingh.com/containerized-pipelines-with-azure-devops-building-testing-and-deploying-docker-containers-to-azure-2/</link><guid isPermaLink="false">64c92461a3149404f97d9a22</guid><dc:creator><![CDATA[Parveen Singh]]></dc:creator><pubDate>Fri, 11 Aug 2023 18:09:09 GMT</pubDate><media:content url="https://parveensingh.com/content/images/2023/08/ContainerizedPipeline-AzureDevOps.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><h2 id="table-of-contents">Table of Contents</h2>
<ol>
<li><a href="#overview-of-containerization-of-an-application">Overview of Containerization of an Application</a>
<ul>
<li><a href="#benefits-of-containerizing-an-application">Benefits of Containerizing an Application</a></li>
<li><a href="#containerized-pipeline-using-azure-devops">Containerized Pipeline using Azure DevOps</a></li>
</ul>
</li>
<li><a href="#building-a-containerized-pipeline-for-nodejs-application">Building a Containerised Pipeline for Node.Js Application</a>
<ul>
<li><a href="#creating-a-project-on-azure-devops">Creating a Project on Azure DevOps</a></li>
<li><a href="#setting-up-your-nodejs-application-in-azure-repo">Setting up your Node.js application on Azure Repo</a></li>
<li><a href="#creating-an-azure-app-service-on-azure-portal">Creating an Azure App Service on Azure Portal</a></li>
<li><a href="#create-an-azure-container-registry-acr-on-azure-portal">Create an Azure Container Registry (ACR) on Azure Portal</a></li>
<li><a href="#set-up-managed-identity-access-from-web-app-to-container-registry">Set up Managed Identity Access From Web App to Container Registry</a></li>
<li><a href="#setting-up-service-connection-on-azure-devops-for-azure-resources">Setting up Service Connection on Azure DevOps for Azure Resources</a></li>
<li><a href="#set-up-azure-devops-cicd-pipelines">Set up Azure DevOps CI/CD Pipelines</a></li>
<li><a href="#validating-deployment-progress">Validating Deployment progress</a></li>
</ul>
</li>
<li><a href="#conclusion">Conclusion</a></li>
</ol>
<!--kg-card-end: markdown--><img src="https://parveensingh.com/content/images/2023/08/ContainerizedPipeline-AzureDevOps.png" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure"><p>As a software developer or newbie to software engineering and DevOps, you may wonder why the shift from the traditional software development approach to containers has gained immense popularity in recent years. The answer lies in the numerous benefits that containers bring to the table.</p><p>This article explores the realm of containerized pipelines with Azure DevOps, delving into their benefits and demonstrating how to dockerize your application using CI/CD pipelines on Azure DevOps while leveraging other Azure resources.</p><p>You will learn how to containerize your application, configure build, and release pipelines that deploy your container image to Azure Container Registry (ACR), and also auto-deploy to Azure App Service.</p><h2 id="overview-of-containerization-of-an-application"><strong>Overview of Containerization of an Application</strong></h2><p>The first question that comes to mind is to understand what containerization of an application is and why. Containerization of an application is the process of encapsulating an application, alongside its configurations, dependencies, and libraries into a self-contained unit known as a container. &#xA0;A container provides a lightweight and isolated environment that allows the application to function in a consistent manner across different platforms and machines.</p><p>Containers offer unparalleled portability, allowing applications to run consistently across different environments, from local development machines to production servers. This eliminates the age-old problem of &quot;it works on my machine&quot; syndrome and streamlines the deployment process.</p><p>The phrase &#x201C;It works on my machine&#x201D; syndrome describes the challenge encountered when a software application functions as expected on one developer&apos;s machine and differently on another developer&apos;s device or environment. &#xA0;It addresses this issue by creating a consistent and reproducible environment for running applications.</p><p>There are different tools used to containerize an application and the most popular is Docker. &#xA0;With Docker, you can package your application with its dependencies using a Dockerfile. A Dockerfile contains a list of instructions to build an application to a container image. &#xA0;These container images are standalone and executable packages of your application, typically a template for creating more instances of your application and are published to container registries such as Docker Hub or Azure Container Registry (ACR).</p><h3 id="benefits-of-containerizing-an-application"><strong>Benefits of Containerizing an Application.</strong></h3><p>Containerization introduces a wide range of benefits to software development aside from the case of consistency and compatibility already established as &#x201C;It works on my machine syndrome&#x201D;. Other benefits include:</p><ul><li>Efficient Resource Utilization: Containers are lightweight and consume fewer resources than traditional virtual machines, making them ideal for modern microservices-based architectures. This allows multiple containers can run on a single host utilizing system resources optimally.</li><li>Isolation: Containers provide a secure and isolated environment to run applications, minimizing the risk of vulnerabilities</li><li>Portability: Containers can be run in any environment, providing a consistent runtime experience across different platforms. This also ensures seamless migration and deployment across platforms.</li></ul><h3 id="containerized-pipeline-using-azure-devops"><strong>Containerized Pipeline using Azure DevOps</strong></h3><p>In the context of containerization, Azure Pipelines is a component in Azure DevOps that enables you to create and manage build and release pipelines. It allows you to define custom build and release tasks, such as building Docker images, pushing them to Container Registry, and deploying them to Azure Kubernetes Service (AKS) or Azure App Services.</p><p>It seamlessly integrates with popular containerization tools such as Docker, ensuring containerized applications are deployed consistently and efficiently across different environments. Azure pipelines also provide end-to-end containerization support and lots of benefits, including:</p><ul><li>Flexibility: Azure Pipelines supports a range of containerization scenarios, including multi-container applications, Docker Compose, and Kubernetes.</li><li>Security: Azure Pipelines provides built-in security features, such as image scanning and vulnerability assessments, ensuring that containers are secure and compliant.</li><li>Automation: Azure Pipelines automates the entire containerization process, reducing manual errors and improving consistency.</li></ul><h2 id="building-a-containerized-pipeline-for-nodejs-application"><strong>Building a Containerized Pipeline for Node.js Application</strong></h2><p>In this section, you will delve into exploring containerization using Azure DevOps Pipelines. This will cover a step-by-step demonstration of building a containerized pipeline specifically designed for Node.js applications. &#xA0;By leveraging the power of Docker and Azure Pipelines, you will set up a seamless CI/CD pipeline to build and containerize a Node.js app and deploy this container image to AKS and also App Service.</p><p>To follow on, you will need to have the following:</p><ul><li>Azure Account with an active subscription</li><li>Azure DevOps Account</li><li>Git installed on your machine.</li><li>VS Code (Code Editor)</li></ul><h3 id="creating-a-project-on-azure-devops"><strong>Creating a Project on Azure DevOps</strong></h3><ul><li>Login to <a href="http://dev.azure.com">dev.azure.com</a>, you will be signed into an existing organization, or you can create a new one if you are signing in for the first time. For details on creating a new organization and project <strong>see previous article link</strong></li><li>Click on <strong>New Project</strong> or use an existing one: </li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-11.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1570" height="455" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-11.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/image-11.png 1000w, https://parveensingh.com/content/images/2023/08/image-11.png 1570w" sizes="(min-width: 720px) 720px"><figcaption>Create New Project - Azure DevOps</figcaption></figure><ul><li>This opens a dialog window as shown below. Enter a project name and click the <strong>Create</strong> button:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-4.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="694" height="652" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-4.png 600w, https://parveensingh.com/content/images/2023/08/image-4.png 694w"><figcaption>Create New Project - Azure DevOps</figcaption></figure><h3 id="setting-up-your-nodejs-application-in-azure-repo"><strong>Setting up your Node.js Application in Azure Repo</strong></h3><p>Repos in Azure DevOps is a repository for storing and managing your source code. It supports Git and Team Foundation Version Control (TFVC).</p><p>Git is distributed version control system that manages repositories, that offers features such as branching, merging, and pull requests. TFVC, on the other hand, is a centralized version control system that uses a centralized server to store files.</p><p>Each project in Azure Dev comes with a default Repo, you will import your project files to this repo from your PC.</p><ul><li>Click <strong>Repos</strong> located at the left menu on your project dashboard, this opens the overview for Repos with options on how to proceed.</li><li>Click the <strong>Clone in VS Code</strong> button:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-7.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1294" height="854" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-7.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/image-7.png 1000w, https://parveensingh.com/content/images/2023/08/image-7.png 1294w" sizes="(min-width: 720px) 720px"><figcaption>Clone Azure Repo to VS Code</figcaption></figure><ul><li>This opens VS Code on your machine and a window to allow you to select the folder to clone your project to.</li><li>You can choose any folder or create a new one. &#xA0;Now, you have the Azure Repo cloned to our PC, you will proceed to clone a sample NodeJS Project:</li></ul><figure class="kg-card kg-image-card"><img src="https://parveensingh.com/content/images/2023/08/clone.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1038" height="659" srcset="https://parveensingh.com/content/images/size/w600/2023/08/clone.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/clone.png 1000w, https://parveensingh.com/content/images/2023/08/clone.png 1038w" sizes="(min-width: 720px) 720px"></figure><p>Clone Azure Repo to VS Code</p><ul><li>On VS Code, click on <strong>Terminal</strong> from the top menu items to open a new terminal. On the new terminal window run the command below to clone the sample project:</li></ul><pre><code class="language-bash">git clone &lt;https://github.com/Azure-Samples/nodejs-docs-hello-world.git&gt;
</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-8.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1833" height="613" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-8.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/image-8.png 1000w, https://parveensingh.com/content/images/size/w1600/2023/08/image-8.png 1600w, https://parveensingh.com/content/images/2023/08/image-8.png 1833w" sizes="(min-width: 720px) 720px"><figcaption>Clone Azure Repo to VS Code</figcaption></figure><ul><li>Open the project folder <strong>node-docs-hello-world</strong> and create a file with the name <em>dockerfile</em> and no file extension. Paste the following code inside the <strong>dockerfile:</strong></li></ul><pre><code class="language-docker"># Use the official Node.js image as the base image
FROM node:14-alpine

# Set the working directory in the container
WORKDIR /app

# Copy the package.json and package-lock.json files to the container
COPY package*.json ./

# Install the dependencies
RUN npm install

# Copy the application source code to the container
COPY . .

# Expose a port for the application
EXPOSE 3000

# Define the command to run the application
CMD [&quot;node&quot;, &quot;app.js&quot;]
</code></pre><p>This dockerfile contains instructions that encapsulate your application and its dependencies and outputs them as a container image during pipeline build.</p><ul><li>After adding dockerfile, your project folder should look the same as the image below:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-9.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1378" height="717" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-9.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/image-9.png 1000w, https://parveensingh.com/content/images/2023/08/image-9.png 1378w" sizes="(min-width: 720px) 720px"><figcaption>Added Dockerfile to Node.js App - VS Code</figcaption></figure><ul><li>Open the terminal again and run the following git command one after the other to push this update to Azure Repos:</li></ul><pre><code class="language-bash"># Change into the cloned directory
cd nodejs-docs-hello-world

# Add all new files and commit
git add .
git commit -m &quot;added dockerfile&quot;

# Remove existing remote origin from the cloned folder 
git remote remove origin

# Add your Azure Repo&apos;s origin and push
git remote add origin &lt;https://Techruptblogger@dev.azure.com/Techruptblogger/containerised_pipeline/_git/containerised_pipeline&gt;
git push -u origin --all
</code></pre><p>These git commands add all files to your local machine and commit all changes made. Since the project is cloned, this implies that it has an origin, you will have to remove the first origin and replace it with the origin from your project repo and lastly push all files to Azure Repo. Find the instructions to update the URL in the next step.</p><ul><li>To get the link to your Azure repo origin, open Azure DevOps project click on your empty <strong>Repo &gt; Files</strong> and scroll to the &#x201C;Push an existing repository &#x2026;&#x201D; section as shown below:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-10.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1294" height="854" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-10.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/image-10.png 1000w, https://parveensingh.com/content/images/2023/08/image-10.png 1294w" sizes="(min-width: 720px) 720px"><figcaption>Locate Azure Repo Origin - Azure DevOps</figcaption></figure><ul><li>On successfully running the script, your files will be pushed to Azure Repos: </li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-13.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1579" height="567" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-13.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/image-13.png 1000w, https://parveensingh.com/content/images/2023/08/image-13.png 1579w" sizes="(min-width: 720px) 720px"><figcaption>Pushed File from VS code to Azure Repos - Azure DevOps</figcaption></figure><p>You have successfully pushed all project files to Azure Repo. You will need to set up other resources needed for this Demo such as setting up Azure App Service and Azure Container.</p><h3 id="creating-an-azure-app-service-on-azure-portal"><strong>Creating an Azure App Service on Azure Portal</strong></h3><ul><li>Open <strong><a href="http://portal.azure.com">portal.azure.com</a></strong> and search for <em>App Service, ensure</em> to select the <strong>Publish</strong> option as the code option as <strong>Docker Container.</strong> &#xA0;Fill in other option and click <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Review + Create:</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> </strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-14.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="856" height="832" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-14.png 600w, https://parveensingh.com/content/images/2023/08/image-14.png 856w" sizes="(min-width: 720px) 720px"><figcaption>Create App Service for Container - Azure Portal</figcaption></figure><ul><li>This will take a few minutes to complete. On completion open the resource, this should look the same as shown below: </li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-15.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1442" height="608" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-15.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/image-15.png 1000w, https://parveensingh.com/content/images/2023/08/image-15.png 1442w" sizes="(min-width: 720px) 720px"><figcaption>Create App Service for Container - Azure Portal</figcaption></figure><h3 id="create-an-azure-container-registry-acr-on-azure-portal"><strong>Create an Azure Container Registry (ACR) on Azure Portal</strong></h3><ul><li>On Azure Portal Search for <em>Container Registry and</em> create a Container Registry. Fill in the required input marked asterisk and click <strong>Review + Create: </strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-16.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="938" height="834" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-16.png 600w, https://parveensingh.com/content/images/2023/08/image-16.png 938w" sizes="(min-width: 720px) 720px"><figcaption>Create Container registry - Azure Portal</figcaption></figure><p>This will take a few minutes to set up your container registry. Below is an overview of the Techrupts container registry created: </p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-18.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1460" height="592" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-18.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/image-18.png 1000w, https://parveensingh.com/content/images/2023/08/image-18.png 1460w" sizes="(min-width: 720px) 720px"><figcaption>ACR Overview - Azure Portal</figcaption></figure><h3 id="set-up-managed-identity-access-from-web-app-to-container-registry"><strong>Set up Managed Identity Access from Web App to Container Registry</strong></h3><p>Setting up manage identity simplifies the process of managing credentials and authentication by allowing resources to authenticate securely with other Azure services and resources. To enable seamless flow between ACR and App Service, you need to set up managed identity access.</p><ul><li>Open the newly created App Service (techrupsdemo) and navigate to <strong>System Assign</strong> under <strong>Identity</strong> on the left menu. Toggle the <strong>Status</strong> to <strong>enable</strong> it and click <strong>Save: </strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-19.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="748" height="454" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-19.png 600w, https://parveensingh.com/content/images/2023/08/image-19.png 748w" sizes="(min-width: 720px) 720px"><figcaption>Enable System Assigned Identity - Azure Portal</figcaption></figure><p>By turning this on, Azure assigned an identity to App Service, which enables it to authenticate itself with Azure AD and access other resources.</p><ul><li>On Container Registry, locate <strong>Access Control (IAM)</strong> on the left menu. Click <strong>+Add</strong> and select <strong>Add Role Assignment: </strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-20.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="632" height="346" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-20.png 600w, https://parveensingh.com/content/images/2023/08/image-20.png 632w"><figcaption>Set Up IAM Access Control for ACR Pul- Azure Portal</figcaption></figure><ul><li>On the <strong>Add role assignment</strong> window, select <strong>ACR Pull</strong> and click <strong>Next: </strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-21.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="956" height="854" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-21.png 600w, https://parveensingh.com/content/images/2023/08/image-21.png 956w" sizes="(min-width: 720px) 720px"><figcaption>Set Up IAM Access Control for ACR Pul- Azure Portal</figcaption></figure><ul><li>On the <strong>Members</strong> tab of <strong>Add role assignment</strong> window, click <strong>+ Select members</strong> to add the ACR pull role to App Service managed identity: </li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-22.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="848" height="634" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-22.png 600w, https://parveensingh.com/content/images/2023/08/image-22.png 848w" sizes="(min-width: 720px) 720px"><figcaption>Set Up IAM Access Control for ACR Pul- Azure Portal</figcaption></figure><ul><li>Search and select the App Service name from the list and click <strong>Select</strong> to save: </li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-23.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="466" height="656"><figcaption>Set Up IAM Access Control for ACR Pul- Azure Portal</figcaption></figure><ul><li>You will be taken back to the <strong>Members</strong> tab. Click <strong>Review + assign</strong> and finish the role assignment: </li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-24.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="834" height="640" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-24.png 600w, https://parveensingh.com/content/images/2023/08/image-24.png 834w" sizes="(min-width: 720px) 720px"><figcaption>Set Up IAM Access Control for ACR Pul- Azure Portal</figcaption></figure><ul><li>To enable access credentials for the Container Registry, navigate to <strong>Access Keys</strong> and toggle Admin<strong> user</strong> to <strong>Enabled</strong>. Keep these details handy as you will need this information to authenticate your pipeline later: </li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-25.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1254" height="683" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-25.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/image-25.png 1000w, https://parveensingh.com/content/images/2023/08/image-25.png 1254w" sizes="(min-width: 720px) 720px"><figcaption>Enable Access to the container registry.</figcaption></figure><h3 id="setting-up-service-connection-on-azure-devops-for-azure-resources"><strong>Setting up Service Connection on Azure DevOps for Azure Resources</strong></h3><p>Creating a service connection provides a secure way to establish a connection between your pipeline and external services, in this case, Azure Subscription.</p><p>By adding a service connection, your pipeline can securely access these external services during the pipeline execution. If you have this set up proceed already, skip to the next step.</p><ul><li>Open your project on the Azure DevOps portal, and Click on <strong>Project Settings: </strong></li></ul><figure class="kg-card kg-image-card"><img src="https://parveensingh.com/content/images/2023/08/image-26.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1230" height="854" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-26.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/image-26.png 1000w, https://parveensingh.com/content/images/2023/08/image-26.png 1230w" sizes="(min-width: 720px) 720px"></figure><ul><li>Navigate to the <strong>Service Connections</strong> under <strong>Pipelines</strong> section and click on the <strong>Create Service Connections:</strong></li></ul><figure class="kg-card kg-image-card"><img src="https://parveensingh.com/content/images/2023/08/Image-6C---Create-service-connection-2.PNG" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1501" height="803" srcset="https://parveensingh.com/content/images/size/w600/2023/08/Image-6C---Create-service-connection-2.PNG 600w, https://parveensingh.com/content/images/size/w1000/2023/08/Image-6C---Create-service-connection-2.PNG 1000w, https://parveensingh.com/content/images/2023/08/Image-6C---Create-service-connection-2.PNG 1501w" sizes="(min-width: 720px) 720px"></figure><ul><li>On the <strong>New service connection window</strong>, select <strong>Azure Resource Manager and</strong> click <strong><strong><strong><strong>Next:</strong></strong></strong></strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/Image-8-Create-Service-Connection-1A.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="688" height="811" srcset="https://parveensingh.com/content/images/size/w600/2023/08/Image-8-Create-Service-Connection-1A.png 600w, https://parveensingh.com/content/images/2023/08/Image-8-Create-Service-Connection-1A.png 688w"><figcaption>Set Up New Service Connection - Azure DevOps</figcaption></figure><ul><li>Select <strong>Service Principal (automatic)</strong> and click <strong>Next:</strong></li></ul><figure class="kg-card kg-image-card"><img src="https://parveensingh.com/content/images/2023/08/Image-8---Create-Service-Connection1B.PNG" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="696" height="747" srcset="https://parveensingh.com/content/images/size/w600/2023/08/Image-8---Create-Service-Connection1B.PNG 600w, https://parveensingh.com/content/images/2023/08/Image-8---Create-Service-Connection1B.PNG 696w"></figure><p>Set Up New Service Connection - Azure DevOps</p><p>The next screen requires you to authenticate to Azure. Complete the authentication so this can load your active subscription on your account on the next screen.</p><ul><li>Select the <strong>Subscription</strong> and <strong>Resource group</strong> associated with your Azure resources. Enter the Service Connection name and check the <strong>Security</strong> box for <strong>Grant access permission..</strong>. Click <strong>Save</strong> once done:</li></ul><figure class="kg-card kg-image-card"><img src="https://parveensingh.com/content/images/2023/08/Image-8--Create-Service-Connection-2.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="564" height="826"></figure><p>Set Up New Service Connection - Azure DevOps</p><h3 id="set-up-azure-devops-cicd-pipelines"><strong>Set up Azure DevOps CI/CD Pipelines</strong></h3><p>Now you have your project files on Azure Repo, you need to set up a pipeline to build the image and publish it to Azure Container Registry (ACR) and also a release pipeline to deploy an image to Azure Web App. This will be achieved by configuring a build pipeline and also a release pipeline.</p><p><strong>Configuring a Build Pipeline to Build the Container Image</strong></p><ul><li>Inside the Azure DevOps portal, navigate to your project and click <strong>Create Pipelines</strong> under <strong>Pipelines</strong> side menu: </li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-27.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="780" height="582" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-27.png 600w, https://parveensingh.com/content/images/2023/08/image-27.png 780w" sizes="(min-width: 720px) 720px"><figcaption>Configuring a build pipeline on Azure DevOps</figcaption></figure><ul><li>Select <strong>Azure Repo Git </strong>under <strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong><strong>Where is your Code</strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong></strong> option: </li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-28.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="894" height="642" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-28.png 600w, https://parveensingh.com/content/images/2023/08/image-28.png 894w" sizes="(min-width: 720px) 720px"><figcaption>Configuring a build pipeline on Azure DevOps</figcaption></figure><ul><li>Select your repository where you have the Node.js App:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/repo.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1028" height="485" srcset="https://parveensingh.com/content/images/size/w600/2023/08/repo.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/repo.png 1000w, https://parveensingh.com/content/images/2023/08/repo.png 1028w" sizes="(min-width: 720px) 720px"><figcaption>Configuring a build pipeline on Azure DevOps</figcaption></figure><ul><li>Select the 2nd docker option- <strong>Build and push an Image to Azure Container Registry</strong> from the list under <strong>Configure</strong> tab: </li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-29.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="956" height="714" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-29.png 600w, https://parveensingh.com/content/images/2023/08/image-29.png 956w" sizes="(min-width: 720px) 720px"><figcaption>Configuring a build pipeline on Azure DevOps</figcaption></figure><ul><li>The following window displays the auto generated Yml file (azure-pipelines.yml) that builds your container image and publishes it to ACR, you may want to edit and make changes to the file otherwise, click <strong>Save and Run: </strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-30.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="975" height="854" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-30.png 600w, https://parveensingh.com/content/images/2023/08/image-30.png 975w" sizes="(min-width: 720px) 720px"><figcaption>Configuring a build pipeline on Azure DevOps</figcaption></figure><ul><li>Enter the commit message or use the default, this is needed as a comment to commit the build template file to your project repo, then click <strong>Save and Run: </strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-31.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="532" height="520"><figcaption>Configuring a build pipeline on Azure DevOps</figcaption></figure><ul><li>This opens a few sub-windows, the first window requires your subscription, select the same <strong>subscription</strong> where you have your resources and click C<strong>ontinue: </strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-32.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="538" height="492"><figcaption>Configuring a build pipeline on Azure DevOps</figcaption></figure><ul><li>Select the container registry, enter a name for your new image, and click <strong>Validate and Configure: </strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-33.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="526" height="440"><figcaption>Configuring a build pipeline on Azure DevOps</figcaption></figure><ul><li>This returns to the review window, click the <strong>Save and Run</strong> button again to complete the process and run the pipeline: </li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-34.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1074" height="462" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-34.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/image-34.png 1000w, https://parveensingh.com/content/images/2023/08/image-34.png 1074w" sizes="(min-width: 720px) 720px"><figcaption>Configuring a build pipeline on Azure DevOps</figcaption></figure><p>Once the pipeline execution is started, the build summary page is displayed. This is to enable you to monitor to your pipeline progress.</p><ul><li>To confirm your pipeline was successful, you will see the job status as <strong>Success:</strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/build.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1317" height="570" srcset="https://parveensingh.com/content/images/size/w600/2023/08/build.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/build.png 1000w, https://parveensingh.com/content/images/2023/08/build.png 1317w" sizes="(min-width: 720px) 720px"><figcaption>Configuring a build pipeline on Azure DevOps</figcaption></figure><ul><li>Navigate to <strong>Azure portal</strong>, open <strong>Container Registry</strong>, navigate to <strong>Repositories,</strong> and confirm the image is published. Take note of the Tag as this will be referenced later:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/crepo.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1205" height="560" srcset="https://parveensingh.com/content/images/size/w600/2023/08/crepo.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/crepo.png 1000w, https://parveensingh.com/content/images/2023/08/crepo.png 1205w" sizes="(min-width: 720px) 720px"><figcaption>Published Image to Container Registry from Azure Pipelines</figcaption></figure><p><strong>Configuring Release Pipeline for Deployment</strong></p><p>Now you have successfully built an image and published it to ACR, you configure a release pipeline to pull this image to a web app (App Service)</p><ul><li>Inside the Azure DevOps projects under the <strong>Pipelines</strong> menu, click <strong>Releases</strong> and <strong>New Pipeline</strong> to create a new release pipeline: </li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-35.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="986" height="522" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-35.png 600w, https://parveensingh.com/content/images/2023/08/image-35.png 986w" sizes="(min-width: 720px) 720px"><figcaption>Configure a Release pipeline to deploy containerized App to App Service</figcaption></figure><ul><li>On the <strong>Select a template</strong> window, select <strong>Azure App Service Deployment and</strong> click <strong>Apply: </strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-36.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1220" height="550" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-36.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/image-36.png 1000w, https://parveensingh.com/content/images/2023/08/image-36.png 1220w" sizes="(min-width: 720px) 720px"><figcaption>Release Pipeline set up on Azure DevOps</figcaption></figure><ul><li>Enter a name for the pipeline stage and click on the <strong>Stage</strong> box to expand the settings: </li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-37.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1442" height="570" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-37.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/image-37.png 1000w, https://parveensingh.com/content/images/2023/08/image-37.png 1442w" sizes="(min-width: 720px) 720px"><figcaption>Release Pipeline set up on Azure DevOps</figcaption></figure><ul><li>On the Pipeline stage settings, select your <strong>Subscription</strong> and click <strong>Authorize: </strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-38.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1607" height="671" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-38.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/image-38.png 1000w, https://parveensingh.com/content/images/size/w1600/2023/08/image-38.png 1600w, https://parveensingh.com/content/images/2023/08/image-38.png 1607w" sizes="(min-width: 720px) 720px"><figcaption>Release Pipeline set up on Azure DevOps</figcaption></figure><ul><li>Fill out the following information and click <strong>Save:</strong></li><li>On the <strong>App service type</strong>, select <strong>Web App for Containers</strong></li><li>Select the App Service name created earlier as the destination resource.</li><li>On <strong>Registry or Namespace,</strong> enter <em>&lt;registryname&gt;azurecr.io.</em> &lt;registryname&gt; should be changed to the name of your container registry.</li><li>On <strong>Repository</strong>, enter the Image name of your choice: </li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-39.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1591" height="757" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-39.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/image-39.png 1000w, https://parveensingh.com/content/images/2023/08/image-39.png 1591w" sizes="(min-width: 720px) 720px"><figcaption>Release Pipeline set up on Azure DevOps</figcaption></figure><ul><li>Click on the <strong>Deploy Azure App Service</strong> task, you will notice every other option is auto-filled and greyed out except for Tag. Enter your image tag number as seen on your image repository (Review <strong>Configuring a Build Pipeline to build the container image)</strong></li><li>Expand the <strong>Application and Configuration Settings</strong> and click the three dots beside the <strong>App Service setting</strong>: </li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-40.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1118" height="854" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-40.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/image-40.png 1000w, https://parveensingh.com/content/images/2023/08/image-40.png 1118w" sizes="(min-width: 720px) 720px"><figcaption>Release Pipeline set up on Azure DevOps</figcaption></figure><ul><li>This opens the <strong>App Settings</strong> window, add these configurations and click <strong>Ok.</strong></li><li><em>WEBSITE_PORT &#x201C;3000&#x201D; (</em>ensure this is the same port configured on your dockerfile)</li><li><em>DOCKER_REGISTRY_SERVER_USERNAME</em> &lt;enter credential as send on container registry admin access&gt;</li><li><em>DOCKET_REGISTRY_SERVER_PASSWORD</em> &lt;enter credential as send on container registry admin access&gt; </li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-41.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="544" height="324"><figcaption>App Settings on Azure DevOps Pipelines</figcaption></figure><ul><li>Once saved, the Create Release button will be active, click <strong>Create Release: </strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-42.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1573" height="854" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-42.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/image-42.png 1000w, https://parveensingh.com/content/images/2023/08/image-42.png 1573w" sizes="(min-width: 720px) 720px"><figcaption>Create Release - Azure DevOps Pipelines</figcaption></figure><ul><li>On the <strong>Create a new release</strong> window, ensure to check the release box to highlight a blue color and click <strong>Create</strong>. This changes the stage from Manual to automated: </li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-43.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="512" height="564"><figcaption>Create Release - Azure DevOps Pipelines</figcaption></figure><h3 id="validating-deployment-progress"><strong>Validating Deployment Progress</strong></h3><p>To confirm the status of your Release Pipeline, you have to open the release and locate logs.</p><ul><li>Click on <strong>Releases-1 under</strong> the <strong>Releases: </strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-44.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1354" height="486" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-44.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/image-44.png 1000w, https://parveensingh.com/content/images/2023/08/image-44.png 1354w" sizes="(min-width: 720px) 720px"><figcaption>Release Pipeline Progress - Azure DevOps Pipelines</figcaption></figure><ul><li>As the release and stages box opens, click on <strong>Logs</strong> in the S<strong>tages</strong> column: </li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-45.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="1128" height="632" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-45.png 600w, https://parveensingh.com/content/images/size/w1000/2023/08/image-45.png 1000w, https://parveensingh.com/content/images/2023/08/image-45.png 1128w" sizes="(min-width: 720px) 720px"><figcaption>Release Pipeline Progress - Azure DevOps Pipelines</figcaption></figure><ul><li>This opens the deployment progress. You can monitor the progress of this release and ensure it deploys to App Service without any error: </li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/image-46.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="997" height="412" srcset="https://parveensingh.com/content/images/size/w600/2023/08/image-46.png 600w, https://parveensingh.com/content/images/2023/08/image-46.png 997w" sizes="(min-width: 720px) 720px"><figcaption>Release Pipeline Progress - Azure DevOps Pipelines</figcaption></figure><ul><li>On completion, navigate to App Service URL, and you will see a simple <strong>Hello world</strong> displayed:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/08/web.png" class="kg-image" alt="Containerized Pipelines with Azure DevOps: Building, Testing, and Deploying Docker Containers to Azure" loading="lazy" width="962" height="222" srcset="https://parveensingh.com/content/images/size/w600/2023/08/web.png 600w, https://parveensingh.com/content/images/2023/08/web.png 962w" sizes="(min-width: 720px) 720px"><figcaption>Successful Deployment to Azure App Service</figcaption></figure><h2 id="conclusion"><strong>Conclusion</strong></h2><p>Containerized pipelines with Azure DevOps offer a transformative and flexible approach to application deployment. By leveraging the benefits of containerization, developers can achieve improved portability, scalability, and consistency across environments.</p><p>This article provided a step-by-step demo of building a containerized pipeline for a Node.js application using Azure DevOps. From project setup to configuring CI/CD pipelines and monitoring deployment progress, it covered the essential components for successful deployments. Embracing containerized pipelines with Azure DevOps empowers development teams to streamline workflows and deliver high-quality applications efficiently.</p>]]></content:encoded></item><item><title><![CDATA[Building CI-CD Pipelines using Azure DevOps]]></title><description><![CDATA[This article introduces continuous integration, continuous delivery (CI/CD), and a step-by-step guide to building a pipeline using Azure DevOps. It is followed by the benefits of using Azure DevOps, the critical components of Azure, and the stages of a CI/CD pipeline.]]></description><link>https://parveensingh.com/building-ci-cd-pipelines-using-azure-devops/</link><guid isPermaLink="false">64a65d10a3149404f97d94aa</guid><category><![CDATA[DevOps]]></category><category><![CDATA[Azure]]></category><dc:creator><![CDATA[Parveen Singh]]></dc:creator><pubDate>Thu, 06 Jul 2023 20:20:20 GMT</pubDate><media:content url="https://parveensingh.com/content/images/2023/07/CICD-PipelineAzureDevOps.png" medium="image"/><content:encoded><![CDATA[<img src="https://parveensingh.com/content/images/2023/07/CICD-PipelineAzureDevOps.png" alt="Building CI-CD Pipelines using Azure DevOps"><p>As a Software Engineer, DevOps Engineer, or even a beginner in Tech space, you must have probably come across the term - Continous Integration and Continuous Delivery. It plays a vital role in the Agile software development process.</p><p>The lifecycle of an Agile development process is continuous and evolving. With each iteration, you plan, design, &#xA0;develop, test, and deliver pieces of your software. With Azure DevOps, you have an all-in-one solution that simplifies the entire process. This article explores a step-by-step guide to building your pipeline with Azure DevOps Pipeline.</p><!--kg-card-begin: markdown--><h2 id="table-of-content">Table Of Content</h2>
<ol>
<li><a href="#introduction-to-cicd-and-azure-devops">Introduction to CI/CD and Azure DevOps</a>
<ul>
<li><a href="#what-is-cicd-pipeline">What is CI/CD Pipeline</a></li>
<li><a href="#overview-of-azure-devops">Overview of Azure DevOps</a></li>
<li><a href="#benefits-of-using-azure-devops-for-cicd">Benefits of using Azure DevOps for CI/CD</a></li>
</ul>
</li>
<li><a href="#understanding-the-azure-devops-pipeline">Understanding the Azure DevOps Pipeline</a>
<ul>
<li><a href="#prerequisites">Prerequisites</a></li>
<li><a href="#overview-of-azure-pipeline">Overview of Azure Pipeline</a></li>
</ul>
</li>
<li><a href="#setting-up-your-first-cicd-pipeline-in-azure-devops">Setting up your first CI/CD pipeline in Azure DevOps</a>
<ul>
<li><a href="#set-up-the-app-service-web-app">Set up the App Service Web App</a></li>
<li><a href="#option-a-set-up-a-github-repository-for-your-project">Option A: Set Up a GitHub Repository for your project</a></li>
<li><a href="#option-b-set-up-azure-repo-for-your-project">Option B: Set Up Azure Repo for your project</a></li>
<li><a href="#setting-up-an-azure-devops-service-connection">Setting up an Azure DevOps Service Connection</a></li>
<li><a href="#creating-an-azure-devops-pipeline">Creating an Azure DevOps Pipeline</a></li>
<li><a href="#validating-devops-pipeline-auto-build-and-deploy">Validating DevOps Pipeline Auto-Build and Deploy</a></li>
</ul>
</li>
<li><a href="#conclusions">Conclusions</a></li>
</ol>
<!--kg-card-end: markdown--><h2 id="introduction-to-cicd-and-azure-devops"><strong>Introduction to CI/CD and Azure DevOps</strong></h2><p>Continuous Integration and Continuous Delivery (CI/CD) is the methodology or approach that encompasses both continuous integration and continuous deployment practices involved in the software development life cycle.</p><p>Continuous Integration (CI) is the practice of frequently merging changes on a developer&apos;s code to a shared codebase or repository. During &#xA0;CI, the piece of code is automatically compiled and tested. This helps identify integration issues quickly and ensures the code is functional, reliable, and stable before deployment.</p><p>Continuous Delivery (CD), on the other hand, is the practice of automatically deploying code into a production environment whenever changes pass integration and acceptance tests. This helps ensure delivery speed and efficiency.</p><p>You can also read some aspects of CI-CD in this blog.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://parveensingh.com/azure-app-service-continuous-integration-github-azure-repos/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Continuous Deployment for Azure App Service: GitHub and Azure Repos</div><div class="kg-bookmark-description">Part Two: Build your first CI-CD Pipeline with Azure App Service using GitHub and Azure&#xA0;Repos</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://parveensingh.com/favicon.png" alt="Building CI-CD Pipelines using Azure DevOps"><span class="kg-bookmark-author">Parveen Singh</span><span class="kg-bookmark-publisher">Parveen Singh</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://parveensingh.com/content/images/2021/07/AppService-CICD.jpg" alt="Building CI-CD Pipelines using Azure DevOps"></div></a></figure><h3 id="what-is-cicd-pipeline"><strong>What is CI/CD Pipeline</strong></h3><p>As already established, CI/CD mitigates all the hassles of integrating and delivering new features to an existing software application. Over the years, we have seen software applications like Facebook evolve by constantly adding new features like; the tagging of people in photos, video calling, groups, and lots more.</p><p>This set of automated processes and tools that enable developers to modify existing applications, create additional modules, build new versions, perform unit testing and analyze bottlenecks and possible points of failures, and eventually deploy or redeploy to production is known as CI/CD Pipeline.</p><p>While &#xA0;CI/CD is the process or methodology, CI/CD Pipeline is a toolchain of automated processes. In other words, CICD Pipeline is the specific implementation of a CI/CD methodology. A Pipeline is divided into stages, with each stage configured to perform a set of tasks. These stages are:</p><ul><li>Source Code or Version Control</li><li>Build</li><li>Test</li><li>Deploy</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/DevOps-Process.png" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="1024" height="489" srcset="https://parveensingh.com/content/images/size/w600/2023/07/DevOps-Process.png 600w, https://parveensingh.com/content/images/size/w1000/2023/07/DevOps-Process.png 1000w, https://parveensingh.com/content/images/2023/07/DevOps-Process.png 1024w" sizes="(min-width: 720px) 720px"><figcaption>CI/CD Pipeline Deployment Process</figcaption></figure><h3 id="overview-of-azure-devops"><strong>Overview of Azure DevOps</strong></h3><p>There are various tools for implementing CI/CD, such as Jenkins, CircleCi, Travis CI, Azure DevOps, AWS CodePipeline, and Spinnaker. This article will focus on building CI/CD with Azure DevOps. Alternatively, if you are preparing for the Azure DevOps Certification exam, you must check out this <a href="https://parveensingh.com/az-400-guide/">Study Guide for Azure DevOps AZ-400</a>.</p><p>Azure DevOps is a cloud-based service from Microsoft that provides a complete set of tools for application development. It offers a unified platform that integrates various capabilities, including source code management, continuous integration/continuous deployment (CI/CD), project management, testing, and collaboration capacities. It is platform-independent and also allows integration with other tools, as well as none Microsoft environments.</p><p><strong>Key Component of Azure:</strong></p><ul><li>Azure Boards: This is a project management board for planning and process tracking and offers features like customizable Kanban boards and work-item tracking</li><li>Azure Repo: This is a version control system for source code management. It supports both centralized version control (TFVC) and distributed version control (Git), allowing developers to collaborate on code, track changes, and manage branches effectively.</li><li>Azure Pipeline: This is the CI/CD hub. It allows you to create, build and release pipelines and integrates with source code from different platforms such as Github, Azure Repos, Bitbucket, and even On-premises Git Server.</li><li>Azure Test Plans: It facilitates the testing of applications by providing a comprehensive testing framework</li><li>Azure Artifacts: This feature helps manage and host artifacts such as NuGet, npm, and Maven packages. It enables teams to create, publish, and share packages, ensuring the consistency and reliability of dependencies throughout the development process.</li></ul><h3 id="benefits-of-using-azure-devops-for-cicd"><strong>Benefits of using Azure DevOps for CI/CD</strong></h3><p>Here are reasons why you should consider Azure DevOps for your next project</p><ul><li>Platform Independent: It allows deployment to other platforms (Windows, Linux, or Mac) and also other cloud providers</li><li>Integration and Extensibility: Azure DevOps integrates well with other Microsoft products, such as Azure cloud services, Visual Studio IDE, and Microsoft Teams. It also supports integration with third-party tools, enabling teams to leverage their preferred development tools, frameworks, and services.</li><li>Azure DevOps supports a wide range of programming languages and frameworks, including .NET, Java, JavaScript (Node.js), C/C++, Ruby, Swift, Go, TypeScript, PHP, and Python.</li><li>It accommodates teams and projects of all sizes and complexity and supports seamless scalability.</li><li>It supports other development methodologies (Agile, Scrum, or custom processes ), allowing your team to work with their style.</li><li>Provide beginner-friendly and intuitive features. This includes pre-built templates for common development scenarios.</li></ul><h2 id="understanding-the-azure-devops-pipeline"><strong>Understanding the Azure DevOps Pipeline</strong></h2><p>This is the CI/CD feature that enables teams to automate the building, testing, and deployment of applications across various platforms and environments. It supports building and deploying applications on different cloud platforms, on-premises servers, or hybrid environments. To enhance comprehension, we will establish a straightforward pipeline that automates the building and deployment process of a basic Flask application to Azure App Service.</p><h3 id="prerequisites"><strong>Prerequisites</strong></h3><p>Before continuing reading, please ensure that you have the following tools and service access to follow the hands-on implementation.</p><ul><li>Visual Studio Code or any editor of your choice</li><li><strong><a href="https://github.com/">Github account</a></strong> (Signup for free )</li><li><strong><a href="https://portal.azure.com/">Azure Account</a></strong> ( Get the free $200 on sign-up)</li><li>Sign up using the same Azure account on <strong><a href="http://dev.azure.com/">Azure DevOps</a></strong></li></ul><h3 id="overview-of-azure-pipeline"><strong>Overview of Azure Pipeline</strong></h3><ul><li>Navigate to <em><a href="http://dev.azure.com/">dev.azure.com</a>,</em> and you will be taken to the screen you see below:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-2---Sign-up.png" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="1600" height="617" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-2---Sign-up.png 600w, https://parveensingh.com/content/images/size/w1000/2023/07/Image-2---Sign-up.png 1000w, https://parveensingh.com/content/images/2023/07/Image-2---Sign-up.png 1600w" sizes="(min-width: 720px) 720px"><figcaption>Azure DevOps Landing Page</figcaption></figure><ul><li>Click on the <strong>Start Free with Github</strong> button. If you log in for the first time, you will be redirected to sign up. You should sign up with the same email used for the GitHub account.</li><li>Click <strong>New Organization</strong> to create an organization if this is the first time; otherwise, use an existing Organisation.</li><li>On the New Organization dialogue box, enter a <em>unique name</em> for your organization and <em>choose the region</em> where you would like your project to be hosted, and Click <strong>Continue.</strong></li></ul><figure class="kg-card kg-image-card kg-width-wide kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-3---Create-Org-1.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="677" height="913" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-3---Create-Org-1.PNG 600w, https://parveensingh.com/content/images/2023/07/Image-3---Create-Org-1.PNG 677w"><figcaption>Azure DevOps Sign-in Prompt</figcaption></figure><ul><li>On successful organization creation, to confirm you are with an organization, your URL will look as such - &#xA0;<a href="http://dev.azure.com/">dev.azure.com/</a>&lt;your organization name&gt;.</li><li>For a new organization, your next view is the enter details to create a new project, as shown below.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-3--new-organization-dashboard.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="1754" height="976" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-3--new-organization-dashboard.PNG 600w, https://parveensingh.com/content/images/size/w1000/2023/07/Image-3--new-organization-dashboard.PNG 1000w, https://parveensingh.com/content/images/size/w1600/2023/07/Image-3--new-organization-dashboard.PNG 1600w, https://parveensingh.com/content/images/2023/07/Image-3--new-organization-dashboard.PNG 1754w" sizes="(min-width: 720px) 720px"><figcaption>Azure DevOps Project Landing Page</figcaption></figure><ul><li>Alternatively, Click on <strong>New Project</strong> Button to &#xA0;Create a Project.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-3b-existing-org-dashbord.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="962" height="578" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-3b-existing-org-dashbord.PNG 600w, https://parveensingh.com/content/images/2023/07/Image-3b-existing-org-dashbord.PNG 962w" sizes="(min-width: 720px) 720px"><figcaption>Azure DevOps Creating New Project</figcaption></figure><ul><li>Enter details for your project and click on <em><strong>Create:</strong></em></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-4---create-project.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="708" height="781" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-4---create-project.PNG 600w, https://parveensingh.com/content/images/2023/07/Image-4---create-project.PNG 708w"><figcaption>Azure DevOps Naming a Project</figcaption></figure><ul><li>The screen below shows a new project dashboard. Navigate to <strong>Pipelines</strong> located at the left navigation:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-5---Pipelines.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="1696" height="825" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-5---Pipelines.PNG 600w, https://parveensingh.com/content/images/size/w1000/2023/07/Image-5---Pipelines.PNG 1000w, https://parveensingh.com/content/images/size/w1600/2023/07/Image-5---Pipelines.PNG 1600w, https://parveensingh.com/content/images/2023/07/Image-5---Pipelines.PNG 1696w" sizes="(min-width: 720px) 720px"><figcaption>Azure DevOps Project Dashboard</figcaption></figure><p>The pipeline tab consists of 6 sub-groups. This subgroup provides a comprehensive framework for managing and automating the development, testing, and deployment throughout the software delivery lifecycle.</p><ol><li>Pipelines - Pipelines is core component that defines and manages the workflow of building, testing, and deploying applications. They consist of a series of stages, jobs, and tasks. Pipelines can be configured using YAML, the visual designer, and pre-built templates.</li><li>Environments - this is where you configure your target resource ( Kubernetes cluster or a Virtual machine) and deployment environment (development, staging, or productions).</li><li>Releases - A release defines the pipeline, artifacts, and environments associated with deploying an application. It provides a way to manage and track the release process, including approvals, deployment gates, and release history.</li><li>Library- This is a repository where you can store and manage reusable resources and variables. It allows you to securely store and share credentials, connection strings, or other sensitive information used in your pipelines and releases.</li><li>Task Groups - centrally manage common build and deployment steps for your applications. It enables the creation of reusable sets of tasks that can be shared across multiple pipelines. They allow you to encapsulate a sequence of tasks into a single entity, making it easier to manage and maintain consistent tasks across different pipelines.</li><li>Deployment Groups - represent a collection of target machines or virtual machines (VMs) where an application or software needs to be deployed.</li></ol><h2 id="setting-up-your-first-cicd-pipeline-in-azure-devops"><strong>Setting up your first CI/CD pipeline in Azure DevOps</strong></h2><p>This article will be centred on building a simple web app, using GitHub as a shared repository and Azure App Service to host our App. We will explore Azure Pipelines for CI/CD. &#xA0;Our primary aim is to have our project on our PC such that each commit to GitHub triggers our pipeline to build and deploy to Azure App Service.</p><p>Note: Basic knowledge of Git is recommended</p><h3 id="set-up-the-app-service-web-app"><strong>Set up the App Service Web App</strong></h3><ul><li>Open <em><strong><a href="http://portal.azure.com">portal.azure.com</a></strong></em> on your browser, log in to Azure and Search for <em>Web App.</em></li><li>Use the information below to create your web app instance along with an app service plan:</li><li>Subscription <em>- Select Subscription</em></li><li>Resource group <em>- Enter resource Group or use the default,</em></li><li>Name - <em>Choose a Unique Name</em></li><li>Publish - <em>Choose Code</em></li><li>Operating system - <em>Linux</em></li><li>Run Stack - <em>Python</em></li><li>Pricing Plan - <em>Free F1</em></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-6---Web-App-on-Azure.png" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="599" height="860"><figcaption>Azure Web App Deployment</figcaption></figure><p>Click on <strong>Review and Create</strong> and finish through the deployment. To learn more about App Service, visit <a href="https://parveensingh.com/tag/app-service/">Official Documentation</a><em><strong>.</strong></em></p><h3 id="option-a-set-up-a-github-repository-for-your-project">Option A: <strong>Set Up a GitHub Repository for your project</strong></h3><p>We will connect the Azure DevOps platform to use the Github repo in this section. Step 2B will use Azure Repo, which is a repository within Azure DevOps.</p><ul><li>Login to <em><strong><a href="http://github.com/new">github.com/new</a></strong></em> and create an empty repository for your project. Enter a <em>Name</em> for the repository and click <strong>Create Repository.</strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-6b---New-github-repository.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="1014" height="855" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-6b---New-github-repository.PNG 600w, https://parveensingh.com/content/images/size/w1000/2023/07/Image-6b---New-github-repository.PNG 1000w, https://parveensingh.com/content/images/2023/07/Image-6b---New-github-repository.PNG 1014w" sizes="(min-width: 720px) 720px"><figcaption>Creating a GitHub Repository</figcaption></figure><ul><li>On your PC, create a project folder, and open the folder with VSCode. You can do this directly from the <strong>command prompt</strong>, as shown below.</li><li>Open <strong>Command Prompt</strong> and enter the following script.</li></ul><pre><code class="language-bash">#create a folder called Projects
C:\\Users\\USER\\Desktop&gt;mkdir projects

#navigate into the projects folder
C:\\Users\\USER\\Desktop&gt;cd projects

#Open the project folder with VScode
C:\\Users\\USER\\Desktop\\project&gt; code .
</code></pre><ul><li>Clone this <a href="https://github.com/microsoft/python-sample-vscode-flask-tutorial.git">Simple Python Flask App</a> to the project folder creates on your PC using the following command in your terminal:</li></ul><pre><code class="language-bash">git clone &lt;https://github.com/microsoft/python-sample-vscode-flask-tutorial.git&gt;
</code></pre><figure class="kg-card kg-image-card"><img src="https://parveensingh.com/content/images/2023/07/Image-7-Git-Clone.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="997" height="270" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-7-Git-Clone.PNG 600w, https://parveensingh.com/content/images/2023/07/Image-7-Git-Clone.PNG 997w" sizes="(min-width: 720px) 720px"></figure><ul><li>Your source should look like this if you cloned the same project.</li></ul><figure class="kg-card kg-image-card"><img src="https://parveensingh.com/content/images/2023/07/7b---files-cloned-2.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="238" height="306"></figure><ul><li>On Github, follow the first step instruction to push this project on your PC to the new repository created. Once completed, the repository will be populated with the same project file on your local. All changes committed to this repo will be reflected in your GitHub account.</li></ul><pre><code class="language-bash">cd &lt;python-sample-vscode-flask-tutorial or the name of projectfile&gt;
git remote remove origin
git remote add origin &lt;https://github.com/&gt;&lt;username&gt;/&lt;new-repo-url&gt;.git
git branch -M master
git push -u origin master
</code></pre><h3 id="option-b-set-up-azure-repo-for-your-project">Option B: <strong>Set Up Azure Repo for your project</strong></h3><p>Instead of Github, we can also step our project using Azure Repo. This also provides standard version control features to manage and track changes in your source code.</p><ul><li>Navigate to <strong><a href="http://dev.azure.com">dev.azure.com</a>,</strong> click on <strong>Repos</strong>, select <strong>Files </strong>and click <strong>Import:</strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-7B---Azure-Repo-Dashboard.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="1432" height="739" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-7B---Azure-Repo-Dashboard.PNG 600w, https://parveensingh.com/content/images/size/w1000/2023/07/Image-7B---Azure-Repo-Dashboard.PNG 1000w, https://parveensingh.com/content/images/2023/07/Image-7B---Azure-Repo-Dashboard.PNG 1432w" sizes="(min-width: 720px) 720px"><figcaption>Azure DevOps Fresh Repo Page</figcaption></figure><ul><li>Enter the Sample Project <a href="https://github.com/microsoft/python-sample-vscode-flask-tutorial.git"><em>repository link</em></a> in the dialogue box and click &#xA0;<strong>Import</strong>. This clones the project file to Azure Repos as your project file.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-7B---import-repository.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="526" height="412"><figcaption>Azure DevOps Import Repo Prompt</figcaption></figure><ul><li>Once the import finishes, you will clone this repo to your PC using the VSCode editor by clicking on the <strong>Clone </strong>button:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-7B---Clone-to-PC-1.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="1559" height="585" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-7B---Clone-to-PC-1.PNG 600w, https://parveensingh.com/content/images/size/w1000/2023/07/Image-7B---Clone-to-PC-1.PNG 1000w, https://parveensingh.com/content/images/2023/07/Image-7B---Clone-to-PC-1.PNG 1559w" sizes="(min-width: 720px) 720px"><figcaption>Azure DevOps Repo Files</figcaption></figure><ul><li>On the <strong>Clone Repository</strong> dialogue box, click the <strong>Clone in VSCode</strong> button:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-7B-Clone-in-VsCode.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="522" height="553"><figcaption>Azure DevOps Clone Repo Prompt</figcaption></figure><ul><li>This will prompt you to <strong>Open the Visual Studio Code</strong> application on your PC. Allow the Prompts and Select a folder from your file explorer opened to open the VS Code:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-7B-Open-VsCode.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="853" height="359" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-7B-Open-VsCode.PNG 600w, https://parveensingh.com/content/images/2023/07/Image-7B-Open-VsCode.PNG 853w" sizes="(min-width: 720px) 720px"><figcaption>Azure DevOps Open with VS Code Prompt</figcaption></figure><ul><li>If you are prompted to authenticate to <strong>Git Credential Manager</strong> and sign in using the account used for Azure DevOps platform access:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-7B---Authenticate-Git.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="842" height="758" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-7B---Authenticate-Git.PNG 600w, https://parveensingh.com/content/images/2023/07/Image-7B---Authenticate-Git.PNG 842w" sizes="(min-width: 720px) 720px"><figcaption>Azure DevOps Repo Authentication Prompt</figcaption></figure><ul><li>Once authenticated, your sample project clone will be open in VS Code, just as it is in Step 2A above. Changes and commits on this project will be reflected in your Azure Repo.</li></ul><figure class="kg-card kg-image-card"><img src="https://parveensingh.com/content/images/2023/07/7b---files-cloned-2.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="238" height="306"></figure><h3 id="setting-up-an-azure-devops-service-connection">Setting up an Azure DevOps Service Connection</h3><p>Before creating your first pipeline, you must create a service connection to Azure. Creating a service connection provides a secure way to establish a connection between your pipeline and external services, in this case, Azure Subscription.</p><p>By adding a service connection, your pipeline can securely authenticate and authorize itself to access these external services during the pipeline execution. This allows the pipeline to interact with resources in Azure or other connected services, retrieve artifacts, deploy applications, and perform other operations as required.</p><ul><li>Click On the <strong>Project Setting </strong>on the far left bottom inside your DevOps project<strong>:</strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-6C---create-service-connection-1.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="464" height="839"><figcaption>Azure DevOps Project Side Panel</figcaption></figure><ul><li>Navigate to the <strong>Pipelines</strong> session and click on the <strong>Service Connection.</strong> Click <strong>Create service connection</strong> to add a new connection:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-6C---Create-service-connection-2.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="1501" height="803" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-6C---Create-service-connection-2.PNG 600w, https://parveensingh.com/content/images/size/w1000/2023/07/Image-6C---Create-service-connection-2.PNG 1000w, https://parveensingh.com/content/images/2023/07/Image-6C---Create-service-connection-2.PNG 1501w" sizes="(min-width: 720px) 720px"><figcaption>Azure DevOps Service Connection Dashboard</figcaption></figure><ul><li>On the <strong>New Service Connection</strong> window, select the <strong>Azure Resource Manager</strong> &#xA0;and click <strong>Next:</strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-8-Create-Service-Connection-1A.png" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="688" height="811" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-8-Create-Service-Connection-1A.png 600w, https://parveensingh.com/content/images/2023/07/Image-8-Create-Service-Connection-1A.png 688w"><figcaption>Azure DevOps New Connection Page</figcaption></figure><ul><li>Select <strong>Service principal (Automatic)</strong> and click <strong>Next:</strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-8---Create-Service-Connection1B.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="696" height="747" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-8---Create-Service-Connection1B.PNG 600w, https://parveensingh.com/content/images/2023/07/Image-8---Create-Service-Connection1B.PNG 696w"><figcaption>Azure DevOps Connection Authentication Page&#xA0;</figcaption></figure><ul><li>On your next window, fill in the connection information and click Save:<br><br>- <strong>Subscription:</strong> Choose the subscription of your choice. You may be redirected to authenticate to Azure; ensure to authenticate so Azure DevOps can access your Azure resource needed on the next screen.<br>- <strong>Resource group</strong>: Choose the resource group created earlier for the web app instance.<br>- <strong>Service connection name</strong>: Enter any <strong>preferred name <strong>for the &#xA0;Service Connection name</strong></strong><br>- <strong>Security</strong>: Check the box for <strong>Grant Access Permission to all pipelines</strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-8--Create-Service-Connection-2-1.png" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="564" height="826"><figcaption>Azure DevOps Service Connection Information Prompt</figcaption></figure><ul><li>Once the connection is created, it will appear under the <strong>Service connections</strong> window:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/image-6D---service-connection-completed.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="1566" height="275" srcset="https://parveensingh.com/content/images/size/w600/2023/07/image-6D---service-connection-completed.PNG 600w, https://parveensingh.com/content/images/size/w1000/2023/07/image-6D---service-connection-completed.PNG 1000w, https://parveensingh.com/content/images/2023/07/image-6D---service-connection-completed.PNG 1566w" sizes="(min-width: 720px) 720px"><figcaption>Azure DevOps Service Connection List</figcaption></figure><h3 id="creating-an-azure-devops-pipeline">Creating an Azure DevOps Pipeline</h3><ul><li>Navigate to your project dashboard, and click on <strong>Pipelines</strong> followed by <strong>Create Pipeline:</strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-5---Pipelines-1.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="1696" height="825" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-5---Pipelines-1.PNG 600w, https://parveensingh.com/content/images/size/w1000/2023/07/Image-5---Pipelines-1.PNG 1000w, https://parveensingh.com/content/images/size/w1600/2023/07/Image-5---Pipelines-1.PNG 1600w, https://parveensingh.com/content/images/2023/07/Image-5---Pipelines-1.PNG 1696w" sizes="(min-width: 720px) 720px"><figcaption>Azure DevOps Project Dashboard</figcaption></figure><ul><li>On the <strong>Where is your code?</strong> window, select either <strong>GitHub</strong> (Option A) or <strong>Azure Repo Git</strong> (Option B)<strong>.</strong> Either Option takes you to the same page to select your Repo:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-9---Select-your-Code.png" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="1025" height="831" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-9---Select-your-Code.png 600w, https://parveensingh.com/content/images/size/w1000/2023/07/Image-9---Select-your-Code.png 1000w, https://parveensingh.com/content/images/2023/07/Image-9---Select-your-Code.png 1025w" sizes="(min-width: 720px) 720px"><figcaption>Azure DevOps Pipeline Connection</figcaption></figure><ul><li>On the <strong>Select the Project Repository</strong> page, choose the <strong>simpleflaskapp</strong> repo:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-10---Select-Repository.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="911" height="511" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-10---Select-Repository.PNG 600w, https://parveensingh.com/content/images/2023/07/Image-10---Select-Repository.PNG 911w" sizes="(min-width: 720px) 720px"><figcaption>Azure DevOps Pipeline Repo Selection</figcaption></figure><ul><li>On the <strong>Configure your pipeline</strong> page, select <strong>Python to Linux Web App on Azure</strong>. This uses the Azure Pipeline template to deploy your source code to Linux App Service. Select <strong>Azure Subscription</strong> configured for the service connection and click <strong>Continue:</strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-11---Configure-Pipelines.png" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="1405" height="827" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-11---Configure-Pipelines.png 600w, https://parveensingh.com/content/images/size/w1000/2023/07/Image-11---Configure-Pipelines.png 1000w, https://parveensingh.com/content/images/2023/07/Image-11---Configure-Pipelines.png 1405w" sizes="(min-width: 720px) 720px"><figcaption>Azure DevOps Pipeline Build Configuration</figcaption></figure><ul><li>You may be redirected to authenticate to Azure, enter your Azure account credential<em>,</em> and continue<strong>.</strong></li><li>On the next screen, select your <strong>Web App</strong> created in Step 1 and click on <strong>Validate and configure:</strong></li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-11---select-webapp.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="524" height="290"><figcaption>Azure DevOps Pipeline Connection to Web App</figcaption></figure><ul><li>Azure Pipelines automatically opens the default template for the Python to Linux app deployment. However, this can be customized to suit your needs. Proceed with the <strong>Save and Run</strong> button for now:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-11---Review-Pipeline.PNG" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="1598" height="812" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-11---Review-Pipeline.PNG 600w, https://parveensingh.com/content/images/size/w1000/2023/07/Image-11---Review-Pipeline.PNG 1000w, https://parveensingh.com/content/images/2023/07/Image-11---Review-Pipeline.PNG 1598w" sizes="(min-width: 720px) 720px"><figcaption>Azure DevOps Pipeline YAML File</figcaption></figure><ul><li>This last step automatically runs your pipeline and deploys to App Service. On completion, jobs will be checked green, as shown below.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-12---Complete-Job.png" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="1347" height="366" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-12---Complete-Job.png 600w, https://parveensingh.com/content/images/size/w1000/2023/07/Image-12---Complete-Job.png 1000w, https://parveensingh.com/content/images/2023/07/Image-12---Complete-Job.png 1347w" sizes="(min-width: 720px) 720px"><figcaption>Azure DevOps Pipeline Build and Deploy Phase</figcaption></figure><ul><li>Open the deploy job and get your web app link your link will look like &lt;webappname&gt;.azurewebsites.net.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-13---Deployed-Job-View.png" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="1342" height="778" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-13---Deployed-Job-View.png 600w, https://parveensingh.com/content/images/size/w1000/2023/07/Image-13---Deployed-Job-View.png 1000w, https://parveensingh.com/content/images/2023/07/Image-13---Deployed-Job-View.png 1342w" sizes="(min-width: 720px) 720px"><figcaption>Azure DevOps Pipeline Build Details</figcaption></figure><ul><li>Open the URL in the browser, and your web app should look like this</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-14---Website-View-1.png" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="1240" height="411" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-14---Website-View-1.png 600w, https://parveensingh.com/content/images/size/w1000/2023/07/Image-14---Website-View-1.png 1000w, https://parveensingh.com/content/images/2023/07/Image-14---Website-View-1.png 1240w" sizes="(min-width: 720px) 720px"><figcaption>Deployed Web App Front End</figcaption></figure><h3 id="validating-devops-pipeline-auto-build-and-deploy">Validating DevOps <strong>Pipeline Auto-Build and Deploy</strong></h3><p>Currently, when changes are made on your project folder on VS Code and pushed to GitHub or Azure Repo, this will trigger a build on the pipeline.</p><p>Since you have configured the pipeline to build and deploy to Azure Webapp, the same changes will reflect on Azure Webapp once the build is complete.</p><ul><li>Navigate to the <strong>Hello_App folder</strong> within the repository folder inside VS Code, and click on the <strong>home.html</strong> file.</li><li>Enter - <em>Home Page for Azure DevOps pipeline overview</em> and save the changes.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-15---changes-to-Source-code.png" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="1492" height="854" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-15---changes-to-Source-code.png 600w, https://parveensingh.com/content/images/size/w1000/2023/07/Image-15---changes-to-Source-code.png 1000w, https://parveensingh.com/content/images/2023/07/Image-15---changes-to-Source-code.png 1492w" sizes="(min-width: 720px) 720px"><figcaption>VS Code with Project Files Opened</figcaption></figure><ul><li>Open the <strong>Terminal</strong> and commit changes using the commands below:</li></ul><pre><code class="language-bash">git add .
git commit  -m &#x201C;Home File Changes&#x201D;
git pull origin master
git push -u &lt;project nickname&gt; master
</code></pre><p>This commit pushed to GitHub or Azure DevOps will trigger the pipeline to build and deploy this change to the website.</p><ul><li>View the website again and validate the changes.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/07/Image-16---Website-View-2.png" class="kg-image" alt="Building CI-CD Pipelines using Azure DevOps" loading="lazy" width="1007" height="450" srcset="https://parveensingh.com/content/images/size/w600/2023/07/Image-16---Website-View-2.png 600w, https://parveensingh.com/content/images/size/w1000/2023/07/Image-16---Website-View-2.png 1000w, https://parveensingh.com/content/images/2023/07/Image-16---Website-View-2.png 1007w" sizes="(min-width: 720px) 720px"><figcaption>Web Front End of Python Flask App</figcaption></figure><h2 id="conclusions">Conclusions</h2><p>With Azure DevOps, you set up CI/CD pipeline that automates builds and releases to Azure App service. You could also seamlessly make changes from your PC, commit and push the code, which will automatically trigger the pipeline along with building and redeploying the application. <br></p><p>By adopting Azure DevOps for building CI/CD pipelines, organizations can enhance their software development practice. Azure DevOps provides a comprehensive set of tools and services, including source control, continuous integration, and continuous delivery, along with seamless integration with various platforms and technologies.</p><p><br></p>]]></content:encoded></item><item><title><![CDATA[Preparing for the Azure Virtual Desktop Specialty Exam: AZ-140 - Resources and Recommendations]]></title><description><![CDATA[Get Ahead With Your Preparation For Azure Virtual Desktop Specialty AZ-140 With This Study Guide]]></description><link>https://parveensingh.com/azure-virtual-desktop-specialty-az-140-study-guide/</link><guid isPermaLink="false">64792d27a3149404f97d940b</guid><category><![CDATA[Exams Study Guides]]></category><dc:creator><![CDATA[Parveen Singh]]></dc:creator><pubDate>Fri, 02 Jun 2023 02:53:23 GMT</pubDate><media:content url="https://parveensingh.com/content/images/2023/06/AzureVirtualDesktop-ExamGuide.png" medium="image"/><content:encoded><![CDATA[<img src="https://parveensingh.com/content/images/2023/06/AzureVirtualDesktop-ExamGuide.png" alt="Preparing for the Azure Virtual Desktop Specialty Exam: AZ-140 - Resources and Recommendations"><p>The <strong>Configuring and Operating Microsoft Azure Virtual Desktop: AZ-140</strong> exam is an expert-level exam in the Azure domain that is highly focused on the Virtual Desktop and Remote Application aspect of Azure AVD service and enables you to achieve the <strong><strong>Azure Virtual Desktop Specialty</strong></strong> certification. However, the exam outline covers many essential topics that you are expected to know in your day-to-day life regardless of everything.</p><p>In this article, you will find the resources and recommendations if you are preparing for the <strong>Azure Virtual Desktop Specialty</strong> exam soon. This post is super long, so use the <strong>Table of Content</strong> to find the appropriate section you are interested in and bookmark it for later use.</p><p><em><strong>Check out the Study Guides for other exams that might be of interest to you.</strong></em></p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://parveensingh.com/ms-102-microsoft-365-administrator-expert-exam-study-guide/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Microsoft 365 Administrator Expert (MS-102) Exam Study Guide</div><div class="kg-bookmark-description">Work Towards Your Microsoft 365 Administrator Expert Certification With Confidence</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://parveensingh.com/favicon.png" alt="Preparing for the Azure Virtual Desktop Specialty Exam: AZ-140 - Resources and Recommendations"><span class="kg-bookmark-author">Parveen Singh</span><span class="kg-bookmark-publisher">Parveen Singh</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://parveensingh.com/content/images/2023/05/MicrosoftAdminExpert-ExamGuide-1.png" alt="Preparing for the Azure Virtual Desktop Specialty Exam: AZ-140 - Resources and Recommendations"></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://parveensingh.com/az-400-guide/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Azure DevOps Certification: AZ-400 Study Guide</div><div class="kg-bookmark-description">A Comprehensive Guide to Azure DevOps Expert Certification Exam</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://parveensingh.com/favicon.png" alt="Preparing for the Azure Virtual Desktop Specialty Exam: AZ-140 - Resources and Recommendations"><span class="kg-bookmark-author">Parveen Singh</span><span class="kg-bookmark-publisher">Parveen Singh</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://parveensingh.com/content/images/2021/06/AzureDevOps-Exam.jpg" alt="Preparing for the Azure Virtual Desktop Specialty Exam: AZ-140 - Resources and Recommendations"></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://parveensingh.com/how-to-pass-az-204-in-30-days/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">How to pass AZ-204 in 30 Days!</div><div class="kg-bookmark-description">A simple guide on how to crack Azure Developer Exam (AZ-204) like a Pro.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://parveensingh.com/favicon.png" alt="Preparing for the Azure Virtual Desktop Specialty Exam: AZ-140 - Resources and Recommendations"><span class="kg-bookmark-author">Parveen Singh</span><span class="kg-bookmark-publisher">Parveen Singh</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://parveensingh.com/content/images/2021/07/AzureDeveloper-ExamGuide-1.jpg" alt="Preparing for the Azure Virtual Desktop Specialty Exam: AZ-140 - Resources and Recommendations"></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://parveensingh.com/az-500-study-guide/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Azure Security Engineer: AZ-500 Study Guide</div><div class="kg-bookmark-description">A Comprehensive Guide to Azure Security Engineer Certification Exam</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://parveensingh.com/favicon.png" alt="Preparing for the Azure Virtual Desktop Specialty Exam: AZ-140 - Resources and Recommendations"><span class="kg-bookmark-author">Parveen Singh</span><span class="kg-bookmark-publisher">Parveen Singh</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://parveensingh.com/content/images/2021/07/AzureSecurity-ExamGuide.jpg" alt="Preparing for the Azure Virtual Desktop Specialty Exam: AZ-140 - Resources and Recommendations"></div></a></figure><!--kg-card-begin: markdown--><h2 id="table-of-content">Table of Content</h2>
<ol>
<li><a href="#azure-virtual-desktop-specialty-az-140-certification-overview">Azure Virtual Desktop Specialty (AZ-140) Certification Overview</a></li>
<li><a href="#exam-prerequisites">Exam Prerequisites</a></li>
<li><a href="#who-is-this-az-140-exam-for">Who is this AZ-140 Exam for?</a></li>
<li><a href="#what-to-expect-in-the-exam">What to Expect in the Exam?</a></li>
<li><a href="#exam-preparation-recommendations">Exam Preparation Recommendations</a></li>
<li><a href="#exam-day-tips">Exam Day Tips</a></li>
<li><a href="#resources">Resources</a>
<ul>
<li><a href="#microsoft-learn-modules">Microsoft Learn Modules</a></li>
<li><a href="#cloud-academy-az-140-learning-path">Cloud Academy AZ-140 Learning Path</a></li>
<li><a href="#whizlabs-exam-prep">WhizLabs Exam Prep</a></li>
<li><a href="#visual-studio-dev-essentials">Visual Studio Dev Essentials</a></li>
<li><a href="#30-days-to-learn-it">30 Days to Learn It</a></li>
</ul>
</li>
<li><a href="#exam-outline-microsoft-learn-docs-reference-links">Exam Outline: Microsoft Learn + Docs Reference Links</a>
<ul>
<li><a href="#plan-and-implement-an-azure-virtual-desktop-infrastructure-40%E2%80%9345">Plan and Implement an Azure Virtual Desktop Infrastructure</a></li>
<li><a href="#plan-and-implement-identity-and-security-15%E2%80%9320">Plan and implement identity and security (15&#x2013;20%)</a></li>
<li><a href="#plan-and-implement-user-environments-and-apps-20%E2%80%9325">Plan and implement user environments and apps (20&#x2013;25%)</a></li>
<li><a href="#monitor-and-maintain-an-azure-virtual-desktop-infrastructure-10%E2%80%9315">Monitor and maintain an Azure Virtual Desktop Infrastructure (10&#x2013;15%)</a></li>
</ul>
</li>
<li><a href="#conclusion">Conclusion</a></li>
</ol>
<!--kg-card-end: markdown--><h2 id="azure-virtual-desktop-specialty-az-140-certification-overview">Azure Virtual Desktop Specialty (AZ-140) Certification Overview</h2><p><strong><strong>Azure Virtual Desktop</strong></strong> <strong>Specialty (AZ-140)</strong> is an expert-level exam that validates the skills and expertise of subject matter experts working with remote desktop workload management, design, implementation, security, endpoint and applications in Azure Virtual Desktop Experience.</p><p>The exam aims to validate that you understand how to implement and administer the remote desktop environment in cloud and hybrid environments using Azure AVD Service. It also tests your skills in virtualization, networking, identity, storage and resiliency. You should be familiar with Azure PowerShell, Azure Portal Template deployment and scripting in general as well.</p><h2 id="exam-prerequisites">Exam Prerequisites</h2><p>There is no prerequisite for Azure Virtual Desktop Specialty Certificate, however, it&#x2019;s good to have the knowledge of basics Azure resources and preferably 1-2 Years of experience working with Azure services to understand the foundation of the Azure Virtual Desktop service. The following exams can be beneficial for you before you proceed to attempt the AZ-140 exam:</p><ul><li><a href="https://learn.microsoft.com/en-us/certifications/azure-administrator/?WT.mc_id=parveensingh.com">AZ-104: Azure Administrator Associate</a></li><li><a href="https://learn.microsoft.com/en-us/certifications/modern-desktop/?WT.mc_id=parveensingh.com">MS-102: Endpoint Administrator</a></li><li><a href="https://learn.microsoft.com/en-us/certifications/azure-network-engineer-associate/?WT.mc_id=parveensingh.com">AZ-700: Azure Network Engineer Associate</a></li><li><a href="https://learn.microsoft.com/en-us/certifications/azure-solutions-architect/?WT.mc_id=parveensingh.com">AZ-305: Azure Solutions Architect Expert</a></li></ul><p>It&apos;s good to know the following concepts before going into the exam:</p><ul><li><a href="https://parveensingh.com/get-started-with-azure-cloud/">Basic understanding</a> of TCP/IP, DNS, Firewall, and Routing</li><li>Familiar with <a href="https://parveensingh.com/tag/powershell/">PowerShell</a> and <a href="https://parveensingh.com/azure-cli-basics/">Azure CLI</a> Commands to do automated deployments</li><li>Understanding security and infrastructure components of Azure VM services</li></ul><h2 id="who-is-this-az-140-exam-for">Who is this AZ-140 Exam for?</h2><p>On a high-level note, take the exam:</p><ul><li>If you are aiming to get a specialty cert in Azure and learn more about Remote Desktop services in the Azure cloud.</li><li>If you are looking to learn more about Networking, Infrastructure, and Security in Azure cloud services.</li><li>If you are working on Azure Administration, App development and looking for a chance to grow and learn more about Azure services.</li><li>If you are looking to build your network skills and learn to use multiple networking services in the cloud effectively.</li></ul><h2 id="what-to-expect-in-the-exam">What to Expect in the Exam?</h2><p>The Azure Virtual Desktop Exam is 150 minutes, including about 30 minutes for the surveys and the assessments, which gives you roughly 120 minutes for the exam. I did find it a little challenging to finish the exam within the time frame. You can expect around 50-60 questions in the exam.</p><blockquote>One of the most interesting features I&apos;ve seen in the recent Microsoft Exam is the &quot;<strong>Break</strong>&quot; feature. You can now take breaks during the exam if you need to pause for any moment. However, the exam counter does not stop, and when you return back from the break, you cannot attempt the questions you&apos;ve already seen before going to the break. So keep that in mind before taking the break. I&apos;d recommend not looking at all the questions in one go just in case you do decide to take a break later in the exam.</blockquote><p>The structure of the exam can vary and range between:</p><ul><li>Case study with multiple questions including two choices and drag-and-drop items.</li><li>Single-choice questions may not be skipped or reviewed. You only get to answer these questions ONCE.</li><li>Single-choice questions (True/False or Yes/No)</li><li>Multiple-choice questions</li></ul><p>Since it&apos;s an expert-level exam, it is relatively challenging as it covers many different topics and best practices. Therefore, I recommend you have at least 1-2 years of hands-on experience with Azure Services and Management in general before you consider booking the exam.</p><h2 id="exam-preparation-recommendations">Exam Preparation Recommendations</h2><p>There&apos;s definitely a lot to cover in this exam, and giving you any list of services or things to learn would be unfair as the expectations for this exam are high. However, below are some topics to consider and focus attention on while preparing for the exam.</p><ul><li>Understanding of Azure VM service and how AVD works</li><li>Understanding how DNS is setup for communication and Azure AD for user authentication</li><li>Using and configuring the AVD Client application and enabling app access</li><li>Using AVD Web Client and browser redirect to ship applications to end user</li><li>Configuring and managing host pools, workspaces, RemoteApp and remote storage</li><li>Working with FSLogix and storage account to setup profile redirects</li><li>Using <a href="https://parveensingh.com/packer-golden-vm-image-with-azure-devops/">Golden Image</a> to create the session hosts</li></ul><h2 id="exam-day-tips">Exam Day Tips</h2><p>Below are some of my recommendations on the exam and some tips that might be helpful.</p><ul><li>Cover basic knowledge using AZ-104 and <a href="https://parveensingh.com/az-700-study-guide/">AZ-700</a> exams to familiarize yourself with the Azure offerings.</li><li>Book the exam at least 30-60 days ahead of time. Try to use the vouchers from a learning partner, or keep an eye out for open Cloud Skill Challenges that are often offered via Microsoft.</li><li>If it&apos;s your first time doing a Virtual Exam, be sure to read PearsonVUE&apos;s exam information to ensure your desk and workspace are clean before going into the exam.</li><li>The time for when to schedule the exam is debatable. If you are a morning person, consider doing it early when your mind is not distracted from the day&apos;s stuff. On the other hand, I&apos;ve had challenges with wait time and schedule in the evenings or afternoon PST time zones.</li><li>Use the Break feature if you need to step away from the desk for some time.</li><li>You have access to a whiteboard where you can brainstorm ideas about the exams. It has been the least used feature of the exam for me personally</li><li>Adjust the brightness of your screen or turn on Dark Mode before the exam starts. Constantly looking at a white screen with high brightness may affect your focus. Consider changing to dark mode from around the bottom left when you begin.</li><li>Use the Exam Outline to note down your target dates for each module and section so that you keep yourself on track. For example, I usually pick a final date and work backward to calculate how much time I spend on each module and section.</li></ul><h2 id="resources">Resources</h2><h3 id="microsoft-learn-modules">Microsoft Learn Modules</h3><p>Microsoft Learn offers a wide range of training and preparation material for most of the Azure exams. Below is a list of relevant modules to prepare for this exam:</p><ul><li><a href="https://learn.microsoft.com/en-us/training/paths/plan-azure-virtual-desktop-implementation/?WT.mc_id=parveensingh.com">Plan an Azure Virtual Desktop Implementation</a></li><li><a href="https://learn.microsoft.com/en-us/training/paths/implement-azure-virtual-infrastructure/?WT.mc_id=parveensingh.com">Implement an Azure Virtual Desktop infrastructure</a></li><li><a href="https://learn.microsoft.com/en-us/training/paths/manage-access-security/?WT.mc_id=parveensingh.com">Manage access and security for Azure Virtual Desktop</a></li><li><a href="https://learn.microsoft.com/en-us/training/paths/manage-user-environments-apps/?WT.mc_id=parveensingh.com">Manage user environments and apps for Azure Virtual Desktop</a></li><li><a href="https://learn.microsoft.com/en-us/training/paths/monitor-maintain-azure-virtual-desktop-infrastructure/?WT.mc_id=parveensingh.com">Monitor and maintain an Azure Virtual Desktop infrastructure</a></li></ul><h3 id="cloud-academy-az-140-learning-path">Cloud Academy AZ-140 Learning Path</h3><p>The AZ-140 learning path is released at Cloud Academy. Here are some links to the Configuring and Operating Azure Virtual Desktop learning path and hands-on lab that will help you with some of the preparation:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://cloudacademy.com/learning-paths/az-140-exam-preparation-configuring-and-operating-microsoft-azure-virtual-desktop-5430/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">AZ-140 Exam Preparation: Configuring and Operating Microsoft Azure Virtual Desktop - Cloud Academy</div><div class="kg-bookmark-description">This learning path is designed to help you prepare for the AZ-140 Configuring and Operating Microsoft Azure Virtual Desktop exam. Candidates who pass the AZ-140 exam will earn the Microsoft Certified Azure Virtual Desktop Specialty certification.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://assets.cloudacademy.com/ssr-static/cloudacademy/favicon/mstile-310x310.png" alt="Preparing for the Azure Virtual Desktop Specialty Exam: AZ-140 - Resources and Recommendations"><span class="kg-bookmark-author">Cloud Academy</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://assets.cloudacademy.com/ssr-static/cloudacademy/resources/images/lp.social-share-graphics.landscape.png" alt="Preparing for the Azure Virtual Desktop Specialty Exam: AZ-140 - Resources and Recommendations"></div></a></figure><h3 id="whizlabs-exam-prep">WhizLabs Exam Prep</h3><p>If you are looking for exam prep questions for the Azure Virtual Desktop Specialty exam, use the following to get free exam practice questions:</p><!--kg-card-begin: html--><a target="_blank" href="https://shareasale.com/r.cfm?b=1512171&amp;u=2555241&amp;m=43514&amp;urllink=&amp;afftrack=">200+ Practice Questions for Microsoft Azure Administrator (AZ-104) Certification Exam - Buy Now</a><!--kg-card-end: html--><h3 id="visual-studio-dev-essentials">Visual Studio Dev Essentials</h3><p>Signup for Visual Studio Dev Essentials. You get Free Azure Credit to use the cloud resources and access training platforms like LinkedIn Learning and Pluralsight with one month of access.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://visualstudio.microsoft.com/dev-essentials/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Visual Studio Dev Essentials - Visual Studio</div><div class="kg-bookmark-description">Everything you need to build and deploy your app on any platform including tools, services, training, and more. Join our free developer program.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://visualstudio.microsoft.com/wp-content/uploads/2022/05/Microsoft-120.png" alt="Preparing for the Azure Virtual Desktop Specialty Exam: AZ-140 - Resources and Recommendations"><span class="kg-bookmark-author">Visual Studio</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://visualstudio.microsoft.com/wp-content/uploads/2020/07/Facebook.png" alt="Preparing for the Azure Virtual Desktop Specialty Exam: AZ-140 - Resources and Recommendations"></div></a></figure><h3 id="30-days-to-learn-it">30 Days to Learn It</h3><p>Microsoft offers a 50% discount on exam prices if you complete one of the listed MS Learn modules in 30 days.</p><p><a href="https://aka.ms/dev-essentials/30_days_to_learn_it">https://aka.ms/dev-essentials/30_days_to_learn_it</a></p><h2 id="exam-outline-microsoft-learn-docs-reference-links">Exam Outline: Microsoft Learn + Docs Reference Links</h2><p>I&apos;ve gathered some of the reference URLs to articles on the internet that will help you cover most of the exam objectives. The headings link to <strong><em>Microsoft Learn modules</em></strong> and the individual items in each category point to <strong><em>relevant reading articles or MS Learn courses</em></strong>.</p><p>Be sure to print and have the exam outline with you while you are preparing for the exam. If you don&apos;t have the Exam Outline handle, <a href="https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4MFST">download it here</a>.</p><h3 id="plan-and-implement-an-azure-virtual-desktop-infrastructure-40%E2%80%9345"><strong><strong>Plan and implement an Azure Virtual Desktop Infrastructure (40&#x2013;45%)</strong></strong></h3><p><strong><strong>Plan, implement and manage networking for Azure Virtual Desktop</strong></strong></p><ul><li><a href="https://learn.microsoft.com/en-us/windows-server/remote/remote-desktop-services/rds-plan-and-design?WT.mc_id=parveensingh.com">Assess network capacity and speed requirements for Azure Virtual Desktop</a></li><li><a href="https://learn.microsoft.com/en-us/windows-server/remote/remote-desktop-services/network-guidance?WT.mc_id=parveensingh.com">Calculate and recommend a configuration for network requirements</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/network-connectivity?WT.mc_id=parveensingh.com">Plan and implement Azure virtual network connectivity</a></li><li><a href="https://learn.microsoft.com/en-us/azure/architecture/example-scenario/wvd/windows-virtual-desktop?WT.mc_id=parveensingh.com">Manage connectivity to the internet and on-premises networks</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/rdp-shortpath?WT.mc_id=parveensingh.com&amp;tabs=managed-networks">Plan and implement RDP Shortpath</a> and <a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/rdp-quality-of-service-qos?WT.mc_id=parveensingh.com">quality of service (QoS) policies</a></li><li><a href="https://learn.microsoft.com/en-us/azure/architecture/example-scenario/wvd/windows-virtual-desktop?WT.mc_id=parveensingh.com">Plan and implement name resolution for Azure Virtual Desktop</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/network-connectivity?WT.mc_id=parveensingh.com">Monitor and troubleshoot network connectivity</a></li></ul><p><strong>Plan and implement storage for Azure Virtual Desktop user data</strong></p><ul><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/data-locations?WT.mc_id=parveensingh.com">Plan storage for Azure Virtual Desktop user data</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/store-fslogix-profile?WT.mc_id=parveensingh.com">Implement storage for FSLogix components</a></li><li><a href="https://learn.microsoft.com/en-us/azure/storage/common/storage-account-create?WT.mc_id=parveensingh.com&amp;tabs=azure-portal">Implement storage accounts</a></li><li><a href="https://learn.microsoft.com/en-us/azure/storage/files/storage-how-to-create-file-share?WT.mc_id=parveensingh.com&amp;tabs=azure-portal">Implement file shares</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/create-netapp-files?WT.mc_id=parveensingh.com">Implement Azure NetApp Files</a></li></ul><p><strong>Plan host pools and session hosts</strong></p><ul><li><a href="https://learn.microsoft.com/en-us/azure/architecture/example-scenario/wvd/windows-virtual-desktop?WT.mc_id=parveensingh.com">Recommend resource groups, subscriptions, and management groups</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/prerequisites?WT.mc_id=parveensingh.com&amp;tabs=portal#operating-systems-and-licenses">Recommend an operating system (OS) for an Azure Virtual Desktop implementation</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/prerequisites?WT.mc_id=parveensingh.com&amp;tabs=portal#operating-systems-and-licenses">Recommend an appropriate licensing model for Azure Virtual Desktop based on requirements</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/host-pool-load-balancing?WT.mc_id=parveensingh.com">Plan a host pools architecture</a></li><li><a href="https://learn.microsoft.com/en-us/windows-server/remote/remote-desktop-services/virtual-machine-recs?WT.mc_id=parveensingh.com">Calculate and recommend a configuration for performance requirements</a></li><li><a href="https://learn.microsoft.com/en-us/windows-server/remote/remote-desktop-services/virtual-machine-recs?WT.mc_id=parveensingh.com">Calculate and recommend a configuration for Azure Virtual Machines capacity requirements</a></li></ul><p><strong>Implement host pools and session hosts</strong></p><ul><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/create-host-pool?WT.mc_id=parveensingh.com&amp;tabs=portal">Create host pools and session hosts by using the Azure portal</a></li><li>Automate the creation of Azure Virtual Desktop hosts and host pools by using <a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/create-host-pool?WT.mc_id=parveensingh.com&amp;tabs=powershell">PowerShell</a>, <a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/create-host-pool?WT.mc_id=parveensingh.com&amp;tabs=cli">Azure CLI</a>, Azure Resource Manager templates (ARM templates), and Bicep</li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/customize-rdp-properties?WT.mc_id=parveensingh.com">Configure host pool and session host settings</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/apply-windows-license?WT.mc_id=parveensingh.com">Apply a Windows client or Windows Server license to a session host</a></li></ul><p><strong>Create and manage session host images</strong></p><ul><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/set-up-golden-image?WT.mc_id=parveensingh.com">Create a golden image manually</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-machines/windows/image-builder?WT.mc_id=parveensingh.com">Create a golden image by using Azure VM Image Builder</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/set-up-customize-master-image?WT.mc_id=parveensingh.com">Modify a session host image</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-machines/shared-image-galleries?WT.mc_id=parveensingh.com&amp;tabs=azure-cli">Plan and implement lifecycle management for images</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-machines/update-image-resources?WT.mc_id=parveensingh.com&amp;tabs=cli%2Ccli2%2Ccli4">Apply OS and application updates to an image</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/create-host-pool?WT.mc_id=parveensingh.com&amp;tabs=portal">Create a session host by using a golden image</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/custom-image-templates?WT.mc_id=parveensingh.com">Plan and implement image storage</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-machines/shared-image-galleries?WT.mc_id=parveensingh.com&amp;tabs=azure-cli">Create and manage Azure Compute Gallery</a></li></ul><h3 id="plan-and-implement-identity-and-security-15%E2%80%9320"><strong><strong>Plan and implement identity and security (15&#x2013;20%)</strong></strong></h3><p><strong>Plan and implement identity integration</strong></p><ul><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/set-up-mfa?WT.mc_id=parveensingh.com">Choose an identity management and authentication method</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/authentication?WT.mc_id=parveensingh.com">Identify Azure Virtual Desktop requirements for Active Directory Domain Services (AD DS), Azure Active Directory Domain Services (Azure AD DS), and Microsoft Azure Active Directory (Azure AD), part of Microsoft Entra</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/rbac?WT.mc_id=parveensingh.com">Plan and implement Azure roles and role-based access control (RBAC) for Azure Virtual Desktop</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/set-up-mfa?WT.mc_id=parveensingh.com">Plan and implement Azure AD Conditional Access policies for connections to Azure Virtual Desktop</a></li><li><a href="https://learn.microsoft.com/en-us/azure/active-directory/authentication/tutorial-enable-azure-mfa?WT.mc_id=parveensingh.com">Plan and implement multifactor authentication in Azure Virtual Desktop</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/delegated-access-virtual-desktop?WT.mc_id=parveensingh.com">Manage roles, groups, and rights assignments on Azure Virtual Desktop session hosts</a></li></ul><p><strong>Plan and implement security</strong></p><ul><li><a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/onboard-windows-multi-session-device?WT.mc_id=parveensingh.com%3Fview%3Do365-worldwide&amp;view=o365-worldwide">Plan, implement, and manage security for Azure Virtual Desktop session hosts by using Microsoft Defender for Cloud</a></li><li><a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/deployment-vdi-microsoft-defender-antivirus?WT.mc_id=parveensingh.com%3Fview%3Do365-worldwide&amp;view=o365-worldwide">Configure Microsoft Defender Antivirus for session hosts</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/security-guide?WT.mc_id=parveensingh.com">Implement and manage network security for connections to Azure Virtual Desktop</a></li><li><a href="https://learn.microsoft.com/en-us/azure/bastion/configuration-settings?WT.mc_id=parveensingh.com#instance">Configure Azure Bastion or just-in-time (JIT) for administrative access to session hosts</a></li><li><a href="https://learn.microsoft.com/en-us/security/benchmark/azure/baselines/azure-virtual-desktop-security-baseline?WT.mc_id=parveensingh.com">Plan and implement Windows Threat Protection features on Azure Virtual Desktop session hosts, including Windows Defender Application Control</a></li></ul><h3 id="plan-and-implement-user-environments-and-apps-20%E2%80%9325"><strong><strong>Plan and implement user environments and apps (20&#x2013;25%)</strong></strong></h3><p><strong>Plan and implement FSLogix</strong></p><ul><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/fslogix-containers-azure-files?WT.mc_id=parveensingh.com">Recommend FSLogix configuration</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/fslogix-profile-container-configure-azure-files-active-directory?WT.mc_id=parveensingh.com&amp;tabs=adds">Install and configure FSLogix</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/create-host-pools-user-profile?WT.mc_id=parveensingh.com">Configure Profile Containers</a></li><li>Configure Office Containers</li><li><a href="https://learn.microsoft.com/en-us/fslogix/tutorial-cloud-cache-containers?WT.mc_id=parveensingh.com">Configure Cloud Cache</a></li></ul><p><strong>Plan and implement user experience and client settings</strong></p><ul><li><a href="https://learn.microsoft.com/en-us/training/modules/configure-user-experience-settings/?WT.mc_id=parveensingh.com">Choose an Azure Virtual Desktop client and deployment method</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/users/connect-windows?WT.mc_id=parveensingh.com&amp;tabs=subscribe">Deploy and troubleshoot Azure Virtual Desktop clients</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/configure-device-redirections?WT.mc_id=parveensingh.com">Configure device redirection</a></li><li><a href="https://learn.microsoft.com/en-us/universal-print/fundamentals/universal-print-avd?WT.mc_id=parveensingh.com">Configure printing and Universal Print</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/administrative-template?WT.mc_id=parveensingh.com&amp;tabs=group-policy-domain">Configure user settings through Group Policy and Microsoft Endpoint Manager policies</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/customize-rdp-properties?WT.mc_id=parveensingh.com">Configure Remote Desktop Protocol (RDP) properties on a host pool</a></li><li><a href="https://learn.microsoft.com/en-us/training/modules/configure-user-experience-settings/6-configure-session-timeout-properties?WT.mc_id=parveensingh.com">Configure session timeout properties</a></li><li><a href="https://learn.microsoft.com/en-us/training/modules/configure-user-experience-settings/9-implement-start-virtual-machine-connect-feature?WT.mc_id=parveensingh.com">Implement the Start Virtual Machine on Connect feature</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/configure-host-pool-personal-desktop-assignment-type?WT.mc_id=parveensingh.com&amp;tabs=azure">Assign and unassign personal desktops for users</a></li></ul><p><strong>Install and configure apps on a session host</strong></p><ul><li><a href="https://techcommunity.microsoft.com/t5/azure-virtual-desktop/windows-virtual-desktop-remoteapps/m-p/825850?WT.mc_id=parveensingh.com">Choose a method for deploying an app to Azure Virtual Desktop</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/remote-app-streaming/msix-app-attach?WT.mc_id=parveensingh.com">Configure dynamic application delivery by using the MSIX app attach</a></li><li><a href="https://techcommunity.microsoft.com/t5/azure-virtual-desktop/windows-virtual-desktop-remoteapps/m-p/825850?WT.mc_id=parveensingh.com">Publish an application as a RemoteApp</a></li><li><a href="https://learn.microsoft.com/en-us/fslogix/tutorial-application-rule-sets?WT.mc_id=parveensingh.com">Implement FSLogix application masking</a></li><li><a href="https://learn.microsoft.com/en-us/sharepoint/sync-vdi-support?WT.mc_id=parveensingh.com">Implement and manage OneDrive, including multisession environments</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/teams-on-avd?WT.mc_id=parveensingh.com">Implement and manage Microsoft Teams, including AV redirect</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/install-office-on-wvd-master-image?WT.mc_id=parveensingh.com">Implement and manage Microsoft 365 apps on Azure Virtual Desktop session hosts</a></li><li><a href="https://learn.microsoft.com/en-us/azure/architecture/example-scenario/wvd/windows-virtual-desktop?WT.mc_id=parveensingh.com">Implement and manage browsers for Azure Virtual Desktop sessions</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/manage-app-groups?WT.mc_id=parveensingh.com">Create and configure an application group</a></li><li><a href="https://techcommunity.microsoft.com/t5/azure-virtual-desktop/assign-users-security-group-to-the-desktop-application-group/m-p/912395">Assign users to application groups</a></li></ul><h3 id="monitor-and-maintain-an-azure-virtual-desktop-infrastructure-10%E2%80%9315"><strong><strong>Monitor and maintain an Azure Virtual Desktop Infrastructure (10&#x2013;15%)</strong></strong></h3><p><strong>Monitor and manage Azure Virtual Desktop services</strong></p><ul><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/diagnostics-log-analytics?WT.mc_id=parveensingh.com">Configure log collection and analysis for Azure Virtual Desktop session hosts</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/agent-updates-diagnostics?WT.mc_id=parveensingh.com">Configure Azure Virtual Desktop monitoring by using Azure Monitor</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/insights?WT.mc_id=parveensingh.com">Monitor Azure Virtual Desktop by using Azure Monitor</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/insights?WT.mc_id=parveensingh.com#set-up-using-the-configuration-workbook">Customize Azure Monitor workbooks for Azure Virtual Desktop Monitoring</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/azure-advisor-recommendations?WT.mc_id=parveensingh.com">Monitor Azure Virtual Desktop by using Azure Advisor</a></li><li><a href="https://learn.microsoft.com/en-us/windows-server/administration/performance-tuning/role/remote-desktop/session-hosts?WT.mc_id=parveensingh.com">Optimize session host capacity and performance</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/set-up-scaling-script?WT.mc_id=parveensingh.com">Implement autoscaling in host pools</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/windows-10-multisession-faq?WT.mc_id=parveensingh.com">Monitor and manage active sessions and application groups</a></li><li><a href="https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/scenarios/wvd/eslz-platform-automation-and-devops?WT.mc_id=parveensingh.com">Configure automation for Azure Virtual Desktop</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/cli-powershell?WT.mc_id=parveensingh.com&amp;tabs=cli">Automate management of host pools, session hosts, and user sessions by using PowerShell and Azure CLI</a></li></ul><p><strong><strong>Plan, implement and maintain business continuity</strong></strong></p><ul><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/scheduled-agent-updates?WT.mc_id=parveensingh.com">Recommend an update strategy for session hosts</a></li><li><a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/disaster-recovery?WT.mc_id=parveensingh.com">Plan and implement a disaster recovery plan for Azure Virtual Desktop</a></li><li><a href="https://learn.microsoft.com/en-us/azure/architecture/example-scenario/wvd/azure-virtual-desktop-multi-region-bcdr?WT.mc_id=parveensingh.com">Plan for multi-region implementation</a></li><li><a href="https://learn.microsoft.com/en-us/azure/cloud-adoption-framework/scenarios/wvd/eslz-business-continuity-and-disaster-recovery?WT.mc_id=parveensingh.com">Design a backup strategy for Azure Virtual Desktop</a></li><li>Configure backup and restore for <a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/store-fslogix-profile?WT.mc_id=parveensingh.com">FSLogix user profiles</a>, <a href="https://learn.microsoft.com/en-us/azure/virtual-desktop/disaster-recovery?WT.mc_id=parveensingh.com">personal virtual desktop infrastructures</a> (VDIs), and golden images</li></ul><h2 id="conclusion">Conclusion</h2><p>I hope this article helps you get through the learning part of AZ-140 and cover all the necessary topics that you need to know before you go into the exam hall. Feel free to reach out to me on <a href="https://twitter.com/singh_cloud">Twitter</a> or <a href="https://www.linkedin.com/in/singhparveen/">LinkedIn</a> for any questions.</p><p>If you are looking for exam review on any other exam, check out the list below as I update it with the latest content:</p><p><a href="https://parveensingh.com/tag/exam/">https://parveensingh.com/tag/exam/</a></p>]]></content:encoded></item><item><title><![CDATA[Microsoft 365 Administrator Expert (MS-102) Exam Study Guide]]></title><description><![CDATA[Work Towards Your Microsoft 365 Administrator Expert Certification With Confidence]]></description><link>https://parveensingh.com/ms-102-microsoft-365-administrator-expert-exam-study-guide/</link><guid isPermaLink="false">64757ee5a3149404f97d938d</guid><category><![CDATA[Exams Study Guides]]></category><category><![CDATA[Microsoft365]]></category><dc:creator><![CDATA[Parveen Singh]]></dc:creator><pubDate>Tue, 30 May 2023 04:56:41 GMT</pubDate><media:content url="https://parveensingh.com/content/images/2023/05/MicrosoftAdminExpert-ExamGuide-1.png" medium="image"/><content:encoded><![CDATA[<img src="https://parveensingh.com/content/images/2023/05/MicrosoftAdminExpert-ExamGuide-1.png" alt="Microsoft 365 Administrator Expert (MS-102) Exam Study Guide"><p>The <strong>MS-102</strong> <strong>Microsoft 365 Administrator</strong> exam is an expert-level exam in the Microsoft domain that is highly focused on the Security aspect of Microsoft 365 services and enables you to achieve the <strong><strong>Microsoft 365 Certified: Administrator Expert</strong></strong> certification. However, the exam outline covers many essential topics that you are expected to know in your day-to-day life regardless of everything.</p><p>In this article, you will find the resources and recommendations if you are preparing for the Microsoft 365 Administrator exam soon. This post is super long, so use the <strong>Table of Content</strong> to find the appropriate section you are interested in and bookmark it for later use. The study guide also includes the content in the Beta version since the MS-101 and MS-100 phase out on July 31, 2023, and is replaced by one MS-102 exam to achieve the Administrator Expert certification.</p><p><em><strong>Check out the Study Guides for other exams that might be of interest to you.</strong></em></p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://parveensingh.com/az-400-guide/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Azure DevOps Certification: AZ-400 Study Guide</div><div class="kg-bookmark-description">A Comprehensive Guide to Azure DevOps Expert Certification Exam</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://parveensingh.com/favicon.png" alt="Microsoft 365 Administrator Expert (MS-102) Exam Study Guide"><span class="kg-bookmark-author">Parveen Singh</span><span class="kg-bookmark-publisher">Parveen Singh</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://parveensingh.com/content/images/2021/06/AzureDevOps-Exam.jpg" alt="Microsoft 365 Administrator Expert (MS-102) Exam Study Guide"></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://parveensingh.com/how-to-pass-az-204-in-30-days/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">How to pass AZ-204 in 30 Days!</div><div class="kg-bookmark-description">A simple guide on how to crack Azure Developer Exam (AZ-204) like a Pro.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://parveensingh.com/favicon.png" alt="Microsoft 365 Administrator Expert (MS-102) Exam Study Guide"><span class="kg-bookmark-author">Parveen Singh</span><span class="kg-bookmark-publisher">Parveen Singh</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://parveensingh.com/content/images/2021/07/AzureDeveloper-ExamGuide-1.jpg" alt="Microsoft 365 Administrator Expert (MS-102) Exam Study Guide"></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://parveensingh.com/az-500-study-guide/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Azure Security Engineer: AZ-500 Study Guide</div><div class="kg-bookmark-description">A Comprehensive Guide to Azure Security Engineer Certification Exam</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://parveensingh.com/favicon.png" alt="Microsoft 365 Administrator Expert (MS-102) Exam Study Guide"><span class="kg-bookmark-author">Parveen Singh</span><span class="kg-bookmark-publisher">Parveen Singh</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://parveensingh.com/content/images/2021/07/AzureSecurity-ExamGuide.jpg" alt="Microsoft 365 Administrator Expert (MS-102) Exam Study Guide"></div></a></figure><h2 id="certification-overview">Certification Overview</h2><p>Microsoft 365 Administrator (MS-102) is an associate-level exam that validates the skills and expertise of subject matter experts working with workload management, security, infrastructure, identity, compliance, endpoint, and applications in Microsoft 365 workloads.</p><p>The exam aims to validate that you understand how to implement and administer the cloud and hybrid environments using Microsoft 365 tools. It also tests your skills in networking, server administration, DNS, and usage of PowerShell while managing the M365 workloads.</p><p>Although, right now only one exam is required to achieve the Microsoft 365 Administrator Expert certification unlike before where you&#x2019;d have to do two exams MS-100 and MS-101. I completed my exam in the Beta phase, however, the experience will be the same when the exam is released to the general audience in May 2023.</p><h2 id="exam-prerequisites">Exam Prerequisites</h2><p>If you are planning to attempt the Microsoft 365 Administrator Expert exam, be sure to complete one of the following exams beforehand, as it will give you enough exposure to Microsoft 365 services and offerings:</p><ul><li><a href="https://learn.microsoft.com/en-us/certifications/exams/md-102/">Microsoft 365 Certified: Modern Desktop Administrator Associate</a></li><li><a href="https://learn.microsoft.com/en-us/certifications/m365-messaging-administrator/">Microsoft 365 Certified: Messaging Administrator Associate</a></li><li><a href="https://learn.microsoft.com/en-us/certifications/m365-teams-administrator-associate/">Microsoft 365 Certified: Teams Administrator Associate</a></li><li><a href="https://learn.microsoft.com/en-us/certifications/identity-and-access-administrator/">Microsoft Certified: Identity and Access Administrator Associate</a></li></ul><p>It&apos;s good to know the following concepts before going into the exam:</p><ul><li>Basic understanding of TCP/IP, DNS, Firewall, and Routing</li><li>Familiar with <a href="https://parveensingh.com/tag/powershell/">PowerShell</a> and Microsoft365 management commands</li><li>Understanding security and infrastructure components of Microsoft 365 services</li></ul><h2 id="who-is-this-ms-102-exam-for">Who is this MS-102 Exam for?</h2><p>On a high-level note, take the exam:</p><ul><li>If you are looking to learn more about Networking, Infrastructure, and Security in Azure cloud services.</li><li>If you are working on M365 Administration, App development and looking for a chance to grow and learn more about Microsoft 365 services.</li><li>If you are looking to build your network skills and learn to use multiple networking services in the cloud effectively.</li></ul><h2 id="what-to-expect-in-the-exam">What to Expect in the Exam?</h2><p>The Microsoft 365 Administrator Exam is 150 minutes, including about 30 minutes for the surveys and the assessments, which gives you roughly 120 minutes for the exam. I did find it a little challenging to finish the exam within the time frame. You can expect around 50-60 questions in the exam.</p><blockquote>One of the most interesting features I&apos;ve seen in the recent Microsoft Exam is the &quot;<strong>Break</strong>&quot; feature. You can now take breaks during the exam if you need to pause for any moment. However, the exam counter does not stop, and when you return back from the break, you cannot attempt the questions you&apos;ve already seen before going to the break. So keep that in mind before taking the break. I&apos;d recommend not looking at all the questions in one go just in case you do decide to take a break later in the exam.</blockquote><p>The structure of the exam can vary and range between:</p><ul><li>Case study with multiple questions including two choices and drag-and-drop items.</li><li>Single-choice questions may not be skipped or reviewed. You only get to answer these questions ONCE.</li><li>Single-choice questions (True/False or Yes/No)</li><li>Multiple-choice questions</li></ul><p>Since it&apos;s an expert-level exam, it is relatively challenging as it covers many different topics and best practices. Therefore, I recommend you have at least 1-2 years of hands-on experience with Microsoft 365 Administration and Management in general before you consider booking the exam.</p><h2 id="exam-preparation-recommendations">Exam Preparation Recommendations</h2><p>There&apos;s definitely a lot to cover in this exam, and giving you any list of services or things to learn would be unfair as the expectations for this exam are high. However, below are some topics to consider and focus attention on while preparing for the exam.</p><ul><li>Understanding various license types for M365 services</li><li>Managing M365 and Azure AD users and groups along with roles and access</li><li>Understanding guest access and how it works with M365 services</li><li>Configuring and managing a Hybrid AD environment with AD Connect</li><li>Implementing various authentication methods for a tenant in Cloud and Hybrid mode</li><li>Familiarity with Microsoft 365 Defender service and understanding it&#x2019;s functionality</li><li>Managing Microsoft Purview and implementing compliance functionality for a tenant</li></ul><h2 id="exam-day-tips">Exam Day Tips</h2><p>Below are some of my recommendations on the exam and some tips that might be helpful.</p><ul><li>Cover basic knowledge using <strong>MD-102</strong> and <strong>SC-300</strong> exams to familiarize yourself with the Microsoft 365 offerings.</li><li>Book the exam at least 60-90 days ahead of time. Try to use the vouchers from a learning partner, or keep an eye for open Cloud Skill Challenges that are often offered via Microsoft.</li><li>If it&apos;s your first time doing a Virtual Exam, be sure to read PearsonVUE&apos;s exam information to ensure your desk and workspace are clean before going into the exam.</li><li>The time for when to schedule the exam is debatable. If you are a morning person, consider doing it early when your mind is not distracted from the day&apos;s stuff. On the other hand, I&apos;ve had challenges with wait time and schedule in the evenings or afternoon PST time zones.</li><li>You have access to a whiteboard where you can brainstorm ideas about the exams. It has been the least used feature of the exam for me personally.</li><li>Adjust the brightness of your screen or turn on Dark Mode before the exam starts. Constantly looking at a white screen with high brightness may affect your focus. Consider changing to dark mode from around the bottom left when you begin.</li><li>Use the Exam Outline to note down your target dates for each module and section so that you keep yourself on track. For example, I usually pick a final date and work backward to calculate how much time I spend on each module and section.</li></ul><h2 id="resources">Resources</h2><h3 id="microsoft-learn-modules">Microsoft Learn Modules</h3><p>Microsoft Learn offers a wide range of training and preparation material for most of the Azure exams. Below is a list of relevant modules to prepare for this exam:</p><p>Path:</p><ul><li><a href="https://learn.microsoft.com/en-us/training/paths/configure-microsoft-365-tenant/?WT.mc_id=parveensingh.com">Configure your Microsoft 365 Tenant</a></li><li><a href="https://learn.microsoft.com/en-us/training/paths/manage-your-microsoft-365-tenant/?WT.mc_id=parveensingh.com">Manage your Microsoft 365 tenant</a></li><li><a href="https://learn.microsoft.com/en-us/training/paths/implement-identity-synchronization/?WT.mc_id=parveensingh.com">Implement identity synchronization</a></li><li><a href="https://learn.microsoft.com/en-us/training/paths/explore-security-metrics-microsoft-365-defender/?WT.mc_id=parveensingh.com">Explore security metrics in Microsoft 365 Defender</a></li><li><a href="https://learn.microsoft.com/en-us/training/paths/manage-security-services-microsoft-365-defender/?WT.mc_id=parveensingh.com">Manage your security services in Microsoft 365 Defender</a></li><li><a href="https://learn.microsoft.com/en-us/training/paths/implement-threat-protection-use-microsoft-365-defender/?WT.mc_id=parveensingh.com">Implement threat protection by using Microsoft 365 Defender</a></li><li><a href="https://learn.microsoft.com/en-us/training/paths/explore-data-governance-microsoft-365/?WT.mc_id=parveensingh.com">Explore data governance in Microsoft 365</a></li><li><a href="https://learn.microsoft.com/en-us/training/paths/implement-compliance-microsoft-365/?WT.mc_id=parveensingh.com">Implement compliance in Microsoft 365</a></li><li><a href="https://learn.microsoft.com/en-us/training/paths/ms-102-manage-compliance-microsoft-365/?WT.mc_id=parveensingh.com">Manage compliance in Microsoft 365</a></li></ul><h3 id="cloud-academy-ms-102-learning-path">Cloud Academy MS-102 Learning Path</h3><p>The MS-102 learning path is released at Cloud Academy. However, here are some links to the Microsoft 365 Administrator learning path and hands-on lab that will help you with some of the preparation:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://cloudacademy.com/learning-paths/ms-102-exam-prep-microsoft-365-administrator-9961/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">MS-102 Exam Prep: Microsoft 365 Administrator - Cloud Academy</div><div class="kg-bookmark-description">Accelerate progress up the cloud curve with Cloud Academy&#x2019;s digital training solutions. Build a culture of cloud with technology and guided learning experiences.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://assets.cloudacademy.com/ssr-static/cloudacademy/favicon/mstile-310x310.png" alt="Microsoft 365 Administrator Expert (MS-102) Exam Study Guide"><span class="kg-bookmark-author">Cloud Academy</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://assets.cloudacademy.com/ssr-static/cloudacademy/resources/images/lp.social-share-graphics.landscape.png" alt="Microsoft 365 Administrator Expert (MS-102) Exam Study Guide"></div></a></figure><h3 id="whizlabs-exam-prep">WhizLabs Exam Prep</h3><p>If you are looking for exam prep questions for Azure Network Engineer exam, use the following to get free exam practice questions:</p><!--kg-card-begin: html--><a target="_blank" href="https://shrsl.com/437dr"><img src="https://static.shareasale.com/image/43514/728X904_00.jpg" border="0" alt="Microsoft 365 Administrator Expert (MS-102) Exam Study Guide">Whizlabs MS-101 Exam</a><!--kg-card-end: html--><!--kg-card-begin: html--><a target="_blank" href="https://shrsl.com/437dw"><img src="https://static.shareasale.com/image/43514/728X904_00.jpg" border="0" alt="Microsoft 365 Administrator Expert (MS-102) Exam Study Guide">Whizlabs MS-102 Exam</a><!--kg-card-end: html--><h3 id="visual-studio-dev-essentials">Visual Studio Dev Essentials</h3><p>Signup for Visual Studio Dev Essentials. You get Free Azure Credit to use the cloud resources and access training platforms like LinkedIn Learning and Pluralsight with one month of access.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://visualstudio.microsoft.com/dev-essentials/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Visual Studio Dev Essentials - Visual Studio</div><div class="kg-bookmark-description">Everything you need to build and deploy your app on any platform including tools, services, training, and more. Join our free developer program.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://visualstudio.microsoft.com/wp-content/uploads/2022/05/Microsoft-120.png" alt="Microsoft 365 Administrator Expert (MS-102) Exam Study Guide"><span class="kg-bookmark-author">Visual Studio</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://visualstudio.microsoft.com/wp-content/uploads/2020/07/Facebook.png" alt="Microsoft 365 Administrator Expert (MS-102) Exam Study Guide"></div></a></figure><h3 id="30-days-to-learn-it">30 Days to Learn It</h3><p>Microsoft offers a 50% discount on exam prices if you complete one of the listed MS Learn modules in 30 days.</p><p><a href="https://aka.ms/dev-essentials/30_days_to_learn_it">https://aka.ms/dev-essentials/30_days_to_learn_it</a></p><h2 id="exam-outline-microsoft-learn-docs-reference-links">Exam Outline: Microsoft Learn + Docs Reference Links</h2><p>I&apos;ve gathered some of the reference URLs to articles on the internet that will help you cover most of the exam objectives. The headings link to <strong><em>Microsoft Learn modules,</em></strong> and the individual items in each category point to <strong><em>relevant reading articles or MS Learn courses</em></strong>.</p><p>Be sure to print and have the exam outline with you while you are preparing for the exam. If you don&apos;t have the Exam Outline handle, <a href="https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE5fWGt">download it here</a>.</p><h3 id="deploy-and-manage-a-microsoft-365-tenant-25%E2%80%9330"><strong><strong>Deploy and manage a Microsoft 365 tenant (25&#x2013;30%)</strong></strong></h3><p><strong>Implement and manage a Microsoft 365 tenant</strong></p><ul><li><a href="https://learn.microsoft.com/en-us/microsoft-365/admin/setup/plan-your-setup?WT.mc_id=parveensingh.com">Create a tenant</a></li><li><a href="https://learn.microsoft.com/en-us/microsoft-365/admin/setup/add-domain?WT.mc_id=parveensingh.com">Implement and manage domains</a></li><li><a href="https://learn.microsoft.com/en-us/microsoft-365/community/basic-security-set-up-for-microsoft-365?WT.mc_id=parveensingh.com">Configure organizational settings, including security, privacy, and profile</a></li><li><a href="https://learn.microsoft.com/en-us/microsoft-365/enterprise/view-service-health?WT.mc_id=parveensingh.com">Identify and respond to service health issues</a></li><li><a href="https://learn.microsoft.com/en-us/office365/servicedescriptions/office-365-platform-service-description/service-health-and-continuity?WT.mc_id=parveensingh.com">Configure notifications in service health</a></li><li><a href="https://learn.microsoft.com/en-us/microsoft-365/admin/activity-reports/activity-reports?WT.mc_id=parveensingh.com">Monitor adoption and usage</a></li></ul><p><strong>Manage users and groups</strong></p><ul><li><a href="https://learn.microsoft.com/en-us/microsoft-365/admin/add-users/add-users?WT.mc_id=parveensingh.com">Create and manage users</a></li><li><a href="https://learn.microsoft.com/en-us/microsoft-365/admin/add-users/about-guest-users?WT.mc_id=parveensingh.com">Create and manage guest users</a></li><li><a href="https://learn.microsoft.com/en-us/exchange/recipients-in-exchange-online/manage-mail-contacts?WT.mc_id=parveensingh.com">Create and manage contacts</a></li><li><a href="https://learn.microsoft.com/en-us/microsoft-365/admin/create-groups/create-groups?WT.mc_id=parveensingh.com">Create and manage groups, including Microsoft 365 groups</a></li><li><a href="https://learn.microsoft.com/en-us/microsoft-365/admin/manage/assign-licenses-to-users?WT.mc_id=parveensingh.com">Manage and monitor Microsoft 365 license allocations</a></li><li><a href="https://learn.microsoft.com/en-us/microsoft-365/enterprise/connect-to-all-microsoft-365-services-in-a-single-windows-powershell-window?WT.mc_id=parveensingh.com">Perform bulk user management, including PowerShell</a></li></ul><p><strong>Manage roles in Microsoft 365</strong></p><ul><li><a href="https://learn.microsoft.com/en-us/azure/active-directory/roles/manage-roles-portal?WT.mc_id=parveensingh.com">Manage roles in Microsoft 365 and Azure AD</a></li><li><a href="https://learn.microsoft.com/en-us/defender-for-identity/role-groups?WT.mc_id=parveensingh.com">Manage role groups for Microsoft Defender, Microsoft Purview, and Microsoft 365 workloads</a></li><li><a href="https://learn.microsoft.com/en-us/azure/purview/catalog-permissions?WT.mc_id=parveensingh.com">Manage delegation by using administrative units</a></li><li><a href="https://learn.microsoft.com/en-us/azure/active-directory/privileged-identity-management/pim-how-to-add-role-to-user?WT.mc_id=parveensingh.com">Implement privileged identity management for Azure AD roles</a></li></ul><h3 id="implement-and-manage-identity-and-access-in-azure-ad-25%E2%80%9330"><strong><strong>Implement and manage identity and access in Azure AD (25&#x2013;30%)</strong></strong></h3><p><strong>Implement and manage identity synchronization with Azure AD</strong></p><ul><li><a href="https://learn.microsoft.com/en-us/troubleshoot/azure/active-directory/objects-dont-sync-ad-sync-tool?WT.mc_id=parveensingh.com#run-idfix-to-check-for-duplicates-missing-attributes-and-rule-violations">Prepare for identity synchronization by using IdFix</a></li><li><a href="https://learn.microsoft.com/en-us/azure/active-directory/hybrid/cloud-sync/how-to-configure?WT.mc_id=parveensingh.com">Implement and manage directory synchronization by using Azure AD Connect cloud sync</a></li><li><a href="https://learn.microsoft.com/en-us/azure/active-directory/hybrid/connect/whatis-azure-ad-connect?WT.mc_id=parveensingh.com">Implement and manage directory synchronization by using Azure AD Connect</a></li><li><a href="https://learn.microsoft.com/en-us/azure/active-directory/hybrid/connect/how-to-connect-health-operations?WT.mc_id=parveensingh.com">Monitor synchronization by using Azure AD Connect Health</a></li><li><a href="https://learn.microsoft.com/en-us/azure/active-directory/hybrid/connect/tshoot-connect-objectsync?WT.mc_id=parveensingh.com">Troubleshoot synchronization, including Azure AD Connect and Azure AD Connect cloud sync</a></li></ul><p><strong>Implement and manage authentication</strong></p><ul><li><a href="https://learn.microsoft.com/en-us/windows/security/identity-protection/hello-for-business/passwordless-strategy?WT.mc_id=parveensingh.com">Implement and manage authentication methods, including Windows Hello for Business, passwordless, tokens, and the Microsoft Authenticator app</a></li><li><a href="https://learn.microsoft.com/en-us/azure/active-directory/authentication/tutorial-enable-sspr?WT.mc_id=parveensingh.com">Implement and manage self-service password reset (SSPR)</a></li><li><a href="https://learn.microsoft.com/en-us/azure/active-directory/authentication/concept-password-ban-bad-combined-policy?WT.mc_id=parveensingh.com">Implement and manage Azure AD Password Protection</a></li><li><a href="https://learn.microsoft.com/en-us/azure/active-directory/authentication/tutorial-enable-azure-mfa?WT.mc_id=parveensingh.com">Implement and manage multi-factor authentication (MFA)</a></li><li><a href="https://learn.microsoft.com/en-us/azure/active-directory/develop/reference-error-codes?WT.mc_id=parveensingh.com">Investigate and resolve authentication issues</a></li></ul><p><strong>Implement and manage secure access</strong></p><ul><li><a href="https://learn.microsoft.com/en-us/azure/active-directory/identity-protection/overview-identity-protection?WT.mc_id=parveensingh.com">Plan for identity protection</a></li><li><a href="https://learn.microsoft.com/en-us/azure/active-directory/identity-protection/how-to-deploy-identity-protection?WT.mc_id=parveensingh.com">Implement and manage Azure AD Identity Protection</a></li><li><a href="https://learn.microsoft.com/en-us/azure/active-directory/conditional-access/plan-conditional-access?WT.mc_id=parveensingh.com">Plan Conditional Access policies</a></li><li><a href="https://learn.microsoft.com/en-us/mem/intune/protect/conditional-access-exchange-create?WT.mc_id=parveensingh.com">Implement and manage Conditional Access policies</a></li></ul><h3 id="manage-security-and-threats-by-using-microsoft-365-defender-25%E2%80%9330"><strong><strong>Manage security and threats by using Microsoft 365 Defender (25&#x2013;30%)</strong></strong></h3><p><strong>Manage security reports and alerts by using the Microsoft 365 Defender portal</strong></p><ul><li><a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender/microsoft-secure-score-improvement-actions?WT.mc_id=parveensingh.com">Review and take actions to improve the Microsoft Secure Score in the Microsoft 365 Defender portal</a></li><li><a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender/incidents-overview?WT.mc_id=parveensingh.com">Review and respond to security incidents and alerts in Microsoft 365 Defender</a></li><li><a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender/incident-queue?WT.mc_id=parveensingh.com">Review and respond to issues identified in security and compliance reports in Microsoft 365 Defender</a></li><li><a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender/threat-analytics?WT.mc_id=parveensingh.com">Review and respond to threats identified in threat analytics</a></li></ul><p><strong>Implement and manage email and collaboration protection by using Microsoft Defender for Office 365</strong></p><ul><li><a href="https://learn.microsoft.com/en-us/microsoft-365/security/office-365-security/anti-phishing-policies-mdo-configure?WT.mc_id=parveensingh.com">Implement policies and rules in Defender for Office 365</a></li><li><a href="https://learn.microsoft.com/en-us/microsoft-365/security/office-365-security/mdo-sec-ops-guide?WT.mc_id=parveensingh.com">Review and respond to threats identified in Defender for Office 365, including threats and investigations</a></li><li><a href="https://learn.microsoft.com/en-us/microsoft-365/security/office-365-security/attack-simulation-training-get-started?WT.mc_id=parveensingh.com">Create and run campaigns, such as attack simulation</a></li><li><a href="https://learn.microsoft.com/en-us/microsoft-365/security/office-365-security/removing-user-from-restricted-users-portal-after-spam?WT.mc_id=parveensingh.com">Unblock users</a></li></ul><p><strong>Implement and manage endpoint protection by using Microsoft Defender for Endpoint</strong></p><ul><li><a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/onboard-windows-client?WT.mc_id=parveensingh.com">Onboard devices to Defender for Endpoint</a></li><li><a href="https://learn.microsoft.com/en-us/mem/intune/protect/advanced-threat-protection-configure?WT.mc_id=parveensingh.com">Configure Defender for Endpoint settings</a></li><li><a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/overview-endpoint-detection-response?WT.mc_id=parveensingh.com">Review and respond to endpoint vulnerabilities</a></li><li><a href="https://learn.microsoft.com/en-us/microsoft-365/security/defender-endpoint/respond-machine-alerts?WT.mc_id=parveensingh.com">Review and respond to risks identified in the Microsoft Defender Vulnerability Management dashboard</a></li></ul><h3 id="manage-compliance-by-using-microsoft-purview-15%E2%80%9320"><strong><strong>Manage compliance by using Microsoft Purview (15&#x2013;20%)</strong></strong></h3><p><strong>Implement Microsoft Purview information protection and data lifecycle management</strong></p><ul><li><a href="https://learn.microsoft.com/en-us/microsoft-365/compliance/create-a-custom-sensitive-information-type?WT.mc_id=parveensingh.com">Implement and manage sensitive info types by using keywords, keyword lists, or regular expressions</a></li><li><a href="https://learn.microsoft.com/en-us/microsoft-365/compliance/create-apply-retention-labels?WT.mc_id=parveensingh.com">Implement retention labels, retention label policies, and retention policies</a></li><li><a href="https://learn.microsoft.com/en-us/microsoft-365/compliance/create-sensitivity-labels?WT.mc_id=parveensingh.com">Implement sensitivity labels and sensitivity label policies</a></li></ul><p><strong>Implement Microsoft Purview data loss prevention (DLP)</strong></p><ul><li><a href="https://learn.microsoft.com/en-us/microsoft-365/compliance/endpoint-dlp-getting-started?WT.mc_id=parveensingh.com">Implement DLP for workloads</a></li><li><a href="https://learn.microsoft.com/en-us/microsoft-365/compliance/dlp-create-deploy-policy?WT.mc_id=parveensingh.com">Implement Endpoint DLP</a></li><li><a href="https://learn.microsoft.com/en-us/microsoft-365/compliance/dlp-alerts-dashboard-get-started?WT.mc_id=parveensingh.com">Review and respond to DLP alerts, events, and reports</a></li></ul><h2 id="conclusion">Conclusion</h2><p>I hope this article helps you get through the learning part of the MS-102 and cover all the necessary topics that you need to know before you go into the exam hall. Feel free to reach out to me on <a href="https://twitter.com/singh_cloud">Twitter</a> or <a href="https://www.linkedin.com/in/singhparveen/">LinkedIn</a> for any questions.</p><p>If you are looking for exam review on any other exam, check out the list below as I update it with the latest content:</p><p><a href="https://parveensingh.com/tag/exam/">https://parveensingh.com/tag/exam/</a></p>]]></content:encoded></item><item><title><![CDATA[Step-by-Step Guide to Building Data Pipelines with Azure Data Factory]]></title><description><![CDATA[Azure Data Factory is a powerful tool for building data pipelines. This guide provides a comprehensive overview setting up data pipeline using Azure Storage and Azure SQL Server, from start to finish.]]></description><link>https://parveensingh.com/step-by-step-guide-to-building-data-pipelines-with-azure-data-factory/</link><guid isPermaLink="false">6455df08a3149404f97d9204</guid><category><![CDATA[Azure Data Factory]]></category><dc:creator><![CDATA[Parveen Singh]]></dc:creator><pubDate>Mon, 08 May 2023 20:42:11 GMT</pubDate><media:content url="https://parveensingh.com/content/images/2023/05/DataPipelineswithADF.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://parveensingh.com/content/images/2023/05/DataPipelineswithADF.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory"><p>In today&apos;s fast-paced digital landscape, effective data integration is essential for organizations striving to stay ahead. Enter Azure Data Factory, the cutting-edge cloud-based solution that empowers businesses to seamlessly orchestrate and automate their data pipelines. In this comprehensive hands-on article, we will take you on a journey through the intricate workings of Azure Data Factory, from initial setup to advanced techniques. Whether you&apos;re a seasoned data architect or a curious learner, this guide will empower you to confidently navigate the intricacies of ADF and achieve flawless data synchronization between Azure Storage Account and Azure SQL Database.</p>
<h2 id="table-of-content">Table Of Content</h2>
<ol>
<li><a href="#what-is-azure-data-factory-adf">What is Azure Data Factory</a></li>
<li><a href="#prerequisites-to-deploying-azure-data-factory">Prerequisites to Deploying Azure Data Factory</a></li>
<li><a href="#creating-an-azure-data-factory-using-azure-portal">Creating an Azure Data Factory using Azure Portal</a></li>
<li><a href="#preparing-azure-storage-account-to-use-with-azure-data-factory-as-a-source">Preparing Azure Storage Account to use with Azure Data Factory as a Source</a>
<ul>
<li><a href="#creating-azure-storage-account-to-store-sample-file">Creating Azure Storage Account to Store Sample File</a></li>
<li><a href="#creating-and-uploading-sample-data-file-to-azure-blog-storage">Creating and Uploading Sample Data file to Azure Blog Storage</a></li>
</ul>
</li>
<li><a href="#deploying-azure-sql-database-server-for-data-factory-sink">Deploying Azure SQL Database &amp; Server for Data Factory Sink</a>
<ul>
<li><a href="#create-an-azure-sql-database-server">Create an Azure SQL Database &amp; Server</a></li>
<li><a href="#create-a-sink-sql-table-for-azure-data-factory-pipeline">Create a Sink SQL Table for Azure Data Factory pipeline</a></li>
</ul>
</li>
<li><a href="#working-with-data-pipeline-in-azure-data-factory">Working with Data Pipeline in Azure Data Factory</a>
<ul>
<li><a href="#configuring-the-linked-services-in-azure-data-factory-adf">Configuring the Linked Services in Azure Data Factory (ADF)</a></li>
<li><a href="#configuring-trigger-for-the-data-pipeline-in-adf">Configuring Trigger for the Data Pipeline in ADF</a></li>
<li><a href="#monitor-the-data-transfer">Monitor the Data Transfer</a></li>
</ul>
</li>
<li><a href="#conclusion">Conclusion</a></li>
</ol>
<h2 id="what-is-azure-data-factory-adf">What is Azure Data Factory (ADF)?</h2>
<p>Azure Data Factory (ADF) is a cloud-based data integration service provided by Microsoft Azure. It enables seamless and scalable data movement and orchestration across various sources, including Azure Storage accounts and Azure SQL databases. ADF acts as a powerful <strong>Extract, Transform, Load</strong> (ETL) tool, allowing users to efficiently transfer, transform, and process large volumes of data. With its robust capabilities and intuitive user interface, ADF empowers organizations to streamline their data workflows, automate data pipelines, and ensure data integrity throughout the entire process. Whether you need to ingest data from multiple sources, transform and enrich it, or load it into various target destinations, ADF provides the flexibility, scalability, and reliability to handle complex data integration scenarios effectively</p>
<h2 id="prerequisites-to-deploying-azure-data-factory">Prerequisites to Deploying Azure Data Factory</h2>
<p>Before you proceed with the article, you need to have the following prerequisites in place:</p>
<ul>
<li><strong>Azure Account with an active subscription</strong>: The first thing you need to do is sign up for an Azure account if you don&apos;t already have one. You can sign up for a free trial account that will give you access to a limited amount of Azure resources for a limited time.</li>
<li><strong>Permission to create resources in the subscription</strong>: Once you have an Azure account, you need to make sure that you have the enough permissions to create and interact with Azure Data Factory, Azure Storage Account and Azure SQL Database resource. You can work with a contributor role on the subscription or resource group to create these resources.</li>
</ul>
<p>Througout the article, you&#x2019;ll interact with the following resources:</p>
<ul>
<li>Azure Storage Account and Container</li>
<li>Azure SQL Server &amp; Database</li>
<li>Azure Data Factory and Pipelines</li>
</ul>
<h2 id="creating-an-azure-data-factory-using-azure-portal">Creating an Azure Data Factory using Azure Portal</h2>
<p>The first step in building a data pipeline with Azure Data Factory is to plan out your pipeline. This involves identifying the data sources and destinations, as well as any transformations or processing that needs to occur along the way. You&apos;ll also need to consider the frequency of data updates and any dependencies between different components of the pipeline. By taking the time to plan out your pipeline in advance, you can ensure that it meets your business requirements and is scalable for future growth.</p>
<p>In this section, you will create an Azure Data Factory using Azure Portal. Follow these steps below to begin:</p>
<ul>
<li>While in the Azure Portal, type <em>Azure Data Factory</em> in the search bar and click <strong>Data factories</strong> under the <strong>Services</strong>:</li>
</ul>
<p><img src="https://parveensingh.com/content/images/2023/05/01-data-factory-fsearch-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
<ul>
<li>Click the <strong>Create data factory</strong> button to create a new Azure Data Factory instance:</li>
</ul>
<p><img src="https://parveensingh.com/content/images/2023/05/02-data-factory-create-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
<ul>
<li>
<p>Fill out the following on the <strong>Create Data Factory</strong> popup under the <strong>Basics</strong> tab and click <strong>Review + create</strong>:</p>
<ul>
<li><strong>Resource group</strong>: Select the resource group created earlier.</li>
<li><strong>Name</strong>: Enter any name of your choice. Ensure that the name is globally unique.</li>
<li><strong>Region</strong>: Choose a location of your choice. (<strong>East US</strong> in this case)</li>
<li><strong>Version</strong>: Select <strong>V2</strong> version from the dropdown</li>
</ul>
<p><img src="https://parveensingh.com/content/images/2023/05/03-data-factory-basics-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Click <strong>Create</strong> once validation passes:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/04-data-factory-review-2.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
</ul>
<p><em><strong>Note:</strong></em> If you are creating ADF in your production environment you can use Networking tab to adjust the network settings. The following options are available for the endpoint:</p>
<ul>
<li>
<p><strong>Public Endpoint:</strong> Traffic can reach the service resource from on premises without using public endpoints.&#xA0;A Service Endpoint remains a publicly routable IP address.</p>
</li>
<li>
<p><strong>Private Endpoint:</strong> A Private Endpoint is a private IP in the address space of the virtual network where the private endpoint is configured.</p>
</li>
<li>
<p>The deployment process will take a few minutes. Wait for the deployment to finish and click <strong>Go to resource</strong>.</p>
<p><img src="https://parveensingh.com/content/images/2023/05/05-data-factory-complete-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>You will be taken to the Data Factory resource <strong>Overview</strong> tab where you will see the resource configuration and an overview of the data factory resource.</p>
<p><img src="https://parveensingh.com/content/images/2023/05/06-data-factory-overview-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
</ul>
<h2 id="preparing-azure-storage-account-to-use-with-azure-data-factory-as-a-source">Preparing Azure Storage Account to use with Azure Data Factory as a Source</h2>
<p>Once the Data Factory resource is created, it&#x2019;s time to configure your Source for the Data Factory. You need a sample data file stored in Azure Blob Storage that you will be using to move, transform, or process in your pipeline. This section will walk you through on deploying Azure Storage account and uploading a sample file that you will use for reference.</p>
<h3 id="creating-azure-storage-account-to-store-sample-file">Creating Azure Storage Account to Store Sample File</h3>
<p>Create a storage account in your Azure subscription to store the sample file by following the steps below:</p>
<ul>
<li>
<p>Type <em>storage account</em> in the Azure Portal search bar and click <strong>Storage accounts</strong> under <strong>Services</strong>:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/07-storage-account-search-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Click <strong>+ Create</strong> on the top left of the screen to create a storage account:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/08-storage-account-create-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>On the <strong>Basics</strong> tab of <strong>Create a storage account</strong> window, enter the following information and click <strong>Review</strong>:</p>
<ul>
<li><strong>Subscription</strong>: Select the subscription of choice from the list.</li>
<li><strong>Resource group</strong>: Select the resource group used for data factory earlier.</li>
<li><strong>Storage account name</strong>: Enter a <em><strong>globally unique name</strong></em> for your storage account.</li>
<li><strong>Location</strong>: Select the region to create the storage account. <strong>East US</strong> in this case.</li>
</ul>
<p><img src="https://parveensingh.com/content/images/2023/05/09-storage-account-basic-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Review your configuration and click the <strong>Create</strong> button to begin creating your new storage account:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/10-storage-account-review-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
</ul>
<h3 id="creating-and-uploading-sample-data-file-to-azure-blog-storage">Creating and Uploading Sample Data file to Azure Blog Storage</h3>
<p>Once your storage account is created, you will upload the sample data file to it. Follow the steps below to upload a file to Azure Storage Account using Azure Portal:</p>
<ul>
<li>
<p>Launch the notepad on your computer and paste the text below. Saved the file as <strong>test.txt</strong> on your desktop:</p>
<pre><code class="language-jsx">Firstname,Lastname
John,Smith
Emily,Johnson
William,Brown
Emma,Garcia
Michael,Martinez
Sophia,Lopez
Benjamin,Perez
Olivia,Robinson
Elijah,Carter
Isabella,Gonzalez
</code></pre>
<p><img src="https://parveensingh.com/content/images/2023/05/11-notepad-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Navigate to your Storage Account resource in the Azure Portal:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/12-storage-account-overview-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Click <strong>Containers</strong> under <strong>Data storage</strong> section from the left blade menu and click <strong>+ Container</strong>:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/13-storage-account-container-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>On the <strong>New container</strong> popup window, enter <em>userdata</em> name for your container and click <strong>Create</strong>:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/14-container-name-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Once created, click the container name from the list:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/15-container-list-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Click the <strong>Upload</strong> button to upload your sample data file:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/16-container-upload-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>On he Upload blob popup, select your sample data file which you created earlier and click <strong>Upload</strong>:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/17-container-upload-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Observe the <strong>user.txt</strong> file inside the <strong>userdata</strong> container once uploaded:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/18-container-userdata-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
</ul>
<p>Now that you have the storage account and sample file set up, it&#x2019;s time to work on Data factory pipeline.</p>
<h2 id="deploying-azure-sql-database-server-for-data-factory-sink">Deploying Azure SQL Database &amp; Server for Data Factory Sink</h2>
<p>Az SQL Database can be utilized as a sink in Azure Data Factory to store and manage data efficiently. As a cloud-based relational database service, Azure SQL Database offers a scalable and secure platform for storing and processing structured data. When used as a sink in Azure Data Factory, it becomes an integral part of the data integration and transformation pipeline.</p>
<p>Follow the instructions below to create a SQL Database and then prepare a sink service for ADF.</p>
<h3 id="create-an-azure-sql-database-server">Create an Azure SQL Database &amp; Server.</h3>
<ul>
<li>
<p>While in the Azure Portal, type <strong>SQL Database</strong> in the search bar and click <strong>SQL database</strong> under the <strong>Services</strong>:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/19-sql-search-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Click <strong>+ Create</strong> to create a SQL server instance:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/20-sql-create.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>On the <strong>Basics</strong> tab of <strong>Create SQL Database</strong>, fill the following information:</p>
<ul>
<li><strong>Resource Group</strong>: Select the resource group used for data factory earlier.</li>
<li><strong>Database Name</strong>: Enter a globally unique name for the database.</li>
</ul>
<p><img src="https://parveensingh.com/content/images/2023/05/21-sql-basics-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Under the <strong>Database details</strong>, for the <strong>Server</strong> option, click <strong>Create a new</strong> and use the following information and click <strong>Ok</strong> once you fill the information:</p>
<ul>
<li><strong>Server name</strong>: Enter a globally unique name, <em>adfdemosql</em> in this case.</li>
<li><strong>Location</strong>: Select <strong>East US</strong> from the list</li>
<li><strong>Authentication method</strong>: Choose <strong>Use SQL authentication</strong> from the options</li>
<li><strong>Server admin login</strong>: Enter <em>dbadmin</em></li>
<li><strong>Password/Confirm password</strong>: Enter a strong password of your choice</li>
</ul>
<p><img src="https://parveensingh.com/content/images/2023/05/22-authentication-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
<p>You will be taken back to the <strong>Create SQL database</strong> window.</p>
</li>
<li>
<p>Scroll down on the <strong>Basics</strong> tab and use the following information. Click <strong>Next: Networking</strong> once done:</p>
<ul>
<li><strong>Want to use SQL elastic pool</strong>: Select <strong>No</strong></li>
<li><strong>Workload environment</strong>: Select <strong>Development</strong></li>
<li><strong>Backup storage redundancy</strong>: Select <strong>Locally-redundant backup storage</strong></li>
</ul>
<p><img src="https://parveensingh.com/content/images/2023/05/23-sql-workloads-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
</ul>
<p>Elastic pools in Azure DBs implement a cost-effective solution suitable for unpredictable usage demands. These elastic pools can configure multiple SQL databases with resource pooling. Therefore, you have the flexibility to build a high-end database server, and your databases can leverage that based on their workload requirements. These elastic pools enable you to optimize costs for several databases without compromising performance.</p>
<p>Under the <strong>Backup storage redundancy</strong> section you have the following replication options. You can choose one of the following storage redundancies for backups based on your workload requirement in the production environment:</p>
<ul>
<li>
<p><strong>Locally redundant storage (LRS)</strong>: Copies your backups synchronously three times within a single physical location in the primary region. LRS is the least expensive storage option, but we don&apos;t recommend it for applications that require resiliency to regional outages or a guarantee of high data durability.</p>
</li>
<li>
<p><strong>Zone-redundant storage (ZRS)</strong>: Copies your backups synchronously across three Azure availability zones in the primary region.</p>
</li>
<li>
<p><strong>Geo-redundant storage (GRS)</strong>: Copies your backups synchronously three times within a single physical location in the primary region by using LRS. Then it copies your data asynchronously three times to a single physical location in the&#xA0;paired&#xA0;secondary region.</p>
</li>
<li>
<p>On the <strong>Networking</strong> tab, toggle <strong>Add current client IP address</strong> to <strong>Yes</strong> under <strong>Firewall rules</strong> and click <strong>Next: Review + create</strong>:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/24-sql-networking-rules-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
<p>The SQL database access is disabled for external access by default. If you need to interact with the database resource outside the Azure network, you will need to enable this access to whitelist your IP address. For secure communication, you must use private endpoints to access the SQL database resources. However, the private endpoint is not covered as part of this article.</p>
</li>
<li>
<p>Review all the details and click <strong>Create</strong> to begin the resource deployment:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/25-sq-review.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
<p><em><strong>Note:</strong></em> Wait for the deployment to complete as it may take upto 10 minutes to finish.</p>
</li>
<li>
<p>Click on <strong>Go to resource</strong> button once the deployment finishes:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/26-sql-deployment-complete.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>On the <strong>Overview</strong> tab of <strong>SQL database</strong>, click <strong>Configure</strong> under <strong>Configure access</strong>:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/27-sql-overview.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Check the box for <strong>Allow Azure services and resources to access this server</strong> and click <strong>Save</strong>:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/28-sql-network-rules.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
</ul>
<p>This ensure the Azure Data Factory service can access the SQL server resource since it&#x2019;s on the Azure backbone network and the trust is established between Azure resouces.</p>
<h3 id="create-a-sink-sql-table-for-azure-data-factory-pipeline">Create a Sink SQL Table for Azure Data Factory pipeline.</h3>
<ul>
<li>
<p>While on the <strong>Overview</strong> tab of the SQL database, click <strong>Query editor (preview)</strong> from the left blade menu:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/29-sql-editor.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Use the <strong>SQL server authentication</strong> column to login to SQL server with the credential that you configured during deployment and click <strong>OK</strong> button.</p>
<p><img src="https://parveensingh.com/content/images/2023/05/30-sql-authentication.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Once logged in, a <strong>Query</strong> editor window will open:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/31-query-editor.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Enter the following script in the query editor and click <strong>Run</strong>.</p>
<pre><code class="language-sql">CREATE TABLE dbo.emp
(
FirstName varchar(50),
LastName varchar(50)
)
GO
CREATE CLUSTERED INDEX IX_emp_ID ON dbo.emp (FirstName);
</code></pre>
<p><img src="https://parveensingh.com/content/images/2023/05/32-query-code.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>From the left panel, expand the <strong>Tables</strong> folder and observe the <strong>dbo.emp</strong> table:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/33-db-tables.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
</ul>
<h2 id="working-with-data-pipeline-in-azure-data-factory">Working with Data Pipeline in Azure Data Factory</h2>
<p>Once you have planned out your data pipeline, it&apos;s time to create and configure it in Azure Data Factory. This involves setting up the necessary connections to your data sources and destinations, as well as defining any transformations or processing that needs to occur. You can use the drag-and-drop interface in Azure Data Factory to easily create and configure your pipeline components, or you can use code if you prefer. Once your pipeline is configured, you can test it to ensure that it is working as expected and make any necessary adjustments before deploying it to production.</p>
<h3 id="configuring-the-linked-services-in-azure-data-factory-adf">Configuring the Linked Services in Azure Data Factory (ADF)</h3>
<ul>
<li>
<p>Navigate to your Azure Data Factory instance from the resources and click <strong>Launch studio</strong>:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/34-data-factory-launch.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
<p>If you are using incognito browser, ensure the cookies are enabled or browse without an incognito mode.</p>
</li>
<li>
<p>Expand the left many and click <strong>Author:</strong></p>
<p><img src="https://parveensingh.com/content/images/2023/05/35-data-factory-menu.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Click <strong>+</strong> icon <strong><strong>followed by <strong>Pipeline</strong> and click <strong>Pipeline</strong> option</strong>:</strong></p>
<p><img src="https://parveensingh.com/content/images/2023/05/36-data-factory-pipeline.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
<p>A pipeline window will open with a blank pipeline. A properties tab will appear on the right-side of the window as well to give a name to the pipeline.</p>
</li>
<li>
<p>Type <em>CopyStoragetoSQL</em> in the <strong>Name</strong> section of the <strong>Properties</strong> window:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/37-pipeline-name.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>From the <strong>Activities</strong> panel, expand the <strong>Move &amp; transform</strong> section and drag the <strong>Copy data</strong> into the middle of the screen in the canvas:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/38-pipeline-copy-data.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
<p>A tab on the bottom of the screen will appear. You will make changes to the Copy data activity using this section.</p>
</li>
<li>
<p>Click <strong>Source</strong> tab from the bottom of the screen and click <strong>+ New</strong> to create a source:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/39-pipeline-source.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
<p>A <strong>New dataset</strong> popup will appear.</p>
</li>
<li>
<p>From the list of the data store, select <strong>Azure Blob Storage</strong> and click <strong>Continue</strong>:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/40-pipeline-source-storage.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Select <strong>DelemitedText</strong> on the <strong>Select format</strong> window and click <strong>Continue</strong>:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/41-pipeline-source-format.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>On the <strong>Set Properties</strong> page, click on the dropdown for <strong>Linkedin service</strong> and click <strong>+ New</strong>:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/42-pipeline-link.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>On the <strong>New linked service</strong> dialog box, select the subscription under <strong>Azure subscription</strong> option where the storage account is created and select the storage account in <strong>Storage account name</strong>:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/43-pipeline-storage.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Click the <strong>Test connection</strong> text that appears on the bottom right and ensure <strong>Connection successful</strong> message appears confirming the authentication took place:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/44-pipeline-connection.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Finally, click the <strong>Create</strong> button to create your new connection:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/45-pipeline-source-create.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>On the <strong>Set Properties</strong> window, under <strong>File path</strong>, click the dropdown arrow and click <strong>From root</strong>:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/46-pipeline-source-filepath.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Click through <strong>userdata</strong> folder on the first page. Select <strong>users.txt</strong> file and click <strong>OK</strong>:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/47-pipeline-source-location.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>The <strong>File path</strong> will be updated to match the location of the source file. Click <strong>OK</strong> on the page to save the source settings:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/48-pipeline-source-create.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Click <strong>Sink</strong> tab in the <strong>Copy data</strong> activity and click on new <strong>+ New</strong> button.</p>
<p><img src="https://parveensingh.com/content/images/2023/05/49-pipeline-sink.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Select <strong>Azure SQL Database</strong> in the New dataset pane and click on <strong>Continue</strong> button.</p>
<p><img src="https://parveensingh.com/content/images/2023/05/50-pipeline-sink-sql.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Choose the following settings for the <strong>New linked service</strong> window for the sink settings and click <strong>Test connection</strong>:</p>
<ul>
<li><strong>Azure subscription</strong>: Choose the subcription that stores your SQL database resource.</li>
<li><strong>Server name:</strong> Choose the SQL server created earlier.</li>
<li><strong>Database name:</strong> Choose the database created earlier.</li>
<li><strong>Authentication type</strong>: Choose <strong>SQL authentication</strong></li>
<li><strong>User name:</strong> Enter <em>dbadmin</em></li>
<li><strong>Password:</strong> Type the password for the database configured earlier</li>
</ul>
<p><img src="https://parveensingh.com/content/images/2023/05/51-pipeline-sink-auth.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Click the dropdown for Table name and select dbo.emp from the list:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/52-pipeline-sink-table.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Ensure the <strong>Import</strong> <strong>schema</strong> is updated to <strong>From connection/store</strong>:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/53-pipeline-sink-schema.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Click the <strong>OK</strong> button to save the settings.</p>
</li>
<li>
<p>While on the <strong>Sink</strong> tab, click <strong>Upsert</strong> for the <strong>Write behavior</strong> and select <strong>FirstName</strong> from the dropdown for the <strong>Key columns</strong>:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/54-pipeline-sink-write.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
<p>The <strong>Upsert</strong> setting in the ADF sink settings ensure the inserted data is not duplicate. The <strong>Key column</strong> controls the data matching and check for any existing record that matches the <strong>FirstName</strong> entity.</p>
</li>
<li>
<p>Click on <strong>Mappings</strong> tab and click <strong>Import schemas</strong> to define the column mappings between the source and destination:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/55-pipeline-mapping.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Click the <strong>Debug</strong> icon from the top menu bar to test the pipeline:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/56-pipeline-debug.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
<p>An output window will appear on the bottom of the screen and the pipeline will be queued to run.</p>
</li>
<li>
<p>Click on the <strong>Details</strong> icon to debug the pipeline run:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/57-pipeline-details.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Observe the data transferred from <strong>Azure Blob Storage</strong> to <strong>Azure SQL Database:</strong></p>
<p><img src="https://parveensingh.com/content/images/2023/05/58-pipeline-debug-detail.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Close the <strong>Details</strong> popup by pressing the <strong>X</strong> icon on the top right:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/59-debug-detail-close.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Click <strong>Publish all</strong> from the top menu and click <strong>Publish</strong> on the popup that appears:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/60-pipeline-publish.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
<p><img src="https://parveensingh.com/content/images/2023/05/61-pipeline-publish-all.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
<p>The pipeline will save and publish for scheduled triggers.</p>
</li>
</ul>
<h3 id="configuring-trigger-for-the-data-pipeline-in-adf">Configuring Trigger for the Data Pipeline in ADF</h3>
<ul>
<li>
<p>While on the pipeline page, click <strong>Add trigger</strong> button to create a scheduled trigger:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/62-pipeline-trigger.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Click <strong>New/Edit</strong> to create a new trigger:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/63-pipeline-trigger-new.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>On the <strong>Add triggers</strong> popup, click <strong>+ New</strong> after selecting the dropdown:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/64-pipeline-add-trigger.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>On the <strong>New trigger</strong> window, configure the following trigger settings and click <strong>OK</strong>:</p>
<ul>
<li><strong>Name</strong>: Enter <em>5-minutes-schedule</em></li>
<li><strong>Type</strong>: Select <strong>Scheduled</strong></li>
<li><strong>Start time</strong>: Specify the date and time when you want the data pipeline to start running.</li>
<li><strong>End time</strong>: Set an optional end time to define when the data pipeline should stop running.</li>
<li><strong>Time zone</strong>: Select the time zone in which the trigger should operate.</li>
<li><strong>Recurrence</strong>: Choose <strong>5 minutes</strong> to configure the pipeline to run every 5 minutes. You can choose the frequency based on the your requirements.</li>
</ul>
<p><img src="https://parveensingh.com/content/images/2023/05/65-pipieline-new-trigger.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Ignore the warning on the Parameters and click <strong>OK</strong>:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/66-pipeline-save-trigger.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>In order to activate the pipeline trigger, click <strong>Publish all</strong> and <strong>Publish</strong> on the popup window that appears:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/67-pipeline-publish-trigger.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
</ul>
<p><em><strong>Note</strong></em>: If you wish to monitor the pipeline and triggers, consider waiting for the first pipeline trigger run to take place.</p>
<h3 id="monitor-the-data-transfer">Monitor the Data Transfer</h3>
<p>Monitoring and troubleshooting your data pipeline is an important step in ensuring its reliability and effectiveness. Azure Data Factory provides several tools for monitoring your pipeline, including built-in logging and metrics, as well as integration with Azure Monitor for more advanced monitoring and alerting. You can also use Azure Data Factory&apos;s built-in debugging tools to troubleshoot any issues that arise during pipeline execution. By regularly monitoring and troubleshooting your data pipeline, you can ensure that it is running smoothly and delivering the data you need when you need it.</p>
<ul>
<li>
<p>Navigate to the <strong>Monitor</strong> tab from the left menu items and click <strong>Pipeline runs</strong>:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/68-pipeline-monitor.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Under the <strong>Triggered</strong> tab, observe the pipeline runs in the past 24 hours:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/69-pipeline-runs.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Use the <strong>Monitor</strong> tab to track the progress of data transfer and ensure its successful completion.</p>
</li>
<li>
<p>To validate the pipeline runs, navigate to the SQL Database and click on <strong>Query editor</strong> <strong>(preview)</strong> in left-hand side of pane:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/70-sql-query-editor.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Use the SQL server credential to login:</p>
<p><img src="https://parveensingh.com/content/images/2023/05/30-sql-authentication-1.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
<li>
<p>Now enter the following script query in <strong>Query editor</strong> and click <strong>Run:</strong></p>
<pre><code class="language-sql">SELECT&#xA0;* FROM&#xA0;[dbo].[emp]
</code></pre>
<p><img src="https://parveensingh.com/content/images/2023/05/71-sql-query-results.png" alt="Step-by-Step Guide to Building Data Pipelines with Azure Data Factory" loading="lazy"></p>
</li>
</ul>
<p><em><strong>Note</strong></em>: Don&#x2019;t forget to delete the resources once you are done. You don&#x2019;t want to leave them around as the cost may add up based on the tier you used for SQL server as well as the pipeline run frequency.</p>
<h2 id="conclusion">Conclusion</h2>
<p>You learnt the step-by-step process of deploying an Azure Storage Account &amp; Azure SQL Database for an Azure Data Factory pipeline. Remember to configure the trigger to schedule the pipeline execution and monitor the data transfer process for any potential errors or issues. With Azure SQL Database and Azure Data Factory, you can efficiently manage and integrate your data, enabling valuable insights and analytics for your business.</p>
<p><em><strong>Consider subscribing for more content if you enjoyed reading this article.</strong></em></p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[PowerShell Tee-Object: Smarter Way to Process Output]]></title><description><![CDATA[<p>PowerShell is a widely used automation and configuration tool that allows system administrators and developers to perform tasks in a more efficient and streamlined manner. One of the key features of PowerShell is its ability to process and manipulate output from commands and scripts.</p><p>In this blog, we&apos;ll</p>]]></description><link>https://parveensingh.com/powershell-tee-object-smarter-way-to-process-output/</link><guid isPermaLink="false">643e0f80a3149404f97d9143</guid><category><![CDATA[Powershell]]></category><dc:creator><![CDATA[Parveen Singh]]></dc:creator><pubDate>Tue, 18 Apr 2023 03:42:35 GMT</pubDate><media:content url="https://parveensingh.com/content/images/2023/04/PowerShell-Basics.png" medium="image"/><content:encoded><![CDATA[<img src="https://parveensingh.com/content/images/2023/04/PowerShell-Basics.png" alt="PowerShell Tee-Object: Smarter Way to Process Output"><p>PowerShell is a widely used automation and configuration tool that allows system administrators and developers to perform tasks in a more efficient and streamlined manner. One of the key features of PowerShell is its ability to process and manipulate output from commands and scripts.</p><p>In this blog, we&apos;ll explore the PowerShell <code>Tee-Object</code> cmdlet, which is a powerful tool for processing output. We&apos;ll cover the basics of <code>Tee-Object</code>, its syntax, and its various use cases. By the end of this blog, you&apos;ll have a solid understanding of how <code>Tee-Object</code> works and how you can use it to make your PowerShell scripts more efficient and effective.</p><!--kg-card-begin: markdown--><ol>
<li><a href="#prerequisites">Prerequisites</a></li>
<li><a href="#step-1-understanding-tee-object">Understanding Tee-Object</a></li>
<li><a href="#step-2-using-tee-object-in-practice">Using Tee-Object in Practice</a>
<ul>
<li><a href="#example-1-saving-output-to-a-file">Saving output to a file</a></li>
<li><a href="#example-2-appending-output-to-an-existing-file">Appending outpu to an existing file</a></li>
<li><a href="#example-3-storing-output-in-a-variable">Storing output in a variable</a></li>
</ul>
</li>
<li><a href="#conclusion">Conclusion</a></li>
<li><a href="#reference">Reference</a></li>
</ol>
<!--kg-card-end: markdown--><h2 id="prerequisites">Prerequisites</h2><p>Before we dive into <code>Tee-Object</code>, let&apos;s make sure we have the necessary prerequisites in place.</p><ul><li>A basic understanding of PowerShell scripting</li><li>A PowerShell console or terminal</li></ul><h2 id="step-1-understanding-tee-object">Step 1: Understanding Tee-Object</h2><p><code>Tee-Object</code> is a cmdlet that allows you to redirect output to a file and the console simultaneously. This is particularly useful when you want to save the output of a command or script to a file, but you also want to see the output in the console in real-time.</p><p>The syntax for <code>Tee-Object</code> is as follows:</p><pre><code>&lt;command&gt; | Tee-Object [-FilePath] &lt;string&gt; [-Append] [-InputObject &lt;psobject&gt;] [-NoClobber] [-Variable &lt;string&gt;] [&lt;CommonParameters&gt;]

</code></pre><p>Here&apos;s a breakdown of the different parameters:</p><ul><li><code>FilePath</code>: Specifies the path to the file where you want to save the output. This parameter is required.</li><li><code>Append</code>: Specifies that the output should be appended to the end of the file, rather than overwriting the file.</li><li><code>InputObject</code>: Specifies the input object that you want to process. If you don&apos;t specify this parameter, <code>Tee-Object</code> will process the output of the command or script that precedes it in the pipeline.</li><li><code>NoClobber</code>: Specifies that <code>Tee-Object</code> should not overwrite an existing file with the same name. If a file with the same name already exists, <code>Tee-Object</code> will not create a new file.</li><li><code>Variable</code>: Specifies a variable to store the output in.</li></ul><h2 id="step-2-using-tee-object-in-practice">Step 2: Using Tee-Object in Practice</h2><p>Let&apos;s look at a few examples of how you can use <code>Tee-Object</code> in practice.</p><h3 id="example-1-saving-output-to-a-file">Example 1: Saving output to a file</h3><p>Suppose you want to save the output of a PowerShell command to a file. You can use <code>Tee-Object</code> to do this as follows:</p><pre><code>Get-Process | Tee-Object -FilePath .\processes.txt

</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/04/2023-04-17_20-25-38.png" class="kg-image" alt="PowerShell Tee-Object: Smarter Way to Process Output" loading="lazy" width="853" height="376" srcset="https://parveensingh.com/content/images/size/w600/2023/04/2023-04-17_20-25-38.png 600w, https://parveensingh.com/content/images/2023/04/2023-04-17_20-25-38.png 853w" sizes="(min-width: 720px) 720px"><figcaption>PowerShell Get-Process | Tee-Object command</figcaption></figure><p>This command will save the output of the <code>Get-Process</code> command to a file called <code>processes.txt</code> in the current directory. It will also display the output in the console in real-time.</p><h3 id="example-2-appending-output-to-an-existing-file">Example 2: Appending output to an existing file</h3><p>Suppose you want to append the output of a PowerShell command to an existing file. You can use <code>Tee-Object</code> to do this as follows:</p><pre><code>Get-ChildItem C:\ | Tee-Object -FilePath .\files.txt -Append

</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/04/image-2.png" class="kg-image" alt="PowerShell Tee-Object: Smarter Way to Process Output" loading="lazy" width="804" height="445" srcset="https://parveensingh.com/content/images/size/w600/2023/04/image-2.png 600w, https://parveensingh.com/content/images/2023/04/image-2.png 804w" sizes="(min-width: 720px) 720px"><figcaption>PowerShell Tee-Object Append command</figcaption></figure><p>This command will append the output of the <code>Get-ChildItem</code> command to a file called <code>files.txt</code> in the <code>C:\\</code> directory. If the file does not exist, <code>Tee-Object</code> will create it. If the file already exists, <code>Tee-Object</code> will append the output to the end of the file.</p><p>Running the following command will also yield the same results:</p><pre><code class="language-jsx">more .\\files.txt
</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/04/image-1.png" class="kg-image" alt="PowerShell Tee-Object: Smarter Way to Process Output" loading="lazy" width="659" height="359" srcset="https://parveensingh.com/content/images/size/w600/2023/04/image-1.png 600w, https://parveensingh.com/content/images/2023/04/image-1.png 659w"><figcaption>PowerShell more command</figcaption></figure><h3 id="example-3-storing-output-in-a-variable">Example 3: Storing output in a variable</h3><p>Suppose you want to store the output of a PowerShell command in a variable. You can use <code>Tee-Object</code> to do this as follows:</p><pre><code>Get-Service | Tee-Object -Variable Services

</code></pre><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2023/04/image-3.png" class="kg-image" alt="PowerShell Tee-Object: Smarter Way to Process Output" loading="lazy" width="625" height="361" srcset="https://parveensingh.com/content/images/size/w600/2023/04/image-3.png 600w, https://parveensingh.com/content/images/2023/04/image-3.png 625w"><figcaption>PowerShell Tee-object Variable Command</figcaption></figure><p>This command will store the output of the <code>Get-Service</code> command in a variable called <code>Services</code>. You can then use this variable in subsequent commands or scripts by running <code>echo $Services</code>.</p><h2 id="conclusion">Conclusion</h2><p>In this blog, we&apos;ve explored the PowerShell <code>Tee-Object</code> cmdlet, which is a powerful tool for processing output. We&apos;ve covered the basics of <code>Tee-Object</code>, its syntax, and its various use cases. By using <code>Tee-Object</code> in your PowerShell scripts, you can make your scripts more efficient and effective.</p><h2 id="reference">Reference</h2><p>For more information on <code>Tee-Object</code>, check out the official <a href="https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/tee-object">Microsoft documentation</a>.</p>]]></content:encoded></item><item><title><![CDATA[Get Started with Azure Cloud]]></title><description><![CDATA[Learn how you can benefit from the Azure Cloud by understanding some basic concepts of the Azure Cloud.]]></description><link>https://parveensingh.com/get-started-with-azure-cloud/</link><guid isPermaLink="false">6407462da3149404f97d909f</guid><category><![CDATA[Azure]]></category><dc:creator><![CDATA[Parveen Singh]]></dc:creator><pubDate>Wed, 15 Mar 2023 08:38:24 GMT</pubDate><media:content url="https://parveensingh.com/content/images/2023/03/Cloud-GettingStarted2023.png" medium="image"/><content:encoded><![CDATA[<img src="https://parveensingh.com/content/images/2023/03/Cloud-GettingStarted2023.png" alt="Get Started with Azure Cloud"><p>Cloud computing has revolutionized the IT industry by providing affordable and scalable computing resources to businesses of all sizes. Microsoft Azure Cloud is one of the leading cloud platforms, offering a wide range of services that enable organizations to build, deploy, and manage their applications and infrastructure. In this blog post, we will explore how you can get started with Azure Cloud in 2023 and take advantage of its benefits.</p><h2 id="table-of-content">Table of Content</h2><!--kg-card-begin: markdown--><ul>
<li><a href="#benefits-of-azure-cloud">Benefits of Azure Cloud</a></li>
<li><a href="#getting-started-with-azure-cloud">Getting Started with Azure Cloud</a>
<ul>
<li><a href="#azure-hierarchy">Azure Hierarchy</a></li>
<li><a href="#understand-management-groups-and-subscriptions">Understand Management Groups and Subscriptions</a></li>
<li><a href="#understand-resource-groups">Understand Resource Groups</a></li>
<li><a href="#understand-directories">Understand Directories</a></li>
<li><a href="#creating-users-and-groups">Creating Users and Groups</a></li>
<li><a href="#role-assignments">Role Assignments</a></li>
<li><a href="#managing-resources-with-azure-portal">Managing Resources With Azure Portal</a></li>
<li><a href="#what-is-azure-cli">What is Azure CLI</a></li>
<li><a href="#managing-resources-with-azure-cli">Managing Resources with Azure CLI</a></li>
</ul>
</li>
<li><a href="#what-is-azure-cloud-shell">What is Azure Cloud Shell</a></li>
<li><a href="#managing-resources-with-cloud-shell">Managing Resources with Cloud Shell</a></li>
<li><a href="#what-is-powershell">What is PowerShell</a></li>
<li><a href="#managing-resources-with-powershell">Managing Resources with PowerShell</a></li>
<li><a href="#what-is-azure-sdk">What is Azure SDK</a></li>
<li><a href="#managing-resources-with-azure-sdk">Managing Resources with Azure SDK</a></li>
<li><a href="#creating-a-static-website">Creating a static website</a></li>
<li><a href="#conclusion">Conclusion</a></li>
</ul>
<!--kg-card-end: markdown--><p></p><h2 id="benefits-of-azure-cloud">Benefits of Azure Cloud</h2><p>Azure Cloud provides numerous benefits that can help businesses streamline their operations and reduce costs. One of the most significant benefits of Azure Cloud is its scalability. With Azure, you can quickly scale up or down your computing resources based on your business needs, which can reduce costs and improve efficiency.</p><p>Another benefit of Azure is its flexibility. With Azure, you can choose from a wide range of services that can be customized to meet your specific business requirements. Whether you need to build a web application or deploy and manage your infrastructure, Azure has a solution for you.</p><p>Azure also provides robust security features that can protect your data and applications from cyber threats. With Azure&#x2019;s built-in security features, you can ensure that your applications are always secure and compliant with industry regulations.</p><h2 id="getting-started-with-azure-cloud">Getting Started with Azure Cloud</h2><p>To get started with Azure Cloud, you first need to create an Azure account. You can sign up for a free account that provides access to a limited set of services or choose a paid subscription that provides access to all Azure services.</p><p>Once you have created an Azure account, you can start exploring Azure&#x2019;s services and building your applications. Azure provides a wide range of tools and resources that can help you get started quickly, including documentation, tutorials, and sample code.</p><h3 id="azure-hierarchy"><strong>Azure Hierarchy</strong></h3><p>Azure hierarchy refers to the organizational structure of Azure subscriptions, management groups, and resource groups. Understanding Azure hierarchy is essential for managing and organizing resources effectively.</p><p>By understanding Azure hierarchy and using the right tools, you can leverage the power of Azure Cloud to build, deploy, and manage your applications and infrastructure with ease.</p><h3 id="understand-management-groups-and-subscriptions"><strong>Understand Management Groups and Subscriptions</strong></h3><p>Azure management groups provide a way to manage access, policy, and compliance across multiple subscriptions. Management groups enable you to group subscriptions together and apply policies and security controls at scale. By using management groups, you can apply policies and security controls to all the subscriptions within the group, which can help you maintain compliance and improve governance.</p><p>Azure subscriptions provide a way to manage access, billing, and resources within Azure. A subscription is a logical container for Azure resources, such as virtual machines, storage accounts, and databases. Subscriptions provide access control boundaries, which allow you to control who has access to your resources and how much they can use. Azure subscriptions also provide different pricing tiers and offers, which can help you optimize cost and performance based on your business needs.</p><p>When creating a subscription, you need to choose a pricing tier and offer that best suits your business requirements. You can choose from different pricing tiers, such as Free, Pay-As-You-Go, and Enterprise, which provide different levels of features and support. You can also choose from different offers, such as Azure in Open, Azure for Students, and Azure Dev/Test, which provide discounts and promotions based on your usage and needs.</p><p>By understanding management groups and subscriptions, you can organize, manage, and optimize your resources effectively on Azure Cloud.</p><h3 id="understand-resource-groups"><strong>Understand Resource Groups</strong></h3><p>Resource groups are a fundamental concept in Azure that allows you to manage and organize resources based on their function or lifecycle. By grouping resources together, you can apply policies, manage permissions, and monitor usage more effectively. When creating a resource group, you can specify the region where the resources will be deployed, which can help reduce latency and improve performance.</p><figure class="kg-card kg-image-card"><img src="https://parveensingh.com/content/images/2023/03/Azure--2019--framework.jpeg" class="kg-image" alt="Get Started with Azure Cloud" loading="lazy" width="853" height="1075" srcset="https://parveensingh.com/content/images/size/w600/2023/03/Azure--2019--framework.jpeg 600w, https://parveensingh.com/content/images/2023/03/Azure--2019--framework.jpeg 853w" sizes="(min-width: 720px) 720px"></figure><h3 id="understand-directories"><strong>Understand Directories</strong></h3><p>Azure Directories is a container for objects, such as users, groups, and applications, within an Azure tenant. By creating directories, you can organize objects and control access to resources. Directories enable you to manage identities and access resources in a centralized location. You can use Azure AD PowerShell, Azure AD Graph API, Microsoft Graph API, or the Azure portal to manage directories effectively.</p><h3 id="creating-users-and-groups"><strong>Creating Users and Groups</strong></h3><p>To create users and groups in Azure, you can use the Azure portal, Azure AD PowerShell, Azure AD Graph API, or Microsoft Graph API. By creating users and groups, you can manage access to resources and assign roles to users. Role assignments allow you to control access to resources and manage permissions based on the user&apos;s role.</p><h3 id="role-assignments"><strong>Role Assignments</strong></h3><p>Azure Cloud provides role-based access control (RBAC) that allows you to grant access to resources based on the user&apos;s role. Role assignments can be made at the subscription, resource group, or resource level. By creating custom roles, you can define granular permissions and control access to resources more effectively.</p><p>Managing resources with the Azure portal is an easy and intuitive way to manage your resources. The portal provides a graphical user interface that allows you to create, configure, and manage resources with ease. You can also use the portal to monitor the performance and availability of your resources.</p><h3 id="managing-resources-with-azure-portal"><strong>Managing Resources With Azure Portal</strong></h3><p>Managing resources with the Azure portal is an easy and intuitive way to manage your resources. The portal provides a graphical user interface that allows you to create, configure, and manage resources with ease. You can also use the portal to monitor the performance and availability of your resources.</p><h3 id="what-is-azure-cli"><strong>What is Azure CLI</strong></h3><p>Azure CLI is a command-line interface that allows you to manage Azure resources using a terminal or command prompt. With Azure CLI, you can create, configure, and manage resources using simple commands. Azure CLI is available for Windows, macOS, and Linux, and can be used to manage resources for Azure Cloud, Azure Stack, and Azure Government.</p><p>Azure CLI provides a powerful set of features that can help you manage your resources effectively. Some of the key features of Azure CLI include support for multiple output formats, support for scripting and automation, and support for Azure Resource Manager (ARM) templates.</p><h3 id="managing-resources-with-azure-cli"><strong>Managing Resources with Azure CLI</strong></h3><p>Azure CLI provides a powerful set of features that can help you manage your resources effectively. Some of the key features of Azure CLI include support for multiple output formats, support for scripting and automation, and support for Azure Resource Manager (ARM) templates. With Azure CLI, you can create, configure, and manage resources using simple commands, making it an efficient tool for managing resources in Azure Cloud.</p><h3 id="what-is-azure-cloud-shell">What is Azure Cloud Shell</h3><p>Azure Cloud Shell is a browser-based shell environment that allows you to manage Azure resources using a command-line interface (CLI). With Azure Cloud Shell, you can use either Bash or PowerShell to create, configure, and manage resources in Azure. Azure Cloud Shell provides a convenient and secure way to manage your resources from anywhere, without the need to install any software on your local machine.</p><h3 id="managing-resources-with-cloud-shell">Managing Resources with Cloud Shell</h3><p>Azure Cloud Shell provides a powerful set of features that can help you manage your resources effectively. With Cloud Shell, you can use either Bash or PowerShell to create, configure, and manage resources in Azure. Some of the key features of Cloud Shell include support for multiple output formats, support for scripting and automation, and support for Azure Resource Manager (ARM) templates.</p><h3 id="what-is-powershell">What is PowerShell</h3><p>PowerShell is a command-line shell and scripting language that is built on top of the .NET Framework. With PowerShell, you can automate tasks and manage resources in Windows and Azure. PowerShell provides a powerful set of features that can help you manage your resources effectively, including support for modules, cmdlets, and scripts.</p><h3 id="managing-resources-with-powershell">Managing Resources with PowerShell</h3><p>PowerShell provides a powerful set of features that can help you manage your resources effectively. With PowerShell, you can use simple commands and scripts to create, configure, and manage resources in Azure. Some of the key features of PowerShell include support for modules, cmdlets, and scripts, which can help you automate tasks and manage resources more efficiently.</p><h3 id="what-is-azure-sdk">What is Azure SDK</h3><p>Azure SDK is a collection of libraries and tools that allow you to build, deploy, and manage applications and services on Azure. The Azure SDK provides a comprehensive set of tools and resources that can help you develop and deploy your applications quickly and easily. The Azure SDK includes libraries for .NET, Java, Python, and Node.js, as well as tools for managing storage, compute, and networking resources.</p><h3 id="managing-resources-with-azure-sdk">Managing Resources with Azure SDK</h3><p>Azure SDK provides a powerful set of tools and resources that can help you manage your resources effectively. With Azure SDK, you can use libraries and tools to build, deploy, and manage applications and services on Azure. Some of the key features of Azure SDK include support for multiple programming languages, support for Azure Resource Manager (ARM) templates, and support for tools such as Azure CLI and Azure PowerShell.</p><h3 id="creating-a-static-website">Creating a static website</h3><p>Creating a static website is one of the simplest ways to get started with Azure Cloud. You can use Azure Blob Storage to host static content and Azure CDN to improve performance and availability. Azure Blob Storage provides a scalable and cost-effective solution for hosting static content, such as HTML, CSS, and JavaScript files. Azure CDN can improve the performance and availability of your website by caching content closer to your users and minimizing latency.</p><p>By using Azure Blob Storage and Azure CDN, you can create a fast and reliable static website that can be deployed and managed easily on Azure</p><h3 id="conclusion">Conclusion</h3><p>Azure Cloud is an excellent platform for businesses looking to take advantage of cloud computing. With its scalability, flexibility, and robust security features, Azure can help businesses streamline their operations and reduce costs. To get started with Azure, you can sign up for a free account and start exploring Azure&#x2019;s services and tools. With Azure, you can build, deploy, and manage your applications and infrastructure with ease.</p>]]></content:encoded></item><item><title><![CDATA[Azure Network Engineer: AZ-700 Study Guide]]></title><description><![CDATA[Work Towards Your Azure Network Engineer Exam With Confidence]]></description><link>https://parveensingh.com/az-700-study-guide/</link><guid isPermaLink="false">6191de9eaabbf0058d9dd1f8</guid><category><![CDATA[Exams Study Guides]]></category><category><![CDATA[Azure]]></category><dc:creator><![CDATA[Parveen Singh]]></dc:creator><pubDate>Mon, 15 Nov 2021 16:00:00 GMT</pubDate><media:content url="https://parveensingh.com/content/images/2021/11/AzureNetwork-ExamGuide.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://parveensingh.com/content/images/2021/11/AzureNetwork-ExamGuide.jpg" alt="Azure Network Engineer: AZ-700 Study Guide"><p>The Azure Network Engineer exam is an associate-level exam in the Azure domain exams that is highly focused on the Networking aspect of Azure services. However, the exam outline covers many essential topics that you are expected to know in your day-to-day life regardless of everything.</p><p>In this article, you will find the resources and recommendations if you are preparing for the Azure Network Engineer exam soon. This post is super long, so use the Table of Content to find the appropriate section you are interested in and bookmark it for later use.</p><p><strong><em>Check out the Study Guides for other exams that might be of interest to you.</em></strong></p><ul><li><em><a href="https://parveensingh.com/az-400-guide/">Azure DevOps Exam Guide</a></em></li><li><em><a href="https://parveensingh.com/how-to-pass-az-204-in-30-days/">Azure Developer Exam Guide</a></em></li><li><em><a href="https://parveensingh.com/az-500-study-guide/">Azure Security Engineer Guide</a></em></li></ul><!--kg-card-begin: markdown--><h2 id="table-of-content">Table of Content</h2>
<ol>
<li><a href="#certification-overview">Certification Overview</a></li>
<li><a href="#exam-prerequisites">Exam Prerequisites</a></li>
<li><a href="#who-is-this-az-700-exam-for">Who is this AZ-700 Exam for?</a></li>
<li><a href="#what-to-expect-in-the-exam">What to Expect in the Exam?</a></li>
<li><a href="#exam-preparation-recommendations">Exam Preparation Recommendations</a></li>
<li><a href="#exam-day-tips">Exam Day Tips</a></li>
<li><a href="#resources">Resources</a>
<ul>
<li><a href="#microsoft-learn-modules">Microsoft Learn Modules</a></li>
<li><a href="#cloud-academy-az-700-learning-path">Cloud Academy AZ-700 Learning Path</a></li>
<li><a href="#pluralsight-az-700-training">Pluralsight AZ-700 Training</a></li>
<li><a href="#whizlabs-exam-prep">WhizLabs Exam Prep</a></li>
<li><a href="#visual-studio-dev-essentials">Visual Studio Dev Essentials</a></li>
<li><a href="#30-days-to-learn-it">30 Days to Learn It</a></li>
</ul>
</li>
<li><a href="#exam-outline-microsoft-learn-docs-reference-links">Exam Outline: Microsoft Learn + Docs Reference Links</a>
<ul>
<li><a href="#design-implement-and-manage-hybrid-networking-10%E2%80%9315">Design, Implement and Manage Hybrid Networking</a></li>
<li><a href="#design-and-implement-core-networking-infrastructure-20%E2%80%9325">Design and Implement Core Networking Infrastructure</a></li>
<li><a href="#design-and-implement-routing-25%E2%80%9330">Design and Implement Routing</a></li>
<li><a href="#secure-and-monitor-networks-15%E2%80%9320">Secure and Monitor Networks</a></li>
<li><a href="#design-and-implement-private-access-to-azure-services-10%E2%80%9315">Design and Implement Private Access to Azure Services</a></li>
</ul>
</li>
<li><a href="#conclusion">Conclusion</a></li>
</ol>
<!--kg-card-end: markdown--><h2 id="certification-overview">Certification Overview</h2><p>Azure Network Engineer (AZ-700) is an associate-level exam that validates the skills and expertise of subject matter experts working with networking, security, and infrastructure access controls in Azure Cloud.</p><p>The exam aims to validate that you understand how to manage and implement hybrid networking, core networking infrastructure, routing, monitoring, and secure service access to protect data and applications in the cloud and hybrid environments as part of end-to-end security enablement.</p><h2 id="exam-prerequisites">Exam Prerequisites</h2><p>If you are planning to attempt the Azure Network Engineer exam, be sure to complete one of the following exams beforehand, as it will give you enough exposure to Azure services and offerings:</p><ul><li><a href="https://docs.microsoft.com/en-us/learn/certifications/exams/az-104">Azure Administrator Associate</a></li><li><a href="https://parveensingh.com/how-to-pass-az-204-in-30-days/">Azure Developer Associate</a></li><li><a href="https://parveensingh.com/az-500-study-guide/">Azure Security Engineer Guide</a></li></ul><p>It&apos;s good to know the following concepts before going into the exam:</p><ul><li>Basic understanding of TCP/IP, DNS, Firewall, and Routing</li><li>Understanding VPN types and their usage</li><li>Understanding different types of networking such as hub-and-spoke to design cloud networking</li></ul><h2 id="who-is-this-az-700-exam-for">Who is this AZ-700 Exam for?</h2><p>On a high-level note, take the exam:</p><ul><li>If you are looking to learn more about Networking, Infrastructure, and Security in Azure cloud services.</li><li>If you are working on Administration, Software development and looking for a chance to move into the Network Engineer role.</li><li>If you are looking to build your network skills and learn to use multiple networking services in the cloud effectively.</li></ul><h2 id="what-to-expect-in-the-exam">What to Expect in the Exam?</h2><p>The Network Engineer Exam is 150 minutes, including about 30 minutes for the surveys and the assessments, which gives you roughly 120 minutes for the exam. I did find it a little challenging to finish the exam within the time frame. You can expect around 50-60 questions in the exam.</p><p>The structure of the exam can vary and range between:</p><ul><li>Case study with multiple questions including two choices and drag-and-drop items.</li><li>Single-choice questions which may not be skipped or reviewed. You only get to answer these questions ONCE.</li><li>Single-choice questions (True/False or Yes/No)</li><li>Multiple-choice questions</li></ul><p>Since it&apos;s an associate-level exam, it is relatively challenging as it covers many different topics and best practices. Therefore, I recommend you have at least one year of hands-on experience with Azure Cloud Administration and Networking in general before you consider booking the exam.</p><h2 id="exam-preparation-recommendations">Exam Preparation Recommendations</h2><p>There&apos;s definitely a lot to cover in this exam, and giving you any list of services or things to learn would be unfair as the expectations for this exam are high. However, below are some topics to consider and focus attention on while preparing for the exam.</p><ul><li>VNet Peering with multiple virtual networks</li><li>Azure Traffic Manager offering and capabilities in various SKUs</li><li>Azure FrontDoor and WAF offering with basic knowledge of different SKU offerings</li><li>Azure VPN including P2S, S2S, and Express Route choices and offer differences</li><li>Azure DNS and usage with Azure Virtual Networks</li><li>Azure Load Balancer and different SKU offerings</li><li>Azure Private and Service endpoints offering and usage</li></ul><h2 id="exam-day-tips">Exam Day Tips</h2><p>Below are some of my recommendations on the exam and some tips that might be helpful.</p><ul><li>Cover basic knowledge using AZ-104 and AZ-900 exams to familiarize with the Azure offerings&apos; services and Azure offerings.</li><li>Book the exam at least 60-90 days ahead of the time. Try to use the vouchers from a learning partner, or keep an eye for open Cloud Skill Challenges that are often offered via Microsoft.</li><li>If it&apos;s your first time doing a Virtual Exam, be sure to read PearsonVUE&apos;s exam information to ensure your desk and workspace are clean before going into the exam.</li><li>The time for when to schedule the exam is debatable. If you are a morning person, consider doing it early when your mind is not distracted from the day stuff. On the other hand, I&apos;ve had challenges with wait time and schedule in the evenings or afternoon PST time zones.</li><li>You have access to a whiteboard where you can brainstorm ideas about the exams. It has been the least used feature of the exam for me personally.</li><li>Adjust the brightness of your screen or turn on Dark Mode before the exam starts. Constantly looking at a white screen with high brightness may affect your focus. Consider changing to dark mode from around the bottom left when you begin.</li><li>Use the Exam Outline to note down your target dates for each module and section so that you keep yourself on track. For example, I usually pick a final date and work backward to calculate how much time I spend on each module and section.</li></ul><h2 id="resources">Resources</h2><h3 id="microsoft-learn-modules">Microsoft Learn Modules</h3><p>Microsoft Learn offers a wide range of training and preparation material for most of the Azure exams. Below is a list of relevant modules to prepare for this exam:</p><p>Path: <a href="https://docs.microsoft.com/en-us/learn/paths/design-implement-microsoft-azure-networking-solutions-az-700/">AZ-700 Designing and Implementing Microsoft Azure Networking Solutions</a></p><ul><li><a href="https://docs.microsoft.com/en-us/learn/modules/design-implement-hybrid-networking/">Design, Implement and Manage Hybrid Networking</a></li><li><a href="https://docs.microsoft.com/en-us/learn/modules/azure-networking-fundamentals/">Design and Implement Core Networking Infrastructure</a></li><li><a href="https://docs.microsoft.com/en-us/learn/modules/configure-network-routing-endpoints/">Design and Implement Routing</a></li><li><a href="https://docs.microsoft.com/en-us/learn/modules/design-implement-network-security-monitoring/">Secure and Monitor Networks</a></li><li><a href="https://docs.microsoft.com/en-us/learn/modules/design-implement-private-access-to-azure-services/">Design and Implement Private Access to Azure Services</a></li></ul><h3 id="cloud-academy-az-700-learning-path">Cloud Academy AZ-700 Learning Path</h3><p>The AZ-700 learning path is still under development at Cloud Academy. However, here are some links to the Network learning path and hands-on lab that will help you with some of the preparation:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://cloudacademy.com/learning-paths/azure-networking-3299/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Azure Networking - Cloud Academy</div><div class="kg-bookmark-description">Accelerate progress up the cloud curve with Cloud Academy&#x2019;s digital training solutions. Build a culture of cloud with technology and guided learning experiences.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://assets.cloudacademy.com/ssr-static/cloudacademy/favicon/mstile-310x310.png" alt="Azure Network Engineer: AZ-700 Study Guide"><span class="kg-bookmark-author">Cloud Academy</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://assets.cloudacademy.com/ssr-static/cloudacademy/resources/images/lp.social-share-graphics.landscape.png" alt="Azure Network Engineer: AZ-700 Study Guide"></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://cloudacademy.com/lab/implementing-azure-front-door-with-app-service-origin-host/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Implementing Azure Front Door with App Service Origin Host - Cloud Academy</div><div class="kg-bookmark-description">In this hands-on lab, you will implement Azure Front Door instance with Azure App Service as the origin group hosts.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://assets.cloudacademy.com/ssr-static/cloudacademy/favicon/mstile-310x310.png" alt="Azure Network Engineer: AZ-700 Study Guide"><span class="kg-bookmark-author">Cloud Academy</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://d2wxe3cu71edbr.cloudfront.net/static_res/website/images/clouda_social.png" alt="Azure Network Engineer: AZ-700 Study Guide"></div></a></figure><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://cloudacademy.com/lab/implementing-azure-virtual-network-nat-with-azure-functions/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Implementing Azure Virtual Network NAT with Azure Functions - Cloud Academy</div><div class="kg-bookmark-description">In this hands-on lab, you&#x2019;ll learn how to create an Azure Function and place it behind a Virtual Network NAT for static outbound IP Addresses.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://assets.cloudacademy.com/ssr-static/cloudacademy/favicon/mstile-310x310.png" alt="Azure Network Engineer: AZ-700 Study Guide"><span class="kg-bookmark-author">Cloud Academy</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://d2wxe3cu71edbr.cloudfront.net/static_res/website/images/clouda_social.png" alt="Azure Network Engineer: AZ-700 Study Guide"></div></a></figure><h3 id="pluralsight-az-700-training">Pluralsight AZ-700 Training</h3><p>Watching the work of Tim Warner, he has created the AZ-700 prep course at Pluralsight. The course should get you started by checking a lot of boxes on the exam outline:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://www.pluralsight.com/paths/designing-and-implementing-microsoft-azure-networking-solutions-az-700"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Designing and Implementing Microsoft Azure Networking Solutions (AZ-700)</div><div class="kg-bookmark-description">This certification preparation path is intended to help learners prepare to take the Designing and Implementing Microsoft Azure Networking Solutions (AZ-700) from Microsoft. Microsoft Azure Network Engineers are responsible for the planning, implementation, and maintenance of Azure networking &#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://www.pluralsight.com/etc/clientlibs/pluralsight/main/images/favicons/android-chrome-192x192.png" alt="Azure Network Engineer: AZ-700 Study Guide"><span class="kg-bookmark-author">Pluralsight</span><span class="kg-bookmark-publisher">Tim Warner</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://pluralsight2.imgix.net/paths/images/comptia-storage-plus-ee0dacafe8.png" alt="Azure Network Engineer: AZ-700 Study Guide"></div></a></figure><h3 id="whizlabs-exam-prep">WhizLabs Exam Prep</h3><p>If you are looking for exam prep questions for Azure Network Engineer exam, use the following to get free exam practice questions:</p><!--kg-card-begin: markdown--><p><a target="_blank" href="https://shareasale.com/r.cfm?b=1572826&amp;u=2555241&amp;m=43514&amp;urllink=&amp;afftrack="><img src="https://static.shareasale.com/image/43514/728X904_00.jpg" border="0" alt="Azure Network Engineer: AZ-700 Study Guide"></a></p>
<!--kg-card-end: markdown--><h3 id="visual-studio-dev-essentials">Visual Studio Dev Essentials</h3><p>Signup for Visual Studio Dev Essentials. You get Free Azure Credit to use the cloud resources and access training platforms like LinkedIn Learning and Pluralsight with one month of access.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://visualstudio.microsoft.com/dev-essentials/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Visual Studio Dev Essentials - Visual Studio</div><div class="kg-bookmark-description">Everything you need to build and deploy your app on any platform including tools, services, training, and more. Join our free developer program.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://visualstudio.microsoft.com/wp-content/uploads/2017/02/BrandVisualStudioIDE2017RTW_64x.png" alt="Azure Network Engineer: AZ-700 Study Guide"><span class="kg-bookmark-author">Visual Studio</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://visualstudio.microsoft.com/wp-content/uploads/2020/07/Facebook.png" alt="Azure Network Engineer: AZ-700 Study Guide"></div></a></figure><h3 id="30-days-to-learn-it">30 Days to Learn It</h3><p>Microsoft offers a 50% discount on exam price if you complete one of the listed MS Learn modules in 30 days.</p><p><a href=" https://aka.ms/dev-essentials/30_days_to_learn_it">30 DAYS TO LEARN IT</a></p><h2 id="exam-outline-microsoft-learn-docs-reference-links">Exam Outline: Microsoft Learn + Docs Reference Links</h2><p>I&apos;ve gathered some of the reference URLs to articles on the internet that will help you cover most of the exam objectives. The headings link to <strong><em>Microsoft Learn modules,</em></strong> and the individual items in each category point to <strong><em>relevant reading articles or MS learn courses</em></strong>.</p><p>Be sure to print and have the exam outline with you while you are preparing for the exam. If you don&apos;t have the Exam Outline handle, <a href="https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE4PaHw">download it here</a>.</p><h3 id="design-implement-and-manage-hybrid-networking-10%E2%80%9315">Design, Implement and Manage Hybrid Networking (10&#x2013;15%)</h3><p>Design, implement and manage a site-to-site VPN connection</p><ul><li><a href="https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-activeactive-rm-powershell#about-highly-available-cross-premises-connections?WT.mc_id=parveensingh.com">design a site-to-site VPN connection for high availability</a></li><li><a href="https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-about-vpngateways#gwsku?WT.mc_id=parveensingh.com">select an appropriate virtual network (VNet) gateway SKU</a></li><li><a href="https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-connect-multiple-policybased-rm-ps#about?WT.mc_id=parveensingh.com">identify when to use policy-based VPN versus route-based VPN</a></li><li><a href="https://docs.microsoft.com/en-us/azure/vpn-gateway/tutorial-site-to-site-portal#LocalNetworkGateway?WT.mc_id=parveensingh.com">create and configure a local network gateway</a></li><li><a href="https://docs.microsoft.com/en-us/azure/vpn-gateway/ipsec-ike-policy-howto?WT.mc_id=parveensingh.com">create and configure an IPsec/IKE policy</a></li><li><a href="https://docs.microsoft.com/en-us/azure/vpn-gateway/tutorial-create-gateway-portal?WT.mc_id=parveensingh.com">create and configure a virtual network gateway</a></li><li><a href="https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-troubleshoot-site-to-site-cannot-connect?WT.mc_id=parveensingh.com">diagnose and resolve virtual network gateway connectivity issues</a></li></ul><p>Design, implement and manage a point-to-site VPN connection</p><ul><li><a href="https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-about-vpngateways#gwsku?WT.mc_id=parveensingh.com">select an appropriate virtual network gateway SKU</a></li><li><a href="https://docs.microsoft.com/en-us/azure/vpn-gateway/point-to-site-how-to-radius-ps?WT.mc_id=parveensingh.com">plan and configure RADIUS authentication</a></li><li><a href="https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-howto-point-to-site-resource-manager-portal?WT.mc_id=parveensingh.com">plan and configure certificate-based authentication</a></li><li><a href="https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-howto-openvpn?WT.mc_id=parveensingh.com">plan and configure OpenVPN authentication</a></li><li><a href="https://docs.microsoft.com/en-us/azure/vpn-gateway/openvpn-azure-ad-tenant?WT.mc_id=parveensingh.com">plan and configure Azure Active Directory (Azure AD) authentication</a></li><li><a href="https://docs.microsoft.com/en-us/azure/vpn-gateway/point-to-site-vpn-client-configuration-azure-cert?WT.mc_id=parveensingh.com">implement a VPN client configuration file</a></li><li><a href="https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-troubleshoot-vpn-point-to-site-connection-problems?WT.mc_id=parveensingh.com">diagnose and resolve client-side and authentication issues</a></li></ul><p>Design, implement and manage Azure ExpressRoute</p><ul><li><a href="https://docs.microsoft.com/en-us/azure/expressroute/expressroute-erdirect-about#expressroute-using-a-service-provider-and-expressroute-direct?WT.mc_id=parveensingh.com">choose between provider and direct model (ExpressRoute Direct)</a></li><li><a href="https://docs.microsoft.com/en-us/azure/expressroute/cross-network-connectivity?WT.mc_id=parveensingh.com">design and implement Azure cross-region connectivity between multiple ExpressRoute locations</a></li><li><a href="https://docs.microsoft.com/en-us/azure/expressroute/expressroute-about-virtual-network-gateways#gwsku?WT.mc_id=parveensingh.com">select an appropriate ExpressRoute SKU and tier</a></li><li><a href="https://docs.microsoft.com/en-us/azure/expressroute/expressroute-global-reach?WT.mc_id=parveensingh.com">design and implement ExpressRoute Global Reach</a></li><li><a href="https://docs.microsoft.com/en-us/azure/expressroute/about-fastpath?WT.mc_id=parveensingh.com">design and implement ExpressRoute FastPath</a></li><li><a href="https://docs.microsoft.com/en-us/azure/expressroute/expressroute-circuit-peerings#routingdomains?WT.mc_id=parveensingh.com">choose between private peering only, Microsoft peering only, or both</a></li><li><a href="https://docs.microsoft.com/en-us/azure/vpn-gateway/site-to-site-vpn-private-peering?toc=/azure/expressroute/toc.json?WT.mc_id=parveensingh.com">configure private peering</a></li><li><a href="https://docs.microsoft.com/en-us/azure/expressroute/site-to-site-vpn-over-microsoft-peering?WT.mc_id=parveensingh.com">configure Microsoft peering</a></li><li><a href="https://docs.microsoft.com/en-us/azure/expressroute/expressroute-about-virtual-network-gateways?WT.mc_id=parveensingh.com">create and configure an ExpressRoute gateway</a></li><li><a href="https://docs.microsoft.com/en-us/azure/expressroute/expressroute-howto-linkvnet-portal-resource-manager?WT.mc_id=parveensingh.com">connect a virtual network to an ExpressRoute circuit</a></li><li><a href="https://docs.microsoft.com/en-us/azure/expressroute/expressroute-routing#advertising-default-routes?WT.mc_id=parveensingh.com">recommend a route advertisement configuration</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-wan/vpn-over-expressroute?WT.mc_id=parveensingh.com">configure encryption over ExpressRoute</a></li><li><a href="https://docs.microsoft.com/en-us/azure/expressroute/expressroute-bfd?WT.mc_id=parveensingh.com">implement Bidirectional Forwarding Detection</a></li><li><a href="https://docs.microsoft.com/en-us/azure/expressroute/expressroute-troubleshooting-network-performance?WT.mc_id=parveensingh.com">diagnose and resolve ExpressRoute connection issues</a></li></ul><h3 id="design-and-implement-core-networking-infrastructure-20%E2%80%9325">Design and Implement Core Networking Infrastructure (20&#x2013;25%)</h3><p>Design and implement private IP addressing for VNets</p><ul><li><a href="https://docs.microsoft.com/en-us/azure/virtual-network/quick-create-portal?WT.mc_id=parveensingh.com">create a VNet</a></li><li><a href="https://docs.microsoft.com/en-us/azure/networking/fundamentals/architecture-guides?WT.mc_id=parveensingh.com">plan and configure subnetting for services, including VNet gateways, private endpoints, firewalls, application gateways, and VNet-integrated platform services</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-network/subnet-delegation-overview?WT.mc_id=parveensingh.com">plan and configure subnet delegation</a></li><li><a href="https://docs.microsoft.com/en-us/azure/route-server/quickstart-configure-route-server-portal?WT.mc_id=parveensingh.com">plan and configure subnetting for Azure Route Server</a></li></ul><p>Design and implement name resolution</p><ul><li><a href="https://docs.microsoft.com/en-us/azure/architecture/hybrid/hybrid-dns-infra?WT.mc_id=parveensingh.com">design public DNS zones</a></li><li><a href="https://docs.microsoft.com/en-us/azure/dns/private-dns-privatednszone?WT.mc_id=parveensingh.com">design private DNS zones</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-name-resolution-for-vms-and-role-instances?WT.mc_id=parveensingh.com">design name resolution inside a VNet</a></li><li><a href="https://docs.microsoft.com/en-us/azure/dns/dns-getstarted-portal?WT.mc_id=parveensingh.com">configure a public or private DNS zone</a></li><li><a href="https://docs.microsoft.com/en-us/azure/dns/private-dns-virtual-network-links?WT.mc_id=parveensingh.com">link a private DNS zone to a VNetDesign and implement cross-VNet connectivity</a></li><li><a href="https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-peering-gateway-transit?WT.mc_id=parveensingh.com">design service chaining, including gateway transit</a></li><li><a href="https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-howto-vnet-vnet-resource-manager-portal?WT.mc_id=parveensingh.com">design VPN connectivity between VNets</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-peering-overview?WT.mc_id=parveensingh.com">implement VNet peering</a></li></ul><p>Design and implement an Azure Virtual WAN architecture</p><ul><li><a href="https://docs.microsoft.com/en-us/azure/virtual-wan/virtual-wan-about?WT.mc_id=parveensingh.com">design an Azure Virtual WAN architecture, including selecting types and services</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-wan/connect-virtual-network-gateway-vwan?WT.mc_id=parveensingh.com">connect a VNet gateway to Azure Virtual WAN</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-wan/virtual-wan-site-to-site-portal?WT.mc_id=parveensingh.com">create a hub in Virtual WAN</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-wan/how-to-nva-hub?WT.mc_id=parveensingh.com">create a network virtual appliance (NVA) in a virtual hub</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-wan/how-to-virtual-hub-routing?WT.mc_id=parveensingh.com">configure virtual hub routing</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-wan/pricing-concepts#connection-unit?WT.mc_id=parveensingh.com">create a connection unit</a></li></ul><h3 id="design-and-implement-routing-25%E2%80%9330">Design and Implement Routing (25&#x2013;30%)</h3><p>Design, implement and manage VNet routing</p><ul><li><a href="https://docs.microsoft.com/en-us/azure/virtual-network/virtual-networks-udr-overview?WT.mc_id=parveensingh.com">design and implement user-defined routes (UDRs)</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-network/manage-route-table?WT.mc_id=parveensingh.com">associate a route table with a subnet</a></li><li><a href="https://docs.microsoft.com/en-us/azure/vpn-gateway/vpn-gateway-forced-tunneling-rm?WT.mc_id=parveensingh.com">configure forced tunneling</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-network/diagnose-network-routing-problem?WT.mc_id=parveensingh.com">diagnose and resolve routing issues</a></li><li><a href="https://docs.microsoft.com/en-us/azure/route-server/overview?WT.mc_id=parveensingh.com">design and implement Azure Route Server</a></li></ul><p>Design and implement an Azure Load Balancer</p><ul><li><a href="https://docs.microsoft.com/en-us/azure/load-balancer/skus?WT.mc_id=parveensingh.com">choose an Azure Load Balancer SKU (Basic versus Standard)</a></li><li><a href="https://docs.microsoft.com/en-us/azure/load-balancer/load-balancer-overview?WT.mc_id=parveensingh.com">choose between public and internal</a></li><li><a href="https://docs.microsoft.com/en-us/azure/load-balancer/quickstart-load-balancer-standard-public-portal?tabs=option-1-create-load-balancer-standard">create and configure an Azure Load Balancer (including cross-region)</a></li><li><a href="https://docs.microsoft.com/en-us/azure/load-balancer/tutorial-load-balancer-standard-public-zonal-portal?WT.mc_id=parveensingh.com">implement a load balancing rule</a></li><li><a href="https://docs.microsoft.com/en-us/azure/load-balancer/tutorial-load-balancer-port-forwarding-portal?WT.mc_id=parveensingh.com">create and configure inbound NAT rules</a></li><li><a href="https://docs.microsoft.com/en-us/azure/load-balancer/outbound-rules?WT.mc_id=parveensingh.com">create explicit outbound rules for a load balancer</a></li></ul><p>Design and implement Azure Application Gateway</p><ul><li><a href="https://docs.microsoft.com/en-us/azure/application-gateway/configuration-overview?WT.mc_id=parveensingh.com">recommend Azure Application Gateway deployment options</a></li><li><a href="https://docs.microsoft.com/en-us/azure/application-gateway/application-gateway-autoscaling-zone-redundant?WT.mc_id=parveensingh.com">choose between manual and autoscale</a></li><li><a href="https://docs.microsoft.com/en-us/azure/application-gateway/application-gateway-components?WT.mc_id=parveensingh.com">create a back-end pool</a></li><li><a href="https://docs.microsoft.com/en-us/azure/application-gateway/application-gateway-probe-overview?WT.mc_id=parveensingh.com">configure health probes</a></li><li><a href="https://docs.microsoft.com/en-us/azure/application-gateway/configuration-listeners?WT.mc_id=parveensingh.com">configure listeners</a></li><li><a href="https://docs.microsoft.com/en-us/azure/application-gateway/configuration-request-routing-rules?WT.mc_id=parveensingh.com">configure routing rules</a></li><li><a href="https://docs.microsoft.com/en-us/azure/application-gateway/configuration-http-settings?WT.mc_id=parveensingh.com">configure HTTP settings</a></li><li><a href="https://docs.microsoft.com/en-us/azure/application-gateway/ssl-overview?WT.mc_id=parveensingh.com">configure Transport Layer Security (TLS)</a></li><li><a href="https://docs.microsoft.com/en-us/azure/application-gateway/rewrite-http-headers-url?WT.mc_id=parveensingh.com">configure rewrite sets</a></li></ul><p>Implement Azure Front Door</p><ul><li><a href="https://docs.microsoft.com/en-us/azure/frontdoor/standard-premium/tier-comparison?WT.mc_id=parveensingh.com">choose an Azure Front Door SKU</a></li><li><a href="https://docs.microsoft.com/en-us/azure/frontdoor/front-door-health-probes?WT.mc_id=parveensingh.com">configure health probes, including customization of HTTP response codes</a></li><li><a href="https://docs.microsoft.com/en-us/azure/frontdoor/concept-end-to-end-tls?WT.mc_id=parveensingh.com">configure SSL termination and end-to-end SSL encryption</a></li><li><a href="https://docs.microsoft.com/en-us/azure/application-gateway/configuration-listeners?WT.mc_id=parveensingh.com">configure multisite listeners</a></li><li><a href="https://docs.microsoft.com/en-us/azure/frontdoor/front-door-backend-pool?WT.mc_id=parveensingh.com">configure back-end targets</a></li><li><a href="https://docs.microsoft.com/en-us/azure/frontdoor/standard-premium/concept-rule-set-url-redirect-and-rewrite?WT.mc_id=parveensingh.com">configure routing rules, including redirection rules</a></li></ul><p>Implement an Azure Traffic Manager profile</p><ul><li><a href="https://docs.microsoft.com/en-us/azure/traffic-manager/traffic-manager-routing-methods?WT.mc_id=parveensingh.com">configure a routing method (mode)</a></li><li><a href="https://docs.microsoft.com/en-us/azure/traffic-manager/traffic-manager-manage-endpoints?WT.mc_id=parveensingh.com">configure endpoints</a></li><li><a href="https://docs.microsoft.com/en-us/azure/traffic-manager/traffic-manager-monitoring#configure-endpoint-monitoring?WT.mc_id=parveensingh.com">create HTTP settings</a></li></ul><p>Design and implement an Azure Virtual Network NAT</p><ul><li><a href="https://docs.microsoft.com/en-us/azure/virtual-network/nat-gateway/nat-overview?WT.mc_id=parveensingh.com">choose when to use a Virtual Network NAT</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-network/nat-gateway/nat-gateway-resource?WT.mc_id=parveensingh.com">allocate public IP or public IP prefixes for a NAT gateway</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-network/nat-gateway/tutorial-create-nat-gateway-portal?WT.mc_id=parveensingh.com">associate a Virtual Network NAT with a subnet</a></li></ul><h3 id="secure-and-monitor-networks-15%E2%80%9320">Secure and Monitor Networks (15&#x2013;20%)</h3><p>Design, implement and manage an Azure Firewall deployment</p><ul><li><a href="https://docs.microsoft.com/en-us/azure/firewall/tutorial-firewall-deploy-portal?WT.mc_id=parveensingh.com">design an Azure Firewall deployment</a></li><li><a href="https://docs.microsoft.com/en-us/azure/firewall/tutorial-firewall-deploy-portal-policy?WT.mc_id=parveensingh.com">create and implement an Azure Firewall deployment</a></li><li><a href="https://docs.microsoft.com/en-us/azure/firewall/rule-processing?WT.mc_id=parveensingh.com">configure Azure Firewall rules</a></li><li><a href="https://docs.microsoft.com/en-us/azure/firewall-manager/policy-overview?WT.mc_id=parveensingh.com">create and implement Azure Firewall Manager policies</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-wan/howto-firewall?WT.mc_id=parveensingh.com">create a secure hub by deploying Azure Firewall inside an Azure Virtual WAN hub</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-wan/about-nva-hub?WT.mc_id=parveensingh.com">integrate an Azure Virtual WAN hub with a third-party NVA</a></li></ul><p>Implement and manage network security groups (NSGs)</p><ul><li><a href="https://docs.microsoft.com/en-us/azure/virtual-network/manage-network-security-group#create-a-network-security-group?WT.mc_id=parveensingh.com">create an NSG</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-network/manage-network-security-group?WT.mc_id=parveensingh.com">associate an NSG to a resource</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-network/application-security-groups?WT.mc_id=parveensingh.com">create an application security group (ASG)</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-network/application-security-groups?WT.mc_id=parveensingh.com">associate an ASG to a NIC</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-network/network-security-groups-overview?WT.mc_id=parveensingh.com">create and configure NSG rules</a></li><li><a href="https://docs.microsoft.com/en-us/azure/network-watcher/network-watcher-read-nsg-flow-logs?WT.mc_id=parveensingh.com">interpret NSG flow logs</a></li><li><a href="https://docs.microsoft.com/en-us/azure/network-watcher/network-watcher-nsg-flow-logging-overview?WT.mc_id=parveensingh.com">validate NSG flow rules</a></li><li><a href="https://docs.microsoft.com/en-us/azure/network-watcher/network-watcher-ip-flow-verify-overview?WT.mc_id=parveensingh.com">verify IP flow</a></li></ul><p>Implement a Web Application Firewall (WAF) deployment</p><ul><li><a href="https://docs.microsoft.com/en-us/azure/web-application-firewall/ag/ag-overview?WT.mc_id=parveensingh.com#waf-modes">configure detection or prevention mode</a></li><li><a href="https://docs.microsoft.com/en-us/azure/web-application-firewall/afds/waf-front-door-create-portal#default-rule-set-drs?WT.mc_id=parveensingh.com">configure rule sets for Azure Front Door, including Microsoft managed and user-defined</a></li><li><a href="https://docs.microsoft.com/en-us/azure/web-application-firewall/ag/create-custom-waf-rules?WT.mc_id=parveensingh.com">configure rule sets for Application Gateway, including Microsoft managed and user defined</a></li><li><a href="https://docs.microsoft.com/en-us/azure/web-application-firewall/ag/create-waf-policy-ag?WT.mc_id=parveensingh.com">implement a WAF policy</a></li><li><a href="https://docs.microsoft.com/en-us/azure/web-application-firewall/ag/associate-waf-policy-existing-gateway?WT.mc_id=parveensingh.com">associate a WAF policy</a></li></ul><p>Monitor networks</p><ul><li><a href="https://docs.microsoft.com/en-us/azure/azure-monitor/insights/network-insights-overview#networkhealth?WT.mc_id=parveensingh.com">configure network health alerts and logging by using Azure Monitor</a></li><li><a href="https://docs.microsoft.com/en-us/azure/network-watcher/connection-monitor-create-using-portal?WT.mc_id=parveensingh.com">create and configure a Connection Monitor instance</a></li><li><a href="https://docs.microsoft.com/en-us/azure/network-watcher/traffic-analytics?WT.mc_id=parveensingh.com">configure and use Traffic Analytics</a></li><li><a href="https://docs.microsoft.com/en-us/azure/network-watcher/network-watcher-nsg-flow-logging-azure-resource-manager?WT.mc_id=parveensingh.com">configure NSG flow logs</a></li><li><a href="https://docs.microsoft.com/en-us/azure/azure-monitor/essentials/diagnostic-settings?WT.mc_id=parveensingh.com&amp;tabs=CMD">enable and configure diagnostic logging</a></li><li><a href="https://docs.microsoft.com/en-us/azure/network-watcher/network-watcher-create?WT.mc_id=parveensingh.com">configure Azure Network Watcher</a></li></ul><h3 id="design-and-implement-private-access-to-azure-services-10%E2%80%9315">Design and Implement Private Access to Azure Services (10&#x2013;15%)</h3><p>Design and implement Azure Private Link service and Azure Private Endpoint</p><ul><li><a href="https://docs.microsoft.com/en-us/azure/private-link/create-private-link-service-portal?WT.mc_id=parveensingh.com">create a Private Link service</a></li><li><a href="https://docs.microsoft.com/en-us/azure/private-link/private-endpoint-overview?WT.mc_id=parveensingh.com">plan private endpoints</a></li><li><a href="https://docs.microsoft.com/en-us/azure/private-link/create-private-endpoint-portal?WT.mc_id=parveensingh.com">create private endpoints</a></li><li><a href="https://docs.microsoft.com/en-us/azure/storage/common/storage-private-endpoints?WT.mc_id=parveensingh.com">configure access to private endpoints</a></li><li><a href="https://docs.microsoft.com/en-us/azure/cloud-adoption-framework/ready/azure-best-practices/private-link-and-dns-integration-at-scale?WT.mc_id=parveensingh.com">integrate Private Link with DNS</a></li><li><a href="https://docs.microsoft.com/en-us/azure/private-link/private-link-service-overview?WT.mc_id=parveensingh.com">integrate a Private Link service with on-premises clients</a></li></ul><p>Design and implement service endpoints</p><ul><li><a href="https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-service-endpoint-policies-portal?WT.mc_id=parveensingh.com">create service endpoints</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-service-endpoint-policies-portal?WT.mc_id=parveensingh.com">configure service endpoint policies</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-network/service-tags-overview?WT.mc_id=parveensingh.com">configure service tags</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-network/virtual-network-service-endpoints-overview?WT.mc_id=parveensingh.com">configure access to service endpoints</a></li></ul><p>Configure VNet integration for the dedicated platform as a service (PaaS) services</p><ul><li><a href="https://docs.microsoft.com/en-us/azure/app-service/overview-vnet-integration?WT.mc_id=parveensingh.com">configure App Service for regional VNet integration</a></li><li><a href="https://docs.microsoft.com/en-us/azure/aks/private-clusters?WT.mc_id=parveensingh.com">configure Azure Kubernetes Service (AKS) for regional VNet integration</a></li><li><a href="https://docs.microsoft.com/en-us/azure/app-service/environment/using-an-ase#app-access?WT.mc_id=parveensingh.com">configure clients to access App Service Environment</a></li></ul><h2 id="conclusion">Conclusion</h2><p>I hope this article helps you get through the learning part of the AZ-700 exam and cover all the necessary topics that you need to know before you go into the exam hall. Feel free to reach out to me on <a href="https://twitter.com/singh_cloud">Twitter</a> or <a href="https://www.linkedin.com/in/singhparveen/">LinkedIn</a> for any questions.</p><p>If you are looking for exam review on any other exam, check out the list below as I update it with the latest content:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://parveensingh.com/tag/exam/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Exams Study Guides - Parveen Singh</div><div class="kg-bookmark-description">Review and Study Guides for Technical Exams.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://parveensingh.com/favicon.png" alt="Azure Network Engineer: AZ-700 Study Guide"><span class="kg-bookmark-author">Parveen Singh</span><span class="kg-bookmark-publisher">Parveen Singh</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://parveensingh.com/content/images/2021/06/Website-Header.jpg" alt="Azure Network Engineer: AZ-700 Study Guide"></div></a></figure>]]></content:encoded></item><item><title><![CDATA[Cloud Developer VS Code Setup for Productivity]]></title><description><![CDATA[Power Your Visual Studio Code Setup for Development and Productivity]]></description><link>https://parveensingh.com/vscode-productivity-setup/</link><guid isPermaLink="false">618dcd04aabbf0058d9dd1af</guid><category><![CDATA[Development]]></category><dc:creator><![CDATA[Parveen Singh]]></dc:creator><pubDate>Fri, 12 Nov 2021 02:15:41 GMT</pubDate><media:content url="https://parveensingh.com/content/images/2021/11/VSCode-Setup.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://parveensingh.com/content/images/2021/11/VSCode-Setup.jpg" alt="Cloud Developer VS Code Setup for Productivity"><p>Behind any productive work are your work ergonomics and system setup that helps you take away the repeating tasks and facilitate your development process. Having the extensions for the right kind of technology you use every day can make a lot of difference in terms of leveraging snippets and predefined settings to make the process more seamless for you.</p><p>In this article, I&apos;ll cover some of the VS Code extensions and settings that I use daily to give you a perspective of what a typical Cloud Developer role in Azure might involve. As part of the Labs Development team at <a href="http://cloudacademy.com/">CloudAcademy</a>, this is my typical workflow setup which might be different for anybody on the same role in a different organization.</p><!--kg-card-begin: markdown--><h2 id="table-of-content">Table of Content</h2>
<ol>
<li><a href="#vs-code-extensions">VS Code Extensions</a></li>
<li><a href="#vs-code-theme">VS Code Theme</a></li>
</ol>
<!--kg-card-end: markdown--><h2 id="vs-code-extensions">VS Code Extensions</h2><p>The list of extensions below is based on the priority order on how much it matters in terms of usage and importance starting with most important on the top.</p><h3 id="azure-tools-extension-pack">Azure Tools (Extension Pack)</h3><p>Since I&apos;m working with Azure service most of the time, it&apos;s very convenient for me to have this Azure Tools extension pack installed all the time. The extension comes in a bundle pack that includes a lot of services, however, I only use the ones listed below as they get the most of the work done for daily use.</p><ul><li><a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode.vscode-node-azure-pack">Azure Tools Extension Pack</a></li><li><a href="https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azureappservice">Azure App Service</a></li><li><a href="https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurefunctions">Azure Functions</a></li><li><a href="https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azurestorage">Azure Storage</a></li><li><a href="https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-cosmosdb">Azure Databases</a></li><li><a href="https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-azureresourcegroups">Azure Resources</a></li><li><a href="https://marketplace.visualstudio.com/items?itemName=ms-vscode.azurecli">Azure CLI Tools</a></li><li><a href="https://marketplace.visualstudio.com/items?itemName=msazurermtools.azurerm-vscode-tools">Azure Resource Manager Tools</a></li><li><a href="https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-bicep&amp;ssr=false#overview">Bicep</a></li></ul><h3 id="arm-template-viewer">ARM Template Viewer</h3><p>Another useful extension that I&apos;ve been getting used to now is the <a href="https://marketplace.visualstudio.com/items?itemName=bencoleman.armview">ARM template viewer</a>. This lets you visualize the ARM template as you build it.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://marketplace.visualstudio.com/items?itemName=bencoleman.armview"><div class="kg-bookmark-content"><div class="kg-bookmark-title">ARM Template Viewer - Visual Studio Marketplace</div><div class="kg-bookmark-description">Extension for Visual Studio Code - Graphically display ARM templates in an interactive map view</div><div class="kg-bookmark-metadata"><span class="kg-bookmark-author">Visual Studio Marketplace</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://bencoleman.gallerycdn.vsassets.io/extensions/bencoleman/armview/0.4.5/1603288705589/Microsoft.VisualStudio.Services.Icons.Default" alt="Cloud Developer VS Code Setup for Productivity"></div></a></figure><h3 id="docker">Docker</h3><p>Another extension that comes in handy during development is the <a href="https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker">Docker extension</a>. Building your image and even writing the docker file is such a seamless experience with these extensions as it gives you IntelliSense recommendations that make it super convenient when developing new container images.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://marketplace.visualstudio.com/items?itemName=ms-azuretools.vscode-docker"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Docker - Visual Studio Marketplace</div><div class="kg-bookmark-description">Extension for Visual Studio Code - Makes it easy to create, manage, and debug containerized applications.</div><div class="kg-bookmark-metadata"><span class="kg-bookmark-author">Visual Studio Marketplace</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://ms-azuretools.gallerycdn.vsassets.io/extensions/ms-azuretools/vscode-docker/1.17.0/1632156601936/Microsoft.VisualStudio.Services.Icons.Default" alt="Cloud Developer VS Code Setup for Productivity"></div></a></figure><h3 id="markdownlint">Markdownlint</h3><p>If you&apos;ve ever taken any labs on the CloudAcademy platform, you&apos;ll see instructions for labs which are usually written in markdown. Markdown has been growing as the format of choice now due to its low maintenance structure and lightweight usage in the development process. The <a href="https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint">markdownlint extension</a> is a great addition to enhance the writing skills when working with the markdown files.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://marketplace.visualstudio.com/items?itemName=DavidAnson.vscode-markdownlint"><div class="kg-bookmark-content"><div class="kg-bookmark-title">markdownlint - Visual Studio Marketplace</div><div class="kg-bookmark-description">Extension for Visual Studio Code - Markdown linting and style checking for Visual Studio Code</div><div class="kg-bookmark-metadata"><span class="kg-bookmark-author">Visual Studio Marketplace</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://davidanson.gallerycdn.vsassets.io/extensions/davidanson/vscode-markdownlint/0.45.0/1635486276371/Microsoft.VisualStudio.Services.Icons.Default" alt="Cloud Developer VS Code Setup for Productivity"></div></a></figure><h3 id="grammarly-unofficial">Grammarly Unofficial</h3><p>Even though <a href="https://marketplace.visualstudio.com/items?itemName=znck.grammarly">this extension</a> is unofficial, it still works great when writing markdown files in VS Code as it gives you suggestions and recommendations.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://marketplace.visualstudio.com/items?itemName=znck.grammarly"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Grammarly (unofficial) - Visual Studio Marketplace</div><div class="kg-bookmark-description">Extension for Visual Studio Code - A grammar checking for Visual Studio Code using Grammarly.</div><div class="kg-bookmark-metadata"><span class="kg-bookmark-author">Visual Studio Marketplace</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://znck.gallerycdn.vsassets.io/extensions/znck/grammarly/0.14.0/1611607426869/Microsoft.VisualStudio.Services.Icons.Default" alt="Cloud Developer VS Code Setup for Productivity"></div></a></figure><h3 id="prettier">Prettier</h3><p>When writing code or creating ARM templated in JSON format, I find the <a href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode">prettier extension</a> to be super useful to simply format the file on save or using shortcuts to adjust the file layout.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://marketplace.visualstudio.com/items?itemName=esbenp.prettier-vscode"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Prettier - Code formatter - Visual Studio Marketplace</div><div class="kg-bookmark-description">Extension for Visual Studio Code - Code formatter using prettier</div><div class="kg-bookmark-metadata"><span class="kg-bookmark-author">Visual Studio Marketplace</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://esbenp.gallerycdn.vsassets.io/extensions/esbenp/prettier-vscode/9.0.0/1632149351877/Microsoft.VisualStudio.Services.Icons.Default" alt="Cloud Developer VS Code Setup for Productivity"></div></a></figure><h3 id="python">Python</h3><p>If you are writing python code and doing the development using VS Code, this extension is a must-have to facilitate your development process.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://marketplace.visualstudio.com/items?itemName=ms-python.python"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Python - Visual Studio Marketplace</div><div class="kg-bookmark-description">Extension for Visual Studio Code - IntelliSense (Pylance), Linting, Debugging (multi-threaded, remote), Jupyter Notebooks, code formatting, refactoring, unit tests, and more.</div><div class="kg-bookmark-metadata"><span class="kg-bookmark-author">Visual Studio Marketplace</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://ms-python.gallerycdn.vsassets.io/extensions/ms-python/python/2021.11.1422169775/1636051069395/Microsoft.VisualStudio.Services.Icons.Default" alt="Cloud Developer VS Code Setup for Productivity"></div></a></figure><h3 id="visual-studio-intellicode">Visual Studio Intellicode</h3><p>Visual Studio Intellicode is an AI-assisted development tool for Python, TypeScript/JavaScript, and Java developers in Visual Studio Code.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://marketplace.visualstudio.com/items?itemName=VisualStudioExptTeam.vscodeintellicode"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Visual Studio IntelliCode - Visual Studio Marketplace</div><div class="kg-bookmark-description">Extension for Visual Studio Code - AI-assisted development</div><div class="kg-bookmark-metadata"><span class="kg-bookmark-author">Visual Studio Marketplace</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://visualstudioexptteam.gallerycdn.vsassets.io/extensions/visualstudioexptteam/vscodeintellicode/1.2.14/1621358796882/Microsoft.VisualStudio.Services.Icons.Default" alt="Cloud Developer VS Code Setup for Productivity"></div></a></figure><h3 id="wakatime">WakaTime</h3><p>If you are looking for a tool that can track your productivity metrics and gives you insight into your work performed in the VS Code session, WakaTime has been the best tool for me to understand what I have been working on and how much time I spent doing that thing.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://marketplace.visualstudio.com/items?itemName=WakaTime.vscode-wakatime"><div class="kg-bookmark-content"><div class="kg-bookmark-title">WakaTime - Visual Studio Marketplace</div><div class="kg-bookmark-description">Extension for Visual Studio Code - Metrics, insights, and time tracking automatically generated from your programming activity.</div><div class="kg-bookmark-metadata"><span class="kg-bookmark-author">Visual Studio Marketplace</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://wakatime.gallerycdn.vsassets.io/extensions/wakatime/vscode-wakatime/17.1.0/1633715414513/Microsoft.VisualStudio.Services.Icons.Default" alt="Cloud Developer VS Code Setup for Productivity"></div></a></figure><h3 id="yaml">YAML</h3><p>If you are someone writing YAML files for azure pipelines, AWS Cloudformation, or for any other purpose, you must have this extension installed for your VS Code.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://marketplace.visualstudio.com/items?itemName=redhat.vscode-yaml"><div class="kg-bookmark-content"><div class="kg-bookmark-title">YAML - Visual Studio Marketplace</div><div class="kg-bookmark-description">Extension for Visual Studio Code - YAML Language Support by Red Hat, with built-in Kubernetes syntax support</div><div class="kg-bookmark-metadata"><span class="kg-bookmark-author">Visual Studio Marketplace</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://redhat.gallerycdn.vsassets.io/extensions/redhat/vscode-yaml/1.2.0/1636555471110/Microsoft.VisualStudio.Services.Icons.Default" alt="Cloud Developer VS Code Setup for Productivity"></div></a></figure><h3 id="remote-development-pack">Remote Development (Pack)</h3><ul><li>WSL Remote</li><li>Container Remote</li><li>SSH Remote</li></ul><h3 id="live-server">Live Server</h3><p>I don&apos;t use this extension very often, however, I find it quite useful when needed to code with someone remotely without having to send emails or text the block of code for someone to debug or make recommendations to.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://marketplace.visualstudio.com/items?itemName=ritwickdey.LiveServer"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Live Server - Visual Studio Marketplace</div><div class="kg-bookmark-description">Extension for Visual Studio Code - Launch a development local Server with live reload feature for static &amp; dynamic pages</div><div class="kg-bookmark-metadata"><span class="kg-bookmark-author">Visual Studio Marketplace</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://ritwickdey.gallerycdn.vsassets.io/extensions/ritwickdey/liveserver/5.6.1/1555497731217/Microsoft.VisualStudio.Services.Icons.Default" alt="Cloud Developer VS Code Setup for Productivity"></div></a></figure><h2 id="vs-code-theme">VS Code Theme</h2><h3 id="material-icon-theme">Material Icon Theme</h3><p>I like having icons for all my files and folders as it gives you the idea of the file type just by looking at the icons on them. I think they are super useful and come in handy when identifying the file types.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://marketplace.visualstudio.com/items?itemName=PKief.material-icon-theme"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Material Icon Theme - Visual Studio Marketplace</div><div class="kg-bookmark-description">Extension for Visual Studio Code - Material Design Icons for Visual Studio Code</div><div class="kg-bookmark-metadata"><span class="kg-bookmark-author">Visual Studio Marketplace</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://pkief.gallerycdn.vsassets.io/extensions/pkief/material-icon-theme/4.10.0/1629840086005/Microsoft.VisualStudio.Services.Icons.Default" alt="Cloud Developer VS Code Setup for Productivity"></div></a></figure><h3 id="hackthebox">HackTheBox</h3><p>I&apos;ve been using this theme ever since I started using the HackTheBox platform and discovered their theme. Even though the repo is no longer being maintained but the theme still works great!</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://marketplace.visualstudio.com/items?itemName=silofy.hackthebox"><div class="kg-bookmark-content"><div class="kg-bookmark-title">HackTheBox - Visual Studio Marketplace</div><div class="kg-bookmark-description">Extension for Visual Studio Code - A Visual Studio Code theme built for hackers BY hackers</div><div class="kg-bookmark-metadata"><span class="kg-bookmark-author">Visual Studio Marketplace</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://silofy.gallerycdn.vsassets.io/extensions/silofy/hackthebox/0.2.9/1629722910669/Microsoft.VisualStudio.Services.Icons.Default" alt="Cloud Developer VS Code Setup for Productivity"></div></a></figure>]]></content:encoded></item><item><title><![CDATA[Azure Security Engineer: AZ-500 Study Guide]]></title><description><![CDATA[A Comprehensive Guide to Azure Security Engineer Certification Exam]]></description><link>https://parveensingh.com/az-500-study-guide/</link><guid isPermaLink="false">60ebdaedaabbf0058d9dcedb</guid><category><![CDATA[Exams Study Guides]]></category><category><![CDATA[Azure]]></category><dc:creator><![CDATA[Parveen Singh]]></dc:creator><pubDate>Sat, 31 Jul 2021 08:00:00 GMT</pubDate><media:content url="https://parveensingh.com/content/images/2021/07/AzureSecurity-ExamGuide.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://parveensingh.com/content/images/2021/07/AzureSecurity-ExamGuide.jpg" alt="Azure Security Engineer: AZ-500 Study Guide"><p>The Azure Security Technologies exam is an associate-level exam in the Azure domain exams that is highly focused on the Security aspect of Azure services. However, the exam outline covers many essential topics that you are expected to know in your day-to-day life regardless of everything.</p><p>In this article, you will find the resources and recommendations if you are preparing for the Azure Security Technologies exam soon. This post is super long, so use the Table of Content to find the appropriate section you are interested in and bookmark it for later use.</p><hr><p><strong><em>Check out the Study Guides for other exams that might be of interest to you.</em></strong></p><ul><li><em><a href="https://parveensingh.com/az-400-guide/">Azure DevOps Exam Guide</a></em></li><li><em><a href="https://parveensingh.com/how-to-pass-az-204-in-30-days/">Azure Developer Exam Guide</a></em></li></ul><hr><!--kg-card-begin: markdown--><h2 id="table-of-content">Table of Content</h2>
<ol>
<li><a href="#certification-overview">Certification Overview</a></li>
<li><a href="#exam-prerequisites">Exam Prerequisites</a></li>
<li><a href="#who-is-this-az-500-exam-for">Who is this AZ-500 Exam for?</a></li>
<li><a href="#what-to-expect-in-the-exam">What to Expect in the Exam?</a></li>
<li><a href="#exam-preparation-recommendations">Exam Preparation Recommendations</a></li>
<li><a href="#exam-day-tips">Exam Day Tips</a></li>
<li><a href="#resources">Resources</a>
<ul>
<li><a href="#microsoft-learn-modules">Microsoft Learn Modules</a></li>
<li><a href="#cloud-academy-az-500-learning-path">Cloud Academy AZ-500 Learning Path</a></li>
<li><a href="#pluralsight-az-500-training">Pluralsight AZ-500 Training</a></li>
<li><a href="#whizlabs-questions-papers">WhizLabs Questions Papers</a></li>
<li><a href="#azure-sentinel-ninja-couse">Azure Sentinel Ninja Couse</a></li>
<li><a href="#azure-security-center-labs">Azure Security Center Labs</a></li>
<li><a href="#visual-studio-dev-essentials">Visual Studio Dev Essentials</a></li>
<li><a href="#30-days-to-learn-it">30 Days to Learn It</a></li>
</ul>
</li>
<li><a href="#exam-outline-microsoft-learn-docs-reference-links">Exam Outline: Microsoft Learn + Docs Reference Links</a>
<ul>
<li><a href="#manage-identity-and-access-30-35">Manage identity and access</a></li>
<li><a href="#implement-platform-protection-15-20">Implement platform protection</a></li>
<li><a href="#manage-security-operations-25-30">Manage security operations</a></li>
<li><a href="#secure-data-and-applications-20-25">Secure data and applications</a></li>
</ul>
</li>
<li><a href="#conclusion">Conclusion</a></li>
</ol>
<!--kg-card-end: markdown--><h2 id="certification-overview">Certification Overview</h2><p>Azure Security Technologies (AZ-500) is an associate-level exam that validates the skills and expertise of subject matter experts working with security and identity controls in Azure Cloud.</p><p>The exam aims to validate that you understand how to manage and implement identity and access controls, threat protection and security controls, and protect data and applications in the cloud and hybrid environments as part of end-to-end security enablement.</p><h2 id="exam-prerequisites">Exam Prerequisites</h2><p>If you are planning to attempt the Azure Security Technologies exam, be sure to complete one of the following exams beforehand, as it will give you enough exposure to Azure services and offerings:</p><ul><li><a href="https://docs.microsoft.com/en-us/learn/certifications/exams/az-104">Azure Administrator Associate</a></li><li><a href="https://parveensingh.com/how-to-pass-az-204-in-30-days/">Azure Developer Associate</a></li></ul><h2 id="who-is-this-az-500-exam-for">Who is this AZ-500 Exam for?</h2><p>On a high-level note, take the exam:</p><ul><li>If you are looking to learn more about Security, Identity, and Encryption in Azure cloud services.</li><li>If you are working on Administration, Software development and looking for a chance to move into the Security domain.</li><li>If you are looking to build security skills and learn more about security cloud workloads effectively.</li></ul><h2 id="what-to-expect-in-the-exam">What to Expect in the Exam?</h2><p>The Security Technologies Exam is 210 minutes, including about 30 minutes for the surveys and the assessments, which gives you roughly 180 minutes for the exam. You can expect around 40-60 questions in the exam.</p><p>The structure of the exam can vary and range between:</p><ul><li>Case study with multiple questions including two choices and drag-and-drop items.</li><li>Single-choice questions which may not be skipped or reviewed. You only get to answer these questions ONCE.</li><li>Single-choice questions (True/False or Yes/No)</li><li>Multiple-choice questions</li><li>Arrange in the correct sequence questions.</li></ul><p>Since it&apos;s an associate-level exam, it is relatively challenging as it covers many different topics and best practices. Therefore, I recommend you have at least one year of hands-on experience with Azure Cloud Administration and Security practices in general before you consider booking the exam.</p><h2 id="exam-preparation-recommendations">Exam Preparation Recommendations</h2><p>There&apos;s definitely a lot to cover in this exam, and giving you any list of services or things to learn would be unfair as the expectations for this exam are high. However, below are some topics to consider and focus attention on while preparing for the exam.</p><ul><li>Azure Service Endpoints vs. Private Links</li><li>Azure Policy</li><li>Azure PIM</li><li>Azure Conditional Access and MFA</li><li>Azure AD Connect and Hybrid Configuration</li><li>Managed and User assigned Identity</li><li>Azure Security Center</li><li>Azure Sentinel and Logic App Designer for alerts</li><li>RBAC and Custom Roles</li></ul><h2 id="exam-day-tips">Exam Day Tips</h2><p>Below are some of my recommendations on the exam and some tips that might be helpful.</p><ul><li>Cover basic knowledge using AZ-104 and AZ-900 exams to familiarize with the Azure offerings&apos; services and Azure offerings.</li><li>Book the exam at least 60-90 days ahead of the time. Try to use the vouchers from a learning partner, or keep an eye for open Cloud Skill Challenges that are often offered via Microsoft.</li><li>If it&apos;s your first time doing a Virtual Exam, be sure to read PearsonVUE&apos;s exam information to ensure your desk and workspace are clean before going into the exam.</li><li>The time for when to schedule the exam is debatable. If you are a morning person, consider doing it early when your mind is not distracted from the day stuff. On the other hand, I&apos;ve had challenges with wait time and schedule in the evenings or afternoon PST time zones.</li><li>You have access to a whiteboard where you can brainstorm ideas about the exams. It has been the least used feature of the exam for me personally.</li><li>Adjust the brightness of your screen or turn on Dark Mode before the exam starts. Constantly looking at a white screen with high brightness may affect your focus. Consider changing to dark mode from around the bottom left when you begin.</li><li>Use the Exam Outline to note down your target dates for each module and section so that you keep yourself on track. For example, I usually pick a final date and work backward to calculate how much time I spend on each module and section.</li></ul><h2 id="resources">Resources</h2><h3 id="microsoft-learn-modules">Microsoft Learn Modules</h3><p>Microsoft Learn offers a wide range of training and preparation material for most of the Azure exams. Below is a list of relevant modules to prepare for this exam:</p><ul><li><a href="https://docs.microsoft.com/en-us/azure/security/">Azure Security Documentation</a></li><li><a href="https://docs.microsoft.com/en-us/learn/paths/secure-your-cloud-apps?WT.mc_id=parveensingh.com">Secure your cloud applications in Azure</a></li><li><a href="https://docs.microsoft.com/en-us/learn/paths/implement-resource-mgmt-security?WT.mc_id=parveensingh.com">Implement resource management security in Azure</a></li><li><a href="https://docs.microsoft.com/en-us/learn/paths/implement-network-security?WT.mc_id=parveensingh.com">Implement network security in Azure</a></li><li><a href="https://docs.microsoft.com/en-us/learn/paths/implement-host-security?WT.mc_id=parveensingh.com">Implement virtual machine host security in Azure</a></li><li><a href="https://docs.microsoft.com/en-us/learn/paths/manage-identity-and-access?WT.mc_id=parveensingh.com">Manage identity and access in Azure Active Directory</a></li><li><a href="https://docs.microsoft.com/en-us/learn/paths/manage-security-operations?WT.mc_id=parveensingh.com">Manage security operations in Azure</a></li></ul><h3 id="cloud-academy-az-500-learning-path">Cloud Academy AZ-500 Learning Path</h3><p>The biggest differentiator that I&apos;ve seen for CloudAcademy has been their hands-on lab environment access, where you get free sandbox access to practice along with course and exam questions preparation.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://cloudacademy.com/learning-paths/az-500-exam-preparation-microsoft-azure-security-technologies-650/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">AZ-500 Exam Preparation: Microsoft Azure Security Technologies - Cloud Academy</div><div class="kg-bookmark-description">This Learning Path is designed to help you and your team prepare for the AZ-500 Microsoft Azure Security Technologies exam. Even if you aren&#x2019;t planning to take the exam, these courses and hands-on labs will help you get started on your way to deploying and managing Microsoft Azure security technolog&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://assets.cloudacademy.com/ssr-static/cloudacademy/favicon/mstile-310x310.png" alt="Azure Security Engineer: AZ-500 Study Guide"><span class="kg-bookmark-author">Cloud Academy</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://d2wxe3cu71edbr.cloudfront.net/static_res/website/images/clouda_social.png" alt="Azure Security Engineer: AZ-500 Study Guide"></div></a></figure><h3 id="pluralsight-az-500-training">Pluralsight AZ-500 Training</h3><p>Pluralsight also has an AZ-500 training course prepared heavily by Tim Warner and other awesome folks breathing Azure all the time. The course should get you started by checking a lot of boxes on the exam outline.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://www.pluralsight.com/paths/microsoft-azure-security-technologies-az-500"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Microsoft Azure Security Technologies (AZ-500)</div><div class="kg-bookmark-description">This learning path is intended to help learners start their preparation to take the Microsoft Azure Security Technologies (AZ-500) certification exam. Microsoft Azure Security Engineers are responsible for creating the most effective security solution for their teams. You&#x2019;ll learn how to manage ide&#x2026;</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://www.pluralsight.com/etc/clientlibs/pluralsight/main/images/favicons/android-chrome-192x192.png" alt="Azure Security Engineer: AZ-500 Study Guide"><span class="kg-bookmark-author">Pluralsight</span><span class="kg-bookmark-publisher">Tim Warner</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://pluralsight2.imgix.net/paths/images/comptia-storage-plus-ee0dacafe8.png" alt="Azure Security Engineer: AZ-500 Study Guide"></div></a></figure><h3 id="whizlabs-questions-papers">WhizLabs Questions Papers</h3><p>I&apos;d highly recommend taking the WhizLab&apos;s Practise tests and going through them a few times. I believe the questions are well prepared and explained in the descriptions when you review after each try:</p><!--kg-card-begin: markdown--><p><a target="_blank" href="https://shareasale.com/r.cfm?b=1426165&amp;u=2555241&amp;m=43514&amp;urllink=&amp;afftrack="><img src="https://static.shareasale.com/image/43514/728X9031.jpg" border="0" alt="Azure Security Engineer: AZ-500 Study Guide"></a></p>
<!--kg-card-end: markdown--><h3 id="azure-sentinel-ninja-couse">Azure Sentinel Ninja Couse</h3><p>Microsoft has a full walk-through of Azure Sentinel, which is a super helpful resource if you are looking for detailed blogs and articles with hands-on knowledge of Azure Security resources.</p><p><a href="https://techcommunity.microsoft.com/t5/azure-sentinel/become-an-azure-sentinel-ninja-the-complete-level-400-training/ba-p/1246310">Azure Sentinel Ninja Course</a></p><h3 id="azure-security-center-labs">Azure Security Center Labs</h3><p>Use the Azure Security Center labs to understand all the services offered by Security Center resources in Azure. Do not miss out on using the prepared Demo environments to use sample data for evaluation and analysis.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://github.com/Azure/Azure-Security-Center/tree/main/Labs"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Azure/Azure-Security-Center</div><div class="kg-bookmark-description">Welcome to the Azure Security Center community repository - Azure/Azure-Security-Center</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://github.githubassets.com/favicons/favicon.svg" alt="Azure Security Engineer: AZ-500 Study Guide"><span class="kg-bookmark-author">GitHub</span><span class="kg-bookmark-publisher">Azure</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://repository-images.githubusercontent.com/184655500/0c3a9480-c615-11ea-9290-28f0d7792688" alt="Azure Security Engineer: AZ-500 Study Guide"></div></a></figure><h3 id="visual-studio-dev-essentials">Visual Studio Dev Essentials</h3><p>Signup for Visual Studio Dev Essentials. You get Free Azure Credit to use the cloud resources and access training platforms like LinkedIn Learning and Pluralsight with one month of access.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://visualstudio.microsoft.com/dev-essentials/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Visual Studio Dev Essentials - Visual Studio</div><div class="kg-bookmark-description">Everything you need to build and deploy your app on any platform including tools, services, training, and more. Join our free developer program.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://visualstudio.microsoft.com/wp-content/uploads/2017/02/BrandVisualStudioIDE2017RTW_64x.png" alt="Azure Security Engineer: AZ-500 Study Guide"><span class="kg-bookmark-author">Visual Studio</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://visualstudio.microsoft.com/wp-content/uploads/2020/07/Facebook.png" alt="Azure Security Engineer: AZ-500 Study Guide"></div></a></figure><h3 id="30-days-to-learn-it">30 Days to Learn It</h3><p>Microsoft offers a 50% discount on exam price if you complete one of the listed MS Learn modules in 30 days.</p><p><a href="https://aka.ms/dev-essentials/30_days_to_learn_it">30 Days offer</a></p><h2 id="exam-outline-microsoft-learn-docs-reference-links">Exam Outline: Microsoft Learn + Docs Reference Links</h2><p>I&apos;ve gathered some of the reference URLs to articles on the internet that will help you cover most of the exam objectives. The headings link to <strong><em>Microsoft Learn modules,</em></strong> and the individual items in each category point to <strong><em>relevant reading articles or MS learn courses</em></strong>.</p><p>Be sure to print and have the exam outline with you while you are preparing for the exam. If you don&apos;t have the Exam Outline handle, <a href="https://query.prod.cms.rt.microsoft.com/cms/api/am/binary/RE3VC70">download it here</a>.</p><h3 id="manage-identity-and-access-30-35"><a href="https://docs.microsoft.com/en-us/learn/paths/manage-identity-and-access/?WT.mc_id=parveensingh.com">Manage identity and access</a> (30-35%)</h3><p><strong><a href="https://docs.microsoft.com/en-us/azure/security/fundamentals/identity-management-overview?WT.mc_id=parveensingh.com">Manage Azure Active Directory identities</a></strong></p><ul><li><a href="https://docs.microsoft.com/en-us/azure/active-directory/develop/app-objects-and-service-principals?WT.mc_id=parveensingh.com">configure security for service principals</a></li><li><a href="https://docs.microsoft.com/en-us/azure/devops/organizations/accounts/manage-azure-active-directory-groups?view=azure-devops&amp;tabs=preview-page&amp;WT.mc_id=parveensingh.com">manage Azure AD directory groups</a></li><li><a href="https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/add-users-azure-active-directory?WT.mc_id=parveensingh.com">manage Azure AD users</a></li><li><a href="https://docs.microsoft.com/en-us/azure/active-directory/roles/administrative-units?WT.mc_id=parveensingh.com">manage administrative units</a></li><li><a href="https://docs.microsoft.com/en-us/azure/active-directory/authentication/concept-sspr-writeback?WT.mc_id=parveensingh.com">configure password writeback</a></li><li>configure authentication methods including <a href="https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-password-hash-synchronization?WT..mc_id=parveensingh.com">password hash</a> and <a href="https://docs.microsoft.com/en-us/azure/active-directory/hybrid/how-to-connect-pta?WT.mc_id=parveensingh.com">Pass-Through Authentication</a> (PTA), <a href="https://docs.microsoft.com/en-us/azure/active-directory/fundamentals/auth-oauth2?WT.mc_id=parveensingh.com">OAuth</a>, and <a href="https://docs.microsoft.com/en-us/azure/active-directory/authentication/concept-authentication-passwordless?WT.mc_id=parveensingh.com">passwordless</a></li><li><a href="https://docs.microsoft.com/en-us/azure/role-based-access-control/transfer-subscription?WT.mc_id=parveensingh.com">transfer Azure subscriptions between Azure AD tenants</a> (<a href="https://docs.microsoft.com/en-us/azure/cost-management-billing/manage/billing-subscription-transfer?WT.mc_id=parveensingh.com">Transfer Billing Ownership</a>, <a href="https://docs.microsoft.com/en-us/azure/cost-management-billing/manage/transfer-subscriptions-subscribers-csp?WT.mc_id=parveensingh.com">CSP Sub Transfer</a>)</li></ul><p><strong>Configure secure access by using Azure AD</strong></p><ul><li><a href="https://docs.microsoft.com/en-us/azure/active-directory/privileged-identity-management/pim-how-to-use-audit-log?WT.mc_id=parveensingh.com">monitor privileged access for Azure AD Privileged Identity Management</a> (<a href="https://docs.microsoft.com/en-us/azure/active-directory/privileged-identity-management/pim-configure?WT.mc_id=parveensingh.com">PIM</a>)</li><li><a href="https://docs.microsoft.com/en-us/azure/active-directory/governance/manage-user-access-with-access-reviews?WT.mc_id=parveensingh.com">configure Access Reviews</a></li><li><a href="https://docs.microsoft.com/en-us/azure/active-directory/privileged-identity-management/pim-how-to-activate-role?WT.mc_id=parveensingh.com">Activate and configure PIM</a></li><li><a href="https://docs.microsoft.com/en-us/azure/active-directory/conditional-access/concept-conditional-access-policy-common?WT.mc_id=parveensingh.com">implement Conditional Access policies, including Multi-Factor Authentication</a> (MFA)</li><li><a href="https://docs.microsoft.com/en-us/azure/active-directory/identity-protection/overview-identity-protection?WT.mc_id=parveensingh.com">configure Azure AD identity protection</a></li></ul><p><strong>Manage application access</strong></p><ul><li><a href="https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-register-app?WT.mc_id=parveensingh.com">create App Registration</a></li><li><a href="https://docs.microsoft.com/en-us/azure/active-directory/develop/quickstart-configure-app-expose-web-apis?WT.mc_id=parveensingh.com">configure App Registration permission scopes</a></li><li><a href="https://docs.microsoft.com/en-us/azure/active-directory/develop/v2-permissions-and-consent?WT.mc_id=parveensingh.com">manage App Registration permission consent</a></li><li><a href="https://docs.microsoft.com/en-us/azure/api-management/api-management-role-based-access-control?WT.mc_id=parveensingh.com">manage API access to Azure subscriptions and resources</a></li></ul><p><strong>Manage access control</strong></p><ul><li><a href="https://docs.microsoft.com/en-us/azure/role-based-access-control/role-assignments-portal?WT.mc_id=parveensingh.com">configure subscription and resource permissions</a></li><li><a href="https://docs.microsoft.com/en-us/azure/role-based-access-control/quickstart-assign-role-user-portal?WT.mc_id=parveensingh.com">configure resource group permissions</a></li><li><a href="https://docs.microsoft.com/en-us/azure/active-directory/roles/custom-create?WT.mc_id=parveensingh.com">configure custom RBAC roles</a></li><li><a href="https://docs.microsoft.com/en-us/azure/lighthouse/concepts/recommended-security-practices#assign-permissions-to-groups-using-the-principle-of-least-privilege?WT.mc_id=parveensingh.com">identify the appropriate role</a></li><li>apply the principle of least privilege</li><li><a href="https://docs.microsoft.com/en-us/azure/role-based-access-control/role-assignments-list-portal?WT.mc_id=parveensingh.com">interpret permissions</a></li><li><a href="https://docs.microsoft.com/en-us/azure/role-based-access-control/check-access?WT.mc_id=parveensingh.com">check access</a></li></ul><h3 id="implement-platform-protection-15-20"><a href="https://docs.microsoft.com/en-us/learn/paths/implement-network-security/?WT.mc_id=parveensingh.com">Implement platform protection</a> (15-20%)</h3><p><strong>Implement advanced network security</strong></p><ul><li><a href="https://docs.microsoft.com/en-us/azure/security/fundamentals/network-overview?WT.mc_id=parveensingh.com">secure the connectivity of virtual networks</a> (VPN authentication, Express Route encryption)</li><li>configure <a href="https://docs.microsoft.com/en-us/azure/virtual-network/manage-network-security-group?WT.mc_id=parveensingh.com">Network Security Groups</a> (NSGs) and <a href="https://docs.microsoft.com/en-us/azure/virtual-network/tutorial-filter-network-traffic#create-application-security-groups?WT.mc_id=parveensingh.com">Application Security Groups</a> (ASGs)</li><li><a href="https://docs.microsoft.com/en-us/azure/firewall/tutorial-firewall-deploy-portal?WT.mc_id=parveensingh.com">create and configure Azure Firewall</a></li><li><a href="https://docs.microsoft.com/en-us/azure/firewall-manager/overview?WT.mc_id=parveensingh.com">implement Azure Firewall Manager</a></li><li><a href="https://docs.microsoft.com/en-us/azure/frontdoor/front-door-lb-with-azure-app-delivery-suite?WT.mc_id=parveensingh.com">configure Azure Front Door service as an Application Gateway</a></li><li><a href="https://docs.microsoft.com/en-us/azure/web-application-firewall/ag/application-gateway-web-application-firewall-portal?WT.mc_id=parveensingh.com">configure a Web Application Firewall (WAF) on Azure Application Gateway</a></li><li><a href="https://docs.microsoft.com/en-us/azure/bastion/tutorial-create-host-portal?WT.mc_id=parveensingh.com">configure Azure Bastion</a></li><li>configure a firewall on a <a href="https://docs.microsoft.com/en-us/azure/storage/common/storage-network-security?WT.mc_id=parveensingh.com">storage account</a>, <a href="https://docs.microsoft.com/en-us/azure/azure-sql/database/firewall-create-server-level-portal-quickstart?WT.mc_id=parveensingh.com">Azure SQL</a>, <a href="https://docs.microsoft.com/en-us/azure/key-vault/general/network-security?WT.mc_id=parveensingh.com">KeyVault</a>, or <a href="https://docs.microsoft.com/en-us/azure/app-service/environment/firewall-integration?WT.mc_id=parveensingh.com">App Service</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-network/tutorial-restrict-network-access-to-resources?WT.mc_id=parveensingh.com">implement Service Endpoints</a></li><li><a href="https://docs.microsoft.com/en-us/azure/ddos-protection/manage-ddos-protection?WT.mc_id=parveensingh.com">implement DDoS protection</a></li></ul><p><strong>Configure advanced security for compute</strong></p><ul><li><a href="https://docs.microsoft.com/en-us/azure/security-center/security-center-services?WT.mc_id=parveensingh.com&amp;tabs=features-windows#supported-endpoint-protection-solutions-">configure endpoint protection</a></li><li><a href="https://docs.microsoft.com/en-us/azure/automation/update-management/manage-updates-for-vm?WT.mc_id=parveensingh.com">configure and monitor system updates for VMs</a></li><li><a href="https://docs.microsoft.com/en-us/azure/container-registry/container-registry-authentication?WT.mc_id=parveensingh.com&amp;tabs=azure-cli">configure authentication for Azure Container Registry</a></li><li><a href="https://docs.microsoft.com/en-us/azure/security-center/container-security?WT.mc_id=parveensingh.com">configure security for different types of containers</a></li><li><a href="https://docs.microsoft.com/en-us/security/benchmark/azure/security-control-vulnerability-management?WT.mc_id=parveensingh.com">implement vulnerability management</a></li><li><a href="https://docs.microsoft.com/en-us/azure/aks/operator-best-practices-cluster-isolation?WT.mc_id=parveensingh.com">configure isolation for AKS</a></li><li><a href="https://docs.microsoft.com/en-us/security/benchmark/azure/baselines/container-registry-security-baseline?WT.mc_id=parveensingh.com">configure security for container registry</a></li><li><a href="https://docs.microsoft.com/en-us/azure/virtual-machines/windows/disk-encryption-faq?WT.mc_id=parveensingh.com">implement Azure Disk Encryption</a></li><li><a href="https://docs.microsoft.com/en-us/azure/app-service/overview-authentication-authorization?WT.mc_id=parveensingh.com">configure authentication and security for Azure App Service</a></li><li><a href="https://docs.microsoft.com/en-us/azure/cloud-services/cloud-services-configure-ssl-certificate-portal?WT.mc_id=parveensingh.com">configure SSL/TLS certs</a></li><li><a href="https://docs.microsoft.com/en-us/azure/aks/operator-best-practices-identity?WT.mc_id=parveensingh.com">configure authentication for Azure Kubernetes Service</a></li><li><a href="https://docs.microsoft.com/en-us/azure/automation/update-management/enable-from-vm?WT.mc_id=parveensingh.com">configure automatic updates</a></li></ul><h3 id="manage-security-operations-25-30"><a href="https://docs.microsoft.com/en-us/learn/paths/manage-security-operations/?WT.mc_id=parveensingh.com">Manage security operations</a> (25-30%)</h3><p><strong>Monitor security by using Azure Monitor</strong></p><ul><li><a href="https://docs.microsoft.com/en-us/azure/azure-monitor/alerts/alerts-metric?WT.mc_id=parveensingh.com">create and customize alerts</a></li><li><a href="https://docs.microsoft.com/en-us/azure/azure-monitor/alerts/alerts-metric?WT.mc_id=parveensingh.com">monitor security logs by using Azure Monitor</a></li><li><a href="https://docs.microsoft.com/en-us/azure/azure-monitor/essentials/diagnostic-settings?WT.mc_id=parveensingh.com">configure diagnostic logging and log retention</a></li></ul><p><strong>Monitor security by using Azure Security Center</strong></p><ul><li><a href="https://docs.microsoft.com/en-us/azure/security-center/deploy-vulnerability-assessment-vm?WT.mc_id=parveensingh.com">evaluate vulnerability scans from Azure Security Center</a></li><li><a href="https://docs.microsoft.com/en-us/azure/security-center/security-center-just-in-time?WT.mc_id=parveensingh.com">configure Just in Time VM access by using Azure Security Center</a></li><li><a href="https://docs.microsoft.com/en-us/azure/security-center/tutorial-security-policy?WT.mc_id=parveensingh.com">configure centralized policy management by using Azure Security Center</a></li><li><a href="https://docs.microsoft.com/en-us/azure/security-center/tutorial-security-policy?WT.mc_id=parveensingh.com">configure compliance policies and evaluate for compliance by using Azure Security Center</a></li><li><a href="https://docs.microsoft.com/en-us/azure/security-center/workflow-automation?WT.mc_id=parveensingh.com">configure workflow automation by using Azure Security Center</a></li></ul><p><strong>Monitor security by using Azure Sentinel</strong></p><ul><li><a href="https://docs.microsoft.com/en-us/azure/sentinel/tutorial-detect-threats-custom?WT.mc_id=parveensingh.com">create and customize alerts</a></li><li><a href="https://docs.microsoft.com/en-us/azure/sentinel/connect-data-sources?WT.mc_id=parveensingh.com">configure data sources to Azure Sentinel</a></li><li><a href="https://docs.microsoft.com/en-us/azure/sentinel/tutorial-investigate-cases?WT.mc_id=parveensingh.com">evaluate results from Azure Sentinel</a></li><li><a href="https://docs.microsoft.com/en-us/azure/sentinel/tutorial-respond-threats-playbook?WT.mc_id=parveensingh.com">configure a playbook by using Azure Sentinel</a></li></ul><p><strong>Configure security policies</strong></p><ul><li><a href="https://docs.microsoft.com/en-us/azure/security-center/tutorial-security-policy?WT.mc_id=parveensingh.com">configure security settings by using Azure Policy</a></li><li><a href="https://docs.microsoft.com/en-us/azure/governance/blueprints/how-to/configure-for-blueprint-operator?WT.mc_id=parveensingh.com">configure security settings by using Azure Blueprint</a></li></ul><h3 id="secure-data-and-applications-20-25"><a href="https://docs.microsoft.com/en-us/learn/paths/secure-your-cloud-apps/?WT.mc_id=parveensingh.com">Secure data and applications</a> (20-25%)</h3><p><strong>Configure security for storage</strong></p><ul><li><a href="https://docs.microsoft.com/en-us/azure/storage/common/storage-auth-aad?WT.mc_id=parveensingh.com">configure access control for storage accounts</a></li><li><a href="https://docs.microsoft.com/en-us/azure/storage/common/storage-account-keys-manage?WT.mc_id=parveensingh.com">configure key management for storage accounts</a></li><li><a href="https://docs.microsoft.com/en-us/azure/storage/common/storage-auth-aad?WT.mc_id=parveensingh.com">configure Azure AD authentication for Azure Storage</a></li><li><a href="https://docs.microsoft.com/en-us/azure/storage/files/storage-files-identity-auth-active-directory-domain-service-enable?WT.mc_id=parveensingh.com">configure Azure AD Domain Services authentication for Azure Files</a></li><li><a href="https://docs.microsoft.com/en-us/azure/storage/common/storage-sas-overview?WT.mc_id=parveensingh.com">create and Manage Shared Access Signatures (SAS)</a></li><li><a href="https://docs.microsoft.com/en-us/rest/api/storageservices/define-stored-access-policy?WT.mc_id=parveensingh.com">create a shared access policy for a blob or blob container</a></li><li><a href="https://docs.microsoft.com/en-us/azure/storage/common/storage-service-encryption?WT.mc_id=parveensingh.com">configure Storage Service Encryption</a></li><li><a href="https://docs.microsoft.com/en-us/azure/security-center/defender-for-storage-introduction?WT.mc_id=parveensingh.com">configure Azure Defender for Storage</a></li></ul><p><strong>Configure security for databases</strong></p><ul><li><a href="https://docs.microsoft.com/en-us/azure/azure-sql/database/authentication-aad-overview?WT.mc_id=parveensingh.com">enable database authentication</a></li><li><a href="https://docs.microsoft.com/en-us/azure/azure-sql/database/auditing-overview?WT.mc_id=parveensingh.com">enable database auditing</a></li><li>configure Azure Defender for SQL</li><li><a href="https://docs.microsoft.com/en-us/azure/azure-sql/database/threat-detection-overview?WT.mc_id=parveensingh.com">configure Azure SQL Database Advanced Threat Protection</a></li><li><a href="https://docs.microsoft.com/en-us/azure/azure-sql/database/transparent-data-encryption-tde-overview?WT.mc_id=parveensingh.com">implement database encryption</a></li><li><a href="https://docs.microsoft.com/en-us/sql/relational-databases/security/encryption/always-encrypted-database-engine?WT.mc_id=parveensingh.com">implement Azure SQL Database Always Encrypted</a></li></ul><p><strong>Configure and manage Key Vault</strong></p><ul><li><a href="https://docs.microsoft.com/en-us/azure/key-vault/general/security-features?WT.mc_id=parveensingh.com">manage access to Key Vault</a></li><li><a href="https://docs.microsoft.com/en-us/azure/key-vault/general/about-keys-secrets-certificates?WT.mc_id=parveensingh.com">manage permissions to secrets, certificates, and key</a></li><li><a href="https://docs.microsoft.com/en-us/azure/key-vault/general/rbac-guide?tabs=azure-cli#using-azure-rbac-secret-key-and-certificate-permissions-with-key-vault?WT.mc_id=parveensingh.com">configure RBAC usage in Azure Key Vault</a></li><li><a href="https://docs.microsoft.com/en-ca/archive/blogs/kv/manage-certificates-via-azure-key-vault?WT.mc_id=parveensingh.com">manage certificates</a></li><li><a href="https://docs.microsoft.com/en-us/azure-stack/user/azure-stack-key-vault-manage-portal?view=azs-1910#manage-keys-and-secrets?WT.mc_id=parveensingh.com">manage secrets</a></li><li><a href="https://docs.microsoft.com/en-us/azure/key-vault/secrets/tutorial-rotation-dual?WT.mc_id=parveensingh.com">configure key rotation</a></li><li><a href="https://docs.microsoft.com/en-us/azure/key-vault/general/backup?tabs=azure-cli?WT.mc_id=parveensingh.com">backup and restore of Key Vault items</a></li><li><a href="https://docs.microsoft.com/en-us/azure/security-center/defender-for-key-vault-introduction?WT.mc_id=parveensingh.com">configure Azure Defender for Key Vault</a></li></ul><h2 id="conclusion">Conclusion</h2><p>I hope this article helps you get through the learning part of the AZ-500 exam and cover all the necessary topics that you need to know before you go into the exam. Feel free to reach out to me on <a href="https://twitter.com/singh_cloud">Twitter</a> or <a href="https://www.linkedin.com/in/singhparveen/">LinkedIn</a> for any questions.</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://www.credly.com/badges/8ddffb96-f192-4b32-ac18-9249a79b54fe"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Microsoft Certified: Azure Security Engineer Associate was issued by Microsoft to Parveen Singh.</div><div class="kg-bookmark-description">Earning Azure Security Engineer Associate certification validates the skills and knowledge to implement security controls and threat protection, manage identity and access, and protect data, applications, and networks in cloud and hybrid environments as part of end-to-end infrastructure.</div><div class="kg-bookmark-metadata"><span class="kg-bookmark-author">Credly</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://images.credly.com/images/1ad16b6f-2c71-4a2e-ae74-ec69c4766039/linkedin_thumb_azure-security-engineer-associate600x600.png" alt="Azure Security Engineer: AZ-500 Study Guide"></div></a></figure><p>If you are looking for exam review on any other exam, check out the list below as I update it with the latest content:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://parveensingh.com/tag/exam/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Exam - Parveen Singh</div><div class="kg-bookmark-description">Review and Study Guides for Technical Exams.</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://parveensingh.com/favicon.png" alt="Azure Security Engineer: AZ-500 Study Guide"><span class="kg-bookmark-author">Parveen Singh</span><span class="kg-bookmark-publisher">Parveen Singh</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://parveensingh.com/content/images/2021/06/Website-Header.jpg" alt="Azure Security Engineer: AZ-500 Study Guide"></div></a></figure>]]></content:encoded></item><item><title><![CDATA[Getting Started with Chocolatey Package Manager]]></title><description><![CDATA[Installing and Getting Started with Chocolatey Package Manager for Windows]]></description><link>https://parveensingh.com/chocolatey-package-manager/</link><guid isPermaLink="false">60ff4e01aabbf0058d9dd089</guid><category><![CDATA[Powershell]]></category><category><![CDATA[Compliance]]></category><dc:creator><![CDATA[Parveen Singh]]></dc:creator><pubDate>Tue, 27 Jul 2021 00:26:49 GMT</pubDate><media:content url="https://parveensingh.com/content/images/2021/07/Chocolatey.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://parveensingh.com/content/images/2021/07/Chocolatey.jpg" alt="Getting Started with Chocolatey Package Manager"><p>If you&apos;ve ever got frustrated setting up the Windows development computer over and over again from scratch, there&apos;s an easier way. Perhaps you are testing and would like to install a particular set of applications on the system every time, and it&apos;s feeling tedious to do that manually. Let&apos;s see what is out there that can help you do that!</p><p>Chocolatey is a command-line package manager for Windows operating system based on the NuGet package manager. Chocolatey manages its own package feed; however, you can set up your own local repository for the enterprise environment to control the package&apos;s source for installation. If you are familiar with Linux or macOS environments, the Chocolatey is similar to <strong>Apt</strong> and <strong>Homebrew</strong>, respectively.</p><p>In this article, you&apos;ll learn how to install Chocolatey and then the usage of Chocolatey to install, uninstall, and update outdated packages using the command line.</p><!--kg-card-begin: markdown--><h2 id="table-of-content">Table of Content</h2>
<ol>
<li><a href="#prerequisites">Prerequisites</a></li>
<li><a href="#installing-chocolatey-on-windows">Installing Chocolatey on Windows</a></li>
<li><a href="#exploring-commands-and-searching-chocolatey-package">Exploring Commands and Searching Chocolatey Package</a></li>
<li><a href="#installing-chocolatey-packages">Installing Chocolatey Packages</a></li>
<li><a href="#using-chocolatey-with-powershell-dsc">Using Chocolatey with PowerShell DSC</a></li>
<li><a href="#uninstalling-chocolatey-packages">Uninstalling Chocolatey Packages</a></li>
<li><a href="#conclusion">Conclusion</a></li>
</ol>
<!--kg-card-end: markdown--><h2 id="prerequisites">Prerequisites</h2><ul><li>Windows 10 / Windows Server 2012 or higher OS</li><li>PowerShell 5.1 or higher</li></ul><h2 id="installing-chocolatey-on-windows">Installing Chocolatey on Windows</h2><p>You can install Chocolatey by either using the PowerShell script method or downloading the offline installer. Follow the steps below to download and install Chocolatey using the online method:</p><ul><li>Open PowerShell in Administrator Mode by right-clicking on the application and choosing <strong>Run as Administrator</strong>:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/01-powershell-admin.png" class="kg-image" alt="Getting Started with Chocolatey Package Manager" loading="lazy" width="731" height="373" srcset="https://parveensingh.com/content/images/size/w600/2021/07/01-powershell-admin.png 600w, https://parveensingh.com/content/images/2021/07/01-powershell-admin.png 731w" sizes="(min-width: 720px) 720px"><figcaption>PowerShell Admin Mode</figcaption></figure><ul><li>You need to update the script execution policy on your device before installing any package. Run the following command in the PowerShell terminal to allow script execution for the system:</li></ul><figure class="kg-card kg-code-card"><pre><code class="language-powershell">Set-ExecutionPolicy Bypass -Scope Process
</code></pre><figcaption>PowerShell Execution Policy</figcaption></figure><ul><li>Type <strong>Y</strong> when prompted for confirmation and allow the changes:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/02-policy-update.png" class="kg-image" alt="Getting Started with Chocolatey Package Manager" loading="lazy" width="1302" height="157" srcset="https://parveensingh.com/content/images/size/w600/2021/07/02-policy-update.png 600w, https://parveensingh.com/content/images/size/w1000/2021/07/02-policy-update.png 1000w, https://parveensingh.com/content/images/2021/07/02-policy-update.png 1302w" sizes="(min-width: 720px) 720px"><figcaption>Execution Policy Change Confirmation</figcaption></figure><ul><li>The next command does a few different things before installing chocolatey on the system. The first part of the command checks the security settings for the system, followed by downloading and running the <code>install.ps1</code> that&apos;s downloaded from the chocolatey website without any additional dialog box. The <code>install.ps1</code> PowerShell file contains the instructions to install and prepare the package manager for the system.</li></ul><figure class="kg-card kg-code-card"><pre><code class="language-powershell">[System.Net.ServicePointManager]::SecurityProtocol = [System.Net.ServicePointManager]::SecurityProtocol -bor 3072; iex ((New-Object System.Net.WebClient).DownloadString(&apos;&lt;https://chocolatey.org/install.ps1&gt;&apos;))
</code></pre><figcaption>Installing Chocolatey using PowerShell</figcaption></figure><ul><li>The output of the command will look like this:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/03-choco-install.png" class="kg-image" alt="Getting Started with Chocolatey Package Manager" loading="lazy" width="1135" height="942" srcset="https://parveensingh.com/content/images/size/w600/2021/07/03-choco-install.png 600w, https://parveensingh.com/content/images/size/w1000/2021/07/03-choco-install.png 1000w, https://parveensingh.com/content/images/2021/07/03-choco-install.png 1135w" sizes="(min-width: 720px) 720px"><figcaption>Chocolate Install Output</figcaption></figure><ul><li>Verify the installation using the following command while in the same terminal session:</li></ul><figure class="kg-card kg-code-card"><pre><code class="language-powershell">choco --help
</code></pre><figcaption>Chocolatey Help</figcaption></figure><ul><li>The output of the command will look like this, confirming the installation of chocolatey on the system:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/04-choco-help.png" class="kg-image" alt="Getting Started with Chocolatey Package Manager" loading="lazy" width="1042" height="785" srcset="https://parveensingh.com/content/images/size/w600/2021/07/04-choco-help.png 600w, https://parveensingh.com/content/images/size/w1000/2021/07/04-choco-help.png 1000w, https://parveensingh.com/content/images/2021/07/04-choco-help.png 1042w" sizes="(min-width: 720px) 720px"><figcaption>Chocolatey Help Output</figcaption></figure><h2 id="exploring-commands-and-searching-chocolatey-package">Exploring Commands and Searching Chocolatey Package</h2><p>Like most other PowerShell commands and tools, Chocolatey also comes with an inbuilt search and help command to make it easier to find the packages and get help for associated commands.</p><p>You can search for packages using the <code>list</code>, <code>search</code>, or <code>info</code> command. All these commands are an alias for each other and display similar results. The result for a package <code>winrar</code> looks like this:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/05-choco-search.png" class="kg-image" alt="Getting Started with Chocolatey Package Manager" loading="lazy" width="686" height="129" srcset="https://parveensingh.com/content/images/size/w600/2021/07/05-choco-search.png 600w, https://parveensingh.com/content/images/2021/07/05-choco-search.png 686w"><figcaption>Chocolatey Search Winrar</figcaption></figure><p>The output displays the list of packages that matched the search. In this case, the output only displays W<strong>inrar 6.02.</strong> However, they may be more packages depending on the package name and similar packages release from different vendors. You can optionally search for <code>winrar</code> and observe the difference in the output.</p><p>Another useful command to know while using Chocolatey is the <code>info</code> command. Unlike the search command, this command gives out detailed information about the package and lists install instructions and any accepted parameters for the installation of the package. Below is an example of the <code>Winrar</code> package:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/06-info.png" class="kg-image" alt="Getting Started with Chocolatey Package Manager" loading="lazy" width="778" height="439" srcset="https://parveensingh.com/content/images/size/w600/2021/07/06-info.png 600w, https://parveensingh.com/content/images/2021/07/06-info.png 778w" sizes="(min-width: 720px) 720px"><figcaption>Chocolatey Info Winrar</figcaption></figure><p>The info command is very beneficial when identifying the details of what the package does and other relevant information about the package you will install.</p><p>Another common argument that you might often use when identifying any command&apos;s possible commands and arguments are the <strong>help</strong> argument. The &#xA0;<code>--help</code>, <code>/?</code> or <code>-?</code> can be used to get assistance with almost any command.</p><h2 id="installing-chocolatey-packages">Installing Chocolatey Packages</h2><p>Once you have done enough research on the package you want to install, the next step is to download and install the package. The command used to install the chocolatey package is <code>choco install</code>followed by the name of the package of choice. The install command first downloads the package from the remote repository and then installs it on the operating system as part of one command.</p><p>The output of the command <code>choco install Winrar</code> will look like this:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/07-install-winrar.png" class="kg-image" alt="Getting Started with Chocolatey Package Manager" loading="lazy" width="916" height="719" srcset="https://parveensingh.com/content/images/size/w600/2021/07/07-install-winrar.png 600w, https://parveensingh.com/content/images/2021/07/07-install-winrar.png 916w" sizes="(min-width: 720px) 720px"><figcaption>Chocolatey Install Winrar</figcaption></figure><p>You will be prompted to confirm the action if you have not specified the auto-accept parameters in the original command. You can add <code>-y</code>, <code>--yes</code> or <code>--confirm</code> at the end of your command to suppress the prompt in the terminal.</p><blockquote>Installing multiple packages at once?<br>Use the following command while passing the name of the text file containing the list of packages to install:<br>Get-Content mypackage.txt | ForEach-Object {choco upgrade $_}</blockquote><p>If you are planning to install a package but unsure about what exactly the package will do to install the application, you can add <code>--whatif</code> argument to the end of the statement to understand the process that will follow. Below is an example of <strong>whatif</strong> for <strong>Winrar</strong> installation:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/08-winrar-whatif.png" class="kg-image" alt="Getting Started with Chocolatey Package Manager" loading="lazy" width="988" height="290" srcset="https://parveensingh.com/content/images/size/w600/2021/07/08-winrar-whatif.png 600w, https://parveensingh.com/content/images/2021/07/08-winrar-whatif.png 988w" sizes="(min-width: 720px) 720px"><figcaption>Chocolatey WhatIf</figcaption></figure><p>While installing a new package, you may have some old versions lying around on the system that you must update. Luckily, chocolatey has a <code>outdated</code> command that identifies any old packages installed on the system that can be updated. The following command list all the packages that are not using the latest version:</p><figure class="kg-card kg-code-card"><pre><code class="language-powershell">choco outdated</code></pre><figcaption>Chocolatey Outdated Command</figcaption></figure><p>If you identify any old package that you&apos;d like to update, chocolatey comes with <code>upgrade</code> a command that updates one or multiple packages behind the latest version release. If the package is not installed on the system already, the upgrade command will prompt and install the application for you.</p><p>Run the following command and see the results in action:</p><figure class="kg-card kg-code-card"><pre><code class="language-powershell">choco upgrade googlechrome
</code></pre><figcaption>Chocolatey Upgrade Command</figcaption></figure><h2 id="using-chocolatey-with-powershell-dsc">Using Chocolatey with PowerShell DSC</h2><p>You may likely need to use Chocolatey at the enterprise level or along with your DSC configurations if you are using PowerShell Desired State Configuration. I&apos;ve covered the PowerShell DSC using Azure Automation account while using Chocolatey package installation as an example to accomplish the DSC state for windows machine at the link below:</p><figure class="kg-card kg-bookmark-card kg-card-hascaption"><a class="kg-bookmark-container" href="https://parveensingh.com/azure-powershell-dsc-zero-to-hero/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">PowerShell DSC in Azure: Zero to Hero</div><div class="kg-bookmark-description">Infrastructure Compliance: A Definitive Guide to using PowerShell DSC with Azure Automation Account</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://parveensingh.com/favicon.png" alt="Getting Started with Chocolatey Package Manager"><span class="kg-bookmark-author">Parveen Singh</span><span class="kg-bookmark-publisher">Parveen Singh</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://parveensingh.com/content/images/2021/05/PowerDSC--1-.jpg" alt="Getting Started with Chocolatey Package Manager"></div></a><figcaption>PowerShell DSC in Azure Guide</figcaption></figure><h2 id="uninstalling-chocolatey-packages">Uninstalling Chocolatey Packages</h2><p>Since you&apos;ve seen multiple ways to install Chocolatey packages, the uninstall command only takes <code>uninstall</code> to remove any package from the system.</p><p>Run the following command to uninstall the <strong>Winrar</strong> package install earlier:</p><figure class="kg-card kg-code-card"><pre><code class="language-powershell">choco uninstall winrar
</code></pre><figcaption>Chocolatey Uninstall Command</figcaption></figure><p>The output will look like this:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/09-winrar-uninstall.png" class="kg-image" alt="Getting Started with Chocolatey Package Manager" loading="lazy" width="829" height="515" srcset="https://parveensingh.com/content/images/size/w600/2021/07/09-winrar-uninstall.png 600w, https://parveensingh.com/content/images/2021/07/09-winrar-uninstall.png 829w" sizes="(min-width: 720px) 720px"><figcaption>Chocolatey Uninstall Winrar Output</figcaption></figure><h2 id="conclusion">Conclusion</h2><p>I hope that gives you the context of the capabilities of Chocolatey and how you can use it to automate the setup of multiple computers using the Command Line tool with minimum human interference. Be sure to check the article below to see Chocolatey in action with Azure PowerShell DSC and check out other articles in the library.</p><ul><li><a href="https://parveensingh.com/azure-powershell-dsc-zero-to-hero/">PowerShell DSC in Azure</a></li></ul>]]></content:encoded></item><item><title><![CDATA[Azure Cosmos DB Partitions & Partition Keys Simplified]]></title><description><![CDATA[Everything you need to know about Cosmos DB Partitioning]]></description><link>https://parveensingh.com/cosmos-db-parition-keys/</link><guid isPermaLink="false">60f13857aabbf0058d9dcfa8</guid><category><![CDATA[CosmosDB]]></category><dc:creator><![CDATA[Parveen Singh]]></dc:creator><pubDate>Fri, 16 Jul 2021 17:00:00 GMT</pubDate><media:content url="https://parveensingh.com/content/images/2021/07/Cosmos-PartitionKey.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://parveensingh.com/content/images/2021/07/Cosmos-PartitionKey.jpg" alt="Azure Cosmos DB Partitions &amp; Partition Keys Simplified"><p>Performance and speed are crucial to the processing of any application running heavier or light workloads. The most significant impact any service can make on the application is the database queries. The latency to read, write and update the data in real-time can affect how the application performs its operation and how quickly it does that.</p><p>While working on an application design, you often seek certain functionality in services to be used by the application, such as high availability, data consistency, strong throughput, scalability, and robust disaster recovery solution. The most important thing is that all of those benefits shouldn&apos;t come at the cost of the application&apos;s performance.</p><p>In this article, you&apos;ll understand the concept of partition keys and the key concept involved in choosing the right partition key for your dataset.</p><!--kg-card-begin: markdown--><h2 id="table-of-content">Table of Content</h2>
<ol>
<li><a href="#cosmos-db-partition-keys-overview">Cosmos DB Partition Keys Overview</a></li>
<li><a href="#what-are-containers-in-cosmos-db">What are Containers in Cosmos DB</a></li>
<li><a href="#logical-partitions-in-cosmos-db">Logical Partitions in Cosmos DB</a></li>
<li><a href="#physical-partitions-in-cosmos-db">Physical Partitions in Cosmos DB</a></li>
<li><a href="#replica-sets-in-cosmos-db">Replica Sets in Cosmos DB</a></li>
<li><a href="#choosing-the-right-partition-keys-for-cosmos-db-account">Choosing the Right Partition Keys for Cosmos DB Account</a></li>
<li><a href="#creating-cosmos-db-container-with-partition-key-using-azure-portal">Creating Cosmos DB Container with Partition Key using Azure Portal</a></li>
<li><a href="#creating-cosmos-db-container-with-partition-key-using-azure-cli">Creating Cosmos DB Container with Partition Key using Azure CLI</a></li>
<li><a href="#creating-cosmos-db-container-with-partition-key-using-azure-powershell">Creating Cosmos DB Container with Partition Key using Azure PowerShell</a></li>
<li><a href="#conclusion">Conclusion</a></li>
</ol>
<!--kg-card-end: markdown--><h2 id="cosmos-db-partition-keys-overview">Cosmos DB Partition Keys Overview</h2><p>Azure Cosmos DB is designed to be used and operate for any size of workloads without any special configuration required to adapt to workload changes. That&apos;s all possible due to its scalable nature, and most importantly, the scalability is all taken care of under the hood by the Azure team so that you can spend more time writing efficient code and queries to interact with your data.</p><p>In terms of writing efficient queries, Cosmos DB allows you to group a set of items or data in your collection by a similar property determined by the <em><strong>partition key</strong>.</em> Partition keys are the core element to distributing your data efficiently into different logical and physical sets so that the queries performed against the database are completed as quickly as possible.</p><p>It is essential to choose the partition key during the design phase of the applications as you cannot change the partition key once the container is created.</p><h2 id="what-are-containers-in-cosmos-db">What are Containers in Cosmos DB</h2><p>Before starting to unwrap the partitions, it is essential to understand what containers are in CosmosDB. As of today, Cosmos DB offers three types of containers: collection, tables, and graphs. If you wish to learn more about these types, check out the <a href="https://parveensingh.com/azure-cosmos-db-basics/">first article in the series here</a>.</p><p>The containers are logical resources that groups one or more physical partitions of the data and necessary building blocks of Cosmos DB structure.</p><h2 id="logical-partitions-in-cosmos-db">Logical Partitions in Cosmos DB</h2><p>Grouping of items or documents with the same partition key forms a <em>logical partition</em>. The partition design is dependent on the partition key as it groups similar items for even distribution. It&apos;s worth mentioning that the partition key is a JSON property within the document that Cosmos DB can leverage to distribute the data. The logical partition can only store up to 20 GB of data.</p><p>It&apos;s easier to understand it using an example of a dataset: students&apos; exam results for different subjects in class. Each student has exam scores for one or more exams. One of the possible logic partitions for this kind of dataset could be the <strong><em>subject name</em></strong>.</p><figure class="kg-card kg-code-card"><pre><code class="language-json">[{
	&quot;userId&quot;:&quot;Singh&quot;,
	&quot;subjectName&quot;:&quot;Maths&quot;,
	&quot;score&quot;:&quot;80&quot;
},
{
	&quot;userId&quot;:&quot;Singh&quot;,
	&quot;subjectName&quot;:&quot;Physics&quot;,
	&quot;score&quot;:&quot;70&quot;
},
{
	&quot;userId&quot;:&quot;Max&quot;,
	&quot;subjectName&quot;:&quot;Maths&quot;,
	&quot;score&quot;:&quot;90&quot;
},
{
	&quot;userId&quot;:&quot;Max&quot;,
	&quot;subjectName&quot;:&quot;Chemistry&quot;,
	&quot;score&quot;:&quot;80&quot;
}]
</code></pre><figcaption>JSON Exams Result Data</figcaption></figure><p>All the data with exam scores for <em>every subject</em> will be stored in its own partitions. Hence, grouping the data for a particular subject for multiple students in the same partition. Since the partitions are logical, you don&apos;t need to worry about deleting them once the associated data is removed or creating new ones for similar data.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/Cosmos-Logic--1-.jpg" class="kg-image" alt="Azure Cosmos DB Partitions &amp; Partition Keys Simplified" loading="lazy" width="1274" height="1013" srcset="https://parveensingh.com/content/images/size/w600/2021/07/Cosmos-Logic--1-.jpg 600w, https://parveensingh.com/content/images/size/w1000/2021/07/Cosmos-Logic--1-.jpg 1000w, https://parveensingh.com/content/images/2021/07/Cosmos-Logic--1-.jpg 1274w" sizes="(min-width: 720px) 720px"><figcaption>Cosmos Partition Key Example</figcaption></figure><h2 id="physical-partitions-in-cosmos-db">Physical Partitions in Cosmos DB</h2><p>Physical partition in Cosmos DB is Azure managed containers that enabled the scalability and data distribution across the platform by mapping multiple logical partitions to a single physical partition. Unlike logical partitions, the storage space for physical partitions is up to 50 GB for each partition.</p><p>The distribution of data across the physical partition depends entirely on throughput provisioned on the Cosmos DB account. Each physical partition is limited to the throughput of up to 10,000 request units (RU) per second. Based on the throughput defined for the account, the Cosmos account will automatically determine the number of physical partitions. In addition to it, the overall size of the account is also considered due to the 50 GB limit on each physical partition.</p><h2 id="replica-sets-in-cosmos-db">Replica Sets in Cosmos DB</h2><p>A replica set in Cosmos DB is referred to as a subset of data within a physical partition set. Each physical partition distributes the data into a set of replicas to make the data durable, highly available, and consistent. Since the replica sets are running on Azure-managed nodes, the replication and global distribution process are handled automatically without any specific configuration.</p><p>Read more about the concept of Consistency in Cosmos DB on the article below:</p><figure class="kg-card kg-bookmark-card"><a class="kg-bookmark-container" href="https://parveensingh.com/cosmosdb-consistency-levels/"><div class="kg-bookmark-content"><div class="kg-bookmark-title">Consistency Levels in Azure Cosmos DB Explained</div><div class="kg-bookmark-description">Everything You Need To Know About CosmosDB Consistency Levels</div><div class="kg-bookmark-metadata"><img class="kg-bookmark-icon" src="https://parveensingh.com/favicon.png" alt="Azure Cosmos DB Partitions &amp; Partition Keys Simplified"><span class="kg-bookmark-author">Parveen Singh</span><span class="kg-bookmark-publisher">Parveen Singh</span></div></div><div class="kg-bookmark-thumbnail"><img src="https://parveensingh.com/content/images/2021/07/Cosmos-ConsistencyLevels.jpg" alt="Azure Cosmos DB Partitions &amp; Partition Keys Simplified"></div></a></figure><h2 id="choosing-the-right-partition-keys-for-cosmos-db-account">Choosing the Right Partition Keys for Cosmos DB Account</h2><p>When considering the exact partition key for your containers, you need to evaluate the dataset you are working with, identify key metrics, and understand how the performance might be impacted based on how the data is accessed. Here are few considerations when planning the right partition keys for your dataset:</p><ul><li>The partition key of your container should distribute the data evenly across the solution. Choose a key that has the possibility of growing and still not overload one set of partitions.</li><li>Designing a partition key with uneven partitions or storing one document on each partition can cause cross-partition transactions in <a href="https://docs.microsoft.com/en-us/azure/cosmos-db/how-to-write-stored-procedures-triggers-udfs?tabs=javascript">triggers and stored procedures</a>.</li><li>Avoid the keys that can potentially overload one particular partition with excess data on new writes, causing exceeded throughput and partition throttling.</li><li>If your queries are mostly targeting a particular attribute of data, choosing that as a partition key would be an ideal use case to reduce cross-partition queries.</li></ul><h2 id="creating-cosmos-db-container-with-partition-key-using-azure-portal">Creating Cosmos DB Container with Partition Key using Azure Portal</h2><p>Navigate to your Azure Portal and follow the instruction below to create a new Cosmos DB account resource.</p><ul><li>Search <em>cosmos</em> in the Azure Portal search bar and select the <strong>Azure Cosmos DB</strong> option under <strong>Services</strong>:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/01-search-cosmos.png" class="kg-image" alt="Azure Cosmos DB Partitions &amp; Partition Keys Simplified" loading="lazy" width="457" height="178"><figcaption>Find CosmosDB</figcaption></figure><ul><li>Click <strong>+Create</strong> and choose <strong>Core(SQL) - Recommended</strong> API option:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/02-api-cosmos.png" class="kg-image" alt="Azure Cosmos DB Partitions &amp; Partition Keys Simplified" loading="lazy" width="771" height="245" srcset="https://parveensingh.com/content/images/size/w600/2021/07/02-api-cosmos.png 600w, https://parveensingh.com/content/images/2021/07/02-api-cosmos.png 771w" sizes="(min-width: 720px) 720px"><figcaption>Create CosmosDB SQL</figcaption></figure><ul><li>Fill out the relevant information on the <strong>Create Azure Cosmos DB Account</strong> page: Be sure to use the Free Tier Discount if you currently don&apos;t use any Cosmos DB account.</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/03-res-create.png" class="kg-image" alt="Azure Cosmos DB Partitions &amp; Partition Keys Simplified" loading="lazy" width="1113" height="833" srcset="https://parveensingh.com/content/images/size/w600/2021/07/03-res-create.png 600w, https://parveensingh.com/content/images/size/w1000/2021/07/03-res-create.png 1000w, https://parveensingh.com/content/images/2021/07/03-res-create.png 1113w" sizes="(min-width: 720px) 720px"><figcaption>CosmosDB Create Window</figcaption></figure><ul><li>Click <strong>Review+Create</strong> followed by <strong>Create</strong> to complete the resource deployment.</li><li>Once the resource is deployed, navigate to the CosmosDB resource and click <strong>Data Explorer</strong> from the left blade menu:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/04-data-explorer.png" class="kg-image" alt="Azure Cosmos DB Partitions &amp; Partition Keys Simplified" loading="lazy" width="587" height="465"><figcaption>CosmosDB Data Explorer</figcaption></figure><ul><li>Click <strong>New Container</strong> on the top left and fill out the following information on the <strong>New Container</strong> popup window:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/05-new-container.png" class="kg-image" alt="Azure Cosmos DB Partitions &amp; Partition Keys Simplified" loading="lazy" width="545" height="1119"><figcaption>CosmosDB Container Popup</figcaption></figure><p>The partition key you will be using is <code>subjectName</code> to distribute the data into logical partitions.</p><ul><li>Expand the Database <strong>ExamsData</strong> and the Container named <strong>ExamsResult</strong> and click <strong>Items</strong>:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/06-db-container.png" class="kg-image" alt="Azure Cosmos DB Partitions &amp; Partition Keys Simplified" loading="lazy" width="769" height="298" srcset="https://parveensingh.com/content/images/size/w600/2021/07/06-db-container.png 600w, https://parveensingh.com/content/images/2021/07/06-db-container.png 769w" sizes="(min-width: 720px) 720px"><figcaption>CosmosDB New Item</figcaption></figure><ul><li>Click <strong>New Item</strong> on the top menu and replace the content of the editor with the following JSON data:</li></ul><figure class="kg-card kg-code-card"><pre><code class="language-json">{
	&quot;userId&quot;:&quot;Singh&quot;,
	&quot;subjectName&quot;:&quot;Maths&quot;,
	&quot;score&quot;:&quot;80&quot;
}
</code></pre><figcaption>New Item Sample Data</figcaption></figure><ul><li>Click <strong>Save</strong> to complete the document upload:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/07-doc-update.png" class="kg-image" alt="Azure Cosmos DB Partitions &amp; Partition Keys Simplified" loading="lazy" width="560" height="342"><figcaption>New Item View</figcaption></figure><ul><li>Repeat the last step for the following data, entering <strong><em>one JSON object at a time</em></strong>:</li></ul><figure class="kg-card kg-code-card"><pre><code class="language-json">{
	&quot;userId&quot;:&quot;Singh&quot;,
	&quot;subjectName&quot;:&quot;Physics&quot;,
	&quot;score&quot;:&quot;70&quot;
}

{
	&quot;userId&quot;:&quot;Max&quot;,
	&quot;subjectName&quot;:&quot;Maths&quot;,
	&quot;score&quot;:&quot;90&quot;
}

{
	&quot;userId&quot;:&quot;Max&quot;,
	&quot;subjectName&quot;:&quot;Chemistry&quot;,
	&quot;score&quot;:&quot;80&quot;
}
</code></pre><figcaption>Sample Item Data</figcaption></figure><ul><li>Once uploaded, you should start seeing the data listed in the items view distributed by the subject name:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/08-items.png" class="kg-image" alt="Azure Cosmos DB Partitions &amp; Partition Keys Simplified" loading="lazy" width="367" height="345"><figcaption>Container Items View</figcaption></figure><h2 id="creating-cosmos-db-container-with-partition-key-using-azure-cli">Creating Cosmos DB Container with Partition Key using Azure CLI</h2><p>If you prefer using Azure CLI to create the resources, follow the instructions below to create the Cosmos DB resource using Azure CLI.</p><ul><li>Launch the CloudShell from the Azure Portal and choose Bash as the environment:</li></ul><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/09-cloudshell.png" class="kg-image" alt="Azure Cosmos DB Partitions &amp; Partition Keys Simplified" loading="lazy" width="708" height="263" srcset="https://parveensingh.com/content/images/size/w600/2021/07/09-cloudshell.png 600w, https://parveensingh.com/content/images/2021/07/09-cloudshell.png 708w"><figcaption>Azure Cloud Shell</figcaption></figure><ul><li>You will first create a new resource group and cosmos DB resource inside that resource group. If you already have a resource group, feel free to update the name of the <code>resouceGroup</code> variable and skip the resource group creation command. Be sure to update the <code>cosmosDB</code> variable to use a globally unique name for the Cosmos DB account.</li></ul><figure class="kg-card kg-code-card"><pre><code class="language-bash">resourceGroup=&quot;cosmostest&quot;
cosmosDB=&quot;cosmosaccount2021&quot;
az group create -n $resourceGroup --location westus
az cosmosdb create -n $cosmosDB -g $resourceGroup --locations regionName=westus
</code></pre><figcaption>Create Resource Group and CosmosDB Account using Azure CLI</figcaption></figure><ul><li>Create the Cosmos DB Database using the following commands:</li></ul><figure class="kg-card kg-code-card"><pre><code class="language-bash">dbName=&quot;ExamData&quot;
az cosmosdb sql database create --account-name $cosmosDB --name $dbName --resource-group $resourceGroup
</code></pre><figcaption>Create CosmosDB SQL Database using Azure CLI</figcaption></figure><ul><li>Finally, create the container with a partition key of <code>subjectName</code>:</li></ul><figure class="kg-card kg-code-card"><pre><code class="language-bash">containerName=&quot;ExamResults&quot;
az cosmosdb sql container create --name $containerName --partition-key-path &apos;/subjectName&apos;  --account-name $cosmosDB --data
base-name $dbName --resource-group $resourceGroup
</code></pre><figcaption>Create CosmosDB Container using Azure CLI</figcaption></figure><ul><li>At this point, the Cosmos DB account, database, and container are ready to use either in any application code or using Data Explorer in Azure Portal. You can follow the step in the previous section to upload the sample data if you wish to add documents to the container.</li></ul><h2 id="creating-cosmos-db-container-with-partition-key-using-azure-powershell">Creating Cosmos DB Container with Partition Key using Azure PowerShell</h2><p>If you are familiar with Azure PowerShell and prefer to use it instead of CLI, follow the instructions below to create the CosmosDB resource using Azure PowerShell:</p><ul><li>Launch the Azure Cloud Shell with a PowerShell environment.</li><li>Create the resource group and a Cosmos DB account using the following commands:</li></ul><figure class="kg-card kg-code-card"><pre><code class="language-bash">$resourceGroup=&quot;cosmostest&quot;
$cosmosDB=&quot;cosmosaccount2021&quot;
New-AzResourceGroup -Name $resourceGroup -Location WestUS
New-AzCosmosDBAccount -Name $cosmosDB -Location WestUS -ResourceGroupName $resourceGroup 
</code></pre><figcaption>Create Resource Group and CosmosDB Account using Azure PowerShell</figcaption></figure><ul><li>Once the account is ready, create the database inside the Cosmos DB account using the following commands:</li></ul><figure class="kg-card kg-code-card"><pre><code class="language-bash">$dbName=&quot;ExamData&quot;
New-AzCosmosDBSqlDatabase -AccountName $cosmosDB -Name $dbName -ResourceGroupName $resourceGroup
</code></pre><figcaption>Create CosmosDB SQL Database using Azure PowerShell</figcaption></figure><ul><li>Finally, create the container to store documents with a partition key of <code>subjectName</code> using the following commands:</li></ul><figure class="kg-card kg-code-card"><pre><code class="language-bash">$containerName=&quot;ExamsResults&quot;
New-AzCosmosDBSqlContainer -Name $containerName -AccountName $cosmosDB -DatabaseName $dbName -ResourceGroupName $resourceGroup -PartitionKeyPath &apos;/subjectName&apos; -PartitionKeyKind Hash
</code></pre><figcaption>Create CosmosDB Container using Azure PowerShell</figcaption></figure><ul><li>Follow the steps in the previous instructions to upload the data inside the container or use alternate methods via application code to add or remove the data.</li></ul><h2 id="conclusion">Conclusion</h2><p>I hope that helps you understand the concept of partition keys in Cosmos DB since they are crucial to the data queries and impact the performance of your application. In the meantime, check out the following articles if you are looking to read more about Cosmos DB:</p><ul><li><a href="https://parveensingh.com/azure-cosmos-db-basics/">What is Azure Cosmos DB</a></li><li><a href="https://parveensingh.com/cosmosdb-consistency-levels/">Cosmos DB Consistency Levels</a></li></ul>]]></content:encoded></item><item><title><![CDATA[PowerShell Basics: Format Command Output as Tables, List, and More]]></title><description><![CDATA[Learn All the Ways to Display and Format Command Output in PowerShell]]></description><link>https://parveensingh.com/powershell-format-output/</link><guid isPermaLink="false">60dd4c2a0bffc51b6d48d971</guid><category><![CDATA[Powershell]]></category><dc:creator><![CDATA[Parveen Singh]]></dc:creator><pubDate>Thu, 01 Jul 2021 05:14:00 GMT</pubDate><media:content url="https://parveensingh.com/content/images/2021/07/PowerShell-FormatOutput.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://parveensingh.com/content/images/2021/07/PowerShell-FormatOutput.jpg" alt="PowerShell Basics: Format Command Output as Tables, List, and More"><p>Working with PowerShell can sometimes be surprising when you might expect more data but only see a few items. One of the reasons for that is PowerShell&apos;s display formats. It uses the module&apos;s default formatting when displaying the data without any specific instruction from the user.</p><p>PowerShell will often hide the object&apos;s information based on how much you really need to see. However, it gives you the flexibility to decide how you wish to get the data presented to you using multiple formatting options available out of the box in PowerShell.</p><p>In this article, you&apos;ll discover different ways to display output from any command in PowerShell.</p><!--kg-card-begin: markdown--><h2 id="table-of-content">Table Of Content</h2>
<ol>
<li><a href="#prerequisites">Prerequisites</a></li>
<li><a href="#powershell-formatting-overview">PowerShell Formatting Overview</a></li>
<li><a href="#format-the-output-using-format-table">Format the  Output using Format-Table</a></li>
<li><a href="#format-the-output-using-format-list">Format the Output using Format-List</a></li>
<li><a href="#format-the-output-using-format-hex">Format the Output using Format-Hex</a></li>
<li><a href="#format-the-output-using-format-wide">Format the Output using Format-Wide</a></li>
<li><a href="#conclusion">Conclusion</a></li>
<li><a href="#reference">Reference</a></li>
</ol>
<!--kg-card-end: markdown--><h2 id="prerequisites">Prerequisites</h2><p>If you haven&apos;t checked the previous article in the series, use the links below to go through those articles before going deep into PowerShell formatting.</p><ul><li><a href="https://parveensingh.com/powershell-basics">PowerShell Basics</a></li><li><a href="https://parveensingh.com/powershell-get-help">PowerShell Get-Help</a></li></ul><h2 id="powershell-formatting-overview">PowerShell Formatting Overview</h2><p>PowerShell has a set of commands that gives you control over how you wish to display the output for any particular object. The names of all the cmdlets begin with the verb <code>Format</code>. You can use these cmdlets to decide how you like to see the data.</p><p>Run the following command in your PowerShell terminal session to see the list of all the command available for formatting:</p><figure class="kg-card kg-code-card"><pre><code class="language-powershell">Get-Command -Verb Format -Module Microsoft.PowerShell.Utility
</code></pre><figcaption>PowerShell Get-Command</figcaption></figure><h2 id="format-the-output-using-format-table">Format the &#xA0;Output using Format-Table</h2><p><code>Format-Table</code> is one of the most common formatting styles that you will use when working with PowerShell. The command output in PowerShell follows the default output formatting system.</p><p>For example, run the following command in the PowerShell windows and observe the output:</p><figure class="kg-card kg-code-card"><pre><code class="language-powershell">Get-Date
</code></pre><figcaption>PowerShell Get-Date</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/01-output-date.png" class="kg-image" alt="PowerShell Basics: Format Command Output as Tables, List, and More" loading="lazy" width="668" height="157" srcset="https://parveensingh.com/content/images/size/w600/2021/07/01-output-date.png 600w, https://parveensingh.com/content/images/2021/07/01-output-date.png 668w"><figcaption>Get-Date Output</figcaption></figure><p>The output displays a standalone date and time without much information. However, the default view of the command only displays necessary information and lets you choose the details you would like to see.</p><p>Add the formatting option to the command now using a pipeline and observe the output:</p><figure class="kg-card kg-code-card"><pre><code class="language-powershell">Get-Date | Format-Table
</code></pre><figcaption>PowerShell Format-Table Example</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/02-output-table.png" class="kg-image" alt="PowerShell Basics: Format Command Output as Tables, List, and More" loading="lazy" width="871" height="143" srcset="https://parveensingh.com/content/images/size/w600/2021/07/02-output-table.png 600w, https://parveensingh.com/content/images/2021/07/02-output-table.png 871w" sizes="(min-width: 720px) 720px"><figcaption>Get-Date Format-Table</figcaption></figure><p>If you wish to change the sequence of the table heading, use the <code>-Property</code> attribute to customize the look of the table output:</p><figure class="kg-card kg-code-card"><pre><code class="language-powershell">Get-Date | Format-Table -Property Month, Day, Hour, Minute, Millisecond
</code></pre><figcaption>Get-Date Format-Table Property Example</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/03-table-format.png" class="kg-image" alt="PowerShell Basics: Format Command Output as Tables, List, and More" loading="lazy" width="895" height="165" srcset="https://parveensingh.com/content/images/size/w600/2021/07/03-table-format.png 600w, https://parveensingh.com/content/images/2021/07/03-table-format.png 895w" sizes="(min-width: 720px) 720px"><figcaption>Format-Table Property Output</figcaption></figure><h2 id="format-the-output-using-format-list">Format the Output using Format-List</h2><p><code>Format-List</code> is the second most used command while working with PowerShell outputs. It is super helpful when the output of any command doesn&apos;t give you all the information you need. PowerShell only display&apos;s a chunk of important information and requires you to explore more with the output to find the relevant information for your use case.</p><p>While working with the same command as before, use the list format and observe the output in this case:</p><figure class="kg-card kg-code-card"><pre><code class="language-powershell">Get-Date | Format-List
</code></pre><figcaption>Get-Date Format-List Command</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/04-output-list.png" class="kg-image" alt="PowerShell Basics: Format Command Output as Tables, List, and More" loading="lazy" width="577" height="394"><figcaption>Date Format-List Output</figcaption></figure><p>The output, in this case, includes a lot more information than the table in the previous section. The list format is the most convenient format when trying to visualize all the data available in the output of any command.</p><p>Similar to the previous example, use the <code>-Property</code> attribute to filter the output results as per the need:</p><figure class="kg-card kg-code-card"><pre><code class="language-powershell">Get-Date | Format-List -Property Month, Day, Hour, Minute, Millisecond
</code></pre><figcaption>Get-Date List Property Command</figcaption></figure><h2 id="format-the-output-using-format-hex">Format the Output using Format-Hex</h2><p>The format-hex displays the hexadecimal value of string input in the terminal. This command is not used widely. However, it is good to know the options available within the formatting section of PowerShell.</p><p>The command expects an array of strings to treat as an input. Run the following command in your PowerShell terminal to see the output in hex format:</p><figure class="kg-card kg-code-card"><pre><code class="language-powershell">&quot;PowerShell Hex Format&quot; | Format-Hex
</code></pre><figcaption>PowerShell Format-Hex</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/05-output-hex.png" class="kg-image" alt="PowerShell Basics: Format Command Output as Tables, List, and More" loading="lazy" width="2000" height="453" srcset="https://parveensingh.com/content/images/size/w600/2021/07/05-output-hex.png 600w, https://parveensingh.com/content/images/size/w1000/2021/07/05-output-hex.png 1000w, https://parveensingh.com/content/images/size/w1600/2021/07/05-output-hex.png 1600w, https://parveensingh.com/content/images/2021/07/05-output-hex.png 2084w" sizes="(min-width: 720px) 720px"><figcaption>Format-Hex Output</figcaption></figure><h2 id="format-the-output-using-format-wide">Format the Output using Format-Wide</h2><p>Another less-traveled path and less frequently used format type is <code>Format-Wide</code>, which displays the list of items in columns and forms a grid.</p><p>Run the following command in your PowerShell terminal to review the output:</p><figure class="kg-card kg-code-card"><pre><code class="language-powershell">Get-Process | Format-Wide -Column 5
</code></pre><figcaption>Get-Process Format-Wide Command</figcaption></figure><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://parveensingh.com/content/images/2021/07/06-output-wide.png" class="kg-image" alt="PowerShell Basics: Format Command Output as Tables, List, and More" loading="lazy" width="2000" height="465" srcset="https://parveensingh.com/content/images/size/w600/2021/07/06-output-wide.png 600w, https://parveensingh.com/content/images/size/w1000/2021/07/06-output-wide.png 1000w, https://parveensingh.com/content/images/size/w1600/2021/07/06-output-wide.png 1600w, https://parveensingh.com/content/images/size/w2400/2021/07/06-output-wide.png 2400w" sizes="(min-width: 720px) 720px"><figcaption>Format-Wide Output</figcaption></figure><h2 id="conclusion">Conclusion</h2><p>I hope the article helps you understand some of the fundamental output formatting in PowerShell as you move towards using PowerShell with Azure and Office 365 services.</p><h2 id="reference">Reference</h2><p>If you are looking for more resources, check them the articles below:</p><ul><li><a href="https://parveensingh.com/azure-cli-basics/">Getting Started with Azure CLI</a></li><li><a href="https://parveensingh.com/az-400-guide/">Azure DevOps Certification: AZ-400 Study Guide</a></li></ul>]]></content:encoded></item></channel></rss>