<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Emily Freeman</title>
    <description>The latest articles on DEV Community by Emily Freeman (@editingemily).</description>
    <link>https://dev.to/editingemily</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F142808%2Faf6c0fa2-7655-498f-be0f-e5a10f085551.jpg</url>
      <title>DEV Community: Emily Freeman</title>
      <link>https://dev.to/editingemily</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/editingemily"/>
    <language>en</language>
    <item>
      <title>Preventing Leaked Secrets in Azure</title>
      <dc:creator>Emily Freeman</dc:creator>
      <pubDate>Tue, 30 Apr 2019 15:38:05 +0000</pubDate>
      <link>https://dev.to/azure/preventing-leaked-secrets-in-azure-8kp</link>
      <guid>https://dev.to/azure/preventing-leaked-secrets-in-azure-8kp</guid>
      <description>&lt;p&gt;&lt;em&gt;We've selected our favorite tips and tricks created by &lt;a href="https://twitter.com/mbcrump" rel="noopener noreferrer"&gt;Michael Crump&lt;/a&gt; and are delivering fresh technical content on Azure all April! Miss a day (or more)? &lt;a href="https://dev.to/t/azureapril"&gt;Catch up with the series&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't have Azure?&lt;/strong&gt; &lt;a href="https://azure.microsoft.com/en-us/free?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Grab a free subscription&lt;/a&gt;.  &lt;/p&gt;




&lt;h1&gt;
  
  
  Preventing Leaked Secrets with .NET Core
&lt;/h1&gt;

&lt;p&gt;I think almost everyone has committed a secret, key or password to git at some point in their development careers. I definitely have. And if you think you haven't, go double-check. &lt;/p&gt;

&lt;p&gt;It sucks. And it's easy to do. &lt;/p&gt;

&lt;p&gt;Azure's solution for secrets management is &lt;a href="https://docs.microsoft.com/en-us/azure/key-vault/key-vault-whatis?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Azure Key Vault&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;But what if you wanted to roll your own solution? We're engineers after all...&lt;/p&gt;

&lt;h1&gt;
  
  
  Rolling Your Own &lt;a href="https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-2.2&amp;amp;tabs=windows#secret-manager?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Secret Manager&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/azure/key-vault/key-vault-whatis?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Azure Key Vault&lt;/a&gt; is &lt;em&gt;cheap&lt;/em&gt; but not completely free. And there is an overhead of learning the service. (Though I'd argue it's extremely simple.)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-2.2&amp;amp;tabs=windows#secret-manager?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Secret Manager&lt;/a&gt; is a Microsoft solution for storing sensitive data during the development of an ASP.NET Core project.&lt;/p&gt;

&lt;p&gt;Information is always stored in the user profile directory such as &lt;code&gt;%APPDATA%\microsoft\UserSecrets\&amp;lt;userSecretsId&amp;gt;\secrets.json&lt;br&gt;
&lt;/code&gt; for Windows or &lt;code&gt;~/.microsoft/usersecrets/&amp;lt;userSecretsId&amp;gt;/secrets.json&lt;/code&gt; for Mac/Linux. &lt;/p&gt;

&lt;p&gt;This means if other folks want to get your key store, they can target those directories b/c the JSON file is unencrypted. Not that my version is encrypted, it just isn’t stored in the user profile directory.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Preventing Problematic Pushes
&lt;/h1&gt;

&lt;p&gt;If you work in .NET Core, you can prevent an accidental push of sensitive data to GitHub. &lt;/p&gt;

&lt;h5&gt;
  
  
  Step 1
&lt;/h5&gt;

&lt;p&gt;Create a new .NET Core App in Visual Studio.&lt;/p&gt;

&lt;h5&gt;
  
  
  Step 2
&lt;/h5&gt;

&lt;p&gt;Add a file called &lt;code&gt;appSecrets.json&lt;/code&gt; and define a couple of secrets that you don’t want released.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "ConnectionStrings": {
    "BitlyAPI": "A_BITLY_API_KEY",
    "StorageAccountAPI": "MY_STORAGE_ACCOUNT_KEY"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Step 3
&lt;/h5&gt;

&lt;p&gt;Set the &lt;code&gt;appSecrets.json&lt;/code&gt; file to &lt;code&gt;Copy if newer&lt;/code&gt; inside of Visual Studio.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Fazconsecret1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Fazconsecret1.png" alt="copy if newer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h5&gt;
  
  
  Step 4
&lt;/h5&gt;

&lt;p&gt;Add the following NuGet packages that allow you to easily read a local JSON file (such as your &lt;code&gt;appSecrets.json&lt;/code&gt;) and extract key pieces of information:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Microsoft.Extensions.Configuration&lt;/li&gt;
&lt;li&gt;Microsoft.Extensions.Configuration.FileExtensions&lt;/li&gt;
&lt;li&gt;Microsoft.Extensions.Configuration.Json&lt;/li&gt;
&lt;/ul&gt;

&lt;h5&gt;
  
  
  Step 5
&lt;/h5&gt;

&lt;p&gt;Add the following code inside the Main method. This uses &lt;code&gt;ConfigurationBuilder&lt;/code&gt; and searches for the file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var builder = new ConfigurationBuilder()
    .SetBasePath(Directory.GetCurrentDirectory())
    .AddJsonFile("appSecrets.json", optional: false, reloadOnChange: true);

IConfigurationRoot configuration = builder.Build();
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can now access the value of the string with the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;configuration.GetConnectionString("StorageAccountAPI")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h5&gt;
  
  
  Step 6
&lt;/h5&gt;

&lt;p&gt;Set your &lt;code&gt;/.gitignore&lt;/code&gt; to ignore the &lt;code&gt;appSecrets.json&lt;/code&gt; that you added.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons.

appSecrets.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You can verify this file is ignored by looking for the red circle if using Visual Studio.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Fazconsecret2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Fazconsecret2.png" alt="git ignore"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Fazconsecret3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Fazconsecret3.png" alt="visual studio verification"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Not too complicated. But! I really do recommend using &lt;a href="https://docs.microsoft.com/en-us/azure/key-vault/key-vault-whatis?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Azure Key Vault&lt;/a&gt; as it's simple and can protect you across your entire software delivery lifecycle. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want to read more on secrets in Azure?&lt;/strong&gt; &lt;a href="https://docs.microsoft.com/en-us/azure/key-vault/about-keys-secrets-and-certificates?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;We've got you covered on everything keys, secrets and certificates.&lt;/a&gt;!&lt;/p&gt;




&lt;p&gt;We'll be posting articles every day in April, so stay tuned or jump ahead and check out more tips and tricks &lt;a href="http://azuredev.tips" rel="noopener noreferrer"&gt;now&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>azure</category>
      <category>webdev</category>
      <category>cloud</category>
      <category>azureapril</category>
    </item>
    <item>
      <title>Creating an HTTP Request Trigger in Azure Logic Apps</title>
      <dc:creator>Emily Freeman</dc:creator>
      <pubDate>Mon, 29 Apr 2019 15:49:07 +0000</pubDate>
      <link>https://dev.to/azure/creating-an-http-request-trigger-in-azure-logic-apps-5h3o</link>
      <guid>https://dev.to/azure/creating-an-http-request-trigger-in-azure-logic-apps-5h3o</guid>
      <description>&lt;p&gt;&lt;em&gt;Thank you to &lt;a href="https://twitter.com/mbcrump"&gt;Michael Crump&lt;/a&gt; for creating this content!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't have Azure?&lt;/strong&gt; &lt;a href="https://azure.microsoft.com/en-us/free?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa"&gt;Grab a free subscription&lt;/a&gt;. &lt;/p&gt;




&lt;p&gt;&lt;a href="https://azure.microsoft.com/en-us/services/logic-apps/?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa"&gt;Logic Apps&lt;/a&gt; are a service in Azure that allow you to connect various SaaS services within Azure and beyond to automate tasks. Any business process or workflow can be designed and executed.&lt;/p&gt;

&lt;p&gt;Check out &lt;a href="https://twitter.com/cecilphillip"&gt;Cecil Phillip's&lt;/a&gt; and &lt;a href="https://twitter.com/mbcrump"&gt;Michael Crump's&lt;/a&gt; video tutorial on setting up a logic app.&lt;/p&gt;

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

&lt;h1&gt;
  
  
  Setting up a Logic App
&lt;/h1&gt;

&lt;p&gt;Go to the &lt;a href="https://azure.microsoft.com/en-us/features/azure-portal/?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa"&gt;Azure Portal&lt;/a&gt; and create a new Logic App.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Focgefqufx6u9tbirfx2a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Focgefqufx6u9tbirfx2a.png" alt="logic app" width="310" height="475"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the resource is ready, we’re are going to need to trigger an action when an HTTP request comes in. &lt;/p&gt;

&lt;p&gt;Thankfully, this is one of the Common Triggers and we can select it to begin.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcsc2xkcxz2lneu7sqbxl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcsc2xkcxz2lneu7sqbxl.png" alt="triggers" width="800" height="204"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The URL isn’t generated until we provide the parameters.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff8yp1zdr1u700xmfopcb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff8yp1zdr1u700xmfopcb.png" alt="http request" width="620" height="157"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go ahead and press &lt;code&gt;Edit&lt;/code&gt; and paste in a JSON schema the request should expect. Here's an example.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "$schema": "http://json-schema.org/draft-06/schema#", 
  "definitions": {}, 
  "id": "http://example.com/example.json", 
  "properties": {
    "csv": {
      "id": "/properties/csv", 
      "type": "string"
    }, 
    "filename": {
      "id": "/properties/filename", 
      "type": "string"
    }, 
    "gpx": {
      "id": "/properties/gpx", 
      "type": "string"
    }, 
    "kml": {
      "id": "/properties/kml", 
      "type": "string"
    }
  }, 
  "type": "object"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;You can use the &lt;code&gt;Use sample payload to generate schema&lt;/code&gt; option, but I prefer the additional metadata that JSON Schema can provide.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Upload Files
&lt;/h1&gt;

&lt;p&gt;We've set up an Azure Logic App to receive an HTTP Request which included a JSON payload.&lt;/p&gt;

&lt;p&gt;Now let's integrate with OneDrive to automatically upload files. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb9r9o9zlr942q2xwj7yh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb9r9o9zlr942q2xwj7yh.png" alt="onedrive" width="693" height="261"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Typically, you’ll add an &lt;code&gt;Action&lt;/code&gt; or &lt;code&gt;Condition&lt;/code&gt; to trigger once the HTTP request is complete.&lt;/p&gt;

&lt;p&gt;We’ll select an &lt;code&gt;Action&lt;/code&gt; as we want it to run every time. A &lt;code&gt;Condition&lt;/code&gt; would use &lt;code&gt;If...then&lt;/code&gt; logic after the HTTP request comes in. &lt;/p&gt;

&lt;p&gt;Select &lt;code&gt;Action&lt;/code&gt; and search for &lt;code&gt;upload file to onedrive&lt;/code&gt; and you’ll see the following is available to use.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1dlwkw7i4i15ifuocdg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1dlwkw7i4i15ifuocdg.png" alt="select" width="638" height="667"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You’ll have to sign in to your OneDrive account.&lt;/p&gt;

&lt;p&gt;Now you can pull the fields that we captured and use them as dynamic content. &lt;/p&gt;

&lt;p&gt;For example, a GPX file contains a full URL, so we can just use that dynamic field. For the destination URL, we’ll construct where we want it to go in our OneDrive account. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft362fjfu969yk5mc67gf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft362fjfu969yk5mc67gf.png" alt="upload" width="630" height="593"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is just one idea You can integrate with dozens of everyday tools with [Azure Logic Apps]. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ready to set up your Logic App?&lt;/strong&gt; &lt;a href="https://azure.microsoft.com/en-us/services/logic-apps/?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa"&gt;Check out our stellar documentation.&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;We'll be posting articles every day in April, so stay tuned! Or jump ahead and check out more tips and tricks &lt;a href="http://azuredev.tips"&gt;now&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>azureapril</category>
      <category>azure</category>
      <category>serverless</category>
    </item>
    <item>
      <title>Azure Search with SQL Server</title>
      <dc:creator>Emily Freeman</dc:creator>
      <pubDate>Mon, 29 Apr 2019 01:14:47 +0000</pubDate>
      <link>https://dev.to/azure/azure-search-with-sql-server-4040</link>
      <guid>https://dev.to/azure/azure-search-with-sql-server-4040</guid>
      <description>&lt;p&gt;&lt;em&gt;Thank you to &lt;a href="https://twitter.com/mbcrump" rel="noopener noreferrer"&gt;Michael Crump&lt;/a&gt; for creating this content!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't have Azure?&lt;/strong&gt; &lt;a href="https://azure.microsoft.com/en-us/free?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Grab a free subscription&lt;/a&gt;. &lt;/p&gt;




&lt;h1&gt;
  
  
  Implementing Azure Search with SQL Server and ASP.NET MVC
&lt;/h1&gt;

&lt;p&gt;Today's tutorial covers Azure Search and SQL Server in a ASP.NET MVC web app. &lt;/p&gt;

&lt;h2&gt;
  
  
  What's &lt;a href="https://azure.microsoft.com/en-us/services/search/?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Azure Search&lt;/a&gt;?
&lt;/h2&gt;

&lt;p&gt;Azure Search is a SaaS — in this case, search-as-a-service — cloud solution that allows you to access REST APIs (along with an SDK) to search over your content using web, desktop or mobile apps. &lt;/p&gt;

&lt;p&gt;There are a variety of services to which you can attach Azure Search, including SQL Server. &lt;/p&gt;

&lt;h2&gt;
  
  
  Creating the Indexer
&lt;/h2&gt;

&lt;p&gt;This requires creating a SQL Server Database in which we'll store the indexer.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Go into the &lt;a href="https://azure.microsoft.com/en-us/features/azure-portal/?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Azure Portal&lt;/a&gt;. &lt;/li&gt;
&lt;li&gt;Search for "SQL Server" and click the &lt;code&gt;Add&lt;/code&gt; button.&lt;/li&gt;
&lt;li&gt;Give it a database name and resource group. &lt;/li&gt;
&lt;li&gt;Fill out the new server information. &lt;/li&gt;
&lt;li&gt;Click on the Additional settings tab.&lt;/li&gt;
&lt;li&gt;In "Use existing data" select "Sample". This will use &lt;code&gt;AdventureWorksLT&lt;/code&gt; as the sample database.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fxaxwli3lklk77cv5dp55.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fxaxwli3lklk77cv5dp55.png" alt="Additional Settings, Select Sample"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Remember! Double check you selected the&lt;code&gt;AdventureWorksLT&lt;/code&gt; database if you want to follow along with this tutorial.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/sql/samples/adventureworks-install-configure?view=sql-server-2017?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;AdventureWorks&lt;/a&gt; is an example database we've built just for you!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Taking A Peek at the Data
&lt;/h2&gt;

&lt;p&gt;Now that we have a sample database and it has deployed, let’s use &lt;a href="https://docs.microsoft.com/en-us/azure/sql-database/sql-database-connect-query-portal?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Query Editor&lt;/a&gt; inside the SQL Server blade to take a look at the table structure. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You can also use SQL Server Management Studio if you prefer it better.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you click on &lt;code&gt;Query Editor&lt;/code&gt; and login as instructed, then you’ll see the following:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F1ebd0ad631fa85fe3ba6979de294fd86f46a36ed%2Fbfc78%2Ffiles%2Fazuresearch2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F1ebd0ad631fa85fe3ba6979de294fd86f46a36ed%2Fbfc78%2Ffiles%2Fazuresearch2.png" alt="query editor"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see, I expanded the &lt;code&gt;Table&lt;/code&gt; dropdown and I can drill down again to the column names.&lt;/p&gt;

&lt;p&gt;It looks like &lt;code&gt;Customer&lt;/code&gt; would be a great table to implement search and we could pass in the &lt;code&gt;FirstName&lt;/code&gt; or &lt;code&gt;LastName&lt;/code&gt; field.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fda9a8012311620a4ad0ab0d1a443257a7d9dc7dd%2Fcfd3f%2Ffiles%2Fazuresearch3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fda9a8012311620a4ad0ab0d1a443257a7d9dc7dd%2Fcfd3f%2Ffiles%2Fazuresearch3.png" alt="implement search"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Trying writing a simple query to select the &lt;code&gt;FirstName&lt;/code&gt; and &lt;code&gt;LastName&lt;/code&gt; from &lt;code&gt;SalesLT.Customer&lt;/code&gt;. Click &lt;code&gt;Run&lt;/code&gt; to take a look at the data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F3ecd830b0804ae0f3e4a06456f1882ca8e9281e2%2F6c48e%2Ffiles%2Fazuresearch4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F3ecd830b0804ae0f3e4a06456f1882ca8e9281e2%2F6c48e%2Ffiles%2Fazuresearch4.png" alt="run"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that we have our database in place and some solid data to work with, we’ll implement Azure Search.&lt;/p&gt;

&lt;h1&gt;
  
  
  Implementing Azure Search
&lt;/h1&gt;

&lt;p&gt;Let's add Azure Search to our existing SQL Server instance.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Open the &lt;a href="https://azure.microsoft.com/en-us/features/azure-portal/?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Azure Portal&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Navigate to your SQL Server instance and begin by looking at the &lt;code&gt;Settings&lt;/code&gt; pane.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fb4cdb15066db05002a4875db8d5f1ace1b0588a3%2Ff9d31%2Ffiles%2Fazuresearchsql1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fb4cdb15066db05002a4875db8d5f1ace1b0588a3%2Ff9d31%2Ffiles%2Fazuresearchsql1.png" alt="settings pane"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select a &lt;code&gt;Add Azure Search&lt;/code&gt; and fill out the fields specified below and make sure to select the price as free.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fe543c245b51568117e1033f82ee68c3907276708%2Fc2ad6%2Ffiles%2Fazuresearchsql2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fe543c245b51568117e1033f82ee68c3907276708%2Fc2ad6%2Ffiles%2Fazuresearchsql2.png" alt="add search"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Under &lt;code&gt;Data Source&lt;/code&gt;, we can easily connect to our Azure SQL Database. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Give it a name.&lt;/li&gt;
&lt;li&gt;Provide the &lt;code&gt;userid&lt;/code&gt; and &lt;code&gt;password&lt;/code&gt; specified when setting up the SQL database.&lt;/li&gt;
&lt;li&gt;Press &lt;code&gt;Test Connection&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt;If everything goes well, then you’ll be able to select the &lt;code&gt;Customer&lt;/code&gt; table.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F95722d60b0ab80ac38eed31958f8aefd5b5e5065%2F161cf%2Ffiles%2Fazuresearchsql3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F95722d60b0ab80ac38eed31958f8aefd5b5e5065%2F161cf%2Ffiles%2Fazuresearchsql3.png" alt="customer table"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, set an index. &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Give it a name. &lt;/li&gt;
&lt;li&gt;Select &lt;code&gt;CustomerID&lt;/code&gt; as your key. &lt;/li&gt;
&lt;li&gt;Clean up the fields by deleting any you don't want. &lt;/li&gt;
&lt;li&gt;Make sure the fields can be retrieved, sorted, filtered and are searchable by adding a check like the photo below.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F1b77fbb13433e23465600a660a29fd3d95ae5fae%2Ff9f9f%2Ffiles%2Fazuresearchsql4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F1b77fbb13433e23465600a660a29fd3d95ae5fae%2Ff9f9f%2Ffiles%2Fazuresearchsql4.png" alt="add a check"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We need to create an indexer. I’m going to select the daily schedule and set my watermark column to the &lt;code&gt;ModifiedDate&lt;/code&gt; as I assume data is unique in that column.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fdeebc5cb2f7ad177b8685c720005f988a198583a%2F60b80%2Ffiles%2Fazuresearchsql5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fdeebc5cb2f7ad177b8685c720005f988a198583a%2F60b80%2Ffiles%2Fazuresearchsql5.png" alt="create an indexer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you kick that off, you’ll see the following notification. It states you can check the monitor progress and once complete you can start searching.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F3be1df9a667373e1f7c43341c7c66dd99357910a%2F31103%2Ffiles%2Fazuresearchsql6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F3be1df9a667373e1f7c43341c7c66dd99357910a%2F31103%2Ffiles%2Fazuresearchsql6.png" alt="notifications"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you go ahead and click on the link on the notification window, then you’ll see the following screen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F892bda2b3da14e80e56d2341f80e1c9f6b6f01ae%2Fd1364%2Ffiles%2Fazuresearchsql7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F892bda2b3da14e80e56d2341f80e1c9f6b6f01ae%2Fd1364%2Ffiles%2Fazuresearchsql7.png" alt="execution history"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go ahead and press the &lt;code&gt;Run&lt;/code&gt; button and it will start immediately. Eventually — expected time varies — you’ll see it has completed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fc8eed6b52ed093c8f3e5cd4880ff9bf542e4efa4%2F7ed41%2Ffiles%2Fazuresearchsql8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fc8eed6b52ed093c8f3e5cd4880ff9bf542e4efa4%2F7ed41%2Ffiles%2Fazuresearchsql8.png" alt="run it"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Excellent! Our SQL database and Azure Search indexer are in place. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want to know more about Azure Search?&lt;/strong&gt; Check out our &lt;a href="https://docs.microsoft.com/en-us/azure/search/?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;quickstarts and tutorials&lt;/a&gt;!&lt;/p&gt;




&lt;p&gt;We'll be posting articles every day in April, so stay tuned! Or jump ahead and check out more tips and tricks &lt;a href="http://azuredev.tips" rel="noopener noreferrer"&gt;now&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>azureapril</category>
      <category>azure</category>
      <category>webdev</category>
      <category>database</category>
    </item>
    <item>
      <title>Demystifying ARM Templates (Azure Resource Manager)</title>
      <dc:creator>Emily Freeman</dc:creator>
      <pubDate>Sun, 07 Apr 2019 18:37:33 +0000</pubDate>
      <link>https://dev.to/azure/demystifying-arm-templates-azure-resource-manager-b8c</link>
      <guid>https://dev.to/azure/demystifying-arm-templates-azure-resource-manager-b8c</guid>
      <description>&lt;p&gt;&lt;em&gt;We've selected our favorite tips and tricks created by &lt;a href="https://twitter.com/mbcrump" rel="noopener noreferrer"&gt;Michael Crump&lt;/a&gt; and are delivering fresh technical content on Azure all April! Miss a day (or more)? &lt;a href="https://dev.to/t/azureapril"&gt;Catch up with the series&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't have Azure?&lt;/strong&gt; &lt;a href="https://azure.microsoft.com/en-us/free?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Grab a free subscription&lt;/a&gt;. &lt;/p&gt;




&lt;p&gt;If you've been in tech long enough, you might associate ARM with CPU architecture. In this case, ARM stands for &lt;a href="https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-overview?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Azure Resource Manager&lt;/a&gt;. ARM is how you organize all your stuff on Azure — virtual machines (VMs), databases, storage accounts, containers, web apps, bots and more. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In Azure, we call ALL your stuff resources.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Fresources_page.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Fresources_page.PNG" alt="portal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Most people tend to create multiple related items together in Azure. A web app and a database might be contained in a single resource group. But what if you had to do this all the time? Or for many different clients? &lt;/p&gt;

&lt;p&gt;Wouldn’t it be nice to have an easy way to keep track of all the repeatable groups of resources you are creating for people? Good news, this is exactly what &lt;a href="https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-overview?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;ARM templates&lt;/a&gt; do!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want more ARM Templates?&lt;/strong&gt; Check out our &lt;a href="https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-overview?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;overview&lt;/a&gt;!&lt;/p&gt;

&lt;h1&gt;
  
  
  Real Scenarios for ARM Templates
&lt;/h1&gt;

&lt;p&gt;When you need an easy way to repeat infrastructure deployments on Azure, ARM templates are going to save you a lot of time. &lt;/p&gt;

&lt;p&gt;If you ever need to share your infrastructure with other people — such as opensource projects or for blogs, tutorials and documentation — ARM templates will be a lifesaver and will let your readers and users replicate what you did. &lt;/p&gt;

&lt;p&gt;Finally, if you just need a way to keep track of what you deployed on Azure, ARM templates are a great way to help you remember.&lt;/p&gt;

&lt;h1&gt;
  
  
  It's Just a JSON File
&lt;/h1&gt;

&lt;p&gt;This is where ARM templates come in. ARM templates are JSON files that act like blueprints for the related resources you want to deploy together. You’ll also hear this called “infrastructure as code,” or IaC, which is geek-speak for being able to upload your infrastructure notes to GitHub if you want to. &lt;/p&gt;

&lt;p&gt;It’s a structured format for keeping track of your Azure infrastructure with some superpowers. The biggest ARM template superpower is that you can use templates to automate your infrastructure deployments because Azure knows how to read them. After all, it's really just a JSON file. &lt;/p&gt;

&lt;p&gt;In the example below, we are creating an ARM template that creates a Notification Hub. You'll see that it contains things that the deployment needs such as &lt;code&gt;Name&lt;/code&gt;, &lt;code&gt;Location&lt;/code&gt;, etc.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "namespaceName": {
            "type": "string",
            "metadata": {
                "description": "The name of the Notification Hubs namespace."
            }
        },
        "location": {
            "type": "string",
            "defaultValue": "[resourceGroup().location]",
            "metadata": {
                "description": "The location in which the Notification Hubs resources should be deployed."
            }
        }
    },
    "variables": {
        "hubName": "MyHub"
    },
    "resources": [
        {
            "apiVersion": "2014-09-01",
            "name": "[parameters('namespaceName')]",
            "type": "Microsoft.NotificationHubs/namespaces",
            "location": "[parameters('location')]",
            "kind": "NotificationHub",
            "resources": [
                {
                    "name": "[concat(parameters('namespaceName'), '/', variables('hubName'))]",
                    "apiVersion": "2014-09-01",
                    "type": "Microsoft.NotificationHubs/namespaces/notificationHubs",
                    "location": "[parameters('location')]",
                    "dependsOn": [
                        "[parameters('namespaceName')]"
                    ]
                }
            ]
        }
    ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Getting Started
&lt;/h1&gt;

&lt;p&gt;You can make an ARM template in &lt;a href="https://docs.microsoft.com/en-us/azure/azure-resource-manager/vs-azure-tools-resource-groups-deployment-projects-create-deploy?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Visual Studio&lt;/a&gt;, in &lt;a href="https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-quickstart-create-templates-use-visual-studio-code?tabs=CLI?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;VSCode&lt;/a&gt;, or in the &lt;a href="https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-quickstart-create-templates-use-the-portal?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Azure portal&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;The last way is probably the easiest since it walks you through the process. Start creating a resource through the portal the way you normally would, by clicking on &lt;code&gt;Create Resource&lt;/code&gt; on your Azure Portal dashboard. &lt;/p&gt;

&lt;p&gt;Now select what you'd like to create. I'm going to create a Web App. Look at the bottom of this page and you'll see automation options.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Fnew_webapp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Fnew_webapp.png" alt="options"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But what does that unassuming link labeled &lt;code&gt;Automation options&lt;/code&gt; next to it do? You’ve probably never noticed it before or been afraid to mess with it, but if you click on that link, you will be on the road to creating an ARM template for your resource. &lt;/p&gt;

&lt;h1&gt;
  
  
  Taking It One Step Further
&lt;/h1&gt;

&lt;p&gt;Go ahead and click &lt;code&gt;Create a resource&lt;/code&gt; inside the Azure Portal and select &lt;code&gt;Web App&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Enter a &lt;code&gt;Name&lt;/code&gt; and a &lt;code&gt;Resource Group&lt;/code&gt; for your web app and click &lt;code&gt;Automation options&lt;/code&gt; at the bottom before you hit &lt;code&gt;Create&lt;/code&gt; in order to start creating your ARM template.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Fnew_webapp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Fnew_webapp.png" alt="ARM template"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After you click &lt;code&gt;Automation options&lt;/code&gt;, you'll see something like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Farm_template.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Farm_template.png" alt="automation options"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The template to create a web app (or any other Azure resource) is simply a JSON file with multiple values describing how your web app is going to be deployed. Once you overcome the fancy jargon, it's pretty simple. And we make it easy for you to get started without speaking fluent JSON. &lt;/p&gt;

&lt;h1&gt;
  
  
  Creating Static App Settings for your &lt;a href="https://azure.microsoft.com/en-us/services/app-service/" rel="noopener noreferrer"&gt;Azure App Service&lt;/a&gt;
&lt;/h1&gt;

&lt;p&gt;To make things as easy as possible, let’s assume for now that you want to add the exact same settings every time you deploy your web app template.&lt;/p&gt;

&lt;p&gt;Go to &lt;code&gt;Deploy&lt;/code&gt; then &lt;code&gt;Edit Template&lt;/code&gt; and paste the following settings fragment to overwrite your template’s resource section. (You could, of course, add as many keys as your web app needs or make changes as you see fit.)&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We are adding three names and 3 values for &lt;code&gt;MyFirstName&lt;/code&gt;, &lt;code&gt;MyLastName&lt;/code&gt;, and &lt;code&gt;MySSN&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  "resources": [
  {
    "apiVersion": "2016-03-01",
    "name": "[parameters('name')]",
    "type": "Microsoft.Web/sites",
    "properties": {
        "name": "[parameters('name')]",
        "siteConfig": {
            "appSettings": [
            {
              "name": "MyFirstName",
              "value": "Michael"
            },
            {
              "name": "MyLastName",
              "value": "Crump"
            },
            {
              "name": "MySSN",
              "value": "355-643-3356"
            }
          ]
        },
        "serverFarmId": "[concat('/subscriptions/', parameters('subscriptionId'),'/resourcegroups/', parameters('serverFarmResourceGroup'), '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
        "hostingEnvironment": "[parameters('hostingEnvironment')]"
    },
    "location": "[parameters('location')]"
  }],
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Press &lt;code&gt;Save.&lt;/code&gt; Ensure the settings are filled out. Agree to the terms and check the &lt;code&gt;Purchase&lt;/code&gt; option.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Fcustomdeployment.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Fcustomdeployment.png" alt="template settings"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If it says failure to deploy, then give it a shot again. Sometimes an asynchronous return is the only hiccup. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Your settings (for &lt;code&gt;MyFirstName&lt;/code&gt;, &lt;code&gt;MyLastName&lt;/code&gt;, and &lt;code&gt;MySSN&lt;/code&gt;) will now be deployed.&lt;/p&gt;

&lt;p&gt;After deployment, navigate to your &lt;code&gt;App Service&lt;/code&gt; and go to &lt;code&gt;Application Settings&lt;/code&gt;. You'll see your site deployed along with the settings that we specified earlier.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Fcreate_resource1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Fcreate_resource1.png" alt="application settings"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let's look at adding parameters. &lt;/p&gt;

&lt;h1&gt;
  
  
  Inputting Values Before Deployment
&lt;/h1&gt;

&lt;p&gt;You’ve already seen that you can automate deploying static configuration information like app settings with your ARM template. But what about providing parameters that allow end-users to input values BEFORE deployment. &lt;/p&gt;

&lt;p&gt;Go ahead and search for &lt;code&gt;templates&lt;/code&gt; inside the Azure Portal and click &lt;code&gt;Add&lt;/code&gt; to create a new one.&lt;/p&gt;

&lt;p&gt;Enter a name and a description on the ARM Template.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Fcustomdeploy5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Fcustomdeploy5.png" alt="enter name"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Choose Your Own Adventure
&lt;/h1&gt;

&lt;p&gt;We want to have dynamic settings that are customizable every time you deploy your web app instead of having them be the same each time, you just need to add the parameter values for what you want to your ARM template.&lt;/p&gt;

&lt;p&gt;Below is a sample of three values (&lt;code&gt;FirstNameValue&lt;/code&gt;, &lt;code&gt;LastNameValue&lt;/code&gt; and &lt;code&gt;SSNValue&lt;/code&gt;) that we previously hardcoded before:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"FirstNameValue": {
    "type": "string"
},
"LastNameValue": {
    "type": "string"
},
"SSNValue": {
    "type": "string"
},
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We'll add the same parameters called &lt;code&gt;FirstNameValue&lt;/code&gt;, &lt;code&gt;LastNameValue&lt;/code&gt; and &lt;code&gt;SSNValue&lt;/code&gt; to the parameters collection of the template. From now on, every time you deploy this template, you will be prompted to enter a value for each one.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"siteConfig": {
    "appSettings": [
        {
            "name": "MyFirstName",
            "value": "[parameters('FirstNameValue')]"
        },
        {
            "name": "MyLastName",
            "value": "[parameters('LastNameValue')]"
        },
        {
            "name": "MySSN",
            "value": "[parameters('SSNValue')]"
        }
    ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h1&gt;
  
  
  Stringing Everything Together
&lt;/h1&gt;

&lt;p&gt;Our full template file looks like the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "$schema": "https://schema.management.azure.com/schemas/2015-01-01/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0",
    "parameters": {
        "appServiceName": {
            "type": "string",
            "minLength": 1,
            "maxLength": 10
        },
        "appServicePlanName": {
            "type": "string",
            "minLength": 1
        },
        "FirstNameValue": {
                "type": "string"
            },
            "LastNameValue": {
                "type": "string"
            },
            "SSNValue": {
                "type": "string"
            },
        "appServicePlanSkuName": {
            "type": "string",
            "defaultValue": "S1",
            "allowedValues": [
                "F1",
                "D1",
                "B1",
                "B2",
                "B3",
                "S1",
                "S2",
                "S3",
                "P1",
                "P2",
                "P3",
                "P4"
            ],
            "metadata": {
                "description": "Describes plan's pricing tier and capacity. Check details at https://azure.microsoft.com/en-us/pricing/details/app-service/"
            }
        }
    },
    "variables": {
        "appHostingPlanNameVar": "[concat(parameters('appServicePlanName'),'-apps')]"
    },
    "resources": [
        {
            "name": "[variables('appHostingPlanNameVar')]",
            "type": "Microsoft.Web/serverfarms",
            "location": "[resourceGroup().location]",
            "apiVersion": "2015-08-01",
            "sku": {
                "name": "[parameters('appServicePlanSkuName')]"
            },
            "dependsOn": [],
            "tags": {
                "displayName": "appServicePlan"
            },
            "properties": {
                "name": "[variables('appHostingPlanNameVar')]",
                "numberOfWorkers": 1
            }
        },
        {
            "name": "[parameters('appServiceName')]",
            "type": "Microsoft.Web/sites",
            "location": "[resourceGroup().location]",
            "apiVersion": "2015-08-01",
            "dependsOn": [
                "[resourceId('Microsoft.Web/serverfarms', variables('appHostingPlanNameVar'))]"
            ],
            "tags": {
                "[concat('hidden-related:', resourceId('Microsoft.Web/serverfarms', variables('appHostingPlanNameVar')))]": "Resource",
                "displayName": "webApp"
            },
            "properties": {
                "name": "[parameters('appServiceName')]",
                "serverFarmId": "[resourceId('Microsoft.Web/serverfarms', variables('appHostingPlanNameVar'))]",
                "siteConfig": {
                    "appSettings": [
                        {
                            "name": "MyFirstName",
                            "value": "[parameters('FirstNameValue')]"
                        },
                        {
                            "name": "MyLastName",
                            "value": "[parameters('LastNameValue')]"
                        },
                        {
                            "name": "MySSN",
                            "value": "[parameters('SSNValue')]"
                        }
                    ]
                }
            }
        }
    ],
    "outputs": {}
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you save the template, then the next time you deploy resources using this ARM template, you will be required to put in a new value for the first name, last name, and SSN that will be used in your application settings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Fcustomdeploy3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Fcustomdeploy3.png" alt="customized template"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And after deployment, go and check your App Settings.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Fcustomdeploy4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmicrosoft.github.io%2FAzureTipsAndTricks%2Ffiles%2Fcustomdeploy4.png" alt="check settings"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Pretty cool, huh? Once I overcame the confusion of what ARM templates are and why I need them, it's like my brain opened up. ARM templates make your life easier by automating resource management and customizing values as needed. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want to learn more about ARM Templates?&lt;/strong&gt; Check out our &lt;a href="https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-group-overview?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;overview&lt;/a&gt;!&lt;/p&gt;




&lt;p&gt;We'll be posting articles every day in April, so stay tuned or jump ahead and check out more tips and tricks &lt;a href="http://azuredev.tips" rel="noopener noreferrer"&gt;now&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>azureapril</category>
      <category>azure</category>
      <category>devops</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Working with Storage Blobs</title>
      <dc:creator>Emily Freeman</dc:creator>
      <pubDate>Sat, 06 Apr 2019 15:45:06 +0000</pubDate>
      <link>https://dev.to/azure/working-with-azure-storage-blobs-2096</link>
      <guid>https://dev.to/azure/working-with-azure-storage-blobs-2096</guid>
      <description>&lt;p&gt;&lt;em&gt;We've selected our favorite tips and tricks created by &lt;a href="https://twitter.com/mbcrump" rel="noopener noreferrer"&gt;Michael Crump&lt;/a&gt; and are delivering fresh technical content on Azure all April! Miss a day (or more)? &lt;a href="https://dev.to/t/azureapril"&gt;Catch up with the series&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't have Azure?&lt;/strong&gt; &lt;a href="https://azure.microsoft.com/en-us/free?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Grab a free subscription&lt;/a&gt;.  &lt;/p&gt;




&lt;p&gt;&lt;a href="https://docs.microsoft.com/en-us/azure/storage?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Azure Storage&lt;/a&gt; is described as a service which provides storage that is available, secure, durable, scalable, and redundant. &lt;/p&gt;

&lt;p&gt;Azure Storage is an umbrella term. It covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/azure/storage/blobs/storage-blobs-overview?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Blob storage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/azure/storage/blobs/data-lake-storage-introduction?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Data Lake storage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/azure/storage/files/storage-files-introduction?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;File storage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/azure/storage/queues/storage-queues-introduction?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Queue storage&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.microsoft.com/en-us/azure/storage/tables/table-storage-overview?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Table storage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We're going to focus on Blob storage for now. &lt;/p&gt;

&lt;h1&gt;
  
  
  Creating Blob Storage in the Azure Portal 📂
&lt;/h1&gt;

&lt;p&gt;Go ahead and open the &lt;a href="https://azure.microsoft.com/en-us/features/azure-portal/?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Azure Portal&lt;/a&gt; and click &lt;code&gt;Create a Resource&lt;/code&gt;. Select &lt;code&gt;Azure Storage&lt;/code&gt;. We’ll keep it simple as shown below to get started.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fb7645052be9c63c3640e848daba977ddf4a46e9f%2F058ec%2Ffiles%2Fstorageacct1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fb7645052be9c63c3640e848daba977ddf4a46e9f%2F058ec%2Ffiles%2Fstorageacct1.png" alt="create"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once complete — the portal will notify you — go into the resource and look under &lt;code&gt;Services&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F9284e1b624ffe72451a8b7ae5eedc0417b02b396%2F5b3be%2Ffiles%2Fstorageacct2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F9284e1b624ffe72451a8b7ae5eedc0417b02b396%2F5b3be%2Ffiles%2Fstorageacct2.png" alt="find it"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go ahead and click on &lt;code&gt;Blobs&lt;/code&gt; and create a &lt;code&gt;Container&lt;/code&gt; and give it the name &lt;code&gt;Images&lt;/code&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Remember! A container is a lot like a folder. &lt;code&gt;https://myblob/container/image1.jpg&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;You’ll now want to click &lt;code&gt;Upload&lt;/code&gt; and select a file on your physical disk.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F6169cbd610f715c39319c0f24281f3c530711a68%2F53696%2Ffiles%2Fstorageacct4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F6169cbd610f715c39319c0f24281f3c530711a68%2F53696%2Ffiles%2Fstorageacct4.png" alt="upload"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now that your file is uploaded, select it. You can click on the ellipsis and select &lt;code&gt;Blob properties&lt;/code&gt; to see additional details.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fb386bbc78a81a72061126042d3deda8cf4942d62%2Fc11bc%2Ffiles%2Fstorageacct5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fb386bbc78a81a72061126042d3deda8cf4942d62%2Fc11bc%2Ffiles%2Fstorageacct5.png" alt="done"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Yay! You can download it or access it via the URL provided. That was pretty easy, right?&lt;/p&gt;

&lt;p&gt;Let's do the same thing... differently. &lt;/p&gt;

&lt;h1&gt;
  
  
  Provisioning an Azure Storage Blob Container in C# 🗄️
&lt;/h1&gt;

&lt;p&gt;Yes, the code we're using is C# but don't freak out if you don't know C# (I don't!) Michael Crump wrote this code and I think it's clear what's happening — regardless of your language of choice. &lt;/p&gt;

&lt;p&gt;Navigate to your Azure Storage account in the portal.&lt;/p&gt;

&lt;p&gt;Look under &lt;code&gt;Settings&lt;/code&gt;, then &lt;code&gt;Access Keys&lt;/code&gt; and copy the connection string.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F748934007efa227bfcb9fbb6e8fe148be9211a3c%2F4d7d8%2Ffiles%2Fstoragethroughcsharp1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F748934007efa227bfcb9fbb6e8fe148be9211a3c%2F4d7d8%2Ffiles%2Fstoragethroughcsharp1.png" alt="connection string"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create a C# Console Application, and use NuGet to pull in references to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;WindowsAzure.Storage&lt;/li&gt;
&lt;li&gt;Microsoft.WindowsAzure.ConfigurationManager&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F5f3c5e84c8a898d7633004c069b634042bba6c87%2F125ce%2Ffiles%2Fstoragethroughcsharp3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F5f3c5e84c8a898d7633004c069b634042bba6c87%2F125ce%2Ffiles%2Fstoragethroughcsharp3.png" alt="console application"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Inside of your Console app, you will see &lt;code&gt;App.config&lt;/code&gt;, now add the following section:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;appSettings&amp;gt;
  &amp;lt;add key="StorageConnection" value="YOUR-CONNECTION-STRING-COPIED-FROM-EARLIER"/&amp;gt;
&amp;lt;/appSettings&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Copy the following code into your Main method:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static void Main(string[] args)
{
    var storageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnection"));
    var myClient = storageAccount.CreateCloudBlobClient();
    var container = myClient.GetContainerReference("images-backup");

container.CreateIfNotExists(BlobContainerPublicAccessType.Blob);
    Console.ReadLine();
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This code will get our connection string from the &lt;code&gt;App.config&lt;/code&gt;, create our client and a container named &lt;code&gt;images-backup&lt;/code&gt; if it doesn’t exist. We can go back inside of the portal to see if executed correctly.&lt;/p&gt;

&lt;p&gt;Success! We’ve now accomplished the same task via the Azure Portal and C#.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want more Azure Storage?&lt;/strong&gt; Check out our &lt;a href="//{{{LINK}}}?WT.mc_id=azureapril_devto-blog-cxa"&gt;quickstarts and tutorials&lt;/a&gt;!&lt;/p&gt;




&lt;p&gt;We'll be posting articles every day in April, so stay tuned or jump ahead and check out more tips and tricks &lt;a href="http://azuredev.tips" rel="noopener noreferrer"&gt;now&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>azureapril</category>
      <category>devtips</category>
      <category>storage</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Setting Up SQL Server and Connecting Visual Studio with Swagger</title>
      <dc:creator>Emily Freeman</dc:creator>
      <pubDate>Fri, 05 Apr 2019 13:32:52 +0000</pubDate>
      <link>https://dev.to/azure/setting-up-sql-server-and-connecting-visual-studio-with-swagger-5fei</link>
      <guid>https://dev.to/azure/setting-up-sql-server-and-connecting-visual-studio-with-swagger-5fei</guid>
      <description>&lt;p&gt;&lt;em&gt;We've selected our favorite tips and tricks created by &lt;a href="https://twitter.com/mbcrump" rel="noopener noreferrer"&gt;Michael Crump&lt;/a&gt; and are delivering fresh technical content on Azure all April! Miss a day (or more)? &lt;a href="https://dev.to/t/azureapril"&gt;Catch up with the series&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't have Azure?&lt;/strong&gt; &lt;a href="https://azure.microsoft.com/en-us/free?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Grab a free subscription&lt;/a&gt;. &lt;/p&gt;




&lt;p&gt;If you haven't had a chance to dig into Azure DevOps yet, I think you're missing out. It's incredibly powerful and has a truly enjoyable user experience. (And I was pretty skeptical when I started using it.)&lt;/p&gt;

&lt;p&gt;This example doesn't necessarily cover the exact stack you're using. But it does provide an end-to-end example of how to string different products together from within the Azure ecosystem and make your software delivery more continuous.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/crystal-tenn-6a0b9b67/" rel="noopener noreferrer"&gt;Crystal Tenn&lt;/a&gt; and Michael Crump from &lt;a href="https://www.michaelcrump.net/azure-tips-and-tricks-complete-list/" rel="noopener noreferrer"&gt;Azure Tips and Tricks&lt;/a&gt; teamed up to feature an Azure App Service site that communicates with an API project and an Azure SQL backend. &lt;/p&gt;

&lt;p&gt;The app is a basic To-Do application — we'll call it TODO — created with Visual Studio, VSTS (now &lt;a href="https://azure.microsoft.com/en-us/services/devops/?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Azure DevOps&lt;/a&gt;), C#, Angular, and SQL. &lt;/p&gt;

&lt;p&gt;You're welcome to follow along with the tutorial or simply read and get a better idea of how you can apply the same patterns to your app. &lt;/p&gt;

&lt;h1&gt;
  
  
  The Process 🗒️
&lt;/h1&gt;

&lt;p&gt;The process for the app is described below. In Visual Studio, you will start out with a working version of the TODO application. You will push the code to Azure DevOps and create a &lt;a href="https://azure.microsoft.com/en-us/resources/videos/build-2017-build-a-ci-cd-pipeline-from-microsoft-azure-portal/?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;CI/CD&lt;/a&gt; (Continuous Integration/Continuous Delivery) process in order to deploy to Azure. &lt;/p&gt;

&lt;p&gt;In Azure you will create 3 resources: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Azure Web App &lt;/li&gt;
&lt;li&gt;Azure API App&lt;/li&gt;
&lt;li&gt;Azure SQL Server&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Prerequisites 📇
&lt;/h1&gt;

&lt;p&gt;Please download the required software listed below. The tutorial can be completed for free, but will require a Azure account. You will need a basic understanding of coding and software installation. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The Azure account asks you for a credit card number, but will not charge you at all or “roll into a paid version,” it simply expires when your trial month is up.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Get a Free Azure Account
&lt;/h2&gt;

&lt;p&gt;You get $200 USD credit a month, these are free credits on a trial account and cost you nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Download Visual Studio 2017
&lt;/h2&gt;

&lt;p&gt;As a note, the instructions will be using Visual Studio 2017. You can get Visual Studio 2017 Community for free &lt;a href="https://www.visualstudio.com/vs/community/" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Snag SQL Server Express
&lt;/h2&gt;

&lt;p&gt;You can grab the Express edition &lt;a href="https://www.microsoft.com/en-us/sql-server/sql-server-editions-express" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Don't Forget SQL Server Management Studio
&lt;/h2&gt;

&lt;p&gt;You can find what you need &lt;a href="https://docs.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Setting Up SQL Server Locally 💾
&lt;/h1&gt;

&lt;p&gt;The local setup will start with setting up your database. You will then open the solution in Visual Studio. You need to connect the API project to your SQL Server. Then connect your frontend Angular project to the API project.&lt;/p&gt;

&lt;p&gt;We’ll be working with an existing app. Download a copy &lt;a href="https://github.com/catenn/ToDoList/archive/master.zip" rel="noopener noreferrer"&gt;here&lt;/a&gt; and extract it to a folder on your hard drive.&lt;/p&gt;

&lt;p&gt;Let's get started!&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 1
&lt;/h4&gt;

&lt;p&gt;Open SQL Server Management Studio (SSMS) and click the dropdown on Server Name and choose Browse for more.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcwkzto5lhi7j22boffvv.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcwkzto5lhi7j22boffvv.jpg" alt="SQL Server"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 2
&lt;/h4&gt;

&lt;p&gt;Choose the Server name of your instance. This name most likely will be in the format &lt;code&gt;ComputerName\ServerName&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn3e2xmcancoo3doygwrm.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn3e2xmcancoo3doygwrm.jpg" alt="server name"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3
&lt;/h4&gt;

&lt;p&gt;Choose Windows Authentication. Save your &lt;code&gt;ComputerName\ServerName&lt;/code&gt; in a Notepad, we will need this again later. Hit Connect.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsm8nozyu5bt37uoy7boo.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsm8nozyu5bt37uoy7boo.jpg" alt="server name"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 4
&lt;/h4&gt;

&lt;p&gt;Open the folder that we downloaded earlier by double clicking &lt;code&gt;ToDoList.sln&lt;/code&gt;. It should open in Visual Studio 2017.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 5
&lt;/h4&gt;

&lt;p&gt;Right click on the &lt;code&gt;ToDoListDb&lt;/code&gt; project and choose &lt;code&gt;Publish&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnwlhxwod0u9j2x4hppq4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnwlhxwod0u9j2x4hppq4.jpg" alt="publish"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 6
&lt;/h4&gt;

&lt;p&gt;On the modal, click &lt;code&gt;Edit&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmacuqdwrrou7nd9lkvi7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmacuqdwrrou7nd9lkvi7.jpg" alt="edit"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 7
&lt;/h4&gt;

&lt;p&gt;For Server name, take the Notepad value you saved for &lt;code&gt;ComputerName\ServerName&lt;/code&gt; and enter it here. Make sure the Database Name is &lt;code&gt;ToDoListDb&lt;/code&gt;, but that should be filled in for you. Click &lt;code&gt;OK&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgp4vfvlaozd5mf5kyhf9.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgp4vfvlaozd5mf5kyhf9.jpg" alt="database name"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 8
&lt;/h4&gt;

&lt;p&gt;Don’t edit any other values on this modal and just hit Publish. Note: Test Connection will not work.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdtl0bx9xc3gepyln36wt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdtl0bx9xc3gepyln36wt.jpg" alt="publish"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 9
&lt;/h4&gt;

&lt;p&gt;You will see the publish begin.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl3ib8zcyhni1qlr05pvf.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl3ib8zcyhni1qlr05pvf.jpg" alt="publish beginning"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 10
&lt;/h4&gt;

&lt;p&gt;It is done when you see this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frzqhwg6x9msdmgdxghgw.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frzqhwg6x9msdmgdxghgw.jpg" alt="done"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 11
&lt;/h4&gt;

&lt;p&gt;Go back to SQL Server Management Studio and hit refresh.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 12
&lt;/h4&gt;

&lt;p&gt;Your SQL database should look something like this now.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbhuk9kd0e3liy3l3mb57.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbhuk9kd0e3liy3l3mb57.jpg" alt="database"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Connecting Visual Studio and SQL Database 💽
&lt;/h1&gt;

&lt;p&gt;Now we need to link up all the pieces to ensure data is gathered and stored correctly. &lt;/p&gt;

&lt;h4&gt;
  
  
  Step 1
&lt;/h4&gt;

&lt;p&gt;Open the project in Visual Studio by double clicking &lt;code&gt;ToDoList.sln&lt;/code&gt;, if it is not already open from Part 1.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 2
&lt;/h4&gt;

&lt;p&gt;Open the &lt;code&gt;Web.config&lt;/code&gt; file of the &lt;code&gt;ToDoListDataAPI&lt;/code&gt; project. Make sure you are in the right project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6h5w8bvsw2qukwzqpauc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6h5w8bvsw2qukwzqpauc.jpg" alt="correct project"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3
&lt;/h4&gt;

&lt;p&gt;Edit the &lt;code&gt;ComputerName\ServerName&lt;/code&gt; highlighted and change it to your computer &amp;amp; SQL server name that you saved in a Notepad.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9hr708zlcbfy2ctuf5ss.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9hr708zlcbfy2ctuf5ss.jpg" alt="fix name"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mine looks like:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Your inputs and outputs will vary slightly based on your unique resource naming and credentials. &lt;/p&gt;
&lt;/blockquote&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

&lt;p&gt;&amp;lt;add name="todoItems" connectionString="Server=MICHAELCRUM0FD9\SQLEXPRESS;Initial Catalog=todolistdb;MultipleActiveResultSets=False;Integrated Security=True" providerName="System.Data.EntityClient" /&amp;gt;&lt;/p&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h4&gt;
&lt;br&gt;
  &lt;br&gt;
  &lt;br&gt;
  Step 4&lt;br&gt;
&lt;/h4&gt;

&lt;p&gt;Save the file and set the &lt;code&gt;ToDoListDataAPI&lt;/code&gt; project to &lt;code&gt;Set as Startup project&lt;/code&gt; by right clicking on the project and choosing that option.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqg2xy1v3sokpxuo0xru4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqg2xy1v3sokpxuo0xru4.jpg" alt="set as startup project"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hit &lt;code&gt;F5&lt;/code&gt; or run inside any browser.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you get &lt;code&gt;The Web server is configured to not list the contents of this directory&lt;/code&gt;, then just proceed to step 6.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Step 5
&lt;/h4&gt;

&lt;p&gt;Add &lt;code&gt;/swagger&lt;/code&gt; to the URL if it is not already there for you. The page should look like this if everything is working properly:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo2ty8v0wflqg72zkmwfb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo2ty8v0wflqg72zkmwfb.jpg" alt="add swagger"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 6
&lt;/h4&gt;

&lt;p&gt;Click &lt;code&gt;Show/Hide&lt;/code&gt; to get a full list of APIs available to the application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbrnzvgf2sm26kepj3r76.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbrnzvgf2sm26kepj3r76.jpg" alt="show or hide"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 7
&lt;/h4&gt;

&lt;p&gt;Click on &lt;code&gt;GET&lt;/code&gt; (the first one in the list) to expand it. Click &lt;code&gt;Try it out!&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;If you get a 200 Response Code, it worked! Also take note of the URL port number in your browser.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpt4lvtdev0jzo2xswdfc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpt4lvtdev0jzo2xswdfc.jpg" alt="get"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 8
&lt;/h4&gt;

&lt;p&gt;Switch back over to Visual Studio and go to the &lt;code&gt;Web.config&lt;/code&gt; in the &lt;code&gt;ToDoListAngular&lt;/code&gt; project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz0x5uan94ezvaol1oqih.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz0x5uan94ezvaol1oqih.jpg" alt="visual studio"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 9
&lt;/h4&gt;

&lt;p&gt;Make sure that the port number matches the port from the last step.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3td4no9de4rmo00150k7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3td4no9de4rmo00150k7.jpg" alt="matching port number"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 10
&lt;/h4&gt;

&lt;p&gt;Set the &lt;code&gt;ToDoListAngular&lt;/code&gt; project as Startup Project.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5d3nu6n7bko7fs4hsz25.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5d3nu6n7bko7fs4hsz25.jpg" alt="startup project"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 11
&lt;/h4&gt;

&lt;p&gt;Hit &lt;code&gt;F5&lt;/code&gt; or run. You should see the Angular app running in your web browser.&lt;/p&gt;

&lt;p&gt;Click on TODO list menu and add an entry. Try editing it and deleting it. You can put breakpoints in the code to learn more about how it is performing the CRUD operations. You can also check the SQL database to see the entries.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsovaxne11b3307g4pugc.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsovaxne11b3307g4pugc.gif" alt="use the app"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Congrats! We now have our SQL database and web front/backend setup locally. Next, we’ll look deeper into Swagger and deploying with Azure App Service.&lt;/p&gt;

&lt;h1&gt;
  
  
  Local Setup + Working with Swagger 📔
&lt;/h1&gt;

&lt;p&gt;What is Swagger UI? is a collection of HTML, Javascript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API.&lt;/p&gt;

&lt;p&gt;The nice thing about Swagger is that you can create an existing Web API app using the VS Templates and add Swagger via Nuget.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff3h5ap7kbkjdcjtw3068.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff3h5ap7kbkjdcjtw3068.jpg" alt="Swagger"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then if you spin up a project, you simply add &lt;code&gt;/swagger&lt;/code&gt; to see the UI. In the example below, we’ve already added it and supplied the comments in the app to where it recognizes it. This makes testing APIs very simply and it works in real-time, meaning if you run a &lt;code&gt;POST&lt;/code&gt;, then you can immediately check your database for the new record.&lt;/p&gt;

&lt;p&gt;Learn more about Swagger &lt;a href="https://github.com/swagger-api/swagger-ui" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Let's get going!&lt;/p&gt;

&lt;h1&gt;
  
  
  Swagger All The Things 📖
&lt;/h1&gt;

&lt;h4&gt;
  
  
  Step 1
&lt;/h4&gt;

&lt;p&gt;Open the project in Visual Studio by double clicking &lt;code&gt;ToDoList.sln&lt;/code&gt;, if it is not already open from the previous parts. Navigate to the &lt;code&gt;ToDoListDataAPI&lt;/code&gt; project.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 2
&lt;/h4&gt;

&lt;p&gt;Set the &lt;code&gt;ToDoListDataAPI&lt;/code&gt; project to Set as Startup project by right clicking on the project and choosing that option and run the application.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3
&lt;/h4&gt;

&lt;p&gt;Add &lt;code&gt;/swagger&lt;/code&gt; to the end of your URL if it is not already there, you should see a page like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo2ty8v0wflqg72zkmwfb.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo2ty8v0wflqg72zkmwfb.jpg" alt="url"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 4
&lt;/h4&gt;

&lt;p&gt;Click on the &lt;code&gt;Show/Hide&lt;/code&gt; button.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 5
&lt;/h4&gt;

&lt;p&gt;Run a GET which is the first API on the page &lt;code&gt;/api/ToDoList&lt;/code&gt;, you should see:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7mdh27mz654zpspgc0fp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7mdh27mz654zpspgc0fp.png" alt="API page"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 6
&lt;/h4&gt;

&lt;p&gt;Run a &lt;code&gt;POST&lt;/code&gt;, click where the screenshot shows, and fill in an &lt;code&gt;ID&lt;/code&gt; with a random number and any description you want and then click &lt;code&gt;Try it out!&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 7
&lt;/h4&gt;

&lt;p&gt;Run a &lt;code&gt;GET&lt;/code&gt; again, you should see your added value:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqob2obqragk0val7mhhl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqob2obqragk0val7mhhl.png" alt="See it work"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 8
&lt;/h4&gt;

&lt;p&gt;Run a &lt;code&gt;PUT&lt;/code&gt;, again click to get the format from where it’s shown in the screenshot and modify an existing record’s description.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flg1h2mi4a87oqo7vqann.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flg1h2mi4a87oqo7vqann.png" alt="PUT"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 9
&lt;/h4&gt;

&lt;p&gt;Try to run a &lt;code&gt;GET&lt;/code&gt; by &lt;code&gt;ID&lt;/code&gt;, use 1 for example:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff0dc40jjcztc6erzvnaq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff0dc40jjcztc6erzvnaq.png" alt="GET"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 10
&lt;/h4&gt;

&lt;p&gt;Switch back to SQL Server Management Studio (and log in if you need to) and choose &lt;code&gt;Select Top 1000 Rows&lt;/code&gt; on the &lt;code&gt;ToDoListDb&lt;/code&gt; db to see the data.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F70nveob5xyjfxkxih5z7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F70nveob5xyjfxkxih5z7.jpg" alt="Top 1000"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 11
&lt;/h4&gt;

&lt;p&gt;Your SQL Server Management Studio table should look like this now:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjq3wdhgu5xbz9d54rw61.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjq3wdhgu5xbz9d54rw61.jpg" alt="Looks correct"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next we need to deploy the SQL database.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Ready to dig into Azure DevOps and see how we've evolved the product from VSTS?&lt;/em&gt; Check out our &lt;a href="https://docs.microsoft.com/en-us/azure/devops-project/?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Azure DevOps quickstarts and tutorials&lt;/a&gt;!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Deploy SQL Database to Azure SQL 📬
&lt;/h1&gt;

&lt;h4&gt;
  
  
  Step 1
&lt;/h4&gt;

&lt;p&gt;Log into the Azure Portal at portal.azure.com if you aren’t already logged in.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 2
&lt;/h4&gt;

&lt;p&gt;Create a new SQL Database. Click &lt;code&gt;New&lt;/code&gt;, select &lt;code&gt;Databases&lt;/code&gt;, choose SQL Database, then lastly hit &lt;code&gt;Create&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flyw3gd0zmf9tswjqzmch.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flyw3gd0zmf9tswjqzmch.png" alt="Create"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3
&lt;/h4&gt;

&lt;p&gt;Click on &lt;code&gt;Server and Pricing Tier&lt;/code&gt; to get a slideout options. In the Server slideout, make sure you create a username and password and keep it somewhere safe as you will need this to login using SQL Server Management Studio (SSMS). In the &lt;code&gt;Pricing Tier&lt;/code&gt;, change to &lt;code&gt;Basic&lt;/code&gt; so it only costs about $5 per month. Your screen will look approximately like this:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzkrjb3f5uxk4lj6qn60b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzkrjb3f5uxk4lj6qn60b.png" alt="Pricing Tier"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 4
&lt;/h4&gt;

&lt;p&gt;Click on &lt;code&gt;All Resources&lt;/code&gt; on the left menu. You should see your new SQL Server and SQL Database. Click on the &lt;code&gt;SQL Database&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqojv1igubc03fo26e8bn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqojv1igubc03fo26e8bn.png" alt="All Resources"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 5
&lt;/h4&gt;

&lt;p&gt;On the &lt;code&gt;Overview&lt;/code&gt; tab. Copy the Server name to somewhere safe. Click on the &lt;code&gt;Show Connection Strings&lt;/code&gt; and copy it somewhere safe.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6udm45mxrfko7d8nft0w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6udm45mxrfko7d8nft0w.png" alt="Overview"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The connection string will look like this (save this in a Notepad for the web.config in the solution later):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwez586z1wdjsh1yt4mfd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwez586z1wdjsh1yt4mfd.png" alt="connection string"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 6
&lt;/h4&gt;

&lt;p&gt;Open &lt;code&gt;SSMS&lt;/code&gt; and enter the server name, username, and password as shown below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feuf1tkqzgotdssf0jkck.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feuf1tkqzgotdssf0jkck.png" alt="SSMS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If you cannot login, please go to the Portal and add your IP address by clicking on the SQL Server you created, then going to Firewall. You may also be able to set the firewall prompt through the SQL Server tool.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi5hf1w1m89mnxy1n9h3g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi5hf1w1m89mnxy1n9h3g.png" alt="Firewall"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 7
&lt;/h4&gt;

&lt;p&gt;Go back to the &lt;a href=""&gt;Part 1&lt;/a&gt; and repeat steps 6-13, except use the Azure SQL Server name that we created earlier instead of your local DB.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 8
&lt;/h4&gt;

&lt;p&gt;Once the DB has been saved to Azure, go into the connection strings of your API project that can be found in the web.config as shown below.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 9
&lt;/h4&gt;

&lt;p&gt;In the &lt;code&gt;web.config&lt;/code&gt;, change your connection string so that it points to your Azure SQL Server connection string (that you should have saved into Notepad earlier). Make sure you add your username and password for your Azure SQL Server into the connection string.&lt;/p&gt;

&lt;h1&gt;
  
  
  Frontend Angular + Backend API projects 🖥️
&lt;/h1&gt;

&lt;p&gt;Before we begin, I’m assuming you’re using the same email address for Azure DevOps that you are using for Azure.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 1
&lt;/h4&gt;

&lt;p&gt;Open the solution file in Visual Studio, if it is not already opened. Login to Visual Studio with the same email address that you used to signup for your Azure account.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 2
&lt;/h4&gt;

&lt;p&gt;Right click on the API project and choose &lt;code&gt;Publish&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F31nuzt23kwznu9pm15pg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F31nuzt23kwznu9pm15pg.png" alt="Publish"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3
&lt;/h4&gt;

&lt;p&gt;Choose an App Service.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa2aerl97o1k2xuozcb8p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa2aerl97o1k2xuozcb8p.png" alt="app service"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 4
&lt;/h4&gt;

&lt;p&gt;Fill in all the settings: add in a name, choose the subscription, create a new resource group. For the App Service Plan: choose a name, the closest location to you and Free. Then on the main modal click &lt;code&gt;Create&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgswoj1by4g7gcjghcibf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fgswoj1by4g7gcjghcibf.png" alt="Create"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are on the &lt;code&gt;ToDoListAPI&lt;/code&gt; project, make sure you have API selected.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fguna0xl618utnrhngyve.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fguna0xl618utnrhngyve.png" alt="API selected"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are on the &lt;code&gt;ToDoListAngular&lt;/code&gt; project, make sure you have Web App selected.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frs2xq8hpn4svp89zcg70.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frs2xq8hpn4svp89zcg70.png" alt="Web app selected"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 5
&lt;/h4&gt;

&lt;p&gt;Make sure it shows up in the Azure Portal after giving it a few minutes to publish. Click on the API project to go to the overview (red arrow).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0zweqj8jcpyq2delr3ze.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0zweqj8jcpyq2delr3ze.png" alt="Portal"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 6
&lt;/h4&gt;

&lt;p&gt;Copy the URL of the API App Service as highlighted in the screenshot.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F62c0ci6b90nrjhy2k8yd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F62c0ci6b90nrjhy2k8yd.png" alt="url"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 7
&lt;/h4&gt;

&lt;p&gt;Let’s connect the frontend to the API project. Open up the &lt;code&gt;ToDoListAngular&lt;/code&gt; solution. Go to the &lt;code&gt;web.config&lt;/code&gt; file of your frontend &lt;code&gt;ToDoListAngular&lt;/code&gt; project. Paste in the URL from the previous step.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxju2bhfllyl7zoh7rkm2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxju2bhfllyl7zoh7rkm2.png" alt="frontend"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 8
&lt;/h4&gt;

&lt;p&gt;Let’s do the same publishing to Azure for the frontend project.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Repeat steps 2-5, BUT do it on the frontend &lt;code&gt;ToDoListAngular&lt;/code&gt; project. Make sure on &lt;strong&gt;Step 4&lt;/strong&gt; you choose the right option of &lt;code&gt;Web App&lt;/code&gt; for the Angular Web project.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h4&gt;
  
  
  Step 9
&lt;/h4&gt;

&lt;p&gt;Verify once you are done publishing that it is in the Azure Portal. Click on the &lt;code&gt;App Service&lt;/code&gt; (red arrow in screenshot).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1uuig695ee9ddrtsb8ak.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1uuig695ee9ddrtsb8ak.png" alt="Verify"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 10
&lt;/h4&gt;

&lt;p&gt;On the Overview page, copy the URL.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl6trhvsznotw463rpynk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fl6trhvsznotw463rpynk.png" alt="Overview"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 11
&lt;/h4&gt;

&lt;p&gt;Paste the URL into your browser and click on the Todo tab to see the Todo list. You should now have a working Azure App Service Web front end talking to an Azure App Service API which connects to Azure SQL.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5wrobur47q4pb7gxghrb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5wrobur47q4pb7gxghrb.png" alt="URL"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Great, so now you’ve moved your project to the cloud with Azure! &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Ready to dig into Azure DevOps and see how we've evolved the product from VSTS?&lt;/em&gt; Check out our &lt;a href="https://docs.microsoft.com/en-us/azure/devops-project/?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Azure DevOps quickstarts and tutorials&lt;/a&gt;!&lt;/p&gt;




&lt;p&gt;We'll be posting articles every day in April, so stay tuned or jump ahead and check out more tips and tricks &lt;a href="http://azuredev.tips" rel="noopener noreferrer"&gt;now&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>azureapril</category>
      <category>azure</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Deploy Jekyll Site Hosted on GitHub to Azure</title>
      <dc:creator>Emily Freeman</dc:creator>
      <pubDate>Thu, 04 Apr 2019 02:56:26 +0000</pubDate>
      <link>https://dev.to/azure/deploy-jekyll-site-hosted-on-github-to-azure-4a55</link>
      <guid>https://dev.to/azure/deploy-jekyll-site-hosted-on-github-to-azure-4a55</guid>
      <description>&lt;p&gt;&lt;em&gt;We've selected our favorite tips and tricks created by &lt;a href="https://twitter.com/mbcrump" rel="noopener noreferrer"&gt;Michael Crump&lt;/a&gt; and are delivering fresh technical content on Azure all April! Miss a day (Or more)? &lt;a href="https://dev.to/t/azureapril"&gt;Catch up with the series&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't have Azure?&lt;/strong&gt; &lt;a href="https://azure.microsoft.com/en-us/free?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Grab a free subscription&lt;/a&gt;. &lt;/p&gt;




&lt;p&gt;A ton of us use Jekyll for our personal sites and/or blogs.&lt;/p&gt;

&lt;p&gt;If you have already have an existing Jekyll based site that is hosted on GitHub, you can easily deploy that site to Azure App Services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But why?&lt;/strong&gt; If GitHub Pages is &lt;em&gt;free&lt;/em&gt;, then why pay? You might want to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;push your site to a private repo (instead of public).&lt;/li&gt;
&lt;li&gt;set up “real” SSL, compared to the workarounds.&lt;/li&gt;
&lt;li&gt;take advantage of deployment slots.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I’m sure there are more. Regardless, I think it's an interesting exercise using an incredibly common tool. &lt;/p&gt;

&lt;h1&gt;
  
  
  Gather All The Pieces 📎
&lt;/h1&gt;

&lt;p&gt;I’m assuming you already have a GitHub Pages site that uses Jekyll hosted on GitHub. If that is true, then the first thing that you’ll want to do is grab these three files.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;deploy.cmd&lt;/code&gt;: a &lt;a href="https://github.com/projectkudu/kudu" rel="noopener noreferrer"&gt;Kudu&lt;/a&gt; Deployment script that handles setup and deployment of the web site and ensures Ruby is installed&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;getruby.cmd&lt;/code&gt;: a site that ensure the latest version of Ruby is installed and ensures Jekyll has been built&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;.deployment&lt;/code&gt;: a configuration file that Kudu understands that calls the deploy.cmd script&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;Gemfile&lt;/code&gt;: you probably already have this but ensure it is there and if not then just copy mine.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once you have these three files, ensure they are in the root of your public GitHub pages site (e.g. &lt;code&gt;something.github.io&lt;/code&gt;).&lt;/p&gt;

&lt;h1&gt;
  
  
  Travel To The Azure Portal 🖱️
&lt;/h1&gt;

&lt;p&gt;You’ll want to go inside of your &lt;a href="https://azure.microsoft.com/en-us/features/azure-portal/?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Azure Portal&lt;/a&gt; (or use the CLI tools) and create a Web App under App Service. Once the site is deployed, then go to Deployment Options and select GitHub, your project and press &lt;code&gt;OK&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fc392bee1f1c497df1c946b17178a94905c5df36d%2F04b41%2Ffiles%2Fazuretip16.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2Fc392bee1f1c497df1c946b17178a94905c5df36d%2F04b41%2Ffiles%2Fazuretip16.gif" alt="app service -&amp;gt; web app"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should see &lt;code&gt;Setup up Deployment Source…&lt;/code&gt; in the notification window. You’ll probably want to wait a good 15 to 20 minutes for Azure to setup everything. You can stay on the &lt;code&gt;Deployment Options&lt;/code&gt; blade and you should see the status of the deployment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F1137122492a967ccb08ac2b945919f3c8ce8400c%2Fe4c05%2Ffiles%2Ffetchanddeploy.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F1137122492a967ccb08ac2b945919f3c8ce8400c%2Fe4c05%2Ffiles%2Ffetchanddeploy.png" alt="deployment options"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Success! ✅
&lt;/h1&gt;

&lt;p&gt;After a while you see a check mark that it completed successfully. Now you can navigate to the URL listed on the &lt;code&gt;Overview&lt;/code&gt; blade.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F3bfda6e0d26208be6969b5b1eee21f55f00ea3e4%2Ff5ca0%2Ffiles%2Ffetchanddeploy1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fd33wubrfki0l68.cloudfront.net%2F3bfda6e0d26208be6969b5b1eee21f55f00ea3e4%2Ff5ca0%2Ffiles%2Ffetchanddeploy1.png" alt="overview"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And... you're done! Check it out. That was easy, right?! &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ready to go beyond Jekyll?&lt;/strong&gt; &lt;a href="https://docs.microsoft.com/azure/app-service/?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Check out Azure's App Service documentation for language-specific quickstarts.&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;We'll be posting articles every day in April, so stay tuned! Or jump ahead and check out more tips and tricks &lt;a href="http://azuredev.tips" rel="noopener noreferrer"&gt;now&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>azureapril</category>
      <category>productivity</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Node.js + AKS on Azure DevOps</title>
      <dc:creator>Emily Freeman</dc:creator>
      <pubDate>Wed, 03 Apr 2019 00:35:05 +0000</pubDate>
      <link>https://dev.to/azure/node-js-aks-on-azure-devops-1462</link>
      <guid>https://dev.to/azure/node-js-aks-on-azure-devops-1462</guid>
      <description>&lt;p&gt;&lt;em&gt;We've selected our favorite tips and tricks created by &lt;a href="https://twitter.com/mbcrump" rel="noopener noreferrer"&gt;Michael Crump&lt;/a&gt; and are delivering fresh technical content on Azure all April! Miss a day (or more)? &lt;a href="https://dev.to/t/azureapril"&gt;Catch up with the series&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't have Azure?&lt;/strong&gt; &lt;a href="https://azure.microsoft.com/en-us/free?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Grab a free subscription&lt;/a&gt;.  &lt;/p&gt;




&lt;p&gt;I want to give you a quick tour around Azure DevOps and Azure Kubernetes Service(AKS) using Node.js. &lt;/p&gt;

&lt;p&gt;We'll walk through creating an AKS cluster using an Azure DevOps and take a look under the hood to help understand how to get started with AKS.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The Azure Portal and Azure DevOps is always evolving and improving! If a screenshot doesn't match exactly what you're seeing, that's why. I believe the explanations are enough to help you find your way. If you run into issues, comment below and we can figure it out together! &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  What The Heck Is &lt;a href="https://azure.microsoft.com/en-us/services/devops/?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Azure DevOps&lt;/a&gt;? And &lt;a href="https://docs.microsoft.com/en-us/azure/aks/intro-kubernetes?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;AKS&lt;/a&gt;?! 😅
&lt;/h1&gt;

&lt;p&gt;Azure DevOps is a cloud service (formally called VSTS) for collaborating on code development. It essentially powers the entire software delivery lifecycle for engineering teams. You can create processes for you and your team around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source control&lt;/li&gt;
&lt;li&gt;CD/CD&lt;/li&gt;
&lt;li&gt;Agile tooling&lt;/li&gt;
&lt;li&gt;Testing&lt;/li&gt;
&lt;li&gt;Builds&lt;/li&gt;
&lt;li&gt;Releases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can think of Azure DevOps as a more verbose cousin to Jenkins or CircleCI. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Don't wait!&lt;/strong&gt; &lt;a href="https://azure.microsoft.com/en-us/services/devops/?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Check out Azure DevOps&lt;/a&gt; and see how powerful it is.  &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Azure Kubernetes Service (AKS) manages your hosted &lt;a href="https://docs.microsoft.com/en-us/azure/aks/intro-kubernetes?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Kubernetes&lt;/a&gt; environment, making it quick and easy to deploy and manage containerized applications without container orchestration expertise. It also eliminates the burden of ongoing operations and maintenance by provisioning, upgrading, and scaling resources on demand, without taking your applications offline.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Kubernetes is &lt;strong&gt;HOT&lt;/strong&gt;. &lt;a href="https://docs.microsoft.com/en-us/azure/aks/intro-kubernetes?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;We've got you covered on everything you need to know&lt;/a&gt;. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Create Your DevOps Project 👩🏾‍💻
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;A common pitfall in this tutorial is creating the project before your organization has been created in Azure. If you run into any errors, ensure your organization was created in Azure. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;Open the &lt;a href="https://azure.microsoft.com/en-us/features/azure-portal/?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Azure portal&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Search for "DevOps" and choose &lt;code&gt;DevOps Project&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Click the &lt;code&gt;Add&lt;/code&gt; button.&lt;/li&gt;
&lt;li&gt;Select the Node.js application, click it and then the &lt;code&gt;Next&lt;/code&gt; button.&lt;/li&gt;
&lt;li&gt;Select &lt;code&gt;Express.js&lt;/code&gt; for the application framework and click &lt;code&gt;Next&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;For deploying the application, select &lt;code&gt;Kubernetes Service&lt;/code&gt; and click &lt;code&gt;Next&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt;Now just give the DevOps project an organization name and a project name. You can make this anything you want. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Provide a subscription and a cluster name and click the &lt;code&gt;Done&lt;/code&gt; button.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Boom!&lt;/strong&gt; You did it. Seriously. It's &lt;em&gt;that&lt;/em&gt; easy. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frf57cjm1za4mxeozzfox.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frf57cjm1za4mxeozzfox.gif" alt="project name"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A lot of amazing work is happening in the background, so now is the time to drink a cup of coffee or read another post (or drink some wine...) before clicking the refresh button on your DevOps Projects list.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwsdarepuo1pmkat3yfms.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwsdarepuo1pmkat3yfms.png" alt="refresh"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click on your DevOps project name in the list to go to the DevOps project dashboard. This has everything you need to access the source code repository and the application build and release pipelines. These pipelines automate the steps needed to take your committed code, integrate it, build it and deploy it to a live Kubernetes environment. &lt;/p&gt;

&lt;p&gt;There are also links to your live deployed application, the Kubernetes cluster and &lt;a href="https://docs.microsoft.com/en-us/azure/azure-monitor/app/app-insights-overview?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Application Insights&lt;/a&gt; (telemetry for your live site).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnfspf3c3zggg1it4qwwj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnfspf3c3zggg1it4qwwj.png" alt="links"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should also have received an email from Azure DevOps or an alert in the portal letting you know the project is ready. If you'd like, set up team members in your project. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz50ly3lsurii5rj6wn8o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz50ly3lsurii5rj6wn8o.png" alt="email"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Taking A Peek At The Code 🔍
&lt;/h1&gt;

&lt;p&gt;In the &lt;a href="https://azure.microsoft.com/en-us/services/devops/pipelines/" rel="noopener noreferrer"&gt;CI/CD pipeline&lt;/a&gt;, click on the commit to see the code. You can also click on &lt;code&gt;Master&lt;/code&gt; to take you to the full file list.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxlxshhm86olgvt6kfl0h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxlxshhm86olgvt6kfl0h.png" alt="code"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This takes you to the commit for the repo we just released containing the deployed sample app.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fofsglss66gd3y90yy48x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fofsglss66gd3y90yy48x.png" alt="deployed app"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When you created the DevOps project, it cloned the source code from the &lt;code&gt;devops-project-samples&lt;/code&gt; GitHub project and added it your DevOps projects and did a lot of the initial plumbing for you. &lt;em&gt;How cool is that?&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Taking A Look At The Build 🤓
&lt;/h1&gt;

&lt;p&gt;Back on the DevOps Project dashboard, click the &lt;code&gt;Build&lt;/code&gt; link that has the successful build number.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7z7cgaqdrcoz8gx1hqb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr7z7cgaqdrcoz8gx1hqb.png" alt="build number"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This takes you to the new Azure DevOps Pipelines build that was created for the project. Now click the &lt;code&gt;Edit&lt;/code&gt; button at the top.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4nmg881zbcppxz2d568r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4nmg881zbcppxz2d568r.png" alt="edit button"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You now see the steps created for building a container image and a &lt;a href="https://docs.microsoft.com/en-us/azure/aks/kubernetes-helm?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Helm&lt;/a&gt; package. Helm is used to deploy applications to Kubernetes and is the default in DevOps projects that target Kubernetes.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Microsoft is solving really hard problems to make your life easier. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftdg09v4jw4elt0nikf3o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftdg09v4jw4elt0nikf3o.png" alt="helm"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clicking on either of the Docker tasks will show you the new &lt;a href="https://azure.microsoft.com/en-us/services/container-registry/?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Azure Container Registry (ACR)&lt;/a&gt; that the DevOps project created, along with the image name, plus the build number.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft7jt74gwmv3tuow39eim.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft7jt74gwmv3tuow39eim.png" alt="docker artifact"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The build creates an ACR as well as builds and pushes the image using Docker. It automatically checks if Helm is properly installed and begins packaging and deploying the &lt;code&gt;charts/sampleapp&lt;/code&gt; directory. It also creates the &lt;a href="https://docs.microsoft.com/en-us/azure/azure-resource-manager/resource-manager-quickstart-create-templates-use-the-portal?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;ARM templates&lt;/a&gt; and finally publishes the build artifact.&lt;/p&gt;

&lt;p&gt;If you switch back over to &lt;code&gt;Repos&lt;/code&gt;, then &lt;code&gt;Files&lt;/code&gt;, then &lt;code&gt;Applications&lt;/code&gt;, you can see the &lt;code&gt;charts/sampleapp&lt;/code&gt; folder.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6pehw0by6dqnsj5wgziv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6pehw0by6dqnsj5wgziv.png" alt="repos"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We'll finish up the pipeline section by looking at &lt;code&gt;dev&lt;/code&gt; and reviewing the &lt;code&gt;resources&lt;/code&gt; section. &lt;/p&gt;

&lt;h1&gt;
  
  
  Finishing Up Your Pipelines 🔧
&lt;/h1&gt;

&lt;p&gt;Back on the DevOps Project dashboard, click the &lt;code&gt;Release&lt;/code&gt; link with the number. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frnlkyr8kp9gxjoscyt9a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frnlkyr8kp9gxjoscyt9a.png" alt="successful build"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;blockquote&gt;
&lt;p&gt;Be sure the build you select is GREEN. It signifies a successful build without errors. &lt;/p&gt;

&lt;p&gt;If the build is RED, click on it and find the error. A common error you might encounter is &lt;code&gt;The subscription is not registered to use namespace 'Microsoft.ContainerService'&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;One way to quickly resolve that is by bringing up Cloud Shell, selecting PowerShell and running the following command:&lt;/p&gt;

&lt;p&gt;While this is designed for PowerShell, if you're an avid Bash user, will you comment below with the command you used?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

PS Azure:\&amp;gt; Register-AzureRmResourceProvider -ProviderNamespace “Microsoft.ContainerService”


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;You'll receive an output similar to below. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

ProviderNamespace : Microsoft.ContainerService
RegistrationState : Registering
ResourceTypes     : {containerServices, managedClusters, locations, locations/operationresults...}
Locations         : {Japan East, Central US, East US 2, Japan West...}


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;




&lt;p&gt;If all goes well, you'll see the basic Azure DevOps release pipeline. Click the &lt;code&gt;Edit&lt;/code&gt; release button at the top.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fitzsfe8hri69q0gg94qd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fitzsfe8hri69q0gg94qd.png" alt="edit release button"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then click the &lt;code&gt;Edit&lt;/code&gt; tasks link.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5e5em77zbpkp7y10lb1a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5e5em77zbpkp7y10lb1a.png" alt="edit"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You now see the list of tasks that need to be run such as Creating the AKS cluster, running a PowerShell script and packaging and deploying Helm charts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2oqjr7c232wjeuvn37zx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2oqjr7c232wjeuvn37zx.png" alt="AKS cluster"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Azure Resources In A Nutshell 🥜
&lt;/h1&gt;

&lt;p&gt;Back in the DevOps Project dashboard, let’s look at the Azure resources and Application Insights. The resources are the URL to your live site running in Kubernetes and a link to the AKS cluster. The last link will take you to see the live telemetry for your site provided by Application Insights. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Telemetry is just a fancy way of saying this is how you monitor the health of your app. &lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F654nc40uotuyeezs1etv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F654nc40uotuyeezs1etv.png" alt="application insights"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Live App
&lt;/h3&gt;

&lt;p&gt;Click on the &lt;code&gt;External Endpoint&lt;/code&gt; link to be taken to the deployed application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffrcqnacymos6lmazk5e8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffrcqnacymos6lmazk5e8.png" alt="external endpoint"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  AKS
&lt;/h3&gt;

&lt;p&gt;The second link is to the Azure Kubernetes Service.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ffepti2l9utw6i104m6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2ffepti2l9utw6i104m6.png" alt="AKS"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Application Insights
&lt;/h3&gt;

&lt;p&gt;The last link shows the Application Insights created for the service which includes powerful analytics tools to help you diagnose issues and to understand what users actually do with your app. It's designed to help you continuously improve performance and usability and works seamlessly with Azure DevOps&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffywj0v61o1lzn2bxv1mi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffywj0v61o1lzn2bxv1mi.png" alt="application insights"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now if you go to &lt;code&gt;Resource Groups&lt;/code&gt; on the Azure portal and search for the name of the DevOps project, you’ll see that three resource groups were created.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F26fvracmbt58tekg19ue.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F26fvracmbt58tekg19ue.png" alt="resource groups"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Remember! Avoid any costs related to this tutorial by deleting the resources created.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;Want more?&lt;/strong&gt; Don't wait. &lt;a href="https://azure.microsoft.com/en-us/services/devops/?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Continue learning about Azure DevOps&lt;/a&gt;. &lt;/p&gt;




&lt;p&gt;We'll be posting articles every day in April, so stay tuned! Or jump ahead and check out more tips and tricks &lt;a href="http://azuredev.tips?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;now&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>azureapril</category>
      <category>kubernetes</category>
      <category>node</category>
      <category>devops</category>
    </item>
    <item>
      <title>Machine Learning in Azure</title>
      <dc:creator>Emily Freeman</dc:creator>
      <pubDate>Tue, 02 Apr 2019 13:05:14 +0000</pubDate>
      <link>https://dev.to/azure/machine-learning-in-azure-1b84</link>
      <guid>https://dev.to/azure/machine-learning-in-azure-1b84</guid>
      <description>&lt;p&gt;&lt;em&gt;We've selected our favorite tips and tricks created by &lt;a href="https://twitter.com/mbcrump" rel="noopener noreferrer"&gt;Michael Crump&lt;/a&gt; and are delivering fresh technical content on Azure all April! Miss a day (Or more)? &lt;a href="https://dev.to/t/azureapril"&gt;Catch up with the series&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Thank you also to &lt;a href="https://twitter.com/ljquintanilla" rel="noopener noreferrer"&gt;Luis Quintanilla&lt;/a&gt; for inspiring this with his work on ML.NET and Azure Functions.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't have Azure?&lt;/strong&gt; &lt;a href="https://azure.microsoft.com/en-us/free?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Grab a free subscription&lt;/a&gt;. &lt;/p&gt;




&lt;p&gt;Machine learning can be tricky. Even the name stresses me out. Like... how am I supposed to &lt;em&gt;TEACH&lt;/em&gt; a &lt;em&gt;MACHINE&lt;/em&gt;?!&lt;/p&gt;

&lt;p&gt;Fortunately, Azure is coming up with ways to make it easier for developers to jump into machine learning. &lt;a href="https://azure.microsoft.com/en-us/updates/ml-net/" rel="noopener noreferrer"&gt;ML.NET&lt;/a&gt; is the machine learning framework that Microsoft Research made just for .NET developers so you can do everything inside Visual Studio. &lt;/p&gt;

&lt;p&gt;When you're ready to deploy your ML.NET algorithm, you can use serverless architecture through Azure Functions. You can think of it as the “Don’t worry about it!” option when you want to get an app up and running but don’t necessarily want to mess around with servers and containers and infrastructure.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://docs.microsoft.com/azure/machine-learning/?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Check out more ML quickstarts and tutorials&lt;/a&gt;!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Serverless Machine Learning
&lt;/h2&gt;

&lt;p&gt;This is inspired by &lt;a href="http://luisquintanilla.me/2018/08/21/serverless-machine-learning-mlnet-azure-functions/" rel="noopener noreferrer"&gt;Luis Quintanilla’s article&lt;/a&gt; about using ML.NET with Azure Functions, where he took these two great ideas and combined them. &lt;/p&gt;

&lt;p&gt;As you follow this tutorial, you will use ML.NET locally to train your machine learning model. Then you will create an Azure environment with a storage account and an Azure Function to host your machine learning app. The final step is building an app that uses your model.&lt;/p&gt;

&lt;p&gt;Let's get started!&lt;/p&gt;

&lt;h2&gt;
  
  
  Create Your Model
&lt;/h2&gt;

&lt;p&gt;For the ML.NET portion of this quick project, let’s build the iris categorization model from the &lt;a href="https://dotnet.microsoft.com/learn/machinelearning-ai/ml-dotnet-get-started-tutorial/intro?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Getting started in 10 minutes ML.NET tutorial&lt;/a&gt;. As a prerequisite, you’ll want to install &lt;a href="https://docs.microsoft.com/cli/azure/install-azure-cli?view=azure-cli-latest&amp;amp;WT.mc_id=https://docs.microsoft.com/cli/azure/install-azure-cli?view=azure-cli-latest&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Azure CLI 2.0&lt;/a&gt;, &lt;a href="https://docs.microsoft.com/azure/azure-functions/functions-run-local?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Azure Functions Core Tools&lt;/a&gt; and a recent version of &lt;a href="https://dotnet.microsoft.com/download/dotnet-core/2.2?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;.NET Core&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkpuaqbprnhy5ws9d9gm8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkpuaqbprnhy5ws9d9gm8.png" alt="iris flower"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open a command prompt and create a new folder for your ML.NET project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; mkdir demo
&amp;gt; cd demo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Next, create a new solution as well as a new console project and install the ML.NET package.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; dotnet new solution
&amp;gt; dotnet new console -o model
&amp;gt; dotnet sln add model/model.csproj
&amp;gt; cd model
&amp;gt; dotnet add package Microsoft.ML --version 0.4.0
&amp;gt; dotnet restore
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a data directory under model.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;gt; mkdir data
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open the &lt;a href="https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data" rel="noopener noreferrer"&gt;UCI Machine Learning Repository: Iris Data Set&lt;/a&gt;, copy and paste the data into VS Code, or TextEdit or Notepad, and save it as &lt;code&gt;iris-data.txt&lt;/code&gt; in the &lt;code&gt;data&lt;/code&gt; directory. &lt;/p&gt;

&lt;p&gt;Now it’s time to write some code. Open up your project in Visual Studio Code and create a couple of data structure classes: &lt;code&gt;IrisData.cs&lt;/code&gt; and &lt;code&gt;IrisPrediction.cs&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;using Microsoft.ML.Runtime.Api;

        public class IrisData
        {
            [Column("0")]
            public float SepalLength;

            [Column("1")]
            public float SepalWidth;

            [Column("2")]
            public float PetalLength;

            [Column("3")]
            public float PetalWidth;

            [Column("4")]
            [ColumnName("Label")]
            public string Label;
        }

        public class IrisPrediction
        {
            [ColumnName("PredictedLabel")]
            public string PredictedLabels;
        }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add a model class to perform the machine learning training.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;using System.Threading.Tasks;
using Microsoft.ML;
using Microsoft.ML.Data;
using Microsoft.ML.Trainers;
using Microsoft.ML.Transforms;

    class Model
    {
        public static async Task&amp;lt;PredictionModel&amp;lt;IrisData, IrisPrediction&amp;gt;&amp;gt; Train(LearningPipeline pipeline, string dataPath, string modelPath)
        {
            // Load Data
            pipeline.Add(new TextLoader(dataPath).CreateFrom&amp;lt;IrisData&amp;gt;(separator: ','));

            // Transform Data
            // Assign numeric values to text in the "Label" column, because
            // only numbers can be processed during model training
            pipeline.Add(new Dictionarizer("Label"));

            // Vectorize Features
            pipeline.Add(new ColumnConcatenator("Features", "SepalLength", "SepalWidth", "PetalLength", "PetalWidth"));

            // Add Learner
            pipeline.Add(new StochasticDualCoordinateAscentClassifier());

            // Convert Label back to text
            pipeline.Add(new PredictedLabelColumnOriginalValueConverter() { PredictedLabelColumn = "PredictedLabel" });

            // Train Model
            var model = pipeline.Train&amp;lt;IrisData, IrisPrediction&amp;gt;();

            // Persist Model
            await model.WriteAsync(modelPath);

            return model;
        }
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Place your logic inside the &lt;code&gt;Program.cs&lt;/code&gt; file to run through the process:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    class Program
    {
        static void Main(string[] args)
        {
            string dataPath = "/Users/mbcrump/Documents/demo/model/data/iris-data.txt";

            string modelPath = "/Users/mbcrump/Documents/demo/model/model.zip";

            var model = Model.Train(new LearningPipeline(), dataPath, modelPath).Result;

            // Test data for prediction
            var prediction = model.Predict(new IrisData()
            {
                SepalLength = 3.3f,
                SepalWidth = 1.6f,
                PetalLength = 0.2f,
                PetalWidth = 5.1f
            });

            Console.WriteLine($"Predicted flower type is: {prediction.PredictedLabels}");

        }
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the model project to create a new &lt;code&gt;model.zip&lt;/code&gt; file in your root directory. Below is the results that I got.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Michaels-MacBook-Pro:model mbcrump$ dotnet run
Automatically adding a MinMax normalization transform, use 'norm=Warn' or 'norm=No' to turn this behavior off.
Using 4 threads to train.
Automatically choosing a check frequency of 4.
Auto-tuning parameters: maxIterations = 9996.
Auto-tuning parameters: L2 = 2.668802E-05.
Auto-tuning parameters: L1Threshold (L1/L2) = 0.
Using best model from iteration 500.
Not training a calibrator because it is not needed.
Predicted flower type is: Iris-virginica
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Congratulations! You’ve trained a machine learning model with ML.NET that categorizes irises.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;a href="https://docs.microsoft.com/azure/machine-learning/?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Check out more ML quickstarts and tutorials&lt;/a&gt;!&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Setting up Your Azure Environment Using Cloud Shell
&lt;/h2&gt;

&lt;p&gt;We'll use Azure Cloud Shell which uses the &lt;a href="https://docs.microsoft.com/cli/azure/install-azure-cli?view=azure-cli-latest&amp;amp;WT.mc_id=https://docs.microsoft.com/cli/azure/install-azure-cli?view=azure-cli-latest&amp;amp;WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;Azure CLI&lt;/a&gt; to set up our Azure environment. The easiest way to do this is to sign in to your Azure portal account and click on the cloud shell icon shown below to open a bash shell or go to &lt;a href="https://shell.azure.com/?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;shell.azure.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Once logged in, create a new resource group for this project in the bash shell (and replace &lt;code&gt;mlnetdemo&lt;/code&gt; as well as the location with one of your own).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ az group create --name mlnetdemo --location westus
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add storage to this resource group.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;NOTE: You'll have to change the name below to something unique&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ az storage account create --name mlnetdemostorage --location westus --resource-group mlnetdemo --sku Standard_LRS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create your Azure Function and configure it to use the beta runtime which supports .NET Core.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;NOTE: You'll have to change the name below to something unique.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ az functionapp create --name mlnetdemoazfunction1 --storage-account mlnetdemostorage1 --consumption-plan-location westus --resource-group mlnetdemo
$ az functionapp config appsettings set --name mlnetdemoazfunction1 --resource-group mlnetdemo --settings FUNCTIONS_EXTENSION_VERSION=beta
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Deploying Your Machine Learning Model
&lt;/h2&gt;

&lt;p&gt;To get your model up to the server, you will need to get the keys to your storage account. Use the following command in the bash window to get it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ az storage account keys list --account-name mlnetdemostorage1 --resource-group mlnetdemo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You'll see the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[
  {
    "keyName": "key1",
    "permissions": "Full",
    "value": "YOURKEY"
  },
  {
    "keyName": "key2",
    "permissions": "Full",
    "value": "NONEYOBUSINESS"
  }
]
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Use the following command to create a new directory called &lt;code&gt;models&lt;/code&gt; to put your model in using your account key (this can be found in the navigation window under &lt;code&gt;Settings | Access keys&lt;/code&gt;).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ az storage container create --name models --account-key YOURKEY --account-name mlnetdemostorage1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3fvm6jlhetwyl1xcopf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu3fvm6jlhetwyl1xcopf.png" alt="model.zip"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Since we are using Cloud Shell, it will be easier to use the Azure Portal for this step. You can also use the Azure CLI if you wish. &lt;/p&gt;

&lt;p&gt;Browse to your version of the &lt;code&gt;mlnetdemo&lt;/code&gt; resource group and drill down to your storage resource that you created earlier. Go into the blobs and you see the new folder &lt;code&gt;models&lt;/code&gt; subdirectory. &lt;/p&gt;

&lt;p&gt;Upload the &lt;code&gt;model.zip&lt;/code&gt; here which can be found on your hard drive.&lt;/p&gt;

&lt;h2&gt;
  
  
  Identify Irises Like a Robot
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: Make sure you have the Azure Workload installed to see this template.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv5y5szad4kikzz96llw4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv5y5szad4kikzz96llw4.png" alt="azure workload"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create a new project using the Azure Functions project template called &lt;code&gt;serverless_ai&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqwbjvut28x0llpuremdg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqwbjvut28x0llpuremdg.png" alt="serverless"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When prompted, select the &lt;code&gt;Http trigger&lt;/code&gt; option and connect it to your Azure storage account for the project (&lt;code&gt;mlnetdemostorage1&lt;/code&gt; for this post). &lt;/p&gt;

&lt;p&gt;Then complete the following steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use NuGet to add the Microsoft.ML package to your project. &lt;/li&gt;
&lt;li&gt;Copy the IrisData.cs and IrisPrediction.cs files from your model project to the serverless_ai project. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You’ll need them both again.&lt;/p&gt;

&lt;p&gt;Change the name of the &lt;code&gt;Http trigger&lt;/code&gt; class &lt;code&gt;Function1&lt;/code&gt; to &lt;code&gt;Predict&lt;/code&gt; and copy in the following code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;using Newtonsoft.Json;
using Microsoft.ML;

namespace serverless_ai
{
    public static class Predict
    {
        [FunctionName("Predict")]
        public static IActionResult Run([HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]HttpRequest req,
        [Blob("models/model.zip", FileAccess.Read, Connection = "AzureWebJobsStorage")] Stream serializedModel,
        TraceWriter log)
        {
            if (typeof(Microsoft.ML.Runtime.Data.LoadTransform) == null ||
                typeof(Microsoft.ML.Runtime.Learners.LinearClassificationTrainer) == null ||
                typeof(Microsoft.ML.Runtime.Internal.CpuMath.SseUtils) == null ||
                typeof(Microsoft.ML.Runtime.FastTree.FastTree) == null)
            {
                log.Error("Error loading ML.NET");
                return new StatusCodeResult(500);
            }

            //Read incoming request body
            string requestBody = new StreamReader(req.Body).ReadToEnd();

            log.Info(requestBody);

            //Bind request body to IrisData object
            IrisData data = JsonConvert.DeserializeObject&amp;lt;IrisData&amp;gt;(requestBody);

            //Load prediction model
            var model = PredictionModel.ReadAsync&amp;lt;IrisData, IrisPrediction&amp;gt;(serializedModel).Result;

            //Make prediction
            IrisPrediction prediction = model.Predict(data);

            //Return prediction
            return (IActionResult)new OkObjectResult(prediction.PredictedLabels);
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These lines use your model to evaluate new iris data to make a prediction. Your app is ready for testing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test Locally Before Deploying
&lt;/h2&gt;

&lt;p&gt;To test the Azure Function app on your local machine, check your &lt;code&gt;local.settings.json&lt;/code&gt; file to make sure that &lt;code&gt;AzureWebJobsStorage&lt;/code&gt; has a value associated with it. &lt;/p&gt;

&lt;p&gt;This is how your local app will find your uploaded model on your Azure storage account. If this has a value (and it should if you bound the project to your account when you created it), you can just &lt;code&gt;F5&lt;/code&gt; the &lt;code&gt;serverless_ai&lt;/code&gt; project in order to run it. &lt;/p&gt;

&lt;p&gt;Now open up &lt;a href="https://www.getpostman.com/apps" rel="noopener noreferrer"&gt;Postman&lt;/a&gt; (or a similar REST API tool) and send a &lt;code&gt;POST&lt;/code&gt; call to&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:7071/api/Predict with the following body:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
 "SepalLength": 3.3,
 "SepalWidth": 1.6,
 "PetalLength": 0.2,
 "PetalWidth": 5.1
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If all is well, the categorizer will return &lt;code&gt;Iris-verginica&lt;/code&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  To Deploy Skynet
&lt;/h1&gt;

&lt;p&gt;… or whatever AI you are deploying from Visual Studio, go to your build settings in the toolbar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxu4oztj0xfkyw67j7f94.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxu4oztj0xfkyw67j7f94.png" alt="deploy"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select &lt;code&gt;Publish serverless_ai&lt;/code&gt; to deploy your Azure Function app.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffuv4gw7r9rbhzbw20m3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffuv4gw7r9rbhzbw20m3.png" alt="deploying azure function"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To test the app deployment in the Azure Portal, select you Azure Function app under &lt;code&gt;mlnetdemo&lt;/code&gt; (or however you named it) and then pick the &lt;code&gt;Predict&lt;/code&gt; function under that. Use the &lt;code&gt;Test&lt;/code&gt; panel to the right of the screen to see your deployed app in action.&lt;/p&gt;

&lt;p&gt;This will place your iris categorizer out on Azure for other people to try. Congratulations! You are now able to deploy artificial intelligences to the cloud.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want more machine learning on Azure?&lt;/strong&gt; Check out our &lt;a href="https://docs.microsoft.com/azure/machine-learning/?WT.mc_id=azureapril_devto-blog-cxa" rel="noopener noreferrer"&gt;ML quickstarts and tutorials&lt;/a&gt;!&lt;/p&gt;




&lt;p&gt;&lt;a href="https://dev.to/t/azureapril"&gt;We'll be posting articles every day in April&lt;/a&gt;, so stay tuned or jump ahead and check out more tips and tricks &lt;a href="http://azuredev.tips" rel="noopener noreferrer"&gt;now&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>azureapril</category>
      <category>tutorial</category>
      <category>machinelearning</category>
      <category>devtips</category>
    </item>
    <item>
      <title>Deploying an App with the Azure CLI</title>
      <dc:creator>Emily Freeman</dc:creator>
      <pubDate>Mon, 01 Apr 2019 13:47:15 +0000</pubDate>
      <link>https://dev.to/azure/deploying-an-app-with-the-cli-2ol5</link>
      <guid>https://dev.to/azure/deploying-an-app-with-the-cli-2ol5</guid>
      <description>&lt;p&gt;Welcome to Azure April! Every day during the month of April, we'll be releasing an article on, well, Azure. The topics range but will cover:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deploying to Azure&lt;/li&gt;
&lt;li&gt;Blob Storage&lt;/li&gt;
&lt;li&gt;Logic Apps&lt;/li&gt;
&lt;li&gt;Machine Learning&lt;/li&gt;
&lt;li&gt;Azure DevOps&lt;/li&gt;
&lt;li&gt;ARM templates&lt;/li&gt;
&lt;li&gt;Azure Functions&lt;/li&gt;
&lt;li&gt;VS Code&lt;/li&gt;
&lt;li&gt;Cosmos DB&lt;/li&gt;
&lt;li&gt;IoT&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And so much more. I'm glad you're here! I want to give a special shout out to &lt;a href="https://twitter.com/mbcrump"&gt;Michael Crump&lt;/a&gt; for creating all the tips and tricks we've selected to highlight in Azure April. &lt;/p&gt;

&lt;p&gt;For the first day, I've decided to kick us off with something relatively simple but important. And common! Deploying an app to Azure using only the CLI. This is one of the first things I learned when I started diving into Azure and I think builds the foundation of your Azure knowledge. &lt;/p&gt;

&lt;p&gt;Thanks for joining us! You can always find me on &lt;a href="https://twitter.com/editingemily"&gt;Twitter&lt;/a&gt;. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;For more information on the Azure CLI, &lt;a href="https://docs.microsoft.com/cli/azure/?view=azure-cli-latest?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa"&gt;start here&lt;/a&gt;. &lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;While I love working with the Azure Portal or even Visual Studio, it is sometimes nice to do everything from the command line. In this tutorial, we'll be using a Linux VM and BASH to do everything.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't have Azure?&lt;/strong&gt; &lt;a href="https://azure.microsoft.com/en-us/free?&amp;amp;WT.mc_id=azureapril_devto-blog-cxa"&gt;Grab a free subscription&lt;/a&gt;. &lt;/p&gt;

&lt;h4&gt;
  
  
  Step 1
&lt;/h4&gt;

&lt;p&gt;Ensure you have the following stack installed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mbcrump@crumplinux:~$ git --version
git version 2.7.4
mbcrump@crumplinux:~$ nodejs --version
v4.2.6
mbcrump@crumplinux:~$ npm --version
3.5.2
mbcrump@crumplinux:~$ gulp --version
[20:05:28] CLI version 1.4.0
[20:05:28] Local version 3.9.1
mbcrump@crumplinux:~$ mongod --version
db version v2.6.10
2017-09-20T20:11:43.087+0000 git version: nogitversion
2017-09-20T20:11:43.095+0000 OpenSSL version: OpenSSL 1.0.2g  1 Mar 2016
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 2
&lt;/h4&gt;

&lt;p&gt;Create a folder such as &lt;code&gt;webapp&lt;/code&gt; and then &lt;code&gt;$ cd webapp&lt;/code&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3
&lt;/h4&gt;

&lt;p&gt;Run the following command in the &lt;code&gt;webapp&lt;/code&gt; folder.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git clone https://github.com/crpietschmann/jsQuizEngine.git.
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;This is a JavaScript based quiz engine by &lt;a href="https://github.com/crpietschmann"&gt;Chris Pietschmann&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 4
&lt;/h4&gt;

&lt;p&gt;Change your working directory to jsQuizEngine/src and now we’ll need to create a deployment user that can deploy web app through git.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;az webapp deployment user set --user-name {your-username} --password {your-password}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;





&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Name    PublishingUserName
------  --------------------
web     mbcrump
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 5
&lt;/h4&gt;

&lt;p&gt;We’ll need a resource group. I’m going to put mine in the West US.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;az group create --name StaticResourceGroup --location "West US"
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;





&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Location    Name
----------  -------------------
westus      StaticResourceGroup
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 6
&lt;/h4&gt;

&lt;p&gt;We’ll also need an Azure App Service Plan. I’ll use the free one for this example.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;az appservice plan create --name StaticAppServicePlan --resource-group StaticResourceGroup --sku FREE
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;





&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AppServicePlanName    GeoRegion    Kind    Location      MaximumNumberOfWorkers  Name                  ProvisioningState    ResourceGroup        Status    Subscription
--------------------  -----------  ------  ----------  ------------------------  --------------------  -------------------  -------------------  --------  ------------------------------------
StaticAppServicePlan  West US      app     West US                            1  StaticAppServicePlan  Succeeded            StaticResourceGroup  Ready     d1ecc7ac-c1d8-40dc-97d6-2507597e7404
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 7
&lt;/h4&gt;

&lt;p&gt;We’ll create an Azure Web App and deploy it using local git.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Remember! Your URL will be unique and different than the ones you see in the example snippets.&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;az webapp create --name MyQuizApplication --resource-group StaticResourceGroup --plan StaticAppServicePlan --deployment-local-git
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;You should see something like this in the output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Local git is configured with url of 'https://mbcrump@myquizapplication.scm.azurewebsites.net/MyQuizApplication.git' 
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Copy and paste this to your editor of choice.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 8
&lt;/h4&gt;

&lt;p&gt;We'll need to add azure as a remote repository so that we can easily push updates from our local git repository. Be sure to update the command below to your specific credentials and unique URL.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git remote add azure https://mbcrump@myquizapplication.scm.azurewebsites.net/MyQuizApplication.git
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 9
&lt;/h4&gt;

&lt;p&gt;Push the changes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git push azure master
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h4&gt;
  
  
  Step 10
&lt;/h4&gt;

&lt;p&gt;Nice! We can now browse to our new site.&lt;/p&gt;

&lt;p&gt;Once you get a hang of using the CLI, then these steps become natural. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Want to dig further into the Azure CLI?&lt;/strong&gt; &lt;a href="https://docs.microsoft.com/cli/azure/?view=azure-cli-latest&amp;amp;WT.mc_id=azureapril_devto-blog-cxa"&gt;Start here&lt;/a&gt;. &lt;/p&gt;




&lt;p&gt;We'll be posting articles every day in April, so stay tuned or jump ahead and check out more tips and tricks &lt;a href="http://azuredev.tips"&gt;now&lt;/a&gt;. &lt;/p&gt;

</description>
      <category>azureapril</category>
      <category>azure</category>
      <category>webdev</category>
      <category>cloud</category>
    </item>
  </channel>
</rss>
