Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Att distribuera Azure API Management med Service Fabric är ett avancerat scenario. API Management är användbart när du behöver publicera API:er med en omfattande uppsättning routningsregler för dina Service Fabric-tjänster i serverdelen. Molnprogram behöver ofta en främre gateway som en enda ingångspunkt åt användare, enheter eller andra program. I Service Fabric kan en gateway vara valfri tillståndslös tjänst som är utformad för trafikingress, till exempel ett ASP.NET Core-program, Event Hubs, IoT Hub eller Azure API Management.
Den här artikeln visar hur du konfigurerar Azure API Management med Service Fabric för att dirigera trafik till en serverdelstjänst i Service Fabric. När du är klar har du distribuerat API Management till ett VNet och konfigurerat en API-åtgärd för att skicka trafik till tillståndslösa backend-tjänster. Mer information om Azure API Management-scenarier med Service Fabric finns i översiktsartikeln.
Anmärkning
Vi rekommenderar att du använder Azure Az PowerShell-modulen för att interagera med Azure. Se Installera Azure PowerShell för att komma igång. Information om hur du migrerar till Az PowerShell-modulen finns i Migrera Azure PowerShell från AzureRM till Az.
Tillgänglighet
Viktigt!
Den här funktionen är tillgänglig på nivåerna Premium och Developer i API Management på grund av nödvändig stöd för virtuella nätverk.
Förutsättningar
Innan du börjar:
- Om du inte har någon Azure-prenumeration kan du skapa ett kostnadsfritt konto
- Installera Azure PowerShell eller Azure CLI.
- Skapa ett säkert Windows-kluster i en nätverkssäkerhetsgrupp.
- Om du distribuerar ett Windows-kluster konfigurerar du en Windows-utvecklingsmiljö. Installera Visual Studio 2019 och Azure-utveckling, ASP.NET och webbutveckling samt arbetsbelastningar för .NET Core-plattformsoberoende utveckling . Konfigurera sedan en .NET-utvecklingsmiljö.
Nätverkstopologi
Nu när du har ett säkert Windows-kluster i Azure distribuerar du API Management till det virtuella nätverket (VNET) i undernätet och NSG som är avsett för API Management. I den här artikeln är API Management Resource Manager-mallen förkonfigurerad för att använda namnen på det virtuella nätverk, undernät och NSG som du har konfigurerat i självstudiekursen om Windows-kluster Den här artikeln distribuerar följande topologi till Azure där API Management och Service Fabric finns i undernät i samma virtuella nätverk:
               
              
            
Logga in på Azure och välj din prenumeration
Logga in på ditt Azure-konto och välj din prenumeration innan du kör Azure-kommandon.
Connect-AzAccount
Get-AzSubscription
Set-AzContext -SubscriptionId <guid>
az login
az account set --subscription <guid>
Distribuera en Service Fabric-serverdelstjänst
Innan du konfigurerar API Management för att dirigera trafik till en Service Fabric-serverdelstjänst behöver du först en tjänst som körs för att acceptera begäranden.
Skapa en grundläggande tillståndslös ASP.NET Core Pålitlig Tjänst med hjälp av standardprojektmallen för Web API. Detta skapar en HTTP-slutpunkt för din tjänst som du exponerar via Azure API Management.
Starta Visual Studio som administratör och skapa en ASP.NET Core-tjänst:
- I Visual Studio väljer du Arkiv –> Nytt projekt. 
- Välj Service Fabric-programmallen under Moln och ge den namnet "ApiApplication". 
- Välj den tillståndslösa ASP.NET Core-tjänstmallen och ge projektet namnet "WebApiService". 
- Välj projektmallen Webb-API ASP.NET Core 2.1. 
- När projektet har skapats, öppnar du - PackageRoot\ServiceManifest.xmloch tar bort- Port-attributet från slutpunktsresurskonfigurationen.- <Resources> <Endpoints> <Endpoint Protocol="http" Name="ServiceEndpoint" Type="Input" /> </Endpoints> </Resources>- Om du tar bort porten kan Service Fabric ange en port dynamiskt från programportintervallet, som öppnas via nätverkssäkerhetsgruppen i mallen Cluster Resource Manager, så att trafik kan flöda till den från API Management. 
- Tryck på F5 i Visual Studio för att kontrollera att webb-API:et är tillgängligt lokalt. - Öppna Service Fabric Explorer och öka detaljnivån till en specifik instans av ASP.NET Core-tjänsten för att se basadressen som tjänsten lyssnar på. Lägg till - /api/valuesi basadressen och öppna den i en webbläsare, som anropar metoden Get på ValuesController i webb-API-mallen. Den returnerar standardsvaret som tillhandahålls av mallen, en JSON-matris som innehåller två strängar:- ["value1", "value2"]`- Det här är slutpunkten som du exponerar via API Management i Azure. 
- Distribuera slutligen programmet till klustret i Azure. Högerklicka på programprojektet i Visual Studio och välj Publicera. Ange klusterslutpunkten (till exempel - mycluster.southcentralus.cloudapp.azure.com:19000) för att distribuera programmet till ditt Service Fabric-kluster i Azure.
En tillståndslös ASP.NET Core-tjänst med namnet fabric:/ApiApplication/WebApiService ska nu köras i ditt Service Fabric-kluster i Azure.
Ladda ned och förstå Resource Manager-mallarna
Ladda ned och spara följande Resource Manager-mallar och parameterfil:
Mallennetwork-apim.json distribuerar ett nytt undernät och en nätverkssäkerhetsgrupp i det virtuella nätverk där Service Fabric-klustret distribueras.
I följande avsnitt beskrivs de resurser som definieras av mallenapim.json . Mer information finns i länkarna till mallreferensdokumentationen i varje avsnitt. De konfigurerbara parametrar som definierats i filen apim.parameters.json parametrar anges senare i den här artikeln.
Microsoft.ApiManagement/service
Microsoft.ApiManagement/service beskriver API Management-tjänstinstansen: namn, SKU eller nivå, resursgruppsplats, utgivarinformation och virtuellt nätverk.
Microsoft.ApiManagement/service/certificates
Microsoft.ApiManagement/service/certificates konfigurerar API Management-säkerhet. API Management måste autentisera med ditt Service Fabric-kluster för tjänstidentifiering med hjälp av ett klientcertifikat som har åtkomst till klustret. Den här artikeln använder samma certifikat som angavs tidigare när du skapade Windows-klustret, som som standard kan användas för att komma åt klustret.
I den här artikeln används samma certifikat för klientautentisering och klustersäkerhet från nod till nod. Du kan använda ett separat klientcertifikat om du har konfigurerat ett för att komma åt Service Fabric-klustret. Ange namn, lösenord och data (base-64-kodad sträng) för den privata nyckelfilen (.pfx) för det klustercertifikat som du angav när du skapade Service Fabric-klustret.
Microsoft.ApiManagement/service/backends
Microsoft.ApiManagement/service/backends beskriver serverdelstjänsten som trafiken vidarebefordras till.
För Service Fabric-serverdelar är Service Fabric-klustret serverdelen i stället för en specifik Service Fabric-tjänst. Detta gör att en enda policy kan styra till mer än en tjänst i klustret. Fältet URL här är ett fullständigt kvalificerat tjänstnamn för en tjänst i klustret som alla begäranden dirigeras till som standard om inget tjänstnamn anges i en serverdelsprincip. Du kan använda ett falskt tjänstnamn, till exempel "fabric:/fake/service" om du inte har för avsikt att ha en reservtjänst. resourceId anger slutpunkten för klusterhantering. clientCertificateThumbprint och serverCertificateThumbprints identifierar certifikat som används för att autentisera med klustret.
Microsoft.ApiManagement/service/products
Microsoft.ApiManagement/service/products skapar en produkt. I Azure API Management innehåller en produkt en eller flera API:er samt en användningskvot och användningsvillkoren. När en produkt har publicerats kan utvecklare prenumerera på produkten och börja använda produktens API:er.
Ange ett beskrivande displayName och en beskrivning för produkten. För den här artikeln krävs en prenumeration, men prenumerationsgodkännande av en administratör är inte det. Det här produkttillståndet är "publicerat" och är synligt för prenumeranter.
Microsoft.ApiManagement/service/apis
Microsoft.ApiManagement/service/apis skapar ett API. Ett API i API Management representerar en uppsättning åtgärder som kan anropas av klientprogram. När åtgärderna har lagts till läggs API:et till i en produkt och kan publiceras. När ett API har publicerats kan det prenumereras på och användas av utvecklare.
- displayName kan vara valfritt namn för ditt API. I den här artikeln använder du "Service Fabric App".
- name tillhandahåller ett unikt och beskrivande namn för API:et, till exempel "service-fabric-app". Den visas i utvecklar- och utgivarportalerna.
- serviceUrl refererar till HTTP-tjänsten som implementerar API:et. API Management vidarebefordrar begäranden till den här adressen. För Service Fabric-serverdelar används inte det här URL-värdet. Du kan ange valfritt värde här. För den här artikeln, till exempel "http://servicefabric".
- sökvägen läggs till i bas-URL:en för API-hanteringstjänsten. Bas-URL:en är vanlig för alla API:er som hanteras av en API Management-tjänstinstans. API Management särskiljer API:er med deras suffix och därför måste suffixet vara unikt för varje API för en viss utgivare.
- protokoll avgör vilka protokoll som kan användas för att komma åt API:et. I den här artikeln listar du http och https.
- path är ett suffix för API:et. I den här artikeln använder du "myapp".
Microsoft.ApiManagement/service/apis/operations
Microsoft.ApiManagement/service/apis/operations Innan ett API i API Management kan användas måste åtgärder läggas till i API:et. Externa klienter använder en åtgärd för att kommunicera med den tillståndslösa tjänsten ASP.NET Core som körs i Service Fabric-klustret.
Om du vill lägga till en API-åtgärd för klientdelen fyller du i värdena:
- displayName och beskrivning beskriver åtgärden. I den här artikeln använder du "Värden".
- -metoden anger HTTP-verbet. I den här artikeln anger du GET.
- 
              urlTemplate läggs till i BAS-URL:en för API:et och identifierar en enda HTTP-åtgärd.  I den här artikeln använder /api/valuesdu om du har lagt till .NET-serverdelstjänsten ellergetMessageom du har lagt till Java-serverdelstjänsten. Som standard gäller att URL-sökvägen som anges här är URL-sökvägen som skickas till Service Fabric-tjänsten i serverdelen. Om du använder samma URL-sökväg här som tjänsten använder, till exempel "/api/values", fungerar åtgärden utan ytterligare ändringar. Du kan också ange en URL-sökväg här som skiljer sig från den URL-sökväg som används av serverdelens Service Fabric-tjänst. I så fall måste du också ange en sökvägsomskrivning i åtgärdsprincipen senare.
Microsoft.ApiManagement/service/apis/policies
Microsoft.ApiManagement/service/apis/policies skapar en backendpolicy, vilket förenar allt. Det är här du konfigurerar serverdelens Service Fabric-tjänst som begäranden dirigeras till. Du kan tillämpa den här principen på alla API-åtgärder. Mer information finns i Översikt över principer.
Serverdelskonfigurationen för Service Fabric innehåller följande routningskontroller för begäranden:
- Välj tjänstinstans genom att ange ett Service Fabric-tjänstinstansnamn, antingen hårdkodat (till exempel "fabric:/myapp/myservice") eller genererat från HTTP-begäran (till exempel"fabric:/myapp/users/" + context.Request.MatchedParameters["name"]).
- Generera en partitionsnyckel med någon av Service Fabrics partitioneringsscheman för att lösa partitionen.
- Val av replika för tillståndskänsliga tjänster.
- Villkor för försök till återställning som låter dig ange förutsättningarna för att ombesöka en tjänsteadress och skicka en begäran på nytt.
              policyContent är det Json-escaped XML-innehållet i policyn.  För den här artikeln skapar du en backend-princip för att skicka begäranden direkt till den tillståndslösa .NET- eller Java-tjänst som tidigare distribuerades. Lägg till en set-backend-service princip under inkommande principer.  Ersätt värdet sf-service-instance-name med fabric:/ApiApplication/WebApiService om du tidigare har distribuerat .NET-serverdelstjänsten eller fabric:/EchoServerApplication/EchoServerService om du har distribuerat Java-tjänsten.  
              backend-id refererar till en serverdelsresurs, i det här fallet resursen Microsoft.ApiManagement/service/backends som definieras i  mallenapim.json . 
              backend-id kan också referera till en annan serverdelsresurs som skapats med API Management-API:erna. I den här artikeln anger du backend-id till värdet för parametern service_fabric_backend_name .
<policies>
  <inbound>
    <base/>
    <set-backend-service
        backend-id="servicefabric"
        sf-service-instance-name="service-name"
        sf-resolve-condition="@(context.LastError?.Reason == "BackendConnectionFailure")" />
  </inbound>
  <backend>
    <base/>
  </backend>
  <outbound>
    <base/>
  </outbound>
</policies>
En fullständig uppsättning serverdelsprincipattribut för Service Fabric finns i dokumentationen om API Management-serverdelen
Ange parametrar och distribuera API Management
Fyll i följande tomma parametrar i apim.parameters.json för distributionen.
| Parameter | Värde | 
|---|---|
| apimInstanceName | sf-apim | 
| apimPublisherEmail | myemail@contosos.com | 
| apimSku | Utvecklare | 
| serviceFabricCertifikatNamn | sfclustertutorialgroup320171031144217 | 
| certifikatlösenord | q6D7nN%6ck@6 | 
| serviceFabricCertificateThumbprint | C4C1E541AD512B8065280292A8BA6079C3F26F10 | 
| ServiceFabric-certifikat | <base-64-kodad sträng> | 
| URL-sökväg | /api/values | 
| clusterHttpManagementEndpoint | https://mysfcluster.southcentralus.cloudapp.azure.com:19080 | 
| inbound_policy | <XML-sträng> | 
certificatePassword och serviceFabricCertificateThumbprint måste matcha klustercertifikatet som används för att konfigurera klustret.
serviceFabricCertificate är certifikatet som en base-64-kodad sträng som kan genereras med hjälp av följande skript:
$bytes = [System.IO.File]::ReadAllBytes("C:\mycertificates\sfclustertutorialgroup220171109113527.pfx");
$b64 = [System.Convert]::ToBase64String($bytes);
[System.Io.File]::WriteAllText("C:\mycertificates\sfclustertutorialgroup220171109113527.txt", $b64);
I inbound_policy ersätter du värdet sf-service-instance-name med fabric:/ApiApplication/WebApiService om du tidigare distribuerade .NET-serverdelstjänsten eller fabric:/EchoServerApplication/EchoServerService om du distribuerade Java-tjänsten. 
              backend-id refererar till en serverdelsresurs, i det här fallet resursen Microsoft.ApiManagement/service/backends som definieras i  mallenapim.json . 
              backend-id kan också referera till en annan serverdelsresurs som skapats med API Management-API:erna. I den här artikeln anger du backend-id till värdet för parametern service_fabric_backend_name .
<policies>
  <inbound>
    <base/>
    <set-backend-service
        backend-id="servicefabric"
        sf-service-instance-name="service-name"
        sf-resolve-condition="@(context.LastError?.Reason == "BackendConnectionFailure")" />
  </inbound>
  <backend>
    <base/>
  </backend>
  <outbound>
    <base/>
  </outbound>
</policies>
Använd följande skript för att distribuera Resource Manager-mallen och parameterfilerna för API Management:
$groupname = "sfclustertutorialgroup"
$clusterloc="southcentralus"
$templatepath="C:\clustertemplates"
New-AzResourceGroupDeployment -ResourceGroupName $groupname -TemplateFile "$templatepath\network-apim.json" -TemplateParameterFile "$templatepath\network-apim.parameters.json" -Verbose
New-AzResourceGroupDeployment -ResourceGroupName $groupname -TemplateFile "$templatepath\apim.json" -TemplateParameterFile "$templatepath\apim.parameters.json" -Verbose
ResourceGroupName="sfclustertutorialgroup"
az deployment group create --name ApiMgmtNetworkDeployment --resource-group $ResourceGroupName --template-file network-apim.json --parameters @network-apim.parameters.json
az deployment group create --name ApiMgmtDeployment --resource-group $ResourceGroupName --template-file apim.json --parameters @apim.parameters.json
Testa det
Nu kan du prova att skicka en begäran till serverdelstjänsten i Service Fabric via API Management direkt från Azure-portalen.
- I API Management-tjänsten väljer du API. 
- I Service Fabric App-API :et som du skapade i föregående steg väljer du fliken Test och sedan åtgärden Värden . 
- Klicka på knappen Skicka för att skicka en testbegäran till serverdelstjänsten. Du bör se ett HTTP-svar som liknar: - HTTP/1.1 200 OK Transfer-Encoding: chunked Content-Type: application/json; charset=utf-8 Vary: Origin Ocp-Apim-Trace-Location: https://apimgmtstodhwklpry2xgkdj.blob.core.windows.net/apiinspectorcontainer/PWSQOq_FCDjGcaI1rdMn8w2-2?sv=2015-07-08&sr=b&sig=MhQhzk%2FEKzE5odlLXRjyVsgzltWGF8OkNzAKaf0B1P0%3D&se=2018-01-28T01%3A04%3A44Z&sp=r&traceId=9f8f1892121e445ea1ae4d2bc8449ce4 Date: Sat, 27 Jan 2018 01:04:44 GMT ["value1", "value2"]
Rensa resurser
Ett kluster består av andra Azure-resurser utöver själva klusterresursen. Det enklaste sättet att ta bort klustret och alla resurser det använder är att ta bort resursgruppen.
Logga in på Azure och välj det prenumerations-ID som du vill ta bort klustret med. Du hittar ditt prenumerations-ID genom att logga in på Azure-portalen. Ta bort resursgruppen och alla klusterresurser med hjälp av cmdletenRemove-AzResourceGroup.
$ResourceGroupName = "sfclustertutorialgroup"
Remove-AzResourceGroup -Name $ResourceGroupName -Force
ResourceGroupName="sfclustertutorialgroup"
az group delete --name $ResourceGroupName
Nästa steg
Läs mer om att använda API Management.
Du kan också använda Azure-portalen för att skapa och hantera Service Fabric-serverdelar för API Management.