Microservices voorspelbaar inrichten en implementeren in Azure

Deze zelfstudie laat zien hoe u een toepassing inricht en implementeert die bestaat uit microservices in Azure App Service als één eenheid en op een voorspelbare manier met behulp van JSON-resourcegroepsjablonen en PowerShell-scripting.

Bij het inrichten en implementeren van grootschalige toepassingen die bestaan uit zeer ontkoppelde microservices, zijn herhaalbaarheid en voorspelbaarheid van cruciaal belang voor succes. Azure App Service kunt u microservices maken met web-apps, mobiele back-ends en API-apps. Met Azure Resource Manager kunt u alle microservices als eenheid beheren, samen met resourceafhankelijkheden zoals database- en broncodebeheerinstellingen. U kunt nu ook een dergelijke toepassing implementeren met behulp van JSON-sjablonen en eenvoudige PowerShell-scripts.

Wat u gaat doen

In de zelfstudie implementeert u een toepassing met:

  • Twee App Service apps (bijvoorbeeld twee microservices)
  • Een back-end SQL Database
  • App-instellingen, verbindingsreeksen en broncodebeheer
  • Application Insights, waarschuwingen, instellingen voor automatisch schalen

Hulpprogramma's die u gaat gebruiken

In deze zelfstudie gebruikt u de volgende hulpprogramma's. Omdat het geen uitgebreide discussie over hulpprogramma's is, ga ik aan het end-to-end scenario blijven en geef je gewoon een korte inleiding tot elk scenario en waar je er meer informatie over kunt vinden.

Azure Resource Manager-sjablonen (JSON)

Telkens wanneer u een app in Azure App Service maakt, gebruikt Azure Resource Manager bijvoorbeeld een JSON-sjabloon om de hele resourcegroep met de onderdeelresources te maken. Een complexe sjabloon uit het Azure Marketplace kan de database, opslagaccounts, het App Service-plan, de app zelf, waarschuwingsregels, app-instellingen, instellingen voor automatisch schalen en meer bevatten, en al deze sjablonen zijn beschikbaar via PowerShell. Zie Azure Resource Manager-sjablonen ontwerpen voor meer informatie over de Azure Resource Manager-sjablonen

Azure SDK 2.6 voor Visual Studio

De nieuwste SDK bevat verbeteringen in de Resource Manager sjabloonondersteuning in de JSON-editor. U kunt dit gebruiken om snel een volledig nieuwe resourcegroepsjabloon te maken of een bestaande JSON-sjabloon (zoals een gedownloade galeriesjabloon) te openen voor wijziging, het parameterbestand te vullen en zelfs de resourcegroep rechtstreeks vanuit een Azure-resourcegroepoplossing te implementeren.

Zie Azure SDK 2.6 voor Visual Studio voor meer informatie.

Azure PowerShell 0.8.0 of hoger

Vanaf versie 0.8.0 bevat de Azure PowerShell installatie de Azure Resource Manager-module naast de Azure-module. Met deze nieuwe module kunt u de implementatie van resourcegroepen scripten.

Zie Azure PowerShell gebruiken met Azure Resource Manager voor meer informatie

Azure Resource Explorer

Met dit preview-hulpprogramma kunt u de JSON-definities van alle resourcegroepen in uw abonnement en de afzonderlijke resources verkennen. In het hulpprogramma kunt u de JSON-definities van een resource bewerken, een hele hiërarchie met resources verwijderen en nieuwe resources maken. De informatie die in dit hulpprogramma direct beschikbaar is, is erg handig voor het ontwerpen van sjablonen, omdat hierin wordt getoond welke eigenschappen u moet instellen voor een bepaald type resource, de juiste waarden, enzovoort. U kunt zelfs uw resourcegroep maken in Azure Portal en vervolgens de JSON-definities controleren in het hulpprogramma Explorer om u te helpen de resourcegroep te templatiseren.

De knop Implementeren in Azure

Als u GitHub gebruikt voor broncodebeheer, kunt u een knop Implementeren in Azure in uw README plaatsen. MD, waarmee u een kant-en-klare implementatie-ui naar Azure kunt gebruiken. Hoewel u dit voor elke eenvoudige app kunt doen, kunt u dit uitbreiden om het implementeren van een hele resourcegroep mogelijk te maken door een azuredeploy.json-bestand in de hoofdmap van de opslagplaats te plaatsen. Dit JSON-bestand, dat de resourcegroepsjabloon bevat, wordt gebruikt door de knop Implementeren in Azure om de resourcegroep te maken. Zie voor een voorbeeld het ToDoApp-voorbeeld dat u in deze zelfstudie gaat gebruiken.

De voorbeeldresourcegroepsjabloon ophalen

Laten we nu meteen aan de slag gaan.

  1. Navigeer naar het voorbeeld van de ToDoApp-App Service.

  2. Klik in readme.md op Implementeren in Azure.

  3. U gaat naar de implementatiesite van deploy-to-azure en wordt gevraagd om implementatieparameters in te voeren. U ziet dat de meeste velden worden gevuld met de naam van de opslagplaats en enkele willekeurige tekenreeksen voor u. U kunt desgewenst alle velden wijzigen, maar de enige dingen die u moet invoeren, zijn de SQL Server aanmelding met beheerdersrechten en het wachtwoord. Klik vervolgens op Volgende.

    Shows the input deployment parameters on the deploy-to-azure site.

  4. Klik vervolgens op Implementeren om het implementatieproces te starten. Zodra het proces is voltooid, klikt u op de http://todoapp koppeling XXXX.azurewebsites.net om door de geïmplementeerde toepassing te bladeren.

    Shows your application's deployment process.

    De gebruikersinterface zou een beetje traag zijn wanneer u er voor het eerst naar bladert omdat de apps net worden opgestart, maar uzelf ervan overtuigen dat het een volledig functionele toepassing is.

  5. Klik op de pagina Implementeren op de koppeling Beheren om de nieuwe toepassing in Azure Portal weer te geven.

  6. Klik in de vervolgkeuzelijst Essentials op de koppeling naar de resourcegroep. Houd er ook rekening mee dat de app al is verbonden met de GitHub-opslagplaats onder Extern Project.

    Shows the Resource group link in the Essentials dropdown section.

  7. Houd er op de blade resourcegroep rekening mee dat er al twee apps en één SQL Database in de resourcegroep zijn.

    Shows the resources available in your resource group.

Alles wat u zojuist in een paar minuten hebt gezien, is een volledig geïmplementeerde toepassing met twee microservices, met alle onderdelen, afhankelijkheden, instellingen, database en continue publicatie, ingesteld door een geautomatiseerde indeling in Azure Resource Manager. Dit alles is gedaan door twee dingen:

  • De knop Implementeren in Azure
  • azuredeploy.json in de hoofdmap van de opslagplaats

U kunt deze toepassing tientallen, honderden of duizenden keren implementeren en elke keer exact dezelfde configuratie hebben. Met de herhaalbaarheid en de voorspelbaarheid van deze benadering kunt u toepassingen op grote schaal eenvoudig en betrouwbaar implementeren.

Controleer (of bewerk) AZUREDEPLOY. JSON

Laten we nu eens kijken hoe de GitHub opslagplaats is ingesteld. U gebruikt de JSON-editor in de Azure .NET SDK. Als u Azure .NET SDK 2.6 nog niet hebt geïnstalleerd, doet u dit nu.

  1. Kloon de ToDoApp-opslagplaats met uw favoriete Git-hulpprogramma. In de onderstaande schermopname doe ik dit in teamverkenner in Visual Studio 2013.

    Shows how to use a git tool to clone the ToDoApp repository.

  2. Open in de hoofdmap van de opslagplaats azuredeploy.json in Visual Studio. Als u het deelvenster JSON-overzicht niet ziet, moet u Azure .NET SDK installeren.

    Shows the JSON Outline pane in Visual Studio.

Ik ga niet elk detail van de JSON-indeling beschrijven, maar de sectie Meer resources bevat koppelingen voor het leren van de sjabloontaal van de resourcegroep. Hier laat ik u alleen de interessante functies zien die u kunnen helpen aan de slag te gaan met het maken van uw eigen aangepaste sjabloon voor app-implementatie.

Parameters

Bekijk de sectie parameters om te zien dat de meeste van deze parameters zijn wat de knop Implementeren in Azure u vraagt om invoer. De site achter de knop Implementeren in Azure vult de invoergebruikersinterface met behulp van de parameters die zijn gedefinieerd in azuredeploy.json. Deze parameters worden gebruikt in de resourcedefinities, zoals resourcenamen, eigenschapswaarden, enzovoort.

Resources

In het knooppunt Resources ziet u dat er vier resources op het hoogste niveau zijn gedefinieerd, waaronder een SQL Server exemplaar, een App Service-abonnement en twee apps.

App Service-plan

Laten we beginnen met een eenvoudige resource op basisniveau in de JSON. Klik in het JSON-overzicht op het App Service-plan met de naam [hostingPlanName] om de bijbehorende JSON-code te markeren.

Shows the [hostingPlanName] section of the JSON code.

Houd er rekening mee dat het type element de tekenreeks voor een App Service-plan specificeert (het is een serverfarm een lange, lange tijd geleden) en andere elementen en eigenschappen worden ingevuld met behulp van de parameters die zijn gedefinieerd in het JSON-bestand, en deze resource heeft geen geneste resources.

Notitie

Houd er ook rekening mee dat de waarde van apiVersion Azure aangeeft met welke versie van de REST API de JSON-resourcedefinitie moet worden gebruikt en dat deze van invloed kan zijn op de indeling van de resource in de {}.

SQL Server

Klik vervolgens op de SQL Server resource met de naam SQLServer in het JSON-overzicht.

Shows the SQL Server resource named SQLServer in the JSON Outline.

Let op het volgende over de gemarkeerde JSON-code:

  • Het gebruik van parameters zorgt ervoor dat de gemaakte resources worden benoemd en geconfigureerd op een manier die ze consistent maakt met elkaar.

  • De SQLServer-resource heeft twee geneste resources, elk heeft een andere waarde voor type.

  • De geneste resources binnen “resources”: […], waar de database en de firewallregels zijn gedefinieerd, hebben een dependsOn element waarmee de resource-id van de SQLServer-resource op hoofdniveau wordt opgegeven. Dit vertelt Azure Resource Manager: 'voordat u deze resource maakt, moet er al een andere resource bestaan; en als die andere resource in de sjabloon is gedefinieerd, maakt u die eerst.'

    Notitie

    Zie Azure Resource Manager Template Functions voor gedetailleerde informatie over het gebruik van de resourceId() functie.

  • Het effect van het dependsOn element is dat Azure Resource Manager kan weten welke resources parallel kunnen worden gemaakt en welke resources opeenvolgend moeten worden gemaakt.

App Service-app

Nu gaan we verder met de werkelijke apps zelf, die ingewikkelder zijn. Klik op de app [variables('apiSiteName')] in het JSON-overzicht om de bijbehorende JSON-code te markeren. Je zult merken dat dingen veel interessanter worden. Voor dit doel praat ik over de functies één voor één:

Hoofdresource

De app is afhankelijk van twee verschillende resources. Dit betekent dat Azure Resource Manager de app pas maakt nadat zowel het App Service-plan als het SQL Server-exemplaar zijn gemaakt.

Shows the app dependencies on the App Service plan and the SQL Server instance.

App-instellingen

De app-instellingen worden ook gedefinieerd als een geneste resource.

Shows the app settings defined as a nested resource in the JSON code.

In het properties element voor config/appsettingshebt u twee app-instellingen in de indeling "<name>" : "<value>".

  • PROJECTis een KUDU-instelling waarmee azure-implementatie wordt aangegeven welk project moet worden gebruikt in een Visual Studio oplossing voor meerdere projecten. Ik laat u later zien hoe broncodebeheer is geconfigureerd, maar omdat de ToDoApp-code zich in een Visual Studio oplossing voor meerdere projecten bevindt, hebben we deze instelling nodig.
  • clientUrl is gewoon een app-instelling die door de toepassingscode wordt gebruikt.
Verbindingsreeksen

De verbindingsreeksen worden ook gedefinieerd als een geneste resource.

Shows how the connection strings are defined as a nested resource in the JSON code.

In het properties element voor config/connectionstringswordt elke connection string ook gedefinieerd als een naam:waardepaar, met de specifieke indeling van "<name>" : {"value": "…", "type": "…"}. Voor het type element zijn MySqlmogelijke waarden , SQLServer, SQLAzureen Custom.

Tip

Voer voor een definitieve lijst met de connection string typen de volgende opdracht uit in Azure PowerShell: [Enum]::GetNames("Microsoft.WindowsAzure.Commands.Utilities.Websites.Services.WebEntities.DatabaseType")

Broncodebeheer

De instellingen voor broncodebeheer worden ook gedefinieerd als een geneste resource. Azure Resource Manager gebruikt deze resource om continue publicatie te configureren (zie IsManualIntegration later) en om de implementatie van toepassingscode automatisch te starten tijdens de verwerking van het JSON-bestand.

Shows how the source control settings are defined as a nested resource in the JSON code.

RepoUrl en branch moet vrij intuïtief zijn en moet verwijzen naar de Git-opslagplaats en de naam van de vertakking waaruit moet worden gepubliceerd. Opnieuw worden deze gedefinieerd door invoerparameters.

Let op het dependsOn element dat, naast de app-resource zelf, sourcecontrols/web ook afhankelijk is van config/appsettings en config/connectionstrings. Dit komt doordat het sourcecontrols/web Azure-implementatieproces automatisch probeert de toepassingscode te implementeren, bouwen en starten. Als u deze afhankelijkheid invoegt, kunt u ervoor zorgen dat de toepassing toegang heeft tot de vereiste app-instellingen en verbindingsreeksen voordat de toepassingscode wordt uitgevoerd.

Notitie

Houd er ook rekening mee dat IsManualIntegration deze is ingesteld op true. Deze eigenschap is nodig in deze zelfstudie, omdat u niet de eigenaar bent van de GitHub opslagplaats en dus geen toestemming kunt verlenen aan Azure om doorlopend publiceren vanuit ToDoApp te configureren (dat wil zeggen automatische updates van opslagplaatsen naar Azure pushen). U kunt de standaardwaarde false alleen gebruiken voor de opgegeven opslagplaats als u de GitHub referenties van de eigenaar in de Azure Portal eerder hebt geconfigureerd. Met andere woorden, als u eerder broncodebeheer hebt ingesteld voor GitHub of BitBucket voor elke app in Azure Portal, met behulp van uw gebruikersreferenties, onthoudt Azure de referenties en gebruikt deze wanneer u in de toekomst een app implementeert vanuit GitHub of BitBucket. Als u dit echter nog niet hebt gedaan, mislukt de implementatie van de JSON-sjabloon wanneer Azure Resource Manager probeert de instellingen voor broncodebeheer van de app te configureren, omdat deze zich niet kan aanmelden bij GitHub of BitBucket met de referenties van de eigenaar van de opslagplaats.

De JSON-sjabloon vergelijken met geïmplementeerde resourcegroep

Hier kunt u alle blades van de app doorlopen in Azure Portal, maar er is een ander hulpprogramma dat net zo handig is als niet meer. Ga naar het preview-hulpprogramma van Azure Resource Explorer , waarmee u een JSON-weergave krijgt van alle resourcegroepen in uw abonnementen, omdat deze daadwerkelijk bestaan in de Azure-back-end. U kunt ook zien hoe de JSON-hiërarchie van de resourcegroep in Azure overeenkomt met de hiërarchie in het sjabloonbestand dat wordt gebruikt om deze te maken.

Wanneer ik bijvoorbeeld naar het hulpprogramma Azure Resource Explorer ga en de knooppunten in de verkenner uitvouw, zie ik de resourcegroep en de resources op hoofdniveau die worden verzameld onder hun respectieve resourcetypen.

View the resource group and root-level resources in the expanded Azure Resources Explorer tool.

Als u inzoomt op een app, moet u de details van de app-configuratie kunnen zien die vergelijkbaar zijn met de onderstaande schermopname:

Drill down to view the configuration details in the app.

Ook hier moeten de geneste resources een hiërarchie hebben die vergelijkbaar is met die in uw JSON-sjabloonbestand. De app-instellingen, verbindingsreeksen, enzovoort, worden correct weergegeven in het JSON-deelvenster. Het ontbreken van instellingen hier kan duiden op een probleem met uw JSON-bestand en kan u helpen bij het oplossen van problemen met uw JSON-sjabloonbestand.

De resourcegroepsjabloon zelf implementeren

De knop Implementeren in Azure is geweldig, maar hiermee kunt u de resourcegroepsjabloon alleen implementeren in azuredeploy.json als u azuredeploy.json al hebt gepusht naar GitHub. De Azure .NET SDK biedt ook de hulpprogramma's waarmee u elk JSON-sjabloonbestand rechtstreeks vanaf uw lokale computer kunt implementeren. Volg hiervoor de onderstaande stappen:

  1. Klik in Visual Studio op File>New>Project.

  2. Klik op Visual C#>CloudAzure-resourcegroep> en klik vervolgens op OK.

    Create a new project as an Azure Resource Group in the Azure .NET SDK.

  3. Selecteer in Azure-sjabloon selecteren lege sjabloon en klik op OK.

  4. Sleep azuredeploy.json naar de map Sjabloon van uw nieuwe project.

    Shows the result of dragging the azuredeploy.json file into the Template folder of your project.

  5. Open vanuit Solution Explorer de gekopieerde azuredeploy.json.

  6. In het belang van de demonstratie voegen we enkele standaard Application Insight-resources toe aan ons JSON-bestand door te klikken op Resource toevoegen. Als u alleen geïnteresseerd bent in het implementeren van het JSON-bestand, gaat u verder met de implementatiestappen.

    Shows the Add Resource button you can use to add standard Application Insight resources to your JSON file.

  7. Selecteer Toepassings-Insights voor Web Apps en controleer of een bestaand App Service-abonnement en app is geselecteerd en klik vervolgens op Toevoegen.

    Shows the selection of Application Insights for Web Apps, Name, App Service Plan, and Web App.

    U kunt nu verschillende nieuwe resources zien die, afhankelijk van de resource en wat deze doet, afhankelijk zijn van het App Service-plan of de app. Deze resources worden niet ingeschakeld door hun bestaande definitie en u gaat dat wijzigen.

    View the new resources that have dependencies on the App Service plan or app.

  8. Klik in het JSON-overzicht op appInsights AutoScale om de JSON-code te markeren. Dit is de schaalinstelling voor uw App Service-abonnement.

  9. Zoek in de gemarkeerde JSON-code de location eigenschappen en enabled stel deze in zoals hieronder wordt weergegeven.

    Shows the location and enabled properties in the appInsights AutoScale JSON code and the values you should set them to.

  10. Klik in het JSON-overzicht op CPUHigh appInsights om de JSON-code te markeren. Dit is een waarschuwing.

  11. Zoek de location eigenschappen en isEnabled stel deze in zoals hieronder wordt weergegeven. Doe hetzelfde voor de andere drie waarschuwingen (paarse bollen).

    Shows the location and isEnabled properties in the CPUHigh appInsights JSON code and the values you should set them to.

  12. U bent nu klaar om te implementeren. Klik met de rechtermuisknop op het project en selecteer DeployNew Deployment>.

    Shows how to deploy your new project.

  13. Meld u aan bij uw Azure-account als u dit nog niet hebt gedaan.

  14. Selecteer een bestaande resourcegroep in uw abonnement of maak een nieuwe resourcegroep, selecteer azuredeploy.json en klik vervolgens op Parameters bewerken.

    Shows how to edit the parameters in the azuredeploy.json file.

    U kunt nu alle parameters bewerken die zijn gedefinieerd in het sjabloonbestand in een mooie tabel. Parameters die standaardwaarden definiëren, hebben al hun standaardwaarden en parameters die een lijst met toegestane waarden definiëren, worden weergegeven als vervolgkeuzelijsten.

    Shows parameters that define a list of allowed values as dropdown lists.

  15. Vul alle lege parameters in en gebruik het adres van de GitHub opslagplaats voor ToDoApp in repoUrl. Klik vervolgens op Opslaan.

    Shows the newly filled parameters for the azuredeploy.json file.

    Notitie

    Automatisch schalen is een functie die wordt aangeboden in de standard-laag of hoger en waarschuwingen op planniveau zijn functies die worden aangeboden in de Basic-laag of hoger. U moet de sKU-parameter instellen op Standard of Premium om al uw nieuwe app-Insights resources te laten oplichten.

  16. Klik op Implementeren. Als u Wachtwoorden opslaan hebt geselecteerd, wordt het wachtwoord opgeslagen in het parameterbestand in tekst zonder opmaak. Anders wordt u gevraagd het databasewachtwoord in te voeren tijdens het implementatieproces.

Dat is alles. U hoeft nu alleen naar Azure Portal en het hulpprogramma Azure Resource Explorer te gaan om de nieuwe waarschuwingen en instellingen voor automatisch schalen te zien die zijn toegevoegd aan uw geïmplementeerde JSON-toepassing.

Uw stappen in deze sectie hebben voornamelijk het volgende bereikt:

  1. Het sjabloonbestand voorbereid
  2. Een parameterbestand gemaakt om mee te gaan met het sjabloonbestand
  3. Het sjabloonbestand met het parameterbestand geïmplementeerd

De laatste stap wordt eenvoudig uitgevoerd door een PowerShell-cmdlet. Open Scripts\Deploy-AzureResourceGroup.ps1 om te zien wat Visual Studio gedaan bij het implementeren van uw toepassing. Er is veel code, maar ik ga alleen alle relevante code markeren die u nodig hebt om het sjabloonbestand te implementeren met het parameterbestand.

Shows the pertinent code in the script that you need use to deploy the template file with the parameter file.

De laatste cmdlet, New-AzureResourceGroupis degene die de actie daadwerkelijk uitvoert. Dit alles moet u laten zien dat het, met behulp van hulpprogramma's, relatief eenvoudig is om uw cloudtoepassing voorspelbaar te implementeren. Telkens wanneer u de cmdlet uitvoert op dezelfde sjabloon met hetzelfde parameterbestand, krijgt u hetzelfde resultaat.

Samenvatting

In DevOps zijn herhaalbaarheid en voorspelbaarheid sleutels voor een succesvolle implementatie van een grootschalige toepassing die bestaat uit microservices. In deze zelfstudie hebt u een toepassing met twee microservices geïmplementeerd in Azure als één resourcegroep met behulp van de Azure Resource Manager-sjabloon. Hopelijk heeft het u de kennis gegeven die u nodig hebt om te beginnen met het converteren van uw toepassing in Azure naar een sjabloon en kan deze voorspelbaar worden ingericht en geïmplementeerd.

Meer bronnen

Volgende stappen

Zie voor meer informatie over de JSON-syntaxis en eigenschappen voor resourcetypen die in dit artikel zijn geïmplementeerd: