Cvičení – nasazení aplikace Azure Functions do Azure
Váš projekt přišel s kanálem, který sestaví projekty v řešení a nasadí webovou aplikaci do služby Aplikace Azure Service. Teď je čas tento kanál rozšířit tak, aby nasadil také nový projekt Azure Functions.
V této části:
- Zkontrolujte fázi sestavení.
- Přidejte úlohu pro nasazení aplikace funkcí.
- Přidejte úlohu, která nakonfiguruje publikovanou službu App Service tak, aby používala publikovanou funkci.
- Uložte kanál, který aktivuje pracovní postup CI/CD.
Kontrola fáze sestavení
Tady zkontrolujete existující kanál CI/CD definovaný v azure-pipelines.yml.
V Azure DevOps přejděte na Kanály.
Vyberte kanál.
Vyberte položku Upravit. Ujistěte se, že je větev nastavená na hlavní , a to tak, že ji vyberete z rozevírací nabídky. Tím se zobrazí soubor azure-pipelines.yml , který definuje existující kanál CI/CD.
Z důvodu použití zástupných znaků k cestám projektu se zvýrazněné úkoly níže automaticky obnoví, sestaví a publikují nový projekt Azure Functions.
stages: - stage: 'Build' displayName: 'Build the web application' jobs: - job: 'Build' displayName: 'Build job' pool: vmImage: 'ubuntu-20.04' demands: - npm variables: wwwrootDir: 'Tailspin.SpaceGame.Web/wwwroot' dotnetSdkVersion: '6.0.x' steps: - task: UseDotNet@2 displayName: 'Use .NET SDK $(dotnetSdkVersion)' inputs: version: '$(dotnetSdkVersion)' - task: Npm@1 displayName: 'Run npm install' inputs: verbose: false - script: './node_modules/.bin/node-sass $(wwwrootDir) --output $(wwwrootDir)' displayName: 'Compile Sass assets' - task: gulp@1 displayName: 'Run gulp tasks' - script: 'echo "$(Build.DefinitionName), $(Build.BuildId), $(Build.BuildNumber)" > buildinfo.txt' displayName: 'Write build info' workingDirectory: $(wwwrootDir) - task: DotNetCoreCLI@2 displayName: 'Restore project dependencies' inputs: command: 'restore' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Build the project - $(buildConfiguration)' inputs: command: 'build' arguments: '--no-restore --configuration $(buildConfiguration)' projects: '**/*.csproj' - task: DotNetCoreCLI@2 displayName: 'Publish the project - $(buildConfiguration)' inputs: command: 'publish' projects: '**/*.csproj' publishWebProjects: false arguments: '--no-build --configuration $(buildConfiguration) --output $(Build.ArtifactStagingDirectory)/$(buildConfiguration)' zipAfterPublish: true - publish: '$(Build.ArtifactStagingDirectory)' artifact: drop
Andy: Tohle byla naše předchozí fáze sestavení. Nezměnil(a) jsem ho z původního projektu, protože úkoly byly už nakonfigurované tak, aby běžely proti všem projektům na základě vzoru porovnávání se zástupnými znamény.
Mara: Ano, tohle by mělo fungovat tak, jak je. Myslím, že tady nemusíme dělat žádné změny. Po spuštění této úlohy sestavení se artefakty souboru ZIP pro webové projekty i projekty tabulky výsledků publikují pro fázi nasazení, která se má použít.
Přidání úlohy pro nasazení funkce Azure Functions
Andy: Myslím, že můžeme také znovu použít úlohu nasazení služby App Service, jak je. Doufáme, že existuje něco podobného, co můžeme použít k nasazení aplikace funkcí.
Mara: Mám dobrou zprávu. Po malém průzkumu to vypadá, že existuje úloha, která je koncepčně podobná úloze nasazení služby App Service, ale pro nasazení Azure Functions. Pojďme se na to podívat.
Úloha aplikace Funkcí Azure
Úloha AzureFunctionApp@1
je navržená k nasazení aplikací funkcí. Je koncepčně podobný AzureWebApp@1
úloze a zahrnuje vše potřebné pro tento scénář aplikace funkcí:
azureSubscription
odkazuje na název proměnné kanálu připojení služby Azure.appType
označuje, jestli se aplikace nasazuje pro Linux (functionAppLinux
) nebo Windows (functionApp
).appName
určuje název instance aplikace Azure Functions ve vašem účtu Azure.package
určuje cestu k balíčku, který se má nasadit.runtimeStack
označuje, na které imagi má být funkce spuštěna, což je vyžadováno pro nasazení Linuxu.startUpCommand
určuje spouštěcí příkaz, který se má spustit po nasazení funkce, což se vyžaduje pro nasazení Linuxu.
Další informace o flexibilitě této úlohy najdete v dokumentaci k úloze Aplikace funkcí Azure.
Na konec kanálu přidejte následující zvýrazněný kód.
- stage: 'Deploy'
displayName: 'Deploy the web application'
dependsOn: Build
jobs:
- deployment: Deploy
pool:
vmImage: 'ubuntu-20.04'
environment: spike
variables:
- group: Release
strategy:
runOnce:
deploy:
steps:
- download: current
artifact: drop
- task: AzureWebApp@1
displayName: 'Azure App Service Deploy: website'
inputs:
azureSubscription: 'Resource Manager - Tailspin - Space Game'
appName: '$(WebAppName)'
appType: webAppLinux
package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/Tailspin.SpaceGame.Web.zip'
- task: AzureFunctionApp@1
displayName: 'Azure Function Deploy: leaderboard'
inputs:
azureSubscription: 'Resource Manager - Tailspin - Space Game'
appType: functionAppLinux
appName: '$(LeaderboardAppName)'
package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/Tailspin.SpaceGame.LeaderboardFunction.zip'
runtimeStack: DOCKER|microsoft/azure-functions-dotnet:4
startUpCommand: 'func azure functionapp publish $(functionAppName) --no-bundler'
Tip
V souboru YAML je důležité prázdné znaky. Ujistěte se, že zde přidaný úkol používá stejné odsazení jako předchozí úkol.
Přidání úlohy pro aktualizaci nastavení aplikace služby App Service
Andy: Teď stačí nakonfigurovat webovou aplikaci tak, aby používala publikované rozhraní API pro tabulky výsledků. Na portálu obvykle konfigurujeme proměnné, ale bylo by lepší to udělat tady. Očekává parametr AppSettings s názvem LeaderboardFunctionUrl
.
Mara: Souhlasím. Přidání úlohy pro tento úkol do kanálu nám pomůže vyhnout se náhodným dohledům po cestě, pokud změníme některou službu. Můžeme to dát přímo na konec.
Na konec kanálu přidejte následující zvýrazněný kód. Ujistěte se, že odpovídá odsazení úkolu nad ním. Pokud chcete získat další informace o této úloze, můžete si projít dokumentaci k úloze nastavení služby Aplikace Azure.
- task: AzureFunctionApp@1
displayName: 'Azure Function Deploy: leaderboard'
inputs:
azureSubscription: 'Resource Manager - Tailspin - Space Game'
appType: functionAppLinux
appName: '$(LeaderboardAppName)'
package: '$(Pipeline.Workspace)/drop/$(buildConfiguration)/Tailspin.SpaceGame.LeaderboardFunction.zip'
runtimeStack: DOCKER|microsoft/azure-functions-dotnet:4
startUpCommand: 'func azure functionapp publish $(functionAppName) --no-bundler'
- task: AzureAppServiceSettings@1
displayName: 'Update web app settings'
inputs:
azureSubscription: 'Resource Manager - Tailspin - Space Game'
appName: $(WebAppName)
resourceGroupName: $(ResourceGroupName)
appSettings: |
[
{
"name": "AppSettings__LeaderboardFunctionUrl",
"value": "http://$(LeaderboardAppName).azurewebsites.net/api/LeaderboardFunction",
"slotSetting": false
}
]
Uložení kanálu pro aktivaci sestavení a vydání
V pravém horním rohu stránky vyberte Uložit . Potvrďte uložení, aby se aktivovalo spuštění.
V Azure Pipelines přejděte na build. Trasujte sestavení při spuštění.
Po úspěšném sestavení vyberte úlohu nasazení webu a vyberte adresu URL pro zobrazení nasazeného webu.
Zobrazí se stránka s webem spuštěným ve službě App Service. Posuňte se dolů, abyste potvrdili, že tabulka výsledků obsahuje skutečná data. Tato funkce využívá aplikaci funkcí.
Poznámka:
Pokud při načítání tabulky výsledků dojde k chybě, pečlivě zkontrolujte kroky, které jste provedli v tomto modulu. Pokud se zobrazí zpráva o výjimce "Došlo k pokusu o přístup k soketu způsobem zakázaným jeho přístupovými oprávněními", ujistěte se, že je správně nastavené nastavení služby App Service AppSettings__LeaderboardFunctionUrl.
Aplikaci funkcí můžete také otestovat přímo. Stačí přejít na adresu URL pomocí následujícího formátu. Odpověď je JSON, která by se měla v prohlížeči vykreslit jako text.
http://<leaderboard function name>.azurewebsites.net/api/LeaderboardFunction?pageSize=10
například
http://tailspin-space-game-leaderboard-4692.azurewebsites.net/api/LeaderboardFunction?pageSize=10
Andy: To se ukázalo skvěle! Každý by měl být docela ohromen potenciálem, který jsme zde ukázali.