-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.html
1 lines (1 loc) · 58.6 KB
/
index.html
1
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1"><meta><title>Exploring Azure, DevOps and Software Development</title><link rel="manifest" href="/manifest.json"><meta name="application-name" content="Exploring Azure, DevOps and Software Development"><meta name="msapplication-TileImage" content="/img/favicon.ico"><meta name="apple-mobile-web-app-capable" content="yes"><meta name="apple-mobile-web-app-title" content="Exploring Azure, DevOps and Software Development"><meta name="apple-mobile-web-app-status-bar-style" content="default"><meta name="description" content="Welcome to Ricky&#39;s Blog (Cloud, Azure, DevOps, Development). Tips, and Best Practices for Cloud, Azure, DevOps, and Software Development"><meta property="og:type" content="blog"><meta property="og:title" content="Exploring Azure, DevOps and Software Development"><meta property="og:url" content="https://clouddev.blog/"><meta property="og:site_name" content="Exploring Azure, DevOps and Software Development"><meta property="og:description" content="Welcome to Ricky&#39;s Blog (Cloud, Azure, DevOps, Development). Tips, and Best Practices for Cloud, Azure, DevOps, and Software Development"><meta property="og:locale" content="en_US"><meta property="og:image" content="https://clouddev.blog/img/og_image.png"><meta property="article:author" content="Ricky Gummadi"><meta property="article:tag" content="Ricky"><meta property="article:tag" content="Azure"><meta property="article:tag" content="Cloud Architecture"><meta property="article:tag" content="Cloud Solution Architecture"><meta property="article:tag" content="Cloud Design"><meta property="article:tag" content="Microsoft Azure"><meta property="article:tag" content=".NET"><meta property="article:tag" content="Dotnet"><meta property="article:tag" content="Microsoft Tech"><meta property="article:tag" content="Serverless"><meta property="article:tag" content="Github"><meta property="article:tag" content="Devops"><meta property="article:tag" content="CICD"><meta property="article:tag" content="Automation"><meta property="article:tag" content="Azure Functions"><meta property="article:tag" content="Azure Logic Apps"><meta property="article:tag" content="Azure Kubernetes Service"><meta property="article:tag" content="Azure AD"><meta property="article:tag" content="Azure Security"><meta property="article:tag" content="Serverless"><meta property="article:tag" content="Azure Devops"><meta property="article:tag" content="Software Development"><meta property="article:tag" content="Cloud Development"><meta property="article:tag" content="Cloud Computing"><meta property="article:tag" content="Azure Solutions"><meta property="article:tag" content="Infrastructure as Code"><meta property="article:tag" content="Microservices"><meta property="article:tag" content="Containerization"><meta property="article:tag" content="Azure Storage"><meta property="article:tag" content="Azure Networking"><meta property="article:tag" content="Azure Web Apps"><meta property="article:tag" content="Azure SQL Database"><meta property="article:tag" content="Azure Cosmos DB"><meta property="article:tag" content="Azure Functions"><meta property="article:tag" content="Azure DevOps Pipelines"><meta property="article:tag" content="Azure Monitoring and Diagnostics"><meta property="article:tag" content="Azure Governance and Compliance"><meta property="article:tag" content="Azure Identity and Access Management"><meta property="article:tag" content="Terraform"><meta property="article:tag" content="ARM Templates"><meta property="article:tag" content="Bicep"><meta property="twitter:card" content="summary"><meta property="twitter:image:src" content="https://clouddev.blog/img/og_image.png"><script type="application/ld+json">{"@context":"https://schema.org","@type":"BlogPosting","mainEntityOfPage":{"@type":"WebPage","@id":"https://clouddev.blog"},"headline":"Exploring Azure, DevOps and Software Development","image":["https://clouddev.blog/img/og_image.png"],"author":{"@type":"Person","name":"Ricky Gummadi"},"publisher":{"@type":"Organization","name":"Exploring Azure, DevOps and Software Development","logo":{"@type":"ImageObject","url":"https://clouddev.blog/img/logo.png"}},"description":"Welcome to Ricky's Blog (Cloud, Azure, DevOps, Development). Tips, and Best Practices for Cloud, Azure, DevOps, and Software Development"}</script><link rel="alternate" href="/atom.xml" title="Exploring Azure, DevOps and Software Development" type="application/atom+xml"><link rel="icon" href="/img/favicon.ico"><link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.2/css/all.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/highlight.js@9.12.0/styles/atom-one-light.css"><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Ubuntu:wght@400;600&family=Source+Code+Pro"><link rel="stylesheet" href="/css/default.css"><style>body>.footer,body>.navbar,body>.section{opacity:0}</style><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/cookieconsent@3.1.1/build/cookieconsent.min.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/lightgallery@1.10.0/dist/css/lightgallery.min.css"><link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/justifiedGallery@3.8.1/dist/css/justifiedGallery.min.css"><script src="https://www.googletagmanager.com/gtag/js?id=G-M9TEW2G3HK" async></script><script>function gtag(){dataLayer.push(arguments)}window.dataLayer=window.dataLayer||[],gtag("js",new Date),gtag("config","G-M9TEW2G3HK")</script><style>.pace{-webkit-pointer-events:none;pointer-events:none;-webkit-user-select:none;-moz-user-select:none;user-select:none}.pace-inactive{display:none}.pace .pace-progress{background:#3273dc;position:fixed;z-index:2000;top:0;right:100%;width:100%;height:2px}</style><script src="https://cdn.jsdelivr.net/npm/pace-js@1.2.4/pace.min.js"></script><script>!function(){function e(){if(!location.hash)return;Array.from(document.querySelectorAll(".tab-content")).forEach(e=>{e.classList.add("is-hidden")}),Array.from(document.querySelectorAll(".tabs li")).forEach(e=>{e.classList.remove("is-active")});const e=document.querySelector(location.hash);e&&e.classList.remove("is-hidden");const t=document.querySelector(`a[href="${location.hash}"]`);t&&t.parentElement.classList.add("is-active")}e(),window.addEventListener("hashchange",e,!1)}()</script><meta name="generator" content="Hexo 6.2.0"></head><body class="is-3-column"><nav class="navbar navbar-main"><div class="container navbar-container"><div class="navbar-brand justify-content-center"><a class="navbar-item navbar-logo" href="/"><img src="/img/logo.png" alt="Exploring Azure, DevOps and Software Development" height="28"></a></div><div class="navbar-menu"><div class="navbar-start"><a class="navbar-item is-active" href="/">Home</a><a class="navbar-item" href="/archives">Archives</a><a class="navbar-item" href="/categories">Categories</a><a class="navbar-item" href="/tags">Tags</a><a class="navbar-item" href="/about">About</a></div><div class="navbar-end"><a class="navbar-item" target="_blank" rel="noopener" title="Download on GitHub" href="https://github.com/Ricky-G/ricky-g.github.io"><i class="fab fa-github"></i></a><a class="navbar-item search" title="Search" href="javascript:;"><i class="fas fa-search"></i></a></div></div></div></nav><section class="section"><div class="container"><div class="columns"><div class="column order-2 column-main is-8-tablet is-8-desktop is-6-widescreen"><div class="card"><div class="card-image"><a class="image is-7by3" href="/Azure/Storage/Azurite/ignoring-azurite-files/"><img class="fill" src="/img/azurite.webp" alt="Ignoring Azurite Files"></a></div><article class="card-content article" role="article"><div class="article-meta is-size-7 is-uppercase level is-mobile"><div class="level-left"><span class="level-item">Posted <time datetime="2024-02-22T11:00:00.000Z" title="2/23/2024, 12:00:00 AM">2024-02-23</time></span><span class="level-item">Updated <time datetime="2024-09-08T03:15:01.037Z" title="9/8/2024, 3:15:01 PM">2024-09-08</time></span><span class="level-item"><a class="link-muted" href="/categories/Azure/">Azure</a><span> / </span><a class="link-muted" href="/categories/Azure/Storage/">Storage</a><span> / </span><a class="link-muted" href="/categories/Azure/Storage/Azurite/">Azurite</a></span><span class="level-item">2 minutes read (About 277 words)</span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/Azure/Storage/Azurite/ignoring-azurite-files/">Ignoring Azurite Files</a></h1><div class="content"><p>In the old days, developers relied on the Azure Storage Emulator to emulate Azure Storage services locally. However, Azure Storage Emulator has been deprecated and replaced with <strong>Azurite</strong>, which is now the recommended way to emulate Azure Blob, Queue, and Table storage locally. In this post, let’s see how to set up exclusions in Visual Studio Code to prevent unwanted Azurite files from cluttering your workspace while working with Function Apps.</p><p><img src="/Azure/Storage/Azurite/ignoring-azurite-files/azurite-files.png" alt="Azurite files"></p></div><a class="read-more-button button is-small is-size-7" href="/Azure/Storage/Azurite/ignoring-azurite-files/#more">Read more</a></article></div><div class="card"><div class="card-image"><a class="image is-7by3" href="/Azure/Function-Apps/NET/extracting-gzip-tar-files-natively-in-net-without-external-libraries/"><img class="fill" src="https://github.com/dotnet/brand/blob/main/dotnet-bot-illustrations/dotnet-bot/dotnet-bot_jetpack-faceing-left.png?raw=true" alt="Extracting GZip & Tar Files Natively in .NET Without External Libraries"></a></div><article class="card-content article" role="article"><div class="article-meta is-size-7 is-uppercase level is-mobile"><div class="level-left"><span class="level-item">Posted <time datetime="2023-06-24T12:00:00.000Z" title="6/25/2023, 12:00:00 AM">2023-06-25</time></span><span class="level-item">Updated <time datetime="2023-07-17T10:16:58.000Z" title="7/17/2023, 10:16:58 PM">2023-07-17</time></span><span class="level-item"><a class="link-muted" href="/categories/Azure/">Azure</a><span> / </span><a class="link-muted" href="/categories/Azure/Function-Apps/">Function Apps</a><span> / </span><a class="link-muted" href="/categories/Azure/Function-Apps/NET/">.NET</a></span><span class="level-item">4 minutes read (About 566 words)</span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/Azure/Function-Apps/NET/extracting-gzip-tar-files-natively-in-net-without-external-libraries/">Extracting GZip & Tar Files Natively in .NET Without External Libraries</a></h1><div class="content"><h2 id="Introduction"><a href="#Introduction" class="headerlink" title="Introduction"></a>Introduction</h2><p>Imagine being in a scenario where a file of type .tar.gz lands in your Azure Blob Storage container. This file, when uncompressed, yields a collection of individual files. The trigger event for the arrival of this file is an Azure function, which springs into action, decompressing the contents and transferring them into a different container.</p><p>In this context, a team may instinctively reach out for a robust library like SharpZipLib. However, what if there is a mandate to accomplish this without external dependencies? This becomes a reality with .NET 7.</p><p>In .NET 7, native support for Tar files has been introduced, and GZip is catered to via <code>System.IO.Compression</code>. This means we can decompress a .tar.gz file natively in .NET 7, bypassing any need for external libraries.</p><p>This post will walk you through this process, providing a practical example using .NET 7 to show how this can be achieved.</p><h2 id="NET-7-Native-TAR-Support"><a href="#NET-7-Native-TAR-Support" class="headerlink" title=".NET 7: Native TAR Support"></a>.NET 7: Native TAR Support</h2><p>As of .NET 7, the <code>System.Formats.Tar</code> namespace was introduced to deal with TAR files, adding to the toolkit of .NET developers:</p><ul><li><code>System.Formats.Tar.TarFile</code> to pack a directory into a TAR file or extract a TAR file to a directory</li><li><code>System.Formats.Tar.TarReader</code> to read a TAR file</li><li><code>System.Formats.Tar.TarWriter</code> to write a TAR file</li></ul><p>These new capabilities significantly simplify the process of working with TAR files in .NET. Lets dive in an have a look at a code sample that demonstrates how to extract a .tar.gz file natively in .NET 7.</p></div><a class="read-more-button button is-small is-size-7" href="/Azure/Function-Apps/NET/extracting-gzip-tar-files-natively-in-net-without-external-libraries/#more">Read more</a></article></div><div class="card"><div class="card-image"><a class="image is-7by3" href="/Azure/Function-Apps/unzipping-and-shuffling-gbs-of-data-using-azure-functions/"><img class="fill" src="/img/azure-functions-unzip.png" alt="Unzipping and Shuffling GBs of Data Using Azure Functions"></a></div><article class="card-content article" role="article"><div class="article-meta is-size-7 is-uppercase level is-mobile"><div class="level-left"><span class="level-item">Posted <time datetime="2023-05-18T12:00:00.000Z" title="5/19/2023, 12:00:00 AM">2023-05-19</time></span><span class="level-item">Updated <time datetime="2023-05-22T09:57:16.000Z" title="5/22/2023, 9:57:16 PM">2023-05-22</time></span><span class="level-item"><a class="link-muted" href="/categories/Azure/">Azure</a><span> / </span><a class="link-muted" href="/categories/Azure/Function-Apps/">Function Apps</a></span><span class="level-item">10 minutes read (About 1532 words)</span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/Azure/Function-Apps/unzipping-and-shuffling-gbs-of-data-using-azure-functions/">Unzipping and Shuffling GBs of Data Using Azure Functions</a></h1><div class="content"><p>Consider this situation: you have a zip file stored in an Azure Blob Storage container (or any other location for that matter). This isn’t just any zip file; it’s large, containing gigabytes of data. It could be big data sets for your machine learning projects, log files, media files, or backups. The specific content isn’t the focus - the size is.</p><p>The task? We need to unzip this massive file(s) and relocate its contents to a different Azure Blob storage container. This task might seem daunting, especially considering the size of the file and the potential number of files that might be housed within it.</p><p>Why do we need to do this? The use cases are numerous. Handling large data sets, moving data for analysis, making backups more accessible - these are just a few examples. The key here is that we’re looking for a scalable and reliable solution to handle this task efficiently.</p><p><strong>Azure Data Factory is arguably a better fit for this sort of task, but In this blog post, we will specifically demonstrate how to establish this process using Azure Functions</strong>. Specifically we will try to achieve this within the constraints of the Consumption plan tier, where the maximum memory is capped at 1.5GB, with the supporting roles of Azure CLI and PowerShell in our setup.</p><h2 id="Setting-Up-Our-Azure-Environment"><a href="#Setting-Up-Our-Azure-Environment" class="headerlink" title="Setting Up Our Azure Environment"></a>Setting Up Our Azure Environment</h2><p>Before we dive into scripting and code, we need to set the stage - that means setting up our Azure environment. We’re going to create a storage account with two containers, one for our Zipped files and the other for Unzipped files.</p><p>To create this setup, we’ll be using the Azure CLI. Why? Because it’s efficient and lets us script out the whole process if we need to do it again in the future.</p><ol><li><p>Install Azure CLI: If you haven’t already installed Azure CLI on your local machine, <a target="_blank" rel="noopener" href="https://learn.microsoft.com/en-us/cli/azure/install-azure-cli">you can get it from here</a>.</p></li><li><p>Login to Azure: Open your terminal and type the following command to login to your Azure account. You’ll be prompted to enter your credentials.</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">az login </span><br></pre></td></tr></table></figure></li><li><p>Create a Resource Group: We’ll need a Resource Group to keep our resources organized. We’ll call this rg-function-app-unzip-test and create it in the eastus location (you can ofcourse choose which ever region you like).</p><figure class="highlight bash"><table><tr><td class="gutter"><pre><span class="line">1</span><br></pre></td><td class="code"><pre><span class="line">az group create --name rg-function-app-unzip-test --location eastus </span><br></pre></td></tr></table></figure></li></ol></div><a class="read-more-button button is-small is-size-7" href="/Azure/Function-Apps/unzipping-and-shuffling-gbs-of-data-using-azure-functions/#more">Read more</a></article></div><div class="card"><div class="card-image"><a class="image is-7by3" href="/Azure/DevTest-Labs/azure-devtest-labs-policies/"><img class="fill" src="/img/dev-test-labs.png" alt="Azure DevTest Labs Policies"></a></div><article class="card-content article" role="article"><div class="article-meta is-size-7 is-uppercase level is-mobile"><div class="level-left"><span class="level-item">Posted <time datetime="2023-01-31T11:00:00.000Z" title="2/1/2023, 12:00:00 AM">2023-02-01</time></span><span class="level-item">Updated <time datetime="2023-05-22T09:57:32.000Z" title="5/22/2023, 9:57:32 PM">2023-05-22</time></span><span class="level-item"><a class="link-muted" href="/categories/Azure/">Azure</a><span> / </span><a class="link-muted" href="/categories/Azure/DevTest-Labs/">DevTest Labs</a></span><span class="level-item">4 minutes read (About 646 words)</span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/Azure/DevTest-Labs/azure-devtest-labs-policies/">Azure DevTest Labs Policies</a></h1><div class="content"><p>Azure DevTest Labs offers a powerful cloud-based development workstation environment and great alternative to a local development workstation/laptop when it comes to software development. This blog post is not so much talking about the benefits of DevTest Lab, but more about how to create policies for DevTest Labs using Bicep. Although there is a good support for <a target="_blank" rel="noopener" href="https://learn.microsoft.com/en-us/azure/templates/microsoft.devtestlab/labs?pivots=deployment-language-bicep">deploying DevTest labs with Bicep</a>, there is little to no documentation when it comes to creating policies for DevTest Labs in Bicep. In this blog post, we will focus on creating policies for DevTest Labs using Bicep and how to go about doing this.</p><h2 id="A-Brief-Overview-of-Azure-DevTest-Labs"><a href="#A-Brief-Overview-of-Azure-DevTest-Labs" class="headerlink" title="A Brief Overview of Azure DevTest Labs"></a>A Brief Overview of Azure DevTest Labs</h2><p>Azure DevTest Labs is a managed service that enables developers to quickly create, manage, and share development and test environments. It provides a range of features and tools designed to streamline the development process, minimize costs, and improve overall productivity. By leveraging the power of the cloud, developers can easily spin up virtual machines (VMs) pre-configured with the necessary tools, frameworks, and software needed for their projects.</p><h2 id="Existing-Documentation-Limitations"><a href="#Existing-Documentation-Limitations" class="headerlink" title="Existing Documentation Limitations"></a>Existing Documentation Limitations</h2><p>While the existing documentation covers various aspects of Azure DevTest Labs, it lacks clear guidance on setting up policies with DevTest Labs in Bicep. This blog post aims to address that gap by providing a Bicep script for creating a DevTest Lab and applying policies to it. Shout out to my colleague <a target="_blank" rel="noopener" href="https://www.linkedin.com/in/illian-yuan">Illian Y</a> for persisting and not giving up and finding a away around undocumented features and showing me.</p></div><a class="read-more-button button is-small is-size-7" href="/Azure/DevTest-Labs/azure-devtest-labs-policies/#more">Read more</a></article></div><div class="card"><div class="card-image"><a class="image is-7by3" href="/Azure/Logic-Apps/azure-logic-apps-timeout/"><img class="fill" src="/img/azure-logic-apps.png" alt="Azure Logic Apps Timeout"></a></div><article class="card-content article" role="article"><div class="article-meta is-size-7 is-uppercase level is-mobile"><div class="level-left"><span class="level-item">Posted <time datetime="2022-10-19T11:00:00.000Z" title="10/20/2022, 12:00:00 AM">2022-10-20</time></span><span class="level-item">Updated <time datetime="2023-08-19T10:13:26.000Z" title="8/19/2023, 10:13:26 PM">2023-08-19</time></span><span class="level-item"><a class="link-muted" href="/categories/Azure/">Azure</a><span> / </span><a class="link-muted" href="/categories/Azure/Logic-Apps/">Logic Apps</a></span><span class="level-item">3 minutes read (About 486 words)</span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/Azure/Logic-Apps/azure-logic-apps-timeout/">Azure Logic Apps Timeout</a></h1><div class="content"><p>Recently I got pulled into a production incident where a logic app was running for a long time (long time in this scenario was > 10 minutes), but the intention from the dev crew was they wanted this to time out in 60 seconds. These logic apps were a combination of HTTP triggers and Timer based.</p><h2 id="Logic-App-Default-Time-Limits"><a href="#Logic-App-Default-Time-Limits" class="headerlink" title="Logic App Default Time Limits"></a>Logic App Default Time Limits</h2><p>First things to keep in mind are some default limits.</p><ol><li><p>If its a HTTP based trigger the <a target="_blank" rel="noopener" href="https://learn.microsoft.com/en-us/azure/logic-apps/logic-apps-limits-and-config?tabs=consumption,azure-portal#timeout-duration">default timeout is around 3.9 minutes</a></p></li><li><p>For most others the <a target="_blank" rel="noopener" href="https://learn.microsoft.com/en-us/azure/logic-apps/edit-app-settings-host-settings?tabs=azure-portal#run-duration-and-history-retention">default max run duration of a logic app is 90 days and min is 7 days</a></p></li></ol><h2 id="Ways-To-Change-Defaults"><a href="#Ways-To-Change-Defaults" class="headerlink" title="Ways To Change Defaults"></a>Ways To Change Defaults</h2><p>With that, here are a couple of quick ways to make sure your Logic App times out and terminates within the time frame you set. Lets say if we want our Logic App to run no more than 60 seconds at max then:</p></div><a class="read-more-button button is-small is-size-7" href="/Azure/Logic-Apps/azure-logic-apps-timeout/#more">Read more</a></article></div><div class="card"><div class="card-image"><a class="image is-7by3" href="/Azure/Container-Apps/create-a-multi-user-experience-for-single-threaded-applications-using-azure-container-apps/"><img class="fill" src="/img/container-apps-single-threaded.png" alt="Create A Multi User Experience For Single Threaded Applications Using Azure Container Apps"></a></div><article class="card-content article" role="article"><div class="article-meta is-size-7 is-uppercase level is-mobile"><div class="level-left"><span class="level-item">Posted <time datetime="2022-09-11T12:00:00.000Z" title="9/12/2022, 12:00:00 AM">2022-09-12</time></span><span class="level-item">Updated <time datetime="2022-09-17T22:20:32.000Z" title="9/18/2022, 10:20:32 AM">2022-09-18</time></span><span class="level-item"><a class="link-muted" href="/categories/Azure/">Azure</a><span> / </span><a class="link-muted" href="/categories/Azure/Container-Apps/">Container Apps</a></span><span class="level-item">6 minutes read (About 842 words)</span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/Azure/Container-Apps/create-a-multi-user-experience-for-single-threaded-applications-using-azure-container-apps/">Create A Multi User Experience For Single Threaded Applications Using Azure Container Apps</a></h1><div class="content"><p>How to make a single-threaded app multi-threaded? This is the scenario I faced very recently. These were legacy web app(s) written to be single-threaded; in this context single-threaded means can only serve one request at a time. <strong>I know this goes against everything that a web app should be</strong>, but it what it is.</p><p>So if we have a single threaded web app (legacy) now all of a sudden we have a requirement to support multiple users at the same time. What are our options:</p><ol><li>Re-architect the app to be multi threaded</li><li>Find a way to simulate multi threaded behavior</li></ol><p>Both are great options, but in this scenario option 1 was out, due to the cost involved in re-writing this app to support multi threading. So that leaves us with option 2; how can we at a cloud infra level <strong>easily</strong> simulate multi threaded behavior. Turns out if we containerize the app (in this case it was easy enough to do) we orchestrate the app such that for each http request is routed to a new container (ie: every new http request should spin up a new container and request send to it)</p><h2 id="Options-For-Running-Containers"><a href="#Options-For-Running-Containers" class="headerlink" title="Options For Running Containers"></a>Options For Running Containers</h2><p>So when it comes to running a container in Azure our main options are below<br><img src="/Azure/Container-Apps/create-a-multi-user-experience-for-single-threaded-applications-using-azure-container-apps/container-options.png" alt=" " title="Container Options"></p></div><a class="read-more-button button is-small is-size-7" href="/Azure/Container-Apps/create-a-multi-user-experience-for-single-threaded-applications-using-azure-container-apps/#more">Read more</a></article></div><div class="card"><div class="card-image"><a class="image is-7by3" href="/AKS/AGIC/application-gateway-ingress-controller-for-aks/"><img class="fill" src="/img/agic.png" alt="Application Gateway Ingress Controller For AKS"></a></div><article class="card-content article" role="article"><div class="article-meta is-size-7 is-uppercase level is-mobile"><div class="level-left"><span class="level-item">Posted <time datetime="2022-08-19T12:00:00.000Z" title="8/20/2022, 12:00:00 AM">2022-08-20</time></span><span class="level-item">Updated <time datetime="2023-04-04T09:12:06.000Z" title="4/4/2023, 9:12:06 PM">2023-04-04</time></span><span class="level-item"><a class="link-muted" href="/categories/AKS/">AKS</a><span> / </span><a class="link-muted" href="/categories/AKS/AGIC/">AGIC</a></span><span class="level-item">14 minutes read (About 2106 words)</span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/AKS/AGIC/application-gateway-ingress-controller-for-aks/">Application Gateway Ingress Controller For AKS</a></h1><div class="content"><p>Recently I ran into an interesting issue with an AKS cluster running 2000+ services. There is nothing wrong in running 2000+ services that’s what Kubernetes is there for, scale! but the interesting aspect that caught my attention was trying to get the Applicaiton Gateway Ingress Controller (AGIC) to ingress to all these services. I had worked with Istio and NGINX for ingress into AKS with no issues and never AGIC, so I had to try this to see where it worked well, what the advantages are and where the limitations are.</p><h2 id="Application-Gateway"><a href="#Application-Gateway" class="headerlink" title="Application Gateway"></a>Application Gateway</h2><p>Application Gateway (App Gateway) is a well-established layer 7 service that has been around for a while, some of the major features are:</p><ul><li>URL routing</li><li>Cookie-based affinity</li><li>SSL termination</li><li>End-to-end SSL</li><li>Support for public, private, and hybrid web sites</li><li>Integrated web application firewall</li><li>Zone redundancy</li><li>Connection draining</li></ul><p>This post isn’t focused on the App Gateway itself, it’s more about how and what it can do as an ingress controller for AKS. <a target="_blank" rel="noopener" href="https://docs.microsoft.com/en-us/azure/application-gateway/features">You can find out more about App Gateway and all abouts its features here</a></p></div><a class="read-more-button button is-small is-size-7" href="/AKS/AGIC/application-gateway-ingress-controller-for-aks/#more">Read more</a></article></div><div class="card"><div class="card-image"><a class="image is-7by3" href="/GitHub/Actions/deploying-to-ip-restricted-azure-function-apps-using-github-actions/"><img class="fill" src="/img/github-image.png" alt="Deploying To IP Restricted Azure Function Apps Using GitHub Actions"></a></div><article class="card-content article" role="article"><div class="article-meta is-size-7 is-uppercase level is-mobile"><div class="level-left"><span class="level-item">Posted <time datetime="2022-08-06T12:00:00.000Z" title="8/7/2022, 12:00:00 AM">2022-08-07</time></span><span class="level-item">Updated <time datetime="2022-08-21T21:23:06.000Z" title="8/22/2022, 9:23:06 AM">2022-08-22</time></span><span class="level-item"><a class="link-muted" href="/categories/GitHub/">GitHub</a><span> / </span><a class="link-muted" href="/categories/GitHub/Actions/">Actions</a></span><span class="level-item">7 minutes read (About 1082 words)</span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/GitHub/Actions/deploying-to-ip-restricted-azure-function-apps-using-github-actions/">Deploying To IP Restricted Azure Function Apps Using GitHub Actions</a></h1><div class="content"><a href="/Azure/Function-Apps/Security/securing-azure-functions-and-logic-apps/" title="In the previous post we blocked our function app to be available only to the APIM via ip restrictions">In the previous post we blocked our function app to be available only to the APIM via ip restrictions</a>.<p>This secures our function app and it isn’t available publicly, any one that tries to access our function app url will get “HTTP 403 Forbidden”.</p><p>This secures our function app; now what about deploying code changes to the function app via GitHub Actions? we should be able to CI/CD to our function app, but there is a problem here. The GitHub action will fail with the same “HTTP 403 Forbidden”, this is because GitHub actions run on runners (its a hosted virtual environment), each time we run the Action we get a new runner and it can have a different ip address. So how can we get around this? <a target="_blank" rel="noopener" href="https://api.github.com/meta">do we white list the entire GitHub ip range?</a></p><p>GitHub’s ip ranges can change any time, so will have to keep scanning for changes to these ranges and proactively update our ip restrictions, this is not very scalable or practical. So what are other ways of getting around this? we have a couple of ways to get around this.</p><h2 id="Possible-Solutions"><a href="#Possible-Solutions" class="headerlink" title="Possible Solutions"></a>Possible Solutions</h2><p>There are two viable solutions here</p></div><a class="read-more-button button is-small is-size-7" href="/GitHub/Actions/deploying-to-ip-restricted-azure-function-apps-using-github-actions/#more">Read more</a></article></div><div class="card"><div class="card-image"><a class="image is-7by3" href="/Azure/Function-Apps/Security/securing-azure-functions-and-logic-apps/"><img class="fill" src="/img/function-apps.png" alt="Securing Azure Functions and Logic Apps"></a></div><article class="card-content article" role="article"><div class="article-meta is-size-7 is-uppercase level is-mobile"><div class="level-left"><span class="level-item">Posted <time datetime="2022-07-31T12:00:00.000Z" title="8/1/2022, 12:00:00 AM">2022-08-01</time></span><span class="level-item">Updated <time datetime="2022-08-11T11:38:24.000Z" title="8/11/2022, 11:38:24 PM">2022-08-11</time></span><span class="level-item"><a class="link-muted" href="/categories/Azure/">Azure</a><span> / </span><a class="link-muted" href="/categories/Azure/Function-Apps/">Function Apps</a><span> / </span><a class="link-muted" href="/categories/Azure/Function-Apps/Security/">Security</a></span><span class="level-item">4 minutes read (About 672 words)</span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/Azure/Function-Apps/Security/securing-azure-functions-and-logic-apps/">Securing Azure Functions and Logic Apps</a></h1><div class="content"><p>Here is a scenario that I recently encountered. Imagine we are building micro-services using serverless (a mix on Azure Function Apps and Logic Apps) with APIM in the front. Lets say we went with the APIM standard instance and all the logic and function apps are going to be running on consumption plan (for cost reasons as its cheaper). This means we wont be getting any vnet capability and our function and logic apps will be exposed out to the world (remember to get vnet with APIM we have to go with the premium version, we are going APIM standard here for cost saving reasons).</p><p>So how do we restrict our function and logic apps to only go through the APIM, in another words all our function and logic apps <strong>must only</strong> go through the APIM and if anyone tries to access them directly they should be getting a “HTTP 403 Forbidden”.</p><p>Lets visualize this scenario; We have some WAF capable ingress endpoint, in this case its Azure Front Door, that is forwarding traffic to APIM which then sends the requests to the serverless apps.<br>Reason for having Front Door before APIM is because APIM doesn’t have WAF natively so we <a target="_blank" rel="noopener" href="https://docs.microsoft.com/en-us/security/benchmark/azure/baselines/api-management-security-baseline#ns-6-deploy-web-application-firewall">will need to put something in front of it that has that capability to be secure</a>.</p><p><a target="_blank" rel="noopener" href="https://docs.microsoft.com/en-us/security/benchmark/azure/baselines/api-management-security-baseline#ns-6-deploy-web-application-firewall">There are few options like Azure Firewall, Application Gateway etc</a>, but for the purposes of this scenario we have Azure Front Door in front of APIM (and we can have an APIM policy that will only accept traffic from Azure Font Door, we wont be going in to that, we will keep it to securing our function apps to just being available via APIM for today)</p><p><img src="/Azure/Function-Apps/Security/securing-azure-functions-and-logic-apps/apim-azure-functions-backend.png" alt=" " title="Sample Scenario"></p></div><a class="read-more-button button is-small is-size-7" href="/Azure/Function-Apps/Security/securing-azure-functions-and-logic-apps/#more">Read more</a></article></div><div class="card"><div class="card-image"><a class="image is-7by3" href="/Blog/hello-world-%F0%9F%91%8B/"><img class="fill" src="/img/hello-world.png" alt="Hello World 👋"></a></div><article class="card-content article" role="article"><div class="article-meta is-size-7 is-uppercase level is-mobile"><div class="level-left"><span class="level-item">Posted <time datetime="2022-07-26T12:00:00.000Z" title="7/27/2022, 12:00:00 AM">2022-07-27</time></span><span class="level-item">Updated <time datetime="2022-08-14T14:01:44.000Z" title="8/15/2022, 2:01:44 AM">2022-08-15</time></span><span class="level-item"><a class="link-muted" href="/categories/Blog/">Blog</a></span><span class="level-item">5 minutes read (About 686 words)</span></div></div><h1 class="title is-3 is-size-4-mobile"><a class="link-muted" href="/Blog/hello-world-%F0%9F%91%8B/">Hello World 👋</a></h1><div class="content"><p>After sitting on this for a long time and wanting to blog / write down my thoughts, I’ve finally got my act together and started this. There were so many times I was asked some very good questions which I am sure not just the person asking me but a lot more would have been interested in knowing the answer/solution/thoughts around the matter. This is a way to write about that and help the wider community who are searching for similar solutions.</p><p>I regularly answer in Stack Overflow and in some cases I wrote a question and answered it myself just incase some one was looking for something similar, that wasn’t really the ideal platform to do that. There have been so many times that going through and reading other people’s blogs have helped me and unlocked me in problems that I was stuck with; this is a in a way trying to give back to the community and helping people that are on the look out for a solution for a similar problem.</p><h1 id="How-to-power-the-blog"><a href="#How-to-power-the-blog" class="headerlink" title="How to power the blog"></a>How to power the blog</h1><p>There were so many choices out there when it came to what frameworks and libraries to use to build the blog and what to use to host the blog.</p><h2 id="My-requirements-when-it-came-to-building-were-simple"><a href="#My-requirements-when-it-came-to-building-were-simple" class="headerlink" title="My requirements when it came to building were simple"></a>My requirements when it came to building were simple</h2><ul><li>Easy to author posts</li><li>Easy to build</li><li>Easy to maintain</li><li>Most customizations (eg: search, ads, tags, categories etc) should come out of the box</li></ul><h2 id="My-requirements-when-it-came-to-hosting-were-even-simpler"><a href="#My-requirements-when-it-came-to-hosting-were-even-simpler" class="headerlink" title="My requirements when it came to hosting were even simpler"></a>My requirements when it came to hosting were even simpler</h2><ul><li>Has to be free</li><li>Has to be able to handle ‘some’ level of load</li><li>Easy to CI/CD</li></ul></div><a class="read-more-button button is-small is-size-7" href="/Blog/hello-world-%F0%9F%91%8B/#more">Read more</a></article></div></div><div class="column column-left is-4-tablet is-4-desktop is-3-widescreen order-1"><div class="card widget" data-type="profile"><div class="card-content"><nav class="level"><div class="level-item has-text-centered flex-shrink-1"><div><figure class="image is-128x128 mx-auto mb-2"><img class="avatar is-rounded" src="/img/avatar_1.jpg" alt="Ricky Gummadi"></figure><p class="title is-size-4 is-block" style="line-height:inherit">Ricky Gummadi</p><p class="is-size-6 is-block">Cloud Solution Architect</p><p class="is-size-6 is-flex justify-content-center"><i class="fas fa-map-marker-alt mr-1"></i><span>Auckland, New Zealand</span></p></div></div></nav><nav class="level is-mobile"><div class="level-item has-text-centered is-marginless"><div><p class="heading">Posts</p><a href="/archives"><p class="title">10</p></a></div></div><div class="level-item has-text-centered is-marginless"><div><p class="heading">Categories</p><a href="/categories"><p class="title">14</p></a></div></div><div class="level-item has-text-centered is-marginless"><div><p class="heading">Tags</p><a href="/tags"><p class="title">34</p></a></div></div></nav><div class="level"><a class="level-item button is-primary is-rounded" href="https://github.com/Ricky-G" target="_blank" rel="noopener">Follow</a></div><div class="level is-mobile is-multiline"><a class="level-item button is-transparent is-marginless" target="_blank" rel="noopener" title="Github" href="https://github.com/Ricky-G"><i class="fab fa-github"></i></a><a class="level-item button is-transparent is-marginless" target="_blank" rel="noopener" title="StackOverflow" href="https://stackoverflow.com/users/441914/ricky-g"><i class="fab fa-stack-overflow"></i></a><a class="level-item button is-transparent is-marginless" target="_blank" rel="noopener" title="Linkedin" href="https://www.linkedin.com/in/rickygummadi/"><i class="fab fa-linkedin"></i></a><a class="level-item button is-transparent is-marginless" target="_blank" rel="noopener" title="RSS" href="/atom.xml"><i class="fas fa-rss"></i></a></div></div></div><div class="card widget" data-type="categories"><div class="card-content"><div class="menu"><h3 class="menu-label">Categories</h3><ul class="menu-list"><li><a class="level is-mobile" href="/categories/AKS/"><span class="level-start"><span class="level-item">AKS</span></span><span class="level-end"><span class="level-item tag">1</span></span></a><ul><li><a class="level is-mobile" href="/categories/AKS/AGIC/"><span class="level-start"><span class="level-item">AGIC</span></span><span class="level-end"><span class="level-item tag">1</span></span></a></li></ul></li><li><a class="level is-mobile" href="/categories/Azure/"><span class="level-start"><span class="level-item">Azure</span></span><span class="level-end"><span class="level-item tag">7</span></span></a><ul><li><a class="level is-mobile" href="/categories/Azure/Container-Apps/"><span class="level-start"><span class="level-item">Container Apps</span></span><span class="level-end"><span class="level-item tag">1</span></span></a></li><li><a class="level is-mobile" href="/categories/Azure/DevTest-Labs/"><span class="level-start"><span class="level-item">DevTest Labs</span></span><span class="level-end"><span class="level-item tag">1</span></span></a></li><li><a class="level is-mobile" href="/categories/Azure/Function-Apps/"><span class="level-start"><span class="level-item">Function Apps</span></span><span class="level-end"><span class="level-item tag">3</span></span></a><ul><li><a class="level is-mobile" href="/categories/Azure/Function-Apps/NET/"><span class="level-start"><span class="level-item">.NET</span></span><span class="level-end"><span class="level-item tag">1</span></span></a></li><li><a class="level is-mobile" href="/categories/Azure/Function-Apps/Security/"><span class="level-start"><span class="level-item">Security</span></span><span class="level-end"><span class="level-item tag">1</span></span></a></li></ul></li><li><a class="level is-mobile" href="/categories/Azure/Logic-Apps/"><span class="level-start"><span class="level-item">Logic Apps</span></span><span class="level-end"><span class="level-item tag">1</span></span></a></li><li><a class="level is-mobile" href="/categories/Azure/Storage/"><span class="level-start"><span class="level-item">Storage</span></span><span class="level-end"><span class="level-item tag">1</span></span></a><ul><li><a class="level is-mobile" href="/categories/Azure/Storage/Azurite/"><span class="level-start"><span class="level-item">Azurite</span></span><span class="level-end"><span class="level-item tag">1</span></span></a></li></ul></li></ul></li><li><a class="level is-mobile" href="/categories/Blog/"><span class="level-start"><span class="level-item">Blog</span></span><span class="level-end"><span class="level-item tag">1</span></span></a></li><li><a class="level is-mobile" href="/categories/GitHub/"><span class="level-start"><span class="level-item">GitHub</span></span><span class="level-end"><span class="level-item tag">1</span></span></a><ul><li><a class="level is-mobile" href="/categories/GitHub/Actions/"><span class="level-start"><span class="level-item">Actions</span></span><span class="level-end"><span class="level-item tag">1</span></span></a></li></ul></li></ul></div></div></div><div class="card widget" data-type="archives"><div class="card-content"><div class="menu"><h3 class="menu-label">Archives</h3><ul class="menu-list"><li><a class="level is-mobile" href="/archives/2024/02/"><span class="level-start"><span class="level-item">February 2024</span></span><span class="level-end"><span class="level-item tag">1</span></span></a></li><li><a class="level is-mobile" href="/archives/2023/06/"><span class="level-start"><span class="level-item">June 2023</span></span><span class="level-end"><span class="level-item tag">1</span></span></a></li><li><a class="level is-mobile" href="/archives/2023/05/"><span class="level-start"><span class="level-item">May 2023</span></span><span class="level-end"><span class="level-item tag">1</span></span></a></li><li><a class="level is-mobile" href="/archives/2023/02/"><span class="level-start"><span class="level-item">February 2023</span></span><span class="level-end"><span class="level-item tag">1</span></span></a></li><li><a class="level is-mobile" href="/archives/2022/10/"><span class="level-start"><span class="level-item">October 2022</span></span><span class="level-end"><span class="level-item tag">1</span></span></a></li><li><a class="level is-mobile" href="/archives/2022/09/"><span class="level-start"><span class="level-item">September 2022</span></span><span class="level-end"><span class="level-item tag">1</span></span></a></li><li><a class="level is-mobile" href="/archives/2022/08/"><span class="level-start"><span class="level-item">August 2022</span></span><span class="level-end"><span class="level-item tag">3</span></span></a></li><li><a class="level is-mobile" href="/archives/2022/07/"><span class="level-start"><span class="level-item">July 2022</span></span><span class="level-end"><span class="level-item tag">1</span></span></a></li></ul></div></div></div><div class="card widget" data-type="subscribe-email"><div class="card-content"><div class="menu"><h3 class="menu-label">follow.it</h3><form action="https://api.follow.it/subscription-form/Njl3U2NMelcvYkNDZ2V0elNmQzB6NFpsdXRrT214U09hUTVxeURKSjNUNkFYd2JHWDZMYkcwclJuSWdTMDlLdmNNbEtSS0pZbmxtM2M2UDFjemErOWlSZkxoUjlnNExDd3BmZlIzUUFBd2tOREZZTURRTVNyc1Z4MHR5MWJ4OW18VmpXd085SlVEMWZZVHd5UlJCZXkyMTJqOENaRHlzMGVmUGkxek1iemNuWT0=/8" method="post" target="_blank"><div class="field has-addons"><div class="control has-icons-left is-expanded"><input class="input" name="email" type="email" placeholder="Email"><span class="icon is-small is-left"><i class="fas fa-envelope"></i></span></div><div class="control"><input class="button" type="submit" value="Subscribe"></div></div><p class="help">Please enter your email address to get updates when new articles are published</p></form></div></div></div><div class="column-right-shadow is-hidden-widescreen"></div></div><div class="column column-right is-4-tablet is-4-desktop is-3-widescreen is-hidden-touch is-hidden-desktop-only order-3"><div class="card widget" data-type="recent-posts"><div class="card-content"><h3 class="menu-label">Recents</h3><article class="media"><figure class="media-left"><a class="image" href="/Azure/Storage/Azurite/ignoring-azurite-files/"><img src="https://azure.microsoft.com/svghandler/storage/?width=1280&height=720" alt="Ignoring Azurite Files"></a></figure><div class="media-content"><p class="date"><time datetime="2024-02-22T11:00:00.000Z">2024-02-23</time></p><p class="title"><a href="/Azure/Storage/Azurite/ignoring-azurite-files/">Ignoring Azurite Files</a></p><p class="categories"><a href="/categories/Azure/">Azure</a> / <a href="/categories/Azure/Storage/">Storage</a> / <a href="/categories/Azure/Storage/Azurite/">Azurite</a></p></div></article><article class="media"><figure class="media-left"><a class="image" href="/Azure/Function-Apps/NET/extracting-gzip-tar-files-natively-in-net-without-external-libraries/"><img src="https://github.com/dotnet/brand/blob/main/dotnet-bot-illustrations/dotnet-bot/dotnet-bot.png?raw=true" alt="Extracting GZip & Tar Files Natively in .NET Without External Libraries"></a></figure><div class="media-content"><p class="date"><time datetime="2023-06-24T12:00:00.000Z">2023-06-25</time></p><p class="title"><a href="/Azure/Function-Apps/NET/extracting-gzip-tar-files-natively-in-net-without-external-libraries/">Extracting GZip & Tar Files Natively in .NET Without External Libraries</a></p><p class="categories"><a href="/categories/Azure/">Azure</a> / <a href="/categories/Azure/Function-Apps/">Function Apps</a> / <a href="/categories/Azure/Function-Apps/NET/">.NET</a></p></div></article><article class="media"><figure class="media-left"><a class="image" href="/Azure/Function-Apps/unzipping-and-shuffling-gbs-of-data-using-azure-functions/"><img src="https://azure.microsoft.com/svghandler/functions/?width=1280&height=720" alt="Unzipping and Shuffling GBs of Data Using Azure Functions"></a></figure><div class="media-content"><p class="date"><time datetime="2023-05-18T12:00:00.000Z">2023-05-19</time></p><p class="title"><a href="/Azure/Function-Apps/unzipping-and-shuffling-gbs-of-data-using-azure-functions/">Unzipping and Shuffling GBs of Data Using Azure Functions</a></p><p class="categories"><a href="/categories/Azure/">Azure</a> / <a href="/categories/Azure/Function-Apps/">Function Apps</a></p></div></article><article class="media"><figure class="media-left"><a class="image" href="/Azure/DevTest-Labs/azure-devtest-labs-policies/"><img src="/img/dev-test-labs.png" alt="Azure DevTest Labs Policies"></a></figure><div class="media-content"><p class="date"><time datetime="2023-01-31T11:00:00.000Z">2023-02-01</time></p><p class="title"><a href="/Azure/DevTest-Labs/azure-devtest-labs-policies/">Azure DevTest Labs Policies</a></p><p class="categories"><a href="/categories/Azure/">Azure</a> / <a href="/categories/Azure/DevTest-Labs/">DevTest Labs</a></p></div></article><article class="media"><figure class="media-left"><a class="image" href="/Azure/Logic-Apps/azure-logic-apps-timeout/"><img src="https://azure.microsoft.com/svghandler/logic-apps/?width=1280&height=720" alt="Azure Logic Apps Timeout"></a></figure><div class="media-content"><p class="date"><time datetime="2022-10-19T11:00:00.000Z">2022-10-20</time></p><p class="title"><a href="/Azure/Logic-Apps/azure-logic-apps-timeout/">Azure Logic Apps Timeout</a></p><p class="categories"><a href="/categories/Azure/">Azure</a> / <a href="/categories/Azure/Logic-Apps/">Logic Apps</a></p></div></article></div></div><div class="card widget" data-type="tags"><div class="card-content"><div class="menu"><h3 class="menu-label">Tags</h3><div class="field is-grouped is-grouped-multiline"><div class="control"><a class="tags has-addons" href="/tags/NET/"><span class="tag">.NET</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/AGIC/"><span class="tag">AGIC</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/AKS/"><span class="tag">AKS</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Application-Gateway/"><span class="tag">Application Gateway</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Azure/"><span class="tag">Azure</span><span class="tag">9</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Azure-App-Service/"><span class="tag">Azure App Service</span><span class="tag">2</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Azure-Blob-Storage/"><span class="tag">Azure Blob Storage</span><span class="tag">2</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Azure-CLI/"><span class="tag">Azure CLI</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Azure-Container-Apps/"><span class="tag">Azure Container Apps</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Azure-Dev-Test-Labs/"><span class="tag">Azure Dev Test Labs</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Azure-Logic-Apps/"><span class="tag">Azure Logic Apps</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Azure-Policy/"><span class="tag">Azure Policy</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Azurite/"><span class="tag">Azurite</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Blog/"><span class="tag">Blog</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/CI-CD/"><span class="tag">CI/CD</span><span class="tag">2</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Containers/"><span class="tag">Containers</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Developer-Environments/"><span class="tag">Developer Environments</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Docker/"><span class="tag">Docker</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/DotNet/"><span class="tag">DotNet</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Function-Apps/"><span class="tag">Function Apps</span><span class="tag">4</span></a></div><div class="control"><a class="tags has-addons" href="/tags/GZip/"><span class="tag">GZip</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/GitHub/"><span class="tag">GitHub</span><span class="tag">2</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Hexo/"><span class="tag">Hexo</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/IP-Restrictions/"><span class="tag">IP Restrictions</span><span class="tag">2</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Ingress/"><span class="tag">Ingress</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Kubernetes/"><span class="tag">Kubernetes</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Logic-Apps/"><span class="tag">Logic Apps</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Personal/"><span class="tag">Personal</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/PowerShell/"><span class="tag">PowerShell</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Security/"><span class="tag">Security</span><span class="tag">2</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Serverless/"><span class="tag">Serverless</span><span class="tag">2</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Single-Threaded-Apps/"><span class="tag">Single Threaded Apps</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Storage/"><span class="tag">Storage</span><span class="tag">1</span></a></div><div class="control"><a class="tags has-addons" href="/tags/Tar/"><span class="tag">Tar</span><span class="tag">1</span></a></div></div></div></div></div></div></div></div></section><footer class="footer"><div class="container"><div class="level"><div class="level-start"><a class="footer-logo is-block mb-2" href="/"><img src="/img/logo.png" alt="Exploring Azure, DevOps and Software Development" height="28"></a><p class="is-size-7"><span>© 2024 | Ricky Gummadi | </span><span class="icon-animate"><i class="fa fa-heart"></i></span><br>All views expressed here are strictly and entirely my own.<br>~ Powered by<a href="https://hexo.io/" target="_blank" rel="noopener"> Hexo</a> &<a href="https://github.com/ppoffice/hexo-theme-icarus" target="_blank" rel="noopener"> Icarus</a> &<a href="https://bulma.io/" target="_blank" rel="noopener"> Bulma</a> &<a href="https://pages.github.com/" target="_blank" rel="noopener"> GitHub Pages</a><br></p></div><div class="level-end"><div class="field has-addons"><p class="control"><a class="button is-transparent is-large" target="_blank" rel="noopener" title="Creative Commons" href="https://creativecommons.org/"><i class="fab fa-creative-commons"></i></a></p><p class="control"><a class="button is-transparent is-large" target="_blank" rel="noopener" title="Attribution 4.0 International" href="https://creativecommons.org/licenses/by/4.0/"><i class="fab fa-creative-commons-by"></i></a></p><p class="control"><a class="button is-transparent is-large" target="_blank" rel="noopener" title="Github" href="https://github.com/Ricky-G"><i class="fab fa-github"></i></a></p><p class="control"><a class="button is-transparent is-large" target="_blank" rel="noopener" title="StackOverflow" href="https://stackoverflow.com/users/441914/ricky-g"><i class="fab fa-stack-overflow"></i></a></p><p class="control"><a class="button is-transparent is-large" target="_blank" rel="noopener" title="Linkedin" href="https://www.linkedin.com/in/rickygummadi/"><i class="fab fa-linkedin"></i></a></p></div></div></div></div></footer><script src="https://cdn.jsdelivr.net/npm/jquery@3.3.1/dist/jquery.min.js"></script><script src="https://cdn.jsdelivr.net/npm/moment@2.22.2/min/moment-with-locales.min.js"></script><script src="https://cdn.jsdelivr.net/npm/clipboard@2.0.4/dist/clipboard.min.js" defer></script><script>moment.locale("en")</script><script>var IcarusThemeSettings={article:{highlight:{clipboard:!0,fold:"unfolded"}}}</script><script src="/js/column.js"></script><script src="/js/animation.js"></script><a id="back-to-top" title="Back to top" href="javascript:;"><i class="fas fa-chevron-up"></i></a><script src="/js/back_to_top.js" defer></script><script src="https://cdn.jsdelivr.net/npm/cookieconsent@3.1.1/build/cookieconsent.min.js" defer></script><script>window.addEventListener("load",()=>{window.cookieconsent.initialise({type:"info",theme:"edgeless",static:!1,position:"bottom-left",content:{message:"This website uses cookies to improve your experience.",dismiss:"Got it!",allow:"Allow cookies",deny:"Decline",link:"Learn more",policy:"Cookie Policy",href:"https://www.cookiesandyou.com/"},palette:{popup:{background:"#edeff5",text:"#838391"},button:{background:"#4b81e8"}}})})</script><script src="https://cdn.jsdelivr.net/npm/lightgallery@1.10.0/dist/js/lightgallery.min.js" defer></script><script src="https://cdn.jsdelivr.net/npm/justifiedGallery@3.8.1/dist/js/jquery.justifiedGallery.min.js" defer></script><script>window.addEventListener("load",()=>{"function"==typeof $.fn.lightGallery&&$(".article").lightGallery({selector:".gallery-item"}),"function"==typeof $.fn.justifiedGallery&&($(".justified-gallery > p > .gallery-item").length&&$(".justified-gallery > p > .gallery-item").unwrap(),$(".justified-gallery").justifiedGallery())})</script><script src="/js/main.js" defer></script><div class="searchbox"><div class="searchbox-container"><div class="searchbox-header"><div class="searchbox-input-container"><input class="searchbox-input" type="text" placeholder="Type something..."></div><a class="searchbox-close" href="javascript:;">×</a></div><div class="searchbox-body"></div></div></div><script src="/js/insight.js" defer></script><script>document.addEventListener("DOMContentLoaded",(function(){loadInsight({contentUrl:"/content.json"},{hint:"Type something...",untitled:"(Untitled)",posts:"Posts",pages:"Pages",categories:"Categories",tags:"Tags"})}))</script><script type="text/javascript" src="https://viewer.diagrams.net/js/viewer-static.min.js"></script><style>.geDiagramContainer{width:100%!important}</style></body></html>