tag:blogger.com,1999:blog-17896522417425846752024-03-19T13:52:27.948+05:30Malin De SilvaCloud Developer, Speaker and a Blogger.Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.comBlogger182125tag:blogger.com,1999:blog-1789652241742584675.post-81329384594457050152024-01-31T02:06:00.003+05:302024-01-31T02:06:21.867+05:30Azure App Services vs App Service Environments<p> Recently I was stuck between a decision between Azure App Services and App Service Environments. </p><p>Azure App Services is a fully managed platform that allows developers to build, deploy, and scale web apps and APIs quickly. It supports multiple programming languages, frameworks, and operating systems, providing flexibility for developers. The key components of Azure App Services include:</p><p></p><ul style="text-align: left;"><li>Web Apps</li><li>API Apps</li><li>Mobile Apps</li><li>Function Apps</li></ul><p></p><p><span></span></p><a name='more'></a>Azure App Services is suitable for a wide range of applications, providing a convenient platform for development teams to focus on coding without worrying about the underlying infrastructure.<p></p><p>App Service Environments (ASE) takes Azure App Services to the next level by offering dedicated, isolated environments for running applications. Here are the key features of ASE:</p><p></p><ul style="text-align: left;"><li>Isolation: ASE provides a fully isolated and dedicated environment, ensuring that your applications run in a private, secure space with no shared resources.</li><li>Scalability: With ASE, you can scale your applications horizontally by adding more instances or vertically by choosing higher-tier plans. This flexibility allows for optimal performance based on the application's demands.</li><li>Network Integration: ASE supports integration with Azure Virtual Networks, enabling secure communication between applications and other resources within the network.</li></ul><p></p><p>Both Azure App Services and App Service Environments play crucial roles in Microsoft Azure's offerings, catering to different application scenarios. When choosing between the two, consider factors such as the size and criticality of your application, scalability requirements, and security and compliance needs. Azure App Services provide a versatile and cost-effective solution for many scenarios, while App Service Environments are designed for applications demanding dedicated resources, high scalability, and enhanced security.</p>Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com0tag:blogger.com,1999:blog-1789652241742584675.post-51028699132069138982023-12-17T01:28:00.002+05:302023-12-17T01:28:14.012+05:30Worker Pool Scaling on Azure Batch<p style="text-align: justify;">Azure Batch supports high-performance batch processing and I have been using it for a few months to test with heavy data workloads. The architecture excellence of using Batch service comes when how they are scaled-up when in need. You can set it up to autoscale, but I prefer manual if the workloads are low priority and less frequent.</p><p style="text-align: justify;">In my experience it takes 2-10 minutes to perform a scale up operation within Azure Batch. Scale up performs a set of tasks to allocate an already warmed up machine from a pool of Azure resources within the region. </p><p style="text-align: justify;"><span></span></p><a name='more'></a>I would usually prefer to have an event-based solution to trigger these scale-up and down operations as they are easily configurable. This can be simply done by an Azure Function on event-based as well as with polling.<p></p><p style="text-align: justify;">Following code lines on C#.NET shows how easy it is to resize a pool. </p><p style="text-align: justify;"><b>Step 1: Create a BatchClient</b></p><div style="background-color: #fffffe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div><span style="color: blue;">var</span> batchCredentials = <span style="color: blue;">new</span> BatchSharedKeyCredentials(</div><div> ServiceUrl,AccountName,AccountKey);</div><div style="line-height: 18px;"><div><span style="color: blue;">using</span> (BatchClient batchClient = BatchClient.Open(batchCredentials))</div><div>{</div><div>// Rest of the code goes here.</div><div>}</div></div></div><p style="text-align: justify;"><br /></p><p style="text-align: justify;"><b>Step 2: Read Pool by ID</b></p><p style="text-align: justify;">A pool can be accessed via the id of the bool within the batch client. </p><div style="background-color: #fffffe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;">CloudPool existingPool = <span style="color: blue;">await</span> batchClient.PoolOperations.GetPoolAsync(poolId).ConfigureAwait(continueOnCapturedContext: <span style="color: blue;">false</span>);</div><p style="text-align: justify;"><br /></p><p style="text-align: justify;"><b>Step 3: Resize Pool</b></p><p style="text-align: justify;">In a pool you can pick between the dedicated nodes vs low priority nodes. Dedicated nodes guarantee quick allocation and often required by the regulatory and compliance proceedings. Low priority nodes are less expensive and allocated when they are not in use. </p><p style="text-align: justify;">If you are already optimising cost with manual scale-in scale-out, I would recommend going with dedicated nodes. </p><p style="text-align: justify;">Code sample is as follows: </p><div style="background-color: #fffffe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 12px; line-height: 18px; white-space: pre;"><div><span style="color: blue;">if</span> ((existingPool.CurrentDedicatedComputeNodes != targetDedicatedNodeCount || existingPool.CurrentLowPriorityComputeNodes != targetLowPriorityNodeCount) &&</div><div> existingPool.AllocationState != AllocationState.Resizing &&</div><div> existingPool.AutoScaleEnabled == <span style="color: blue;">false</span>)</div><div> {</div><div> <span style="color: #007200;">// Resize the pool to the desired target. Note that provisioning the nodes in the pool may take some time</span></div><div> <span style="color: blue;">await</span> existingPool.ResizeAsync(targetDedicatedNodeCount, targetLowPriorityNodeCount).ConfigureAwait(continueOnCapturedContext: <span style="color: blue;">false</span>);</div><div> <span style="color: blue;">return</span> CreatePoolResult.ResizedExisting;</div><div> }</div><div> <span style="color: blue;">else</span></div><div> {</div><div> <span style="color: blue;">return</span> CreatePoolResult.PoolExisted;</div><div> }</div></div><p style="text-align: justify;">So, are you ready to tryout the Batch scaling?</p><p style="text-align: justify;"><br /></p>Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com0tag:blogger.com,1999:blog-1789652241742584675.post-46379194129785818452023-11-13T02:52:00.002+05:302023-11-13T02:52:26.777+05:30Deploying Batch Application Packages<p style="text-align: justify;">Azure Batch Service allows deploying and executing batch applications as parallel tasks. Scalability of the underlying compute nodes support parallel processing and efficiency on resource consumption. In this article we will discuss the lifecycle of applications referenced in Azure Batch service. </p><p style="text-align: justify;">You can access the Applications within a Batch account via the Azure Portal. </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh89jFkE5ZrSYD_ksh6eO6vzMRlWUpoKhZjnzs-yjA_CCI2QFfpgyXIJBSJskFO5Rq-cUVxthGdH_qRcUfvSmxe67w2CqrnMWxxvxTkjTpeThMDiFUkHDA0bh0mebk376wjc4l-yEi-gyD4KRyyEFQqwphIvY7cf73QxW-TRH68ZyWVD8jR1dD2936lXV0/s3326/Screenshot%202023-11-12%20at%2022.11.17.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1020" data-original-width="3326" height="195" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh89jFkE5ZrSYD_ksh6eO6vzMRlWUpoKhZjnzs-yjA_CCI2QFfpgyXIJBSJskFO5Rq-cUVxthGdH_qRcUfvSmxe67w2CqrnMWxxvxTkjTpeThMDiFUkHDA0bh0mebk376wjc4l-yEi-gyD4KRyyEFQqwphIvY7cf73QxW-TRH68ZyWVD8jR1dD2936lXV0/w640-h195/Screenshot%202023-11-12%20at%2022.11.17.png" width="640" /></a></div><br /><p><span></span></p><a name='more'></a>Once you select one application, you can see all the available versions listed.<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBkdtsR9AhcdmV6h9lRHAZsoaeLmxOpYRtshOVkL7CX4ww5sR9aE-XQCt_5aF7tjBoat3tD1sSPF-drbznwvR8zylAXT6OfyA1fsDbZnYMDIN3R8Tn7AvfQhb_CJzJHAgBZTFZwxpwGdtMN9NU9jSFX1ulvk1J5Dlb7xrd9cJjWzSBe21OAXYM17FB0w8/s3322/Screenshot%202023-11-12%20at%2022.12.51.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1168" data-original-width="3322" height="226" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjBkdtsR9AhcdmV6h9lRHAZsoaeLmxOpYRtshOVkL7CX4ww5sR9aE-XQCt_5aF7tjBoat3tD1sSPF-drbznwvR8zylAXT6OfyA1fsDbZnYMDIN3R8Tn7AvfQhb_CJzJHAgBZTFZwxpwGdtMN9NU9jSFX1ulvk1J5Dlb7xrd9cJjWzSBe21OAXYM17FB0w8/w640-h226/Screenshot%202023-11-12%20at%2022.12.51.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;">Ideally an application has a major version and a minor version. Deployment of these applications are simplified with the Azure CLI commands. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">First I would like to ensure an application exist in the Batch account. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><i><b>az batch application create --application-name $(batchAccountApplicationName) --name $(batchAccountName) --resource-group $(resourceGroupName)</b></i></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Then we can deploy the package with a desired version. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><b><i>az batch application package create --application-name $(batchAccountApplicationName) --name $(batchAccountName) --resource-group $(resourceGroupName) --version $(batchApplicationVersion) --package-file=$(System.DefaultWorkingDirectory)/_Event1/drop/$(Release.Artifacts._Event1.BuildId).zip</i></b></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">In the example above I am referencing the package file from a Azure CI build output. Version parameter and other parameter values are passed in as pipeline variables.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><br /><p><br /></p>Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com0tag:blogger.com,1999:blog-1789652241742584675.post-79810183625373024482023-10-14T22:00:00.003+05:302023-10-14T22:00:36.805+05:30Azure Batch for High Performance Batch Processes? <p style="text-align: justify;">Batch processing often demands two constraints. Time and Power. You need high-demand processing for a limited duration and if the processing cannot be powerful it can consume a significant time or incur timeouts. Usually the high-end processing can be costly for many small or medium scale organisations to have on-premise.</p><p style="text-align: justify;">What if there is a PaaS/ IaaS service that allows you to perform powerful batch processes while paying for only the consumption? What if you can scale-up and scale-down the processing power relative to the demand. </p><p style="text-align: justify;"><span></span></p><a name='more'></a><br /><div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0jPPq-9TgEbGLm2nk09JLeO8nfUZTJ_QRu36uOVqKgS8UHkK3kpfhyphenhyphenxuk3uFCsAxIMfclRp27XLkOpn5Wh_gY_9YE9bEh9c2sF49mNnha9_-xYwvRQ-7fV_2ZeIvCUX6YvQa-AjN_uWSq9Dvq_udIZ0fn_5QLjZ7QBLk34BN00auk_D6FEqNt4TZTVsg/s3198/Screenshot%202023-10-14%20at%2018.26.57.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1794" data-original-width="3198" height="360" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg0jPPq-9TgEbGLm2nk09JLeO8nfUZTJ_QRu36uOVqKgS8UHkK3kpfhyphenhyphenxuk3uFCsAxIMfclRp27XLkOpn5Wh_gY_9YE9bEh9c2sF49mNnha9_-xYwvRQ-7fV_2ZeIvCUX6YvQa-AjN_uWSq9Dvq_udIZ0fn_5QLjZ7QBLk34BN00auk_D6FEqNt4TZTVsg/w640-h360/Screenshot%202023-10-14%20at%2018.26.57.png" width="640" /></a></div>Azure Batch allows you to execute parallel tasks across multiple compute nodes and scale-out as needed. There are a few important concepts around Azure Batch that is worth understanding.<p></p><p style="text-align: justify;"></p><ul><li>Pool - A pool is a collection of compute nodes that are made of same OS, Scale and common lifecycle events. (eg: Start Tasks) A pool can be scaled out or in dynamically.</li><li>Node - A node is a VM, but we do not get access to the full VM. A group of directories will be available to put applications and execute them. You can have dedicated nodes as well as low cost spot VM nodes.</li><li>Application - An application is an executable package that is stored in the associated storage account and can be versioned and added to jobs and tasks. </li><li>Job - A job is a collection of tasks that can execute on a pool incrementally or in parallel. </li><li>Task - A task is an execution of a command. An application can be executed with a command. </li></ul><p></p><div style="text-align: justify;"><br /></div><h3 style="text-align: justify;">Common Use cases </h3><p style="text-align: justify;"></p><ul><li>Video Processing and indexing</li><li>ETL processes</li><li>Congested batch workflows</li></ul><p></p><p style="text-align: justify;"><br /></p></div>Batch Service usually comes with certain quotas associated by default. But you can request to increase them based on the necessity. Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com0tag:blogger.com,1999:blog-1789652241742584675.post-55824280181646816282023-09-24T19:44:00.003+05:302023-09-24T19:44:50.902+05:30Azure Web App APIs exposed to APIM<p>It is true we are living in a modern era where many tasks are automated. But I do not personally backoff from a great portal feature on Azure that can help make your life easy. Today I am going to show you how simplified is creating an APIM API referencing an API App deployed on the Azure Web App.</p><p>Finding this feature on an Azure Web App is very easy. You can just navigate through the service options and then can find API Management as a section.<span></span></p><a name='more'></a><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN6nisVEB2jxfeDOoFYEhhsJdEp2HUvDJLbMcTYWapuOEz7BU7ZtCfVGiR3L9aQtxiQs1EK18snUHoxoMhuuldNHIoyleuBzjhZnq56-hDv1qn_BTytchAEegeHMERXB0EAY3rw6uZTWOhltQT_Ocn042A7hG6OCrGRFI0tLWn_SKNHLgyLZejhyJ0iEo/s1872/Screenshot%202023-09-24%20at%2016.04.33.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1588" data-original-width="1872" height="542" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhN6nisVEB2jxfeDOoFYEhhsJdEp2HUvDJLbMcTYWapuOEz7BU7ZtCfVGiR3L9aQtxiQs1EK18snUHoxoMhuuldNHIoyleuBzjhZnq56-hDv1qn_BTytchAEegeHMERXB0EAY3rw6uZTWOhltQT_Ocn042A7hG6OCrGRFI0tLWn_SKNHLgyLZejhyJ0iEo/w640-h542/Screenshot%202023-09-24%20at%2016.04.33.png" width="640" /></a></div><div><br /></div>Here you can easily select the API Management instance. Azure automatically picks up the API Management instances available in the tenant.<div><br /></div><div>Then you can select an existing API or the option to Create a new API. </div><div><br /></div><div>Last option is about using an Open API specification. If you do not have one, it will be displayed as a warning. </div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpJYisyARSGg4Azaq6ryStJa_OZbS6X-tIXphMGDy6AqRe7JAn1eaDTIp3xp6MpB4KbLfDeKUUINrgMFMV5UI5Jyx8jHPeQGvv2ZtL_dR4jS9b7jY1idq9Ex-Mw2BGesnAQ3WElmoBzNk-bSmx3ULxLqNq6izsro2HekK6ahIm-fTefM6n_o82kXz7atE/s1490/Screenshot%202023-09-24%20at%2016.10.12.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="938" data-original-width="1490" height="251" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpJYisyARSGg4Azaq6ryStJa_OZbS6X-tIXphMGDy6AqRe7JAn1eaDTIp3xp6MpB4KbLfDeKUUINrgMFMV5UI5Jyx8jHPeQGvv2ZtL_dR4jS9b7jY1idq9Ex-Mw2BGesnAQ3WElmoBzNk-bSmx3ULxLqNq6izsro2HekK6ahIm-fTefM6n_o82kXz7atE/w400-h251/Screenshot%202023-09-24%20at%2016.10.12.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: left;">If you create a .NET Web Api, it will automatically contain a specification. Otherwise you will have to manually include one in the deployment package. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">If you do not have a specification and do not check this on the APIM will create an API with wild card entries to it. But it will create a good matching if an OpenAPI Specification is available. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">This looks a very easy way for a short term setup. But if you are to integrate more rules in the APIs, this might not be the ideal. In such situations it is always better to use either Infra-as-code capabilities for APIM or Swagger deployments.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><br /><div><br /><p><br /></p></div>Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com0tag:blogger.com,1999:blog-1789652241742584675.post-54040935541584254662023-09-13T01:09:00.004+05:302023-09-13T01:09:16.126+05:30Leveraging variables in Azure DevOps pipelines<p style="text-align: justify;">Azure DevOps pipelines use variables to store and manage data that can be used throughout the CI/CD process. These variables can hold values like configuration settings, environment-specific information, and secrets. Azure DevOps provides different types of variables, including predefined system variables and custom variables that you can define. Here's an overview of Azure DevOps pipeline variables:</p><h3 style="text-align: justify;">System Variables: </h3><p style="text-align: justify;">These are predefined variables provided by Azure DevOps. They include information about the pipeline, build agent, and more. Some common system variables include: </p><span><a name='more'></a></span><p></p><ul style="text-align: left;"><li style="text-align: justify;">Build.BuildNumber: The build number or identifier. </li><li style="text-align: justify;">Build.SourceBranch: The source code branch being built. </li><li style="text-align: justify;">Build.Repository.Name: The name of the source code repository. </li><li style="text-align: justify;">Agent.Name: The name of the build agent. </li></ul><p></p><h3 style="text-align: justify;">Custom Variables: </h3><p style="text-align: justify;">You can define your own custom variables to store values specific to your pipeline. Custom variables can be defined at different levels: </p><p></p><ul style="text-align: left;"><li style="text-align: justify;">Pipeline Variables: Defined at the pipeline level, these variables are available to all stages and jobs within the pipeline. </li><li style="text-align: justify;">Stage Variables: Defined at the stage level, these variables are available to all jobs within a specific stage.</li><li style="text-align: justify;">Job Variables: Defined at the job level, these variables are specific to a particular job within a stage. </li></ul><p></p><h3 style="text-align: justify;">Secret Variables: </h3><p style="text-align: justify;">Secret variables are a special type of custom variable designed to store sensitive data like API keys, passwords, or connection strings. They are encrypted and not exposed in logs or build summary.</p><h3 style="text-align: justify;">Variable Groups: </h3><p style="text-align: justify;">Azure DevOps also allows you to group variables together into Variable Groups. Variable Groups make it easier to manage and share variables across multiple pipelines or environments, helping you centralize configuration settings. </p><p style="text-align: justify;">Remember to use secret variables for sensitive data and avoid hardcoding values in your pipeline scripts. Instead, use variables to make your pipelines more flexible and maintainable. These variables can be defined and managed in the Azure DevOps portal or defined directly in your YAML pipeline configuration, depending on your preference and requirements.</p>Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com0tag:blogger.com,1999:blog-1789652241742584675.post-37284420071179433342023-03-05T14:47:00.001+05:302023-03-05T14:47:05.975+05:30Introduction to Microsoft Cost Management<p><table cellpadding="0" cellspacing="0" class="tr-caption-container" style="float: left;"><tbody><tr><td style="text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEh3iVpgESVfvoWSrAghxMTenSdFxP9Swp7R-uV9Dbby54zJvrDIqaetUKcV6BHKvBAT0ETYKc3_ATadhomNOoZcSnQL0sCCtPkmFbBUI6R6inc_R8Bw4V94kP_Cexgk5-M0nuWw-XLv-Li1qHxEGaKaYXl5uL1l_lF96_PUJEyFLqoc_CfTxK-0QAYZ" style="clear: left; margin-bottom: 1em; margin-left: auto; margin-right: auto;"><img alt="" data-original-height="768" data-original-width="1454" height="169" src="https://blogger.googleusercontent.com/img/a/AVvXsEh3iVpgESVfvoWSrAghxMTenSdFxP9Swp7R-uV9Dbby54zJvrDIqaetUKcV6BHKvBAT0ETYKc3_ATadhomNOoZcSnQL0sCCtPkmFbBUI6R6inc_R8Bw4V94kP_Cexgk5-M0nuWw-XLv-Li1qHxEGaKaYXl5uL1l_lF96_PUJEyFLqoc_CfTxK-0QAYZ" width="320" /></a></td></tr><tr><td class="tr-caption" style="text-align: center;">Source: Azure Product Page </td></tr></tbody></table><br /> <span style="color: #0e101a;">Microsoft Cost Management is a powerful tool Microsoft offers to help organisations manage their cloud costs on the Azure platform. When many applications within the organisations get migrated, keeping track of cloud costs is becoming increasingly important to ensure they remain within budget.</span></p><p style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: #0e101a; margin-bottom: 0pt; margin-top: 0pt;"><span data-preserver-spaces="true" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; margin-bottom: 0pt; margin-top: 0pt;">Microsoft Cost Management offers a range of features designed to help businesses keep their cloud spending under control. Here are some of the key features:</span></p><p style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: #0e101a; margin-bottom: 0pt; margin-top: 0pt;"><br /></p><p style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: #0e101a; margin-bottom: 0pt; margin-top: 0pt;"></p><ul style="text-align: left;"><li>Cost analysis: Provides a detailed breakdown of cloud spending, allowing businesses to see exactly where their money is being spent. This helps identify areas where costs can be reduced.</li></ul><span><a name='more'></a></span><div><br /></div><ul style="text-align: left;"><li>Budget tracking: Allows businesses to set budgets for their cloud spending, triggering alerts when spending exceeds a certain threshold. This helps to prevent overspending and ensures that budgets are adhered to.</li></ul><div><br /></div><ul style="text-align: left;"><li><span style="color: #0e101a;">Recommendations: Advice on optimizing cloud spend based on usage patterns and workload requirements. These recommendations can help businesses to reduce costs without sacrificing performance.</span></li></ul><div><br /></div><ul style="text-align: left;"><li><span style="color: #0e101a;">Forecasting: Provides forecasting capabilities that allow businesses to predict future cloud spending based on historical data. This can help plan for future budgets and ensure that costs remain controlled.</span></li></ul><p></p><p style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: #0e101a; margin-bottom: 0pt; margin-top: 0pt;"><span data-preserver-spaces="true" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; margin-bottom: 0pt; margin-top: 0pt;"><br /></span></p><p style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; color: #0e101a; margin-bottom: 0pt; margin-top: 0pt;"><span data-preserver-spaces="true" style="background-attachment: initial; background-clip: initial; background-image: initial; background-origin: initial; background-position: initial; background-repeat: initial; background-size: initial; margin-bottom: 0pt; margin-top: 0pt;">Overall, Microsoft Cost Management is an invaluable tool for businesses that use the Azure platform for their cloud operations. Providing detailed cost analysis, budget tracking, recommendations, and forecasting capabilities allows businesses to optimize their cloud spending and ensure that costs remain within budget. With cloud costs becoming an increasingly important consideration for businesses, Microsoft Cost Management is a tool that should be considered.</span></p>Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com0tag:blogger.com,1999:blog-1789652241742584675.post-9721523243059200112023-02-17T05:44:00.001+05:302023-02-17T05:44:15.975+05:30What are the VM Classes in Azure?<p> Azure Virtual Machines offer flexible deployment options, including customizable virtual machine sizes and multiple pricing tiers.</p><p>As a consumer, you have multple classes to choose your VM workload from. Lets take a closer look at the different Azure VM classes available and how they can be used to meet specific needs.</p><p></p><ul style="text-align: left;"><li>General-purpose VMs</li></ul><p></p><p>General-purpose VMs are designed for a wide range of workloads and applications. These VMs offer a balance of CPU, memory, and temporary storage, making them ideal for applications that require moderate-to-high performance, such as web servers, small databases, and development and testing environments. </p><span></span><span><a name='more'></a></span><p><br /></p><p></p><ul style="text-align: left;"><li>Compute-optimized VMs</li></ul><p></p><p>Compute-optimized VMs are designed for compute-intensive workloads such as high-performance computing, gaming applications and batch processing. These VMs offer a higher ratio of CPU to memory, making them ideal for applications that require high computational performance.</p><p></p><ul style="text-align: left;"><li>Memory-optimized VMs</li></ul><p></p><p>Memory-optimized VMs are designed for memory-intensive workloads that require a large amount of RAM, such as in-memory databases, real-time analytics, and data modeling. These VMs offer a higher ratio of memory to CPU.</p><p></p><ul style="text-align: left;"><li>Storage-optimized VMs</li></ul><p></p><p>Storage-optimized VMs are designed for workloads that require a large amount of disk throughput and input/output operations per second (IOPS), such as big data and data warehousing applications. These VMs offer high disk throughput and IOPS, making them ideal for applications that require a lot of data storage and processing power.</p><p></p><ul style="text-align: left;"><li>GPU-optimized VMs</li></ul><p></p><p>GPU-optimized VMs are designed for workloads that require graphical processing power, such as gaming, rendering, and machine learning applications. These VMs offer high-performance graphics processing units (GPUs), making them ideal for applications that require advanced graphics processing capabilities.</p><p>These are further divide into different labels based on the type of hardware. Choosing the right VM class for your application, you can ensure optimal performance, scalability, and cost-effectiveness in the cloud.</p><p><br /></p><p><br /></p><p><br /></p>Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com0tag:blogger.com,1999:blog-1789652241742584675.post-56117341366428538982023-02-06T00:42:00.001+05:302023-02-06T00:42:07.629+05:30Azure Load Testing goes GA<p>Azure Load Testing allows you to conduct your workloads hosted on cloud. While there are definite room for new features, it has been announced as Generally Available. Creating an Azure Load Test instance on Azure is very easy. Hence, I will start with a created instance. </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkqSvSUBlMCrTaUK9vHbvK2dgtb9eTtN9Rs9dgFb6feX1reVqrlB9znm8K9ez3boZtzUJ5wUw8542H-KgmCMybnvT-GGMXAz7I8XQr09BV4hgl3EpsfhGW0vQlMtdNmcRA3-SOnx4iR4IuOyiq0_mrZOeohAX6VcQjyGVIUQMzrAUNA0ipaPQh5sMd/s2876/Screenshot%202023-02-05%20at%2019.52.24.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1330" data-original-width="2876" height="296" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjkqSvSUBlMCrTaUK9vHbvK2dgtb9eTtN9Rs9dgFb6feX1reVqrlB9znm8K9ez3boZtzUJ5wUw8542H-KgmCMybnvT-GGMXAz7I8XQr09BV4hgl3EpsfhGW0vQlMtdNmcRA3-SOnx4iR4IuOyiq0_mrZOeohAX6VcQjyGVIUQMzrAUNA0ipaPQh5sMd/w640-h296/Screenshot%202023-02-05%20at%2019.52.24.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">In the quotas section you can see the quotas associated with the test instance. It also explains how the quotas are applied at subscription level. </div><span><a name='more'></a></span><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiojVC12x5A1n5ivhE6oxovUUlH789mZFTupJm4JbDc1MSdMqgFm-JrSWRhr8uhDJalGBXlllSbEufpQhpMqJLdU_RuOJoTAoWfM7xXPw5MoPxsxsoehDl5t-4QrfY-sreCqHrnDdf4pqRX-BivhXLAITKkrNKlMtxGD_OdCxo4mzgPm0YF5hO0yJX4/s970/Screenshot%202023-02-05%20at%2019.58.16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="484" data-original-width="970" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiojVC12x5A1n5ivhE6oxovUUlH789mZFTupJm4JbDc1MSdMqgFm-JrSWRhr8uhDJalGBXlllSbEufpQhpMqJLdU_RuOJoTAoWfM7xXPw5MoPxsxsoehDl5t-4QrfY-sreCqHrnDdf4pqRX-BivhXLAITKkrNKlMtxGD_OdCxo4mzgPm0YF5hO0yJX4/w640-h320/Screenshot%202023-02-05%20at%2019.58.16.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;">In the Tests section you can browse all the test instances created. It allows two types of tests. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">1. Quick tests</div><div class="separator" style="clear: both; text-align: left;">Simple url hit tests where you have the option to hit a url with virtual users and attempt a test. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeSEiPVOC38PCtfcByTblbiWA5eloQPn8YBgQ1IhYIakhoAH-vjH27H7bzEAGaGxM8-9cbZEsS8zNMjzjIy_nRF7h994r2PgMZFyE5SZ4f9FDdPjPkUw_SCm7R_9la44mTK31-lDBjN-OU886R3Nndvwlv3PxvZWT2NKkqtvHc0ue7EUJlpctzNm34/s1564/Screenshot%202023-02-05%20at%2020.03.09.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1010" data-original-width="1564" height="259" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjeSEiPVOC38PCtfcByTblbiWA5eloQPn8YBgQ1IhYIakhoAH-vjH27H7bzEAGaGxM8-9cbZEsS8zNMjzjIy_nRF7h994r2PgMZFyE5SZ4f9FDdPjPkUw_SCm7R_9la44mTK31-lDBjN-OU886R3Nndvwlv3PxvZWT2NKkqtvHc0ue7EUJlpctzNm34/w400-h259/Screenshot%202023-02-05%20at%2020.03.09.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: left;">You can simply run it by specifying the url. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL8XTTrrSD5bBTrPVEtky1dJyntskHRfrbIlqsMZweU25YbXU3WtnzUhlVHEMF0UNFByU2X0j20VuBQ1OVsl2Vgbt20ArjJwvWld313XfCSDb795TbzX93izBJlCmohDHe5zW0rbsI7hwEaz3eCxnVHkjBXSoVuDPUyLgFDszMrp9unly7SgS34yO_/s3250/Screenshot%202023-02-05%20at%2020.09.35.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1770" data-original-width="3250" height="217" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL8XTTrrSD5bBTrPVEtky1dJyntskHRfrbIlqsMZweU25YbXU3WtnzUhlVHEMF0UNFByU2X0j20VuBQ1OVsl2Vgbt20ArjJwvWld313XfCSDb795TbzX93izBJlCmohDHe5zW0rbsI7hwEaz3eCxnVHkjBXSoVuDPUyLgFDszMrp9unly7SgS34yO_/w400-h217/Screenshot%202023-02-05%20at%2020.09.35.png" width="400" /></a></div><br /><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">This is very basic script with no option even to setup a header. Ideal for public urls.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">2. JMeter scripts</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">JMeter allows create advanced tests and will cover with another article. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">So, are you ready to test? </div><div class="separator" style="clear: both; text-align: left;"><br /></div><br /><p><br /></p>Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com1tag:blogger.com,1999:blog-1789652241742584675.post-87490526833528879642023-01-19T04:42:00.000+05:302023-02-05T04:54:37.428+05:30Submit .Net class library to Azure Artifacts Feed<p> Azure Artifacts feed provides great means to share the common reusable components across your organization. In the following code base I will display a template for Azure DevOps build pipeline. </p><div style="background-color: #fffffe; font-family: Menlo, Monaco, "Courier New", monospace; font-size: 14px; line-height: 21px; white-space: pre;"><div style="line-height: 21px;"><div><span style="color: teal;">trigger</span>:</div><div>- <span style="color: #0451a5;">'main'</span></div><br /><div><span style="color: teal;">pool</span>:</div><div> <span style="color: teal;">vmImage</span>: <span style="color: #0451a5;">ubuntu-latest</span></div><div> <span style="color: teal;">demands</span>:</div><div> - <span style="color: #0451a5;">npm</span></div><br /><div><span style="color: teal;">variables</span>:</div><div> <span style="color: teal;">buildConfiguration</span>: <span style="color: #0451a5;">'Release'</span></div><div> <span style="color: teal;">dotNetFramework</span>: <span style="color: #0451a5;">'net7.0'</span></div><div> <span style="color: teal;">targetRuntime</span>: <span style="color: #0451a5;">'linux-x64'</span></div><div> <span style="color: teal;">moduleName</span>: <span style="color: #0451a5;">'ModuleName'</span></div><div> <span style="color: teal;">entityTypeName</span>: <span style="color: #0451a5;">'EntityType'</span></div><div><span style="color: #0451a5;">// Once you create a feed, that ID will be added here.</span></div><div> <span style="color: teal;">vstsFeedId</span>: <span style="color: #0451a5;">'<A Guid>'</span></div><div> <span style="color: teal;">major</span>: <span style="color: #0451a5;">'1'</span></div><div> <span style="color: teal;">minor</span>: <span style="color: #0451a5;">'0'</span></div><div> <span style="color: teal;">revision</span>: <span style="color: #0451a5;">$[counter(variables['minor'], 1)] </span></div><div> <span style="color: teal;">nugetVersion</span>: <span style="color: #0451a5;">'$(major).$(minor).$(revision)'</span></div><br /><div><span style="color: teal;">steps</span>:</div><div>- <span style="color: teal;">task</span>: <span style="color: #0451a5;">NuGetAuthenticate@1</span></div><div> <span style="color: teal;">inputs</span>:</div><div> <span style="color: teal;">forceReinstallCredentialProvider</span>: <span style="color: blue;">true</span></div><div style="line-height: 21px;"><br /></div>// Optional: Run unit tests<br /><div>- <span style="color: teal;">task</span>: <span style="color: #0451a5;">DotNetCoreCLI@2</span></div><div> <span style="color: teal;">displayName</span>: <span style="color: #0451a5;">'Run unit tests - $(buildConfiguration)'</span></div><div> <span style="color: teal;">inputs</span>:</div><div> <span style="color: teal;">command</span>: <span style="color: #0451a5;">'test'</span></div><div> <span style="color: teal;">arguments</span>: <span style="color: #0451a5;">'--framework $(dotNetFramework) --configuration $(buildConfiguration)'</span></div><div> <span style="color: teal;">publishTestResults</span>: <span style="color: blue;">true</span></div><div> <span style="color: teal;">projects</span>: <span style="color: #0451a5;">'**/*.Tests.csproj'</span></div><div style="line-height: 21px;"><br /></div>// Does packaging. Nuget version is automatically increased to next revision.<br /><div>- <span style="color: teal;">task</span>: <span style="color: #0451a5;">NuGetCommand@2</span></div><div> <span style="color: teal;">displayName</span>: <span style="color: #0451a5;">'Nuget Pack'</span></div><div> <span style="color: teal;">inputs</span>:</div><div> <span style="color: teal;">command</span>: <span style="color: #0451a5;">'pack'</span></div><div> <span style="color: teal;">packagesToPack</span>: <span style="color: #0451a5;">'**/$(moduleName).$(entityTypeName).csproj'</span></div><div> <span style="color: teal;">versionEnvVar</span>: <span style="color: #0451a5;">'nugetVersion'</span></div><div> <span style="color: teal;">versioningScheme</span>: <span style="color: #0451a5;">'byEnvVar'</span></div><div> <span style="color: teal;">packDestination</span>: <span style="color: #0451a5;">'$(Build.ArtifactStagingDirectory)'</span></div><br /><div>- <span style="color: teal;">task</span>: <span style="color: #0451a5;">PublishPipelineArtifact@1</span></div><div> <span style="color: teal;">inputs</span>:</div><div> <span style="color: teal;">targetPath</span>: <span style="color: #0451a5;">'$(Build.ArtifactStagingDirectory)'</span></div><div> <span style="color: teal;">publishLocation</span>: <span style="color: #0451a5;">'pipeline'</span></div><br /><div>- <span style="color: teal;">task</span>: <span style="color: #0451a5;">NuGetCommand@2</span></div><div> <span style="color: teal;">displayName</span>: <span style="color: #0451a5;">'Nuget Push'</span></div><div> <span style="color: teal;">inputs</span>:</div><div> <span style="color: teal;">command</span>: <span style="color: #0451a5;">'push'</span></div><div> <span style="color: teal;">packagesToPush</span>: <span style="color: #0451a5;">'$(Build.ArtifactStagingDirectory)/**/*.nupkg;!$(Build.ArtifactStagingDirectory)/**/*.symbols.nupkg'</span></div><div> <span style="color: teal;">nuGetFeedType</span>: <span style="color: #0451a5;">'internal'</span></div><div> <span style="color: teal;">publishVstsFeed</span>: <span style="color: #0451a5;">'$(vstsFeedId)'</span></div></div></div>Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com0tag:blogger.com,1999:blog-1789652241742584675.post-28383543014372753382023-01-08T18:20:00.002+05:302023-01-08T18:20:14.589+05:30Setting up App Config values with Bicep<p>There are often times where we need to setup a master configuration instance for the config values that might be referenced within pipelines. In such situations we can setup the initial configs such as environment name initially. </p><p>First of all we will initialise a set of key value names. </p><p><!--StartFragment--></p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Consolas, 'Courier New', monospace; font-size: 14px; font-weight: normal; line-height: 19px; white-space: pre;"><div><span style="color: #c586c0;">param</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">keyValueNames</span><span style="color: #d4d4d4;"> </span><span style="color: #4ec9b0;">array</span><span style="color: #d4d4d4;"> = [</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #ce9178;">'appName$dev'</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #ce9178;">'environmentType$dev'</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #ce9178;">'Acr_Name$dev'</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #ce9178;">'region$dev-</span><span style="color: #d4d4d4;">${</span><span style="color: #9cdcfe;">region</span><span style="color: #d4d4d4;">}</span><span style="color: #ce9178;">'</span></div><div><span style="color: #d4d4d4;">]</span></div></div><!--EndFragment--><br /><p></p><span><a name='more'></a></span><p>Text after $ sign reference to the label name of the config.</p><p>Next we can setup values as an array with same length.</p><p><!--StartFragment--></p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Consolas, 'Courier New', monospace; font-size: 14px; font-weight: normal; line-height: 19px; white-space: pre;"><div><span style="color: #c586c0;">var</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">keyValueValues</span><span style="color: #d4d4d4;"> = [</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">appName</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">dev_Environment</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">dev_ACRName</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">region</span></div><div><span style="color: #d4d4d4;">]</span></div></div><!--EndFragment--><br /><p></p><p>Next we can do the setup of the App Configuration instance. </p><p><!--StartFragment--></p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Consolas, 'Courier New', monospace; font-size: 14px; font-weight: normal; line-height: 19px; white-space: pre;"><div><span style="color: #c586c0;">resource</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">configStore</span><span style="color: #d4d4d4;"> </span><span style="color: #ce9178;">'Microsoft.AppConfiguration/configurationStores@2022-05-01'</span><span style="color: #d4d4d4;"> = {</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #4ec9b0;">name</span><span style="color: #d4d4d4;">: </span><span style="color: #9cdcfe;">configStoreName</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #4ec9b0;">location</span><span style="color: #d4d4d4;">: </span><span style="color: #9cdcfe;">region</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #4ec9b0;">tags</span><span style="color: #d4d4d4;">:</span><span style="color: #9cdcfe;">tags</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #4ec9b0;">sku</span><span style="color: #d4d4d4;">: {</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #4ec9b0;">name</span><span style="color: #d4d4d4;">: </span><span style="color: #ce9178;">'standard'</span></div><div><span style="color: #d4d4d4;"> }</span></div><div><span style="color: #d4d4d4;">}</span></div></div><!--EndFragment--><br /><p></p><p>Lastly we can iterate through the key value names and post values.</p><p><!--StartFragment--><!--EndFragment--></p><div style="background-color: #1e1e1e; color: #d4d4d4; font-family: Consolas, 'Courier New', monospace; font-size: 14px; font-weight: normal; line-height: 19px; white-space: pre;"><div><span style="color: #c586c0;">resource</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">configStoreKeyValue</span><span style="color: #d4d4d4;"> </span></div><div><span style="color: #ce9178;">'Microsoft.AppConfiguration/configurationStores/keyValues@2022-05-01'</span><span style="color: #d4d4d4;"> </span></div><div><span style="color: #d4d4d4;">= [</span><span style="color: #c586c0;">for</span><span style="color: #d4d4d4;"> (</span><span style="color: #9cdcfe;">item</span><span style="color: #d4d4d4;">, </span><span style="color: #9cdcfe;">i</span><span style="color: #d4d4d4;">) </span><span style="color: #c586c0;">in</span><span style="color: #d4d4d4;"> </span><span style="color: #9cdcfe;">keyValueNames</span><span style="color: #d4d4d4;">: {</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #4ec9b0;">parent</span><span style="color: #d4d4d4;">: </span><span style="color: #9cdcfe;">configStore</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #4ec9b0;">name</span><span style="color: #d4d4d4;">: </span><span style="color: #9cdcfe;">item</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #4ec9b0;">properties</span><span style="color: #d4d4d4;">: {</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #4ec9b0;">value</span><span style="color: #d4d4d4;">: </span><span style="color: #9cdcfe;">keyValueValues</span><span style="color: #d4d4d4;">[</span><span style="color: #9cdcfe;">i</span><span style="color: #d4d4d4;">]</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #4ec9b0;">contentType</span><span style="color: #d4d4d4;">: </span><span style="color: #9cdcfe;">contentType</span></div><div><span style="color: #d4d4d4;"> </span><span style="color: #4ec9b0;">tags</span><span style="color: #d4d4d4;">: </span><span style="color: #9cdcfe;">tags</span></div><div><span style="color: #d4d4d4;"> }</span></div><div><span style="color: #d4d4d4;">}]</span></div></div><p><br /></p>Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com0tag:blogger.com,1999:blog-1789652241742584675.post-4063218155097391702022-11-19T23:29:00.000+05:302022-11-19T23:29:58.494+05:30Creating an Reading Ledger Entries in Azure Confidential Ledger<p>In my previous article I gave an introduction to Azure Confidential Ledger. In this article I am trying to publish a .NET code sample. There is already an example in MSDN which is not working as expected. Therefore I tried to build one while exploring API. </p><p>I have created a .Net 6.0 based console application and will be using the default Program.cs class. </p><p>Following Nuget packages are required to be installed. </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizRpBeM5wx3NuTD0wEknA5k9JL5rukKwW-Ki18sPvGUOFrhcDbT_uqFMYMTDMxz5HyGBEki0KuqS7iEboOxRGzPfYVJXTBTGr-fACQAtTyGRa6bDEMtPp9M3rRPuvOT-3LTy6Y_0UI_6qOAd6Eh4ZWxM_r5KnUkFJcEhP90oMW9cNLsCuxWn05vbPJ/s1648/Screenshot%202022-11-13%20at%2013.10.49.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="552" data-original-width="1648" height="134" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEizRpBeM5wx3NuTD0wEknA5k9JL5rukKwW-Ki18sPvGUOFrhcDbT_uqFMYMTDMxz5HyGBEki0KuqS7iEboOxRGzPfYVJXTBTGr-fACQAtTyGRa6bDEMtPp9M3rRPuvOT-3LTy6Y_0UI_6qOAd6Eh4ZWxM_r5KnUkFJcEhP90oMW9cNLsCuxWn05vbPJ/w400-h134/Screenshot%202022-11-13%20at%2013.10.49.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: left;">First get the ledger Uri, Collection Id and a console input as a message to be published. </div><span><a name='more'></a></span><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both;"><i>var ledgerUri = "https://azledger1.confidential-ledger.azure.com";</i></div><div class="separator" style="clear: both;"><i>var collectionId = "col2";</i></div><div class="separator" style="clear: both;"><i><br /></i></div><div class="separator" style="clear: both;"><i>Console.WriteLine("Enter Message");</i></div><div class="separator" style="clear: both;"><i>var message = Console.ReadLine();</i></div><div class="separator" style="clear: both;"><i>Console.WriteLine($"Message: {message}");</i></div><div><br /></div><div>Make sure you have contribute or admin access to the ledger instance and configure Visual Studio to access Azure services via the same account. That way we can authorise ledger client with the identity. </div><div><br /></div><div><div><i>var ledgerClient = new ConfidentialLedgerClient(new Uri(ledgerUri), new DefaultAzureCredential());</i></div></div><div><br /></div><div>Now we can use the ledger client to post the message to the collection defined above. </div><div><br /></div><div><div><i>Operation postOperation = ledgerClient.PostLedgerEntry(</i></div><div><i> waitUntil: WaitUntil.Completed,</i></div><div><i> RequestContent.Create(</i></div><div><i> new { contents = message }),</i></div><div><i> collectionId);</i></div></div><div><br /></div><div>WaitUntil ensures the response is received after writing to the ledger. </div><div><br /></div><div>Next we can list down all the entries within the collection including the message just posted. </div><div><br /></div><div><div><i>var ledgerEntries = ledgerClient.GetLedgerEntries(collectionId);</i></div><div><i>Console.WriteLine("****");</i></div><div><i>foreach (var item in ledgerEntries)</i></div><div><i>{</i></div><div><i> Console.WriteLine(item);</i></div><div><i>}</i></div></div><div><br /></div><div>Also you can get the transaction id and read item by transaction id as well. </div></div>Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com0tag:blogger.com,1999:blog-1789652241742584675.post-61033872801330732862022-11-12T23:21:00.001+05:302022-11-12T23:21:04.701+05:30Getting started with Azure Confidential Ledger<p style="text-align: justify;">Azure Confidential Ledger is one of the most interesting Confidential Computing offering on Azure. It offers you the capability store data in a secure blockchain with private and public ledger type options. In the back of it, it uses blocks in blobs stored in Azure Storage Account. Data in transit is secured with TLS 1.3 and allowed via verified certificate users as well as Azure AD users. </p><p style="text-align: justify;">Currently you can have Administrator, Contributor and Reader access levels assigned via Azure RBAC. Confidential Ledger runs on Trusted Execution Environments (TEEs) of Azure Confidential Computing. All the administrators and cloud providers are kept outside a Trusted Computing Base and it prevents anyone having access. </p><p style="text-align: justify;"><span></span></p><a name='more'></a>Creating a Confidential ledger is very easy. But a few things to keep in mind.<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmmj1lrmv5LrxevPhaNGRAMLW2oQFQ3OPhEUB4sGpvjafQlywzF7k4DCeI8IpKlJr2kx6wEeoYADMNfbgt5PQIZDeZzKejDPzm--pcjfqLVRBuXyfMYunW8_J5s0tfwEr8eh2ZP2Iqj1hsNeOELNm2GX7s8EMX2bna0DEL5Lj02sWU4NR12Z6YAKJf/s1984/Screenshot%202022-11-12%20at%2018.39.16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1556" data-original-width="1984" height="314" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjmmj1lrmv5LrxevPhaNGRAMLW2oQFQ3OPhEUB4sGpvjafQlywzF7k4DCeI8IpKlJr2kx6wEeoYADMNfbgt5PQIZDeZzKejDPzm--pcjfqLVRBuXyfMYunW8_J5s0tfwEr8eh2ZP2Iqj1hsNeOELNm2GX7s8EMX2bna0DEL5Lj02sWU4NR12Z6YAKJf/w400-h314/Screenshot%202022-11-12%20at%2018.39.16.png" width="400" /></a></div>1. Limited regions are supported as of now. (East US, South Central US, West Europe).<div>2. Ledger type cannot be changed once provisioned. </div><div>3. Name must be unique as it provides a public endpoint. </div><div><br /></div><div>Next you can define the security roles required. These are RBAC roles which can even be setup later. </div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNCnpbp-yVjjKRCfDlkuZo_dV98G9EX37LXMCFFq_ONZI6HocbF-NczcmAvCBaHelVaktVpBvJk4sNmME4jsKM7ySZi5_Cqb4AEC7NGV_CTY4-4bi2XaM8mr6Cli_2cNxOPBmXZ92CkDcy7mXgFdPpU1PKjsrr2F-mbkGCSxIklUACcoZRqUIPZMY_/s1930/Screenshot%202022-11-12%20at%2018.41.41.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1076" data-original-width="1930" height="223" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiNCnpbp-yVjjKRCfDlkuZo_dV98G9EX37LXMCFFq_ONZI6HocbF-NczcmAvCBaHelVaktVpBvJk4sNmME4jsKM7ySZi5_Cqb4AEC7NGV_CTY4-4bi2XaM8mr6Cli_2cNxOPBmXZ92CkDcy7mXgFdPpU1PKjsrr2F-mbkGCSxIklUACcoZRqUIPZMY_/w400-h223/Screenshot%202022-11-12%20at%2018.41.41.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">Both AAD Users and Certificate based users can be assigned ledger roles. </div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">Currently no such vNet support exists, but might become available once it is generally available. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Once it is deployed, it will appear like this. </div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLaCQqrrvnQyoS_mQ432tsndlrcni-xA-NOVThUJYUg0jTGrICBTiqYxKZHJP4hlHyxwg--PxsEJ-so5xS4CSriDelfyOrp2cdTtnViM7aOqz7xzdomK3yC_ep_QZRGkrCDmp8dZYmN4IpaDB3Q4Cfrw9CPkKK61RCnNoghWVf9cVIzRw6W6Ncwvry/s3294/Screenshot%202022-11-12%20at%2018.48.50.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1044" data-original-width="3294" height="202" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhLaCQqrrvnQyoS_mQ432tsndlrcni-xA-NOVThUJYUg0jTGrICBTiqYxKZHJP4hlHyxwg--PxsEJ-so5xS4CSriDelfyOrp2cdTtnViM7aOqz7xzdomK3yC_ep_QZRGkrCDmp8dZYmN4IpaDB3Q4Cfrw9CPkKK61RCnNoghWVf9cVIzRw6W6Ncwvry/w640-h202/Screenshot%202022-11-12%20at%2018.48.50.png" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">We will start connecting via .NET code in next article.</div><br /><div><br /><p style="text-align: justify;"><br /></p></div>Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com0tag:blogger.com,1999:blog-1789652241742584675.post-22727372362266228872022-10-23T21:50:00.004+05:302022-10-23T21:50:31.211+05:304 Takeaways from Azure Savings Plan for Compute<p style="text-align: justify;">Purchasing consumption in advance can be extremely effective not only considering the large discounts get applied. With the business market trends that are fluctuating and swinging at such an unpredicted fashion and the market forces are unknown to which be accounted in, having a 3 year predictability is a bonus. Reserved instances have been very helpful with Azure but it came with certain limitations. Here are my top 4 takeaways from Azure Savings Plan for Compute. </p><p style="text-align: justify;">1. More flexibility over Reserved Instances</p><p style="text-align: justify;">Reserved instances came with a few restrictions that were not much capable of moving things around. Even some of the available flexibility will be reduced by next year. Savings Plan for Compute can be activated at many different scopes and can be changed even after purchase. Also it allows using a vast range of services ranging from Azure Functions (Premium, Dedicated) to VMs to VMSS. </p><p style="text-align: justify;">Nevertheless, Reserve Instances are unannounced to be decommissioned anytime soon.</p><p style="text-align: justify;"><span></span></p><a name='more'></a>2. Not as cheap as Reserved Instances<p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOrWtv5-qrhgcNTFGdW1lOCvHuRfsz6PkP71f2f4lr02BWwzp_Xw8N08wiS5jeNK8HdXxDfb78Pg0INPjkqWLahatol8DkIM42r4h-I05md2sjcb7L79J2XCTkvl_YIBaL6s7_LCSh377xzKYgVuqQk4NQkVcwmVuNY6lQgM9GO1wR2WnwaCZmx4ex/s1648/Screenshot%202022-10-23%20at%2018.05.17.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="848" data-original-width="1648" height="165" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOrWtv5-qrhgcNTFGdW1lOCvHuRfsz6PkP71f2f4lr02BWwzp_Xw8N08wiS5jeNK8HdXxDfb78Pg0INPjkqWLahatol8DkIM42r4h-I05md2sjcb7L79J2XCTkvl_YIBaL6s7_LCSh377xzKYgVuqQk4NQkVcwmVuNY6lQgM9GO1wR2WnwaCZmx4ex/s320/Screenshot%202022-10-23%20at%2018.05.17.png" width="320" /></a></div><div class="separator" style="clear: both; text-align: left;">Although Savings Plan is more flexible, conceptually and purposefully reserved instances are managed in differently. So the pricing models are different and as of now, Savings Plan is less discounted than reserved instances for all the compute options I calculated where both can be applied. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">3. Only consumption is discounted</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">As shown in the image above, OS and other relevant non-compute costs are not accounted when pricing. For example, if you are an enterprise customer and you can use Azure Hybrid benefits for licensing, that is accounted differently. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Also as shown in the image below (image credit: Microsoft), anything unaccounted for is not carried forward and anything over-consumed are calculated on pay-as-you-go pricing. Checks are carried out hourly.</div><div class="separator" style="clear: both; text-align: left;"><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhio4l6nFbC0s6VNQl5XipFImrRCdhk5hjo-l6Urwqb-ivJF3tF6j6joYoc2KGIK3n1LJB6rbfWdru-K61sMP13aPp1AXu3jU-Q5IQT3SskEuYLzjg0somCoIwvUDpUF8gRNv7aztoKA3MD3hZQHWiNUC80CyWjVX3QHRpscN109oXBf2K4JwagRScJ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="782" data-original-width="1250" height="200" src="https://blogger.googleusercontent.com/img/a/AVvXsEhio4l6nFbC0s6VNQl5XipFImrRCdhk5hjo-l6Urwqb-ivJF3tF6j6joYoc2KGIK3n1LJB6rbfWdru-K61sMP13aPp1AXu3jU-Q5IQT3SskEuYLzjg0somCoIwvUDpUF8gRNv7aztoKA3MD3hZQHWiNUC80CyWjVX3QHRpscN109oXBf2K4JwagRScJ" width="320" /></a></div><div class="separator" style="clear: both; text-align: left;">Eventually this might raise a few alarms as shutting down VMs or scaling down a Kubernetes cluster will not have a pricing benefit. This is why planning your organisation's FinOps is critical. </div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">4. Easy to setup</div><div class="separator" style="clear: both; text-align: left;"><br /></div>As shown in the image below, you can easily get started from the Azure Portal and start adding a plan. Also the billing can be done upfront or monthly based on preference. <br /><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicvogZfWOPT2frf84_nGiIY2Uqt4QqpixxiIviEAJYgZ_-feT5Ye4ygtVFD6pQOeqLGf95qAfWC7unJW7YEld8u5esIOtNgJZ7oFj6PHMU9mEiKyVWkUu9S9zseEoPs4efmCkrE0PMJTlCPuKITsJD_ESI3sbwm__58ZgmcARmohLT_rdAua1CgqA0/s2002/Screenshot%202022-10-23%20at%2018.14.04.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" data-original-height="1466" data-original-width="2002" height="234" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEicvogZfWOPT2frf84_nGiIY2Uqt4QqpixxiIviEAJYgZ_-feT5Ye4ygtVFD6pQOeqLGf95qAfWC7unJW7YEld8u5esIOtNgJZ7oFj6PHMU9mEiKyVWkUu9S9zseEoPs4efmCkrE0PMJTlCPuKITsJD_ESI3sbwm__58ZgmcARmohLT_rdAua1CgqA0/s320/Screenshot%202022-10-23%20at%2018.14.04.png" width="320" /></a></div><br />Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com0tag:blogger.com,1999:blog-1789652241742584675.post-45986398283537902802022-10-12T01:36:00.002+05:302022-10-12T01:36:16.684+05:30Service Connectors in Azure App Services<p style="text-align: justify;">Are we ready to say bye to the connection strings when connecting to a database? Yes we were when the managed identities came in. It reduced the hassle of storing connection strings with passwords and provided the opportunity for the infra team to set them up. All the developers have to setup is the url and the authentication mechanism. </p><p style="text-align: justify;">Service connectors just allow regulate these connections in a much better way. It is a feature add-on that available for App Services, Container Apps and Spring Apps. There are multiple targeted services that include DB services and necessary Azure services. </p><p style="text-align: justify;">Creating a connection in Portal is simple as a few clicks. Although the same can be done with Azure CLI.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-57NhyGWO6YOlKK0CFRPwf7HHgntfIVqiDBY1e0lJkrrT_P_9ps_0NrC9CpgPuKy830vgUSxkirJy87UF23_AfV2Ra7Q8_K8-41s5AGmMMAnMMpocELDLdccNFNnX_nHpXAAki00U532X6TA2LqOSGVf4N2Zuy4CVJNgRyJ4n7Qo5UyPkqVsaW0YL/s1748/Screenshot%202022-10-11%20at%2021.47.16.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1382" data-original-width="1748" height="253" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj-57NhyGWO6YOlKK0CFRPwf7HHgntfIVqiDBY1e0lJkrrT_P_9ps_0NrC9CpgPuKy830vgUSxkirJy87UF23_AfV2Ra7Q8_K8-41s5AGmMMAnMMpocELDLdccNFNnX_nHpXAAki00U532X6TA2LqOSGVf4N2Zuy4CVJNgRyJ4n7Qo5UyPkqVsaW0YL/s320/Screenshot%202022-10-11%20at%2021.47.16.png" width="320" /></a></div><span><a name='more'></a></span><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">Depending on the target service selected, authentication option will be available. </div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioZ41uYVjCC9EBjOeXGHWOhFi20Y42d3p3V7bqZo03Wo0R2HvpxT8PdoTgg23oo2yPEZboIrri8XsPXAx435FKxiTDrwcG_9uBVLOLPYQQUTqw6I-8wA6AwROJfAG9FTw3A9sPBtzLamgmhGqNvTrlJdU99DK_mSmJd_a19XC3eh4Hlx_PwEKlTfMu/s1086/Screenshot%202022-10-11%20at%2021.52.59.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="604" data-original-width="1086" height="178" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEioZ41uYVjCC9EBjOeXGHWOhFi20Y42d3p3V7bqZo03Wo0R2HvpxT8PdoTgg23oo2yPEZboIrri8XsPXAx435FKxiTDrwcG_9uBVLOLPYQQUTqw6I-8wA6AwROJfAG9FTw3A9sPBtzLamgmhGqNvTrlJdU99DK_mSmJd_a19XC3eh4Hlx_PwEKlTfMu/s320/Screenshot%202022-10-11%20at%2021.52.59.png" width="320" /></a></div>Finally the networking and validation for the connection.<br /><div class="separator" style="clear: both; text-align: center;"><br /></div><p style="text-align: justify;">As of now, there are limited regions supported, but most of the Americas and Europe are do. </p><p style="text-align: justify;">One of the valuable features within it is monitoring service availability which otherwise has to be done within the application code.</p>Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com0tag:blogger.com,1999:blog-1789652241742584675.post-38244822816991227202022-07-23T18:45:00.003+05:302022-07-23T18:45:19.424+05:30What makes Container Apps easier to begin?<p style="text-align: justify;">Containers will play a major role in enterprise application development in the years to come. Although the terms enterprise and containers together had much love-hate relationship over the skill gaps with container operations such as Kubernetes, that gap has been significantly reduced with the introduction of cloud capabilities such as Azure Kubernetes Services(AKS). </p><p style="text-align: justify;">It still makes it difficult as orchestration is still a learning curve. This is simplified with the recent release with the Azure Container Apps. I see quite a lot of advantages over other options for hosting containers. </p><p style="text-align: justify;">1. Easy to begin.</p><p style="text-align: justify;">2. Networking boundaries can be defined. </p><p style="text-align: justify;">3. Ingress can be controlled. </p><p style="text-align: justify;">4. Revisions can be managed. </p><span><a name='more'></a></span><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmhwtHpEjH8cg6vfkxdO0OZrQFTS9xtdhGUKrH-RW2btALhQh4JILR25UhGhV6xNhoGwae67P_YQCt2TByO7FcwDzjuoXjKpaEPBnl9DV8iscwttIsBHzZOYjLsJGWwxlMjGPTP0KYIi4T3ybo058AP9Xi6Vx_V7xQOVelWQPmnJLWSZSq3TFO5z9g/s1556/Screenshot%202022-07-23%20at%2013.18.04.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1556" data-original-width="1362" height="400" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgmhwtHpEjH8cg6vfkxdO0OZrQFTS9xtdhGUKrH-RW2btALhQh4JILR25UhGhV6xNhoGwae67P_YQCt2TByO7FcwDzjuoXjKpaEPBnl9DV8iscwttIsBHzZOYjLsJGWwxlMjGPTP0KYIi4T3ybo058AP9Xi6Vx_V7xQOVelWQPmnJLWSZSq3TFO5z9g/w350-h400/Screenshot%202022-07-23%20at%2013.18.04.png" width="350" /></a></div><p style="text-align: justify;">It is very much easy to begin as you need to have only 3 things in mind when getting started. </p><p style="text-align: justify;">1. Create container app environment. </p><p style="text-align: justify;">2. Create container app. </p><p style="text-align: justify;">3. Specify container image. </p><p style="text-align: justify;">In enterprise context, the vNet integrations will come into play and even they are very easy to begin with.</p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt6xQi2Q1FS9rBqjqpBDZnd0ZE698HOTHBiMuhCIL95cAdTtNnqj0KyygVfYcGz59utHLTyBvfGdhd470Ds3ZSm7m8HdtCufvA92x1nPtDTQ8P8QVEEoVe7I8lFjc4ewcEvOUK59yA3USGDh1IS4_dlj2weL1xrFbrn_8flaNd8plDP6EkjI4PWDH2/s2346/Screenshot%202022-07-23%20at%2015.11.00.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1030" data-original-width="2346" height="280" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt6xQi2Q1FS9rBqjqpBDZnd0ZE698HOTHBiMuhCIL95cAdTtNnqj0KyygVfYcGz59utHLTyBvfGdhd470Ds3ZSm7m8HdtCufvA92x1nPtDTQ8P8QVEEoVe7I8lFjc4ewcEvOUK59yA3USGDh1IS4_dlj2weL1xrFbrn_8flaNd8plDP6EkjI4PWDH2/w640-h280/Screenshot%202022-07-23%20at%2015.11.00.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;">Ingress controlling is very much simplified as it can be enabled to either be container apps environment specific, vNet or public. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPDn_kYa2Ea7fX2iAGhf8GkrAQydiCPi3-XWJHiG0ge5HLqDf5vY2ep2ICsSvzfa3utKAzvrdC8I8W7etN7NU1n7lo1dBo8fODH6OHxHHCuifGt-GRiE3oMb4EMphXFiSzehQVlbpaK1_aG2Yoz7Gp0GamJU02nbNOzUaikrmyxKIwzhFxd93l4X8K/s2774/Screenshot%202022-07-23%20at%2015.12.36.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="576" data-original-width="2774" height="132" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPDn_kYa2Ea7fX2iAGhf8GkrAQydiCPi3-XWJHiG0ge5HLqDf5vY2ep2ICsSvzfa3utKAzvrdC8I8W7etN7NU1n7lo1dBo8fODH6OHxHHCuifGt-GRiE3oMb4EMphXFiSzehQVlbpaK1_aG2Yoz7Gp0GamJU02nbNOzUaikrmyxKIwzhFxd93l4X8K/w640-h132/Screenshot%202022-07-23%20at%2015.12.36.png" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;">Revision management is much simpler as shown in the screenshot above. You can even have multiple revisions and manage the traffic allocation in between. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">It takes just minutes to get an environment bootstrapped and enjoy hosting your containers simply on the cloud. Why just wait?</div>Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com0tag:blogger.com,1999:blog-1789652241742584675.post-44447038200344847322022-06-25T00:40:00.000+05:302022-06-25T00:40:00.814+05:30Azure Compute Decision Tree Simplification for Modern Applications<p style="text-align: justify;">Azure Compute Decision Tree is a simplified decision making assistant that lets you decide which compute resources to choose based on your compute requirements. It is a comprehensive decision tree considering the lift and shifts and new developments. But developing new applications are much simpler given most services support multiple runtimes as well as containerisation. </p><h4 style="text-align: justify;">Azure Functions</h4><p style="text-align: justify;">Ideal for event-driven short live processes such as HTTP requests, multiple service triggers or simpler schedulers. Gives you ability to host as managed code as well as containers. So if you are thinking of long term expansions, containers is an option to consider. </p><p style="text-align: justify;">Functions is a famous option when you pay for number of executions which is available with Standard pricing. But if you need to extend networking you have to select another pricing level. </p><h4 style="text-align: justify;"><span><a name='more'></a></span>Azure App Services</h4><p style="text-align: justify;">Ideal for web applications as can easily connected with custom domains and have the ability to use deployment slots. Getting started with a web app hosting does not get easier than this. Supports multiple language runtimes as well. </p><h4 style="text-align: justify;">Azure Container Apps</h4><p style="text-align: justify;">Being the newest member amongst the options, it can be considered one of the most effective services considering it is crafted to modern business needs. It runs on Kubernetes and allows all the networking features while allowing state of the art canary based deployments. Biggest advantage is not needing to have much Kubernetes knowledge. I see lot of new applications adopting to Container Apps.</p><h4 style="text-align: justify;">Azure Kubernetes Services</h4><p style="text-align: justify;">Of course the biggest of the hosting options where you get full orchestration capabilities and access to Kubernetes API to interact with. If your application is large and have higher demands for resources and complexity, AKS would be the best option. Apart from AKS, as an alternative RedHat Openshift is also available. </p><p style="text-align: justify;">The full view of the Compute Decision tree is available below: Image credits - Microsoft</p><p style="text-align: justify;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjASlhcN83_TSovJDwoF4c2TXFtKr-fXd6G-BL3RuEkA6OBVQH8bbHCN2sak91gtUOs7ngprPS1GE14t_fm06KjJYTlY9EhRHombM0amPiZXJYoeXOiVhjxCd7J0sw5Wm_T-UQVQ2UeAF2VAn_lL35ypRQE6_9Mp5ql8OHZcDJg4NK7F2sfsnDtIGdJ" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="1559" data-original-width="1345" height="400" src="https://blogger.googleusercontent.com/img/a/AVvXsEjASlhcN83_TSovJDwoF4c2TXFtKr-fXd6G-BL3RuEkA6OBVQH8bbHCN2sak91gtUOs7ngprPS1GE14t_fm06KjJYTlY9EhRHombM0amPiZXJYoeXOiVhjxCd7J0sw5Wm_T-UQVQ2UeAF2VAn_lL35ypRQE6_9Mp5ql8OHZcDJg4NK7F2sfsnDtIGdJ=w345-h400" width="345" /></a></div><br /><br /><p></p>Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com0tag:blogger.com,1999:blog-1789652241742584675.post-16004051868942444212022-03-07T02:33:00.001+05:302022-03-07T02:33:12.743+05:30What are CIS Hardened Images on Azure?<p>Center of Internet Security (CIS) is a non-profit organisation that is intended to provide best practices. related to security threats. They do provide benchmarks and standards that are industry accepted and can be used to ensure the cloud resources are secured to a greater extend. CIS has worked with leading cloud vendors to bring the Virtual Machine image templates that. </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjmNfXDnYYjZq1boctNcPu5JcOmHhZlQmDG8tjmsyiMjRsuCMiET0kBrtJUjmPcIAXhFmPtCUV6LeQECt0VtNk7jO65mcrsxsIijW0J96e3gFjqgy2_IbB-9vK3VnT4pQFsuiBd4NDlwmL51X6hr3_L8EA3seQWXIQsqrR3-yNjqH-23xDigYKQYSZa=s2912" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1834" data-original-width="2912" height="405" src="https://blogger.googleusercontent.com/img/a/AVvXsEjmNfXDnYYjZq1boctNcPu5JcOmHhZlQmDG8tjmsyiMjRsuCMiET0kBrtJUjmPcIAXhFmPtCUV6LeQECt0VtNk7jO65mcrsxsIijW0J96e3gFjqgy2_IbB-9vK3VnT4pQFsuiBd4NDlwmL51X6hr3_L8EA3seQWXIQsqrR3-yNjqH-23xDigYKQYSZa=w640-h405" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">You can browse them in the Azure Marketplace via <a href="https://azuremarketplace.microsoft.com/en-us/marketplace/apps?search=center%20for%20internet%20security&page=1&filters=partners%3Bpay-as-you-go" target="_blank">here</a>.</div><br /><p><span></span></p><a name='more'></a>As you can see in the pricing, the service charges additional 0.02 USD per hour. This is informed while deploying the resource and if you are using any partner benefits, that amount is not included and charged separately. <p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEi36o3B8D7VsF3IiAzWJzywfXKXSqra72b1eE9VExSJ8J6thkU8i6IshBay8UCcea7ee6Ybu1Mw_zIyrEoPWB90gUc0gNHYsYNvTlPG7CElL8NYyJIX2Yr8mjPVdXEh8wZw9v4VugyEfGKI_f5adP-ZCVTJ_m_2APlnyZinRBBwNpil4OXpsT7YfR6s=s1658" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="914" data-original-width="1658" height="352" src="https://blogger.googleusercontent.com/img/a/AVvXsEi36o3B8D7VsF3IiAzWJzywfXKXSqra72b1eE9VExSJ8J6thkU8i6IshBay8UCcea7ee6Ybu1Mw_zIyrEoPWB90gUc0gNHYsYNvTlPG7CElL8NYyJIX2Yr8mjPVdXEh8wZw9v4VugyEfGKI_f5adP-ZCVTJ_m_2APlnyZinRBBwNpil4OXpsT7YfR6s=w640-h352" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div>There are recommended images by the publisher for each image chosen.<div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjk2n4yyp94YEivNtCjMOUKbvsmSkX6NPJN2OgpKzTeJOWZBHskQt7BemFekjbD8Mh0EuVPoH5BzldA4xJvyMOZkJe8EVRD9-aIzlyEJfBc2rTKTRX3_sGH2uA2SsSjC8XSRFs3nw9KWfJ5_75BQ6OiA5dKyg0tIPC1LclFcWRbFHNmqPoyV9KYIBM3=s1638" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="814" data-original-width="1638" height="318" src="https://blogger.googleusercontent.com/img/a/AVvXsEjk2n4yyp94YEivNtCjMOUKbvsmSkX6NPJN2OgpKzTeJOWZBHskQt7BemFekjbD8Mh0EuVPoH5BzldA4xJvyMOZkJe8EVRD9-aIzlyEJfBc2rTKTRX3_sGH2uA2SsSjC8XSRFs3nw9KWfJ5_75BQ6OiA5dKyg0tIPC1LclFcWRbFHNmqPoyV9KYIBM3=w640-h318" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><div><br /><p><br /></p></div>Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com0tag:blogger.com,1999:blog-1789652241742584675.post-50582707539215017902022-02-27T19:08:00.002+05:302022-02-27T19:08:14.696+05:30Using Application Insights Rest API<p style="text-align: justify;">Application Insights itself has great set of features that allows consumers to do many analysis on the application performance and monitoring. But there can be situations where you do need to find them located outside in external web applications. This is simplified by having support for different APIs and libraries to access Application Insights. In this article, we will focus on the REST API. </p><h3 style="text-align: justify;">Step 1: Aquire an API Access Key</h3><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj2MJ9FOcHfFRFpV7KgCxrWqOQ6nmygOdkCXbwQSgxcwtMcOau7RRzt9MlgWflo5m4fOLFoD2vf34E7LitDNxKdZ1IkGAvg0BB6mFI4KntTMU-BY_2nHzwlE553lWWFuS8V0inmY2ByjXGcLgeJvRTPkHP8aLB1_slQTU7ynHcUYVX_JAzmDsDPhbRT=s1708" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1202" data-original-width="1708" height="281" src="https://blogger.googleusercontent.com/img/a/AVvXsEj2MJ9FOcHfFRFpV7KgCxrWqOQ6nmygOdkCXbwQSgxcwtMcOau7RRzt9MlgWflo5m4fOLFoD2vf34E7LitDNxKdZ1IkGAvg0BB6mFI4KntTMU-BY_2nHzwlE553lWWFuS8V0inmY2ByjXGcLgeJvRTPkHP8aLB1_slQTU7ynHcUYVX_JAzmDsDPhbRT=w400-h281" width="400" /></a></div><div class="separator" style="clear: both; text-align: left;"><span><a name='more'></a></span>Navigate to Application Insights instance and API Access tab on the left and Create an API Key. Make note of the 'Application ID' as it will be used in query string.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgmrSXxNpnX6TXqiEtlFKOu-NGs4QOh4EeiAkc9De3gUo-dVHSYQj47Ep221IRkXNCAZXdWkiNzNVIpQP5yqaYOz9MibgR_qaRvzdzy5E5TX0GBKnD8zFYZgAPlG7QdWl2PRWR48itCRsHrewtegXMQ-OZZ5VLBERvYA2mUl55uh8SCOgztlU-PYowM=s1124" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1014" data-original-width="1124" height="362" src="https://blogger.googleusercontent.com/img/a/AVvXsEgmrSXxNpnX6TXqiEtlFKOu-NGs4QOh4EeiAkc9De3gUo-dVHSYQj47Ep221IRkXNCAZXdWkiNzNVIpQP5yqaYOz9MibgR_qaRvzdzy5E5TX0GBKnD8zFYZgAPlG7QdWl2PRWR48itCRsHrewtegXMQ-OZZ5VLBERvYA2mUl55uh8SCOgztlU-PYowM=w400-h362" width="400" /></a></div><div class="separator" style="clear: both; text-align: left;">As our purpose is to read telemetry, we will opt just for that and generate the key. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><h3 style="clear: both; text-align: left;">Step 2: Setup the Key</h3><div class="separator" style="clear: both; text-align: left;">As this is an example attempt, I will use Postman to demonstrate the POST Request on REST Api. Next step will be to setup the authorization key as a header. You need to set the application ID in the url to construct the url. </div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEimg58HDpr3kyA1AcipI8Z8SVkUBE0zBEtT4eU5Kp5j0RXn9PfI6FwdvKSClGugH54o4EybVtHB7Zr3dztONkrlgeX4jfD84SXLDbmvTtYSiunQD-FUYkp078fTrQa308drhdaTbelFc_O5hDcPa7yXE_lcBpLdRiV6OlY94txAia7aav0KSXWFlRdF=s2502" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1590" data-original-width="2502" height="254" src="https://blogger.googleusercontent.com/img/a/AVvXsEimg58HDpr3kyA1AcipI8Z8SVkUBE0zBEtT4eU5Kp5j0RXn9PfI6FwdvKSClGugH54o4EybVtHB7Zr3dztONkrlgeX4jfD84SXLDbmvTtYSiunQD-FUYkp078fTrQa308drhdaTbelFc_O5hDcPa7yXE_lcBpLdRiV6OlY94txAia7aav0KSXWFlRdF=w400-h254" width="400" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><h3 style="clear: both; text-align: left;">Step 3: Setup Request Body</h3><div class="separator" style="clear: both; text-align: left;">This is the simplest step if you are familiar with querying Application Insights. You can specify the Kusto Query Language (KQL) syntax in the body and get the response. Also I have setup timespan as P1D, where it defines the duration of data to be queried from. </div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhD41Nwy7tKia1eLfC7YHkzjhXUAAxPAn9L3rNjNNDX_scMMOl_84eVPpbx-KgY4tZj8SxOkPVjhXugAxqdIyNtMgHMnAGvFxBeMbcadV4pCkz_LD1rJkwFNvw6WiBfc3fqFgxAM9IOMWqQ1DtOe7ZE4QzXwEHZmBghl-YCao4diTdIKKR77AVDsksj=s1638" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="644" data-original-width="1638" height="253" src="https://blogger.googleusercontent.com/img/a/AVvXsEhD41Nwy7tKia1eLfC7YHkzjhXUAAxPAn9L3rNjNNDX_scMMOl_84eVPpbx-KgY4tZj8SxOkPVjhXugAxqdIyNtMgHMnAGvFxBeMbcadV4pCkz_LD1rJkwFNvw6WiBfc3fqFgxAM9IOMWqQ1DtOe7ZE4QzXwEHZmBghl-YCao4diTdIKKR77AVDsksj=w640-h253" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;">In this example I have requested all requests, but you can look for multiple filters by constructing a WHERE query as per KQL syntax. </div><br /><div class="separator" style="clear: both; text-align: left;"><br /></div><br /><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><br />Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com2tag:blogger.com,1999:blog-1789652241742584675.post-5889555063267590552022-02-14T00:30:00.002+05:302022-02-14T00:30:08.862+05:30What is Bridge to Kubernetes?<p>Azure Dev Spaces was the choice for setup micro service based multi-branched developer environments on Azure. As it is retiring, Bridge to Kubernetes comes in as a replacement for Dev Spaces. It is said to be light weight as it runs as extensions to Visual Studio and VS Code. </p><p></p><div class="separator" style="clear: both; text-align: center;"><br /></div><b>Problem Statement</b><p></p><p>In a world where solutions are distributed for multiple micro-services, it is important to have the agility to be part of teams where everyone rapidly contributes to solution changes. Gone are the days where we stay for a Pull Request to complete, sync code and run on our local environments. Bridge to Kubernetes provides to keep everything synced in and work on only the required portion of the code once branched. </p><p><b><span></span></b></p><a name='more'></a><b>Solution</b><p></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgkMisqfNNTUYdG0CYitdSiiOtKcxs77okpOY_0ZYs6LIwaxDpjrHKik_7KezBsDpQXvUJj1DNNheWxJ2QHrLuhkxDrOzd2hdxKwMefqOIFqydYMAuTVsyfns0ssdi-VM2jB7-fKiJeWRlZWOajvWTPEoosI2Jxs7xYBDRABl3c4v1HTlGmqIfZaE0l=s1624" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="456" data-original-width="1624" height="181" src="https://blogger.googleusercontent.com/img/a/AVvXsEgkMisqfNNTUYdG0CYitdSiiOtKcxs77okpOY_0ZYs6LIwaxDpjrHKik_7KezBsDpQXvUJj1DNNheWxJ2QHrLuhkxDrOzd2hdxKwMefqOIFqydYMAuTVsyfns0ssdi-VM2jB7-fKiJeWRlZWOajvWTPEoosI2Jxs7xYBDRABl3c4v1HTlGmqIfZaE0l=w640-h181" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">As per the above image referenced via Microsoft Documentation, the solution has 3 components that are interconnected. These can be micro-services running on on a Kubernetes cluster or at production level can be part of any Paas offering. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Both Sussie and John are working on two different components while they might want to access the well tested and working. So rather than running multiple instances of different components, they can use a common platform and invite even more people in to collaborate. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">In order to run Bridge to Kubernetes, you should not have enabled Azure Dev Spaces on that cluster. Also it currently only supports Linux containers. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Detailed instructions on What is Bridge to Kubernetes and how it can be setup is available <a href="https://docs.microsoft.com/en-us/visualstudio/bridge/overview-bridge-to-kubernetes" target="_blank">here</a>. </div><div class="separator" style="clear: both; text-align: left;">How to setup Bridge to Kubernetes on Visual Studio is explained in detail <a href="https://docs.microsoft.com/en-us/visualstudio/bridge/bridge-to-kubernetes-vs" target="_blank">here</a>. </div><div class="separator" style="clear: both; text-align: center;"><br /></div><br /><p><br /><br /></p>Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com0tag:blogger.com,1999:blog-1789652241742584675.post-79923901298200364742022-01-16T02:55:00.003+05:302022-01-16T02:55:19.158+05:30Bicep Setup for Log Analytics and App Insights<p style="text-align: justify;">Bicep makes us human again. After all Json ARM templates, we can now write something with less brackets. I have written a few articles on Bicep and some templates related to APIM before as well. In this article, I will explain how to setup a Log Analytics workspace and bind App Insights instances to it. </p><p style="text-align: justify;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7anOCzrhq4-lHjlhbBcwWzqQDSI-W2McARs-LMcdRyW9ijGiwnO5ZT9JXXHeK0vJogrzg52A-7p7oHUlZuTaaGLi0TWS2VVd7YN91dMCdIhlCpF3RQU1miT16-AZYvyAsynLBpJijeoM/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="415" data-original-width="488" height="340" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj7anOCzrhq4-lHjlhbBcwWzqQDSI-W2McARs-LMcdRyW9ijGiwnO5ZT9JXXHeK0vJogrzg52A-7p7oHUlZuTaaGLi0TWS2VVd7YN91dMCdIhlCpF3RQU1miT16-AZYvyAsynLBpJijeoM/w400-h340/image.png" width="400" /></a></div><h3 style="clear: both; text-align: left;"><span><a name='more'></a></span>Log Analytics Workspace</h3><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Log Analytics Workspace allow to stream logs coming from multiple sources. It is part of Azure Monitor and lets us query all in one.</div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Bicep syntax is as follows: </div><div class="separator" style="clear: both; text-align: left;"><br /></div><p></p><div style="background-color: #000c18; color: #6688cc; font-family: Consolas, 'Courier New', monospace; font-size: 14px; font-weight: normal; line-height: 19px; white-space: pre;"><div><span style="color: #225588;">resource</span><span style="color: #6688cc;"> </span><span style="color: #6688cc;">logAnalyticsWorkspace</span><span style="color: #6688cc;"> </span><span style="color: #22aa44;">'Microsoft.OperationalInsights/workspaces@2020-08-01'</span><span style="color: #6688cc;"> = {</span></div><div><span style="color: #6688cc;"> </span><span style="color: #ddbb88;">name</span><span style="color: #6688cc;">: </span><span style="color: #6688cc;">logAnalyticsNamespaceName</span></div><div><span style="color: #6688cc;"> </span><span style="color: #ddbb88;">location</span><span style="color: #6688cc;">: </span><span style="color: #6688cc;">region</span></div><div><span style="color: #6688cc;"> </span><span style="color: #ddbb88;">properties</span><span style="color: #6688cc;">: {</span></div><div><span style="color: #6688cc;"> </span><span style="color: #ddbb88;">sku</span><span style="color: #6688cc;">: {</span></div><div><span style="color: #6688cc;"> </span><span style="color: #ddbb88;">name</span><span style="color: #6688cc;">: </span><span style="color: #22aa44;">'PerGB2018'</span></div><div><span style="color: #6688cc;"> }</span></div><div><span style="color: #6688cc;"> </span><span style="color: #ddbb88;">retentionInDays</span><span style="color: #6688cc;">: </span><span style="color: #f280d0;">120</span></div><div><span style="color: #6688cc;"> </span><span style="color: #ddbb88;">features</span><span style="color: #6688cc;">: {</span></div><div><span style="color: #6688cc;"> </span><span style="color: #ddbb88;">searchVersion</span><span style="color: #6688cc;">: </span><span style="color: #f280d0;">1</span></div><div><span style="color: #6688cc;"> </span><span style="color: #ddbb88;">legacy</span><span style="color: #6688cc;">: </span><span style="color: #f280d0;">0</span></div><div><span style="color: #6688cc;"> </span><span style="color: #ddbb88;">enableLogAccessUsingOnlyResourcePermissions</span><span style="color: #6688cc;">: </span><span style="color: #225588;">true</span></div><div><span style="color: #6688cc;"> }</span></div><div><span style="color: #6688cc;"> }</span></div><div><span style="color: #6688cc;">}</span></div></div><div class="separator" style="clear: both; text-align: left;"><!--StartFragment--><!--EndFragment--></div><p style="text-align: justify;"></p><h3 style="clear: both; text-align: left;">Application Insights</h3><div class="separator" style="clear: both; text-align: left;">Application Insights is an Application Performance Management tool that lets you monitor requests, log custom messages. It used to work alone, but now it can be streamed to a Log Analytics Workspace with the simplest configurations. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><p></p><div style="background-color: #000c18; color: #6688cc; font-family: Consolas, 'Courier New', monospace; font-size: 14px; font-weight: normal; line-height: 19px; white-space: pre;"><div><span style="color: #225588;">resource</span><span style="color: #6688cc;"> </span><span style="color: #6688cc;">appInsights</span><span style="color: #6688cc;"> </span><span style="color: #22aa44;">'Microsoft.Insights/components@2020-02-02'</span><span style="color: #6688cc;"> = {</span></div><div><span style="color: #6688cc;"> </span><span style="color: #ddbb88;">name</span><span style="color: #6688cc;">: </span><span style="color: #6688cc;">appInsightsName</span></div><div><span style="color: #6688cc;"> </span><span style="color: #ddbb88;">location</span><span style="color: #6688cc;">: </span><span style="color: #6688cc;">region</span></div><div><span style="color: #6688cc;"> </span><span style="color: #ddbb88;">kind</span><span style="color: #6688cc;">: </span><span style="color: #22aa44;">'string'</span></div><div><span style="color: #6688cc;"> </span><span style="color: #ddbb88;">tags</span><span style="color: #6688cc;">: {</span></div><div><span style="color: #6688cc;"> </span><span style="color: #ddbb88;">displayName</span><span style="color: #6688cc;">: </span><span style="color: #22aa44;">'AppInsight'</span></div><div><span style="color: #6688cc;"> </span><span style="color: #ddbb88;">ProjectName</span><span style="color: #6688cc;">: </span><span style="color: #6688cc;">appName</span></div><div><span style="color: #6688cc;"> }</span></div><div><span style="color: #6688cc;"> </span><span style="color: #ddbb88;">properties</span><span style="color: #6688cc;">: {</span></div><div><span style="color: #6688cc;"> </span><span style="color: #ddbb88;">Application_Type</span><span style="color: #6688cc;">: </span><span style="color: #22aa44;">'web'</span></div><div><span style="color: #6688cc;"> </span><span style="color: #ddbb88;">WorkspaceResourceId</span><span style="color: #6688cc;">: </span><span style="color: #22aa44;">'/subscriptions/</span><span style="color: #225588;">${</span><span style="color: #ddbb88;">subscription</span><span style="color: #225588;">(</span><span style="color: #225588;">)</span><span style="color: #225588;">.</span><span style="color: #22aa44;">subscriptionId</span><span style="color: #225588;">}</span><span style="color: #22aa44;">/resourceGroups/</span><span style="color: #225588;">${</span><span style="color: #ddbb88;">resourceGroup</span><span style="color: #225588;">(</span><span style="color: #225588;">)</span><span style="color: #225588;">.</span><span style="color: #22aa44;">name</span><span style="color: #225588;">}</span><span style="color: #22aa44;">/providers/Microsoft.OperationalInsights/workspaces/</span><span style="color: #225588;">${</span><span style="color: #22aa44;">logAnalyticsNamespaceName</span><span style="color: #225588;">}</span><span style="color: #22aa44;">'</span></div><div><span style="color: #6688cc;"> }</span></div><div><span style="color: #6688cc;">}</span></div></div><div class="separator" style="clear: both; text-align: left;"><!--StartFragment--><!--EndFragment--></div><p style="text-align: justify;"></p><div class="separator" style="clear: both; text-align: left;">As you can see, the WorkspaceResourceId parameter has to be configured. This can be used with reference as well.</div><br /><br /><p></p><p style="text-align: justify;"><br /></p>Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com0tag:blogger.com,1999:blog-1789652241742584675.post-34185422638731493912022-01-03T00:55:00.001+05:302022-01-03T00:55:09.882+05:30Understanding the Azure Security Benchmark<p>Security in IT can keep people awake at nights. There are many new services and features introduced to Azure every year. It is not easy to keep a track of everything as an administrator or even as a team. Sudden exploits at any level can cost organisations valuable money and thereafter their credibility. So how can we make sure our services on cloud are secure as best it can get? </p><p>This is answered with Azure Security Benchmark.</p><p>There are three main guidelines provide security standards. </p><p></p><ol style="text-align: left;"><li>Center of Internet Security (CIS)</li><li>National Institute of Standards and Technology (NIST)</li><li>Payment Card Industry Data Security Standards (PCI - DSS)</li></ol><p></p><p><span></span></p><a name='more'></a>Azure Security Benchmark assigns relevant combinations in each guidelines to 12 different control areas.<p></p><p></p><ol style="text-align: left;"><li>Network Security (NS)</li><li>Identity Management (IM)</li><li>Privileged Access (PA)</li><li>Data Protection (DP)</li><li>Asset Management (AM)</li><li>Logging and Threat Detection (LT)</li><li>Incident Response (IR)</li><li>Posture and Vulnerability Management (PV)</li><li>Endpoint Security (ES)</li><li>Backup and Recovery (BR)</li><li>DevOps Security (DS)</li><li>Governance and Strategy (GS)</li></ol><p></p><div>Inside each control area, there is a list of recommendations with each having a Benchmark ID and more information as shown in the image below. Source: docs.microsoft.com</div><div><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhEQZyUgzoCPnAyGKWyGQmoXuHqYGwv4kJ5ydMQwLtu02pOyCYtLBx6amKh1q1dKmM3KxZoYfhm6dRK1CrAA-qXoS-cSUCKf2La_h3RwiPQr03450OKmqXn0uSinU9aLRItL8amOrMWD55oT_SoYO-yyEK10nKSTQNWBp-RnRX_HyBgPf5pgGRtry1G=s1618" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1092" data-original-width="1618" height="432" src="https://blogger.googleusercontent.com/img/a/AVvXsEhEQZyUgzoCPnAyGKWyGQmoXuHqYGwv4kJ5ydMQwLtu02pOyCYtLBx6amKh1q1dKmM3KxZoYfhm6dRK1CrAA-qXoS-cSUCKf2La_h3RwiPQr03450OKmqXn0uSinU9aLRItL8amOrMWD55oT_SoYO-yyEK10nKSTQNWBp-RnRX_HyBgPf5pgGRtry1G=w640-h432" width="640" /></a></div><br /><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjrX3QtWOfkiE2ZmsA92pVMTK0LZ75z_c4wHCUMs-7vDulHtDgW1FSgn8eYgB-iRCXjIZzpjWysEONsdz1NvLoBhw0vfepuF2cyAlP394Sgd1_0hRRx-Y_iM3_h75Ul3VY1PkWhwxBV6v2zQmH4fIOWgpBNTyLusACcaOW_hmUdSZZMJCKn3vE9BrKv=s1650" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1230" data-original-width="1650" height="478" src="https://blogger.googleusercontent.com/img/a/AVvXsEjrX3QtWOfkiE2ZmsA92pVMTK0LZ75z_c4wHCUMs-7vDulHtDgW1FSgn8eYgB-iRCXjIZzpjWysEONsdz1NvLoBhw0vfepuF2cyAlP394Sgd1_0hRRx-Y_iM3_h75Ul3VY1PkWhwxBV6v2zQmH4fIOWgpBNTyLusACcaOW_hmUdSZZMJCKn3vE9BrKv=w640-h478" width="640" /></a></div><div><br /></div><div>Then each service is mapped to the necessary recommendations applicable to each control. </div><div><br /></div><div>Eg: Cosmos DB can be implemented with following Network Security recommendations. </div><div>NS-1, NS-2, NS-3, NS-4, NS-6, NS-7</div><div>The there are following Identity Management recommendations.</div><div>IM-1, IM-2, IM-3, IM-7</div><div>Likewise, other category recommendations are available based on the service. </div><div>There are some categories which do not have recommendations related to Cosmos DB such as DevOps Security(DS), Governance and Strategy (GS) and etc..</div><div><br /></div><div>However, these are only to guide you towards compliance as Microsoft specially mentions by adopting this you do not become compliant. </div><div><br /></div><p>So how shall we start? Pick the list of resources you have, go one by one and see what are missing. Then plan how you can make them fit into the guidelines. Easy as that.</p>Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com16tag:blogger.com,1999:blog-1789652241742584675.post-86734035118192384762021-12-31T12:52:00.001+05:302021-12-31T12:52:42.887+05:30Plan for Chaos with Azure Chaos Studio<p style="text-align: justify;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-oBq7vB102YDp9RtK38Npa0wIYaTgsS9WJ04Tm6wFPBgRHY3bkGQYRhDO6odUHac90j5iemKrgNsjYTA72LEIGyUmY6OIzCpEeuoRbhjvY2hLVFFmC_6aKhAwOcZqbsCilCCjFrhR0Fo/" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img alt="" data-original-height="300" data-original-width="300" height="240" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg-oBq7vB102YDp9RtK38Npa0wIYaTgsS9WJ04Tm6wFPBgRHY3bkGQYRhDO6odUHac90j5iemKrgNsjYTA72LEIGyUmY6OIzCpEeuoRbhjvY2hLVFFmC_6aKhAwOcZqbsCilCCjFrhR0Fo/" width="240" /></a></div>Two things rule the reliability of a system. Application and infrastructure. Developing applications is not easy but complicated and can be controlled to a certain extent. Things we know works are called features and things we cannot or forgot to fixed will be called known issues. There are many tests you can run to ensure the code works and code + UI = application works. Unit tests, UI tests, automated scripts, you name it. <p></p><p style="text-align: justify;"><br />It is one thing to have a working application. But how about infrastructure? Many thought cloud could make life easier for infrastructure people. It just made life even harder. If things go wrong (chaos happens), there can be very minimal we can do to control. One thing we can do is try to plan for chaos.</p><p style="text-align: justify;">Azure Chaos Studio just allows you to plan and test your infrastructure and prepare to be ready for any unexpected situations. It is not just a signal based simulation. It makes infrastructure fail for real. This makes the worst possible scenarios testable. </p><p style="text-align: justify;"><span></span></p><a name='more'></a>Chaos Engineering is an industry practice where three main steps included.<p></p><p style="text-align: justify;"></p><ol><li>Plan an experiment</li><li>Create a blast radius</li><li>Scale or Squash</li></ol><p></p><p style="text-align: justify;">These allow the teams to find concerns before they happen. Some companies do occupy chaos engineering teams to figure things out before they happen.</p><h3 style="text-align: justify;">So How Does Azure Chaos Studio Works?</h3><p style="text-align: justify;">Azure Chaos Studio evolves around Targets and Experiments. Targets are the resources you might need to test for the Chaos. Currently supported Chaos providers are listed below. This list may increase.</p><p style="text-align: justify;"><a href="https://docs.microsoft.com/en-us/azure/chaos-studio/chaos-studio-fault-providers" target="_blank">Supported Chaos Providers</a><br /></p><p style="text-align: justify;">Once you decided on a Chaos provider, you need to setup an experiment. Experiments can be setup in a very interactive way such there is a designer module. </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEjKWIMZAWS013NNjt9eGOdSfTWvGL6aNwF8r-6DlXPRB36GC3ttSNcGQJ9XxCbvzm2ZrYIfD-_h5NpIEOUsXH1ssQnHtSbwEmEnPhDI_j9R0FHchBXbcwtfMcQU0TsTR9PItYy7EOed1Sx0aV29I7-h5Qbpg4V4W02L7CaedPtP-O1jBt7Tb7p9Kv4h=s3010" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1850" data-original-width="3010" height="394" src="https://blogger.googleusercontent.com/img/a/AVvXsEjKWIMZAWS013NNjt9eGOdSfTWvGL6aNwF8r-6DlXPRB36GC3ttSNcGQJ9XxCbvzm2ZrYIfD-_h5NpIEOUsXH1ssQnHtSbwEmEnPhDI_j9R0FHchBXbcwtfMcQU0TsTR9PItYy7EOed1Sx0aV29I7-h5Qbpg4V4W02L7CaedPtP-O1jBt7Tb7p9Kv4h=w640-h394" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">For example, I can create a Failover in one of my Cosmos DB read regions. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEivHWTa21ramhydxtrEEFpE71fTZwKzwyzDN6noySyR7UQaKH_uE0FtlNZSsanDX-caXgL7WfZrqPWfAcFrPDZekfSs8zhreYqoGPAbMl3TpvgHYXxxxPalfIeTSrGwApQtAbCAJtgWCT_Bg4MqsyXQriiuUP5BlWJKlJ-BQXuZO3Jwrq2Ib-u8FZ6a=s1416" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="994" data-original-width="1416" height="450" src="https://blogger.googleusercontent.com/img/a/AVvXsEivHWTa21ramhydxtrEEFpE71fTZwKzwyzDN6noySyR7UQaKH_uE0FtlNZSsanDX-caXgL7WfZrqPWfAcFrPDZekfSs8zhreYqoGPAbMl3TpvgHYXxxxPalfIeTSrGwApQtAbCAJtgWCT_Bg4MqsyXQriiuUP5BlWJKlJ-BQXuZO3Jwrq2Ib-u8FZ6a=w640-h450" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;">Once an experiment is designed, it creates a managed identity. That managed identity has to be granted access in the Chaos provider. This ensures you do not mess with your production workloads. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><h3 style="clear: both; text-align: left;">What after Chaos?</h3><div class="separator" style="clear: both; text-align: left;">Creating a Chaos is one thing. Recovering from it is another. That part is not there with the designer or may remain manual. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Imagine you make the Cosmos DB instance in East US fail, then your next region must start accepting requests until the East US region come back online. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Imagine a set of Virtual machines fail. Then a load balancer must redirect traffic for the other set of VMs. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Testing these and getting ready for these will make your applications work in better reliable conditions. Azure Chaos Studio is still in preview but it is definitely going to be a part of product engineering in future for sure.</div>Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com1tag:blogger.com,1999:blog-1789652241742584675.post-8423454586115943702021-12-27T02:38:00.001+05:302021-12-27T02:38:53.563+05:30Azure Blueprints to replace ARM Templates?<p style="text-align: justify;"> It is a controversial topic to be discussed. Will Azure Blueprints replace ARM Templates or Bicep? Well, we have been asking too much from ARM Templates. It can be very complexed, not just from the language perspective, but from the organisation perspective. Bicep solves the language complexity, but building a large infrastructure with many policies is always a mess. We can combine ARM templates but chances are multiple teams work in different ones if it is a large organisation. </p><p></p><div class="separator" style="clear: both; text-align: justify;"><a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe3Qi3hI2mO2pveLdpgSkJEHoS8QXWd3hZoFBamJWbbKOTubcMZd_3xcOIYDvjuW3HzudmNzXaLn3GokX6HaHc48jm-aVHo3CPdc0IhH-r80TmQat2Hwq1B5DfLhODctC6ez2oyJMb_U8/" style="margin-left: 1em; margin-right: 1em;"><img alt="" data-original-height="528" data-original-width="998" height="211" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe3Qi3hI2mO2pveLdpgSkJEHoS8QXWd3hZoFBamJWbbKOTubcMZd_3xcOIYDvjuW3HzudmNzXaLn3GokX6HaHc48jm-aVHo3CPdc0IhH-r80TmQat2Hwq1B5DfLhODctC6ez2oyJMb_U8/w400-h211/image.png" width="400" /></a></div><div class="separator" style="clear: both; text-align: justify;"><br /></div><div class="separator" style="clear: both; text-align: justify;">Let me be clear for a second. Blueprints does not replaces ARM templates. If you look at the image above, you may figure out why. </div><p style="text-align: justify;"><span></span></p><a name='more'></a>Azure Blueprints are for managing all the deployments you need for one or more subscriptions at either subscription level or management group level. In a larger organisation you may have defined your management groups based on different requirements. It can be by environment type such as Dev, Test, Prod or by business unit such as Finance, IT, Marketing. <p></p><p style="text-align: justify;">Different levels of organisation resources may need different levels of access. They all can be defined via the Blueprints. If need, permissions can be locked so only blueprint can modify them. ARM templates/ BICEP templates will remain as the deployment module in Blueprint so they can be changed and redeployed when in need. </p><p style="text-align: justify;">You can simply start creating a Blueprint by going to the Azure portal. </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEgUFpkkyJeLnPWaZFBkcXXEnqMORk0W0X51mX8NQPDFSLNad2sqyrIf_dr8uO3QYialK8JSjKq0kDtsQ97ZXDTC3j0jmLNXGPyTMBOTU8uLVRYxns04nYqKC635Nti-C2bav83uHy-jB7LAtqskuPcDrplPL8duUWGGUVvpaFVvxSF64mzUZzzlxB-N=s1946" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1946" data-original-width="1710" height="640" src="https://blogger.googleusercontent.com/img/a/AVvXsEgUFpkkyJeLnPWaZFBkcXXEnqMORk0W0X51mX8NQPDFSLNad2sqyrIf_dr8uO3QYialK8JSjKq0kDtsQ97ZXDTC3j0jmLNXGPyTMBOTU8uLVRYxns04nYqKC635Nti-C2bav83uHy-jB7LAtqskuPcDrplPL8duUWGGUVvpaFVvxSF64mzUZzzlxB-N=w562-h640" width="562" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">As you can see, there are many starter templates to pick from. I have selected the CAF Migration Landing Zone. You can give a name and select the artifacts to be added or modified. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhl9eW1ciUzRyvpj6mOTygr8egzfSbgZXo5Rz5jygiSFf5NJxplepZL701CkMXfSU5KCgXK2MEjXBVcJSBguvkXixNArMChUtuv8w379M6sN6-WfqfBcWP97ecipcVfmUnoQ_E_pppPHrG1UL92eAc16uNYSVBh90SrRXOrECNr0EHlSQRLLfce2FAX=s3344" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1836" data-original-width="3344" height="352" src="https://blogger.googleusercontent.com/img/a/AVvXsEhl9eW1ciUzRyvpj6mOTygr8egzfSbgZXo5Rz5jygiSFf5NJxplepZL701CkMXfSU5KCgXK2MEjXBVcJSBguvkXixNArMChUtuv8w379M6sN6-WfqfBcWP97ecipcVfmUnoQ_E_pppPHrG1UL92eAc16uNYSVBh90SrRXOrECNr0EHlSQRLLfce2FAX=w640-h352" width="640" /></a></div><div class="separator" style="clear: both; text-align: center;"><br /></div><div class="separator" style="clear: both; text-align: left;">Once all the necessary artifacts are selected and policies are defined, I can save it as a draft. You can select to publish the Blueprint or make any revisions as necessary. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEj9UVKDuvlzORqRmj0oVCsxVTUit7siP0K9omX-FutFk_A7zicGvHyeo5ZNLw6eClJf0xawbjfM5nDolLMmHfBWCS57QdGddBGBsIipEVmMSeVaVomaxJ42sDCWnxLY86Jfae6X6aMdK7olIKnHeCo8zK3iE8gVX4V1UEPPWY9txDVqj_SV8Rwpi8E3=s2556" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="712" data-original-width="2556" height="178" src="https://blogger.googleusercontent.com/img/a/AVvXsEj9UVKDuvlzORqRmj0oVCsxVTUit7siP0K9omX-FutFk_A7zicGvHyeo5ZNLw6eClJf0xawbjfM5nDolLMmHfBWCS57QdGddBGBsIipEVmMSeVaVomaxJ42sDCWnxLY86Jfae6X6aMdK7olIKnHeCo8zK3iE8gVX4V1UEPPWY9txDVqj_SV8Rwpi8E3=w640-h178" width="640" /></a></div><div class="separator" style="clear: both; text-align: left;">All the Blueprint definitions and assigned Blueprints can be accessed easily. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">Overall it makes the resources more manageable and take away the needs for large ARM template definitions. Also a single plane of control is provided so there is just one place to manage things. </div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;">So why wait? Just tryout today.</div><br /><div class="separator" style="clear: both; text-align: left;"><br /></div><br /><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><div class="separator" style="clear: both; text-align: left;"><br /></div><p style="text-align: justify;"><br /></p><p></p>Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com0tag:blogger.com,1999:blog-1789652241742584675.post-2181967372196542492021-12-22T23:49:00.004+05:302021-12-22T23:49:45.358+05:30How to use Azure Spot VMs?<p style="text-align: justify;"> There are instances where you need high availability for regular workloads. But there are also instances where you do not need availability all the time. Imagine having a test environment, things can wait. Late night batch processes might not need very high availability. On the other hand, these batch processes can be compute expensive. If you are to have a separate instance allocated, that might cost considerably higher. </p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEhPqtupI1IiCNSKBoOyE8feTpbMJBtrBokHB2t84jYUYK45jbgDm-1sQ05V-mwZ3bGqDQM71hLP3Mo9ACGJtC1oR-AamaniSN6shV7V1nnTBUO4Jz4bHsDzqCZStaNUsupkMmoiNgGR5iZrqt0W4Nb7GioFyoAosT2Q0m1b1KLC1ndJp09m_z7wq87H=s1258" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="602" data-original-width="1258" height="306" src="https://blogger.googleusercontent.com/img/a/AVvXsEhPqtupI1IiCNSKBoOyE8feTpbMJBtrBokHB2t84jYUYK45jbgDm-1sQ05V-mwZ3bGqDQM71hLP3Mo9ACGJtC1oR-AamaniSN6shV7V1nnTBUO4Jz4bHsDzqCZStaNUsupkMmoiNgGR5iZrqt0W4Nb7GioFyoAosT2Q0m1b1KLC1ndJp09m_z7wq87H=w640-h306" width="640" /></a></div><br /><span><a name='more'></a></span><p style="text-align: justify;"><br />What if we can use something 'leftover' in Azure to have a reduced cost mechanism? That is where Azure Spot VMs come in. </p><p style="text-align: justify;">Azure data centres leave some spaces for expansion. There are plenty of free capacity in these data centres that are not fully utilised, but may be needed at some point. These excess capacity is available for a cheaper price as Azure Spot VMs. These are not SLA backed so should not be used for workloads that require consistent availability. </p><p style="text-align: justify;">What happens is whenever Azure need the resources, it will evict your VM within 30 seconds of notice given via Azure Scheduled events. </p><p style="text-align: justify;">There are two types of evictions. </p><p style="text-align: justify;"></p><ol><li>Capacity Only</li><li>Price or Capacity</li></ol><p></p><p style="text-align: justify;">Let us do some maths. I am considering a Windows VM Instance of following specifications. </p><p style="text-align: justify;"></p><ul><li>Size: Standard D2 V2 - 7 GB Memory</li><li>Location: East US</li><li>Price: 106.58 USD/month ~ 0.148 USD/hr</li></ul><p></p><p style="text-align: justify;">At capacity or price only eviction type, you can set cost any above 0.058 USD/hr. That is the basic minimum hardware cost and also 39% of the standard price. If you select capacity only eviction type, this price will be 0.146 USD/hr as shown in screenshot above but will be charged only to the time it is used. </p><p style="text-align: justify;"></p><div class="separator" style="clear: both; text-align: center;"><a href="https://blogger.googleusercontent.com/img/a/AVvXsEiTSuDaPgXLHQRtsWUOzSmn2MsOu3azhkdpycKRHnvRRln0VB6Dlngw1sRV9NuEOW4-RW3y2wkE9sdK6rp-4g8Sj7wKRYdPZnuMM2oh8XDkZWraXSQyOcmAnH2BQTvHVLH2A_lF0ReSp-jE2am12OUCvSxQYQKYslL1Mb4DdP_Ta0i6YEIPReYgQMN_=s1784" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" data-original-height="1440" data-original-width="1784" height="517" src="https://blogger.googleusercontent.com/img/a/AVvXsEiTSuDaPgXLHQRtsWUOzSmn2MsOu3azhkdpycKRHnvRRln0VB6Dlngw1sRV9NuEOW4-RW3y2wkE9sdK6rp-4g8Sj7wKRYdPZnuMM2oh8XDkZWraXSQyOcmAnH2BQTvHVLH2A_lF0ReSp-jE2am12OUCvSxQYQKYslL1Mb4DdP_Ta0i6YEIPReYgQMN_=w640-h517" width="640" /></a></div>You can also compare the regions closer and opt into a lower rate or a lesser eviction rate. As you can see in the screenshot above, eviction rate has been around 0% to 5%. Some regions do have this even at a 15%. <p></p><p style="text-align: justify;">There are two eviction policies. </p><p style="text-align: justify;"></p><ul><li>Delete - VM will be deleted, you can deploy something totally new.</li><li>Stop/ Deallocate - You can schedule to allocate once deallocated, but there is no guarantee it will be, which may require retries. </li></ul><p></p><p style="text-align: justify;">So with all these fun on, why do not I schedule a VM to shut down and start up for an hour or two only when I needed? Well, that is a separate scenario for a different requirement and the price per hour you pay may remain high.</p>Malin De Silvahttp://www.blogger.com/profile/05965593127759551180noreply@blogger.com0