Gyakorlat – Azure Functions-alkalmazás üzembe helyezése az Azure-ban
A projekt egy folyamattal rendelkezik, amely létrehozza a projekteket a megoldásban, és üzembe helyezi a webalkalmazást Azure-alkalmazás Szolgáltatásban. Most ideje kibővíteni a folyamatot az új Azure Functions-projekt üzembe helyezéséhez.
Ebben a részben a következő feladatokat hajtja végre:
- Tekintse át a buildelési szakaszt.
- Adjon hozzá egy feladatot a függvényalkalmazás üzembe helyezéséhez.
- Adjon hozzá egy feladatot, amely konfigurálja a közzétett App Service-t a közzétett függvény használatára.
- Mentse el a csővezetéket egy CI/CD-munkafolyamat aktiválásához.
Tekintse át a buildelési szakaszt
Itt tekintse át a meglévő, a azure-pipelines.yml fájlban definiált CI/CD-csővezetéket.
Az Azure DevOpsban lépjen a Folyamatok elemre.
Válassza ki a csővezetéket.
Válassza a Szerkesztés lehetőséget. A legördülő menüből kiválasztva győződjön meg arról, hogy az ág főként van beállítva. Ekkor megjelenik a meglévő CI/CD-folyamatot meghatározó azure-pipelines.yml fájl.
Mivel helyettesítő karaktereket használ a projektútvonalakhoz, a fájl kiemelt tevékenységei automatikusan visszaállítják, elkészítik és közzéteszik az új Azure Functions-projektet.
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: Ez volt az előző buildelési szakaszunk. Nem módosítottam az eredeti projektről, mert a feladatok már konfigurálva voltak, hogy az összes projekten fussanak a helyettesítő karakterek egyeztetési mintája alapján.
Mara: Igen, ez úgy működik, ahogy van. Nem hiszem, hogy módosítanunk kellene itt. A buildfeladat futtatása után a webes és a ranglista-projektekhez tartozó zip-fájlok elérhetővé válnak az Üzembe helyezési szakasz számára való használatra.
Adj hozzá egy feladatot az Azure-függvény üzembe helyezéséhez
Andy: Azt hiszem, újra felhasználhatjuk az App Service üzembe helyezési feladatát is. Remélhetőleg van valami hasonló, amit egy függvényalkalmazás üzembe helyezéséhez használhatunk.
Jó hírem van. Egy kis kutatás után úgy tűnik, hogy van egy olyan feladat, amely elméletileg hasonló az App Service üzembe helyezési feladatához, de az Azure Functions üzembe helyezéseihez. Tekintsük át most.
Azure függvényalkalmazás feladat
A AzureFunctionApp@1 feladat függvényalkalmazások üzembe helyezésére lett tervezve. Fogalmilag hasonló a AzureWebApp@1 feladathoz, és mindent tartalmaz, ami ehhez a függvényalkalmazás-forgatókönyvhöz szükséges.
-
azureSubscriptionaz Azure szolgáltatási kapcsolat folyamatának változójának nevére hivatkozik. -
appTypeazt jelzi, hogy az alkalmazás Linux (functionAppLinux) vagy Windows (functionApp) rendszeren van-e üzembe helyezve. -
appNameaz Azure Functions-alkalmazás példányának nevét határozza meg az Azure-fiókjában. -
packagemegadja az üzembe helyezendő csomag elérési útját. -
runtimeStackazt jelzi, hogy a függvényt melyik képen kell futtatni, ami a Linux telepítésekhez szükséges. -
startUpCommandmegadja a függvény üzembe helyezése után futtatandó indítási parancsot, amely szükséges a Linux-telepítésekhez.
További információt a feladat rugalmasságáról az Azure Function App-feladat dokumentációjában talál.
Adja hozzá a következő kiemelt kódot a pipeline végéhez.
- 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'
Tipp!
A YAML-fájlokban fontos a térköz. Győződjön meg arról, hogy az itt hozzáadott tevékenység ugyanazt a behúzást használja, mint az előző tevékenység.
Feladat hozzáadása az App Service alkalmazásbeállításainak frissítéséhez
Andy: Most már csak annyit kell tennünk, hogy konfiguráljuk a webalkalmazást a közzétett ranglista API használatára. A változókat általában a portálon konfiguráljuk, de jobb lenne, ha itt tennénk meg. Egy AppSettings nevű LeaderboardFunctionUrl paramétert vár.
Mara: Egyetértek. Ha a feladatot hozzáadjuk a folyamathoz, elkerülhetjük a véletlen mulasztásokat később, ha módosítjuk bármelyik szolgáltatást. Pont a végére tehetjük.
Adja hozzá a következő kiemelt kódot a pipeline végéhez. Ügyeljen arra, hogy egyezzen a fölötte lévő feladat behúzásával. Ha többet szeretne megtudni erről a tevékenységről, tekintse át Azure-alkalmazás Szolgáltatásbeállítások feladat dokumentációját.
- 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
}
]
Összeállítás és verziókibocsátás aktiválásához mentse a folyamatot.
Válassza a Lap jobb felső sarkában található Mentés lehetőséget. Erősítse meg a mentést a futtatás elindításához.
Az Azure Pipelinesban nyissa meg a build folyamatot. Kövesd nyomon a build futását.
Miután a build sikeres volt, válassza ki a webhely üzembe helyezési feladatát, és válassza ki az URL-címet az üzembe helyezett webhely megtekintéséhez.
Az Azure Pipelines képernyőképe, amelyen a weboldal URL-je látható.
Ön kap egy oldalt, amelyen a webhely az App Service-en fut. Görgessen le, és győződjön meg arról, hogy a ranglista valós adatokkal rendelkezik. Ezt a funkciót a függvényalkalmazás működteti.
Képernyőkép a Space Game webhelyéről.
Feljegyzés
Ha hiba történt a ranglista betöltésekor, ellenőrizze duplán az ebben a modulban követett lépéseket. Ha megjelenik a "Megkísérelték egy csatlakozó elérését a hozzáférési engedélyei által tiltott módon" kivételüzenet, győződjön meg arról, hogy az alkalmazásszolgáltatás AppSettings__LeaderboardFunctionUrl beállítása megfelelően van beállítva.
A függvényalkalmazást közvetlenül is tesztelheti. Navigáljon az URL-címére a következő formátumot használva. A válasz JSON, amelynek csak szövegként kell megjelennie a böngészőben.
http://<leaderboard function name>.azurewebsites.net/api/LeaderboardFunction?pageSize=10például
http://tailspin-space-game-leaderboard-4692.azurewebsites.net/api/LeaderboardFunction?pageSize=10
Andy: Ez kiderült, nagyszerű! Mindenkit lenyűgöznie kellene az itt bemutatott lehetőségeknek.