Azure Functions-útmutató PowerShell-fejlesztőknek
Ez a cikk az Azure Functions PowerShell használatával történő írásának részleteit ismerteti.
A PowerShell Azure-függvények (függvények) olyan PowerShell-szkriptekként jelenik meg, amelyek aktiválva lesznek. Minden függvényszkript rendelkezik egy kapcsolódó fájllal function.json
, amely meghatározza a függvény viselkedését, például az aktiválás módját, valamint a bemeneti és kimeneti paramétereket. További információkért tekintse meg az Eseményindítók és kötések című cikket.
Más típusú függvényekhez hasonlóan a PowerShell-szkriptfüggvények is olyan paramétereket használnak, amelyek megfelelnek a fájlban function.json
definiált bemeneti kötések nevének. A TriggerMetadata
rendszer egy paramétert is átad, amely további információkat tartalmaz a függvényt elindító eseményindítóról.
Ez a cikk feltételezi, hogy már elolvasta az Azure Functions fejlesztői referenciáját. Az első PowerShell-függvény létrehozásához a PowerShell-hez készült Functions rövid útmutatót is el kellett volna végeznie.
Mappastruktúra
A PowerShell-projektekhez szükséges mappastruktúra az alábbihoz hasonlóan néz ki. Ez az alapértelmezett beállítás módosítható. További információkért tekintse meg a scriptFile szakaszt.
PSFunctionApp
| - MyFirstFunction
| | - run.ps1
| | - function.json
| - MySecondFunction
| | - run.ps1
| | - function.json
| - Modules
| | - myFirstHelperModule
| | | - myFirstHelperModule.psd1
| | | - myFirstHelperModule.psm1
| | - mySecondHelperModule
| | | - mySecondHelperModule.psd1
| | | - mySecondHelperModule.psm1
| - local.settings.json
| - host.json
| - requirements.psd1
| - profile.ps1
| - extensions.csproj
| - bin
A projekt gyökerében található egy megosztott host.json
fájl, amely a függvényalkalmazás konfigurálásához használható. Minden függvény rendelkezik egy saját kódfájllal (.ps1) és kötéskonfigurációs fájllal (function.json
). A function.json fájl szülőkönyvtárának neve mindig a függvény neve.
Bizonyos kötésekhez szükség van egy fájl jelenlétére extensions.csproj
. A Functions-futtatókörnyezet 2.x és újabb verzióiban szükséges kötéskiterjesztések a extensions.csproj
fájlban vannak definiálva, a mappában lévő bin
tényleges kódtárfájlokkal együtt. Helyi fejlesztéskor kötésbővítményeket kell regisztrálnia. Ha függvényeket fejleszt az Azure Portalon, ezt a regisztrációt önnek kell elvégeznie.
A PowerShell-függvényalkalmazásokban szükség esetén előfordulhat profile.ps1
, hogy egy függvényalkalmazás indításakor fut egy függvényalkalmazás (más néven hidegindítás). További információ: PowerShell-profil.
PowerShell-szkript definiálása függvényként
Alapértelmezés szerint a Functions-futtatókörnyezet megkeresi a függvényt run.ps1
, amelyben run.ps1
ugyanaz a szülőkönyvtár található, mint a megfelelő function.json
.
A szkript számos argumentumot ad át a végrehajtás során. A paraméterek kezeléséhez adjon hozzá egy blokkot param
a szkript tetejére, ahogyan az alábbi példában látható:
# $TriggerMetadata is optional here. If you don't need it, you can safely remove it from the param block
param($MyFirstInputBinding, $MySecondInputBinding, $TriggerMetadata)
TriggerMetadata paraméter
A TriggerMetadata
paraméter az eseményindítóval kapcsolatos további információk megadására szolgál. A további metaadatok kötésenként eltérőek, de mindegyik tartalmaz egy tulajdonságot sys
, amely a következő adatokat tartalmazza:
$TriggerMetadata.sys
Tulajdonság | Leírás | Típus |
---|---|---|
UtcNow | Amikor UTC-ben a függvény aktiválva lett | Dátum/idő |
MethodName | Az aktivált függvény neve | húr |
RandGuid | a függvény végrehajtásának egyedi guid azonosítója | húr |
Minden eseményindítótípus más metaadatkészlettel rendelkezik. Például a $TriggerMetadata
for QueueTrigger
tartalmazza a InsertionTime
, Id
, DequeueCount
, többek között. Az üzenetsor-eseményindító metaadataival kapcsolatos további információkért tekintse meg az üzenetsor-eseményindítók hivatalos dokumentációját. Az eseményindító metaadatainak megtekintéséhez tekintse meg az eseményindítók dokumentációját.
Kötések
A PowerShellben a kötések konfigurálva és definiálva vannak egy függvény function.json. A függvények számos módon használják a kötéseket.
Eseményindító és bemeneti adatok olvasása
Az eseményindítók és a bemeneti kötések a függvénynek átadott paraméterekként lesznek beolvasva. A bemeneti kötések direction
értéke in
function.json. A name
megadott function.json
tulajdonság a paraméter neve a param
blokkban. Mivel a PowerShell elnevezett paramétereket használ a kötéshez, a paraméterek sorrendje nem számít. Ajánlott azonban követni a kötések sorrendjét a function.json
.
param($MyFirstInputBinding, $MySecondInputBinding)
Kimeneti adatok írása
A Functionsben a kimeneti kötések direction
értéke out
a function.json. A függvények futtatókörnyezetében elérhető parancsmaggal Push-OutputBinding
írhat kimeneti kötésre. A kötés minden esetben name
a parancsmag paraméterének Push-OutputBinding
felel megName
.function.json
A következő bemutatja, hogyan hívhatja Push-OutputBinding
meg a függvényszkriptet:
param($MyFirstInputBinding, $MySecondInputBinding)
Push-OutputBinding -Name myQueue -Value $myValue
Egy adott kötés értékét is átadhatja a folyamaton keresztül.
param($MyFirstInputBinding, $MySecondInputBinding)
Produce-MyOutputValue | Push-OutputBinding -Name myQueue
Push-OutputBinding
a következőhöz megadott érték alapján eltérően viselkedik -Name
:
Ha a megadott név nem oldható fel érvényes kimeneti kötésre, a rendszer hibát jelez.
Ha a kimeneti kötés értékgyűjteményt fogad el, többször is meghívhat
Push-OutputBinding
több érték leküldésére.Ha a kimeneti kötés csak egy adott értéket fogad el, a második alkalommal történő hívás
Push-OutputBinding
hibát jelez.
Push-OutputBinding szintaxis
A híváshoz Push-OutputBinding
az alábbi paraméterek érvényesek:
Név | Típus | Position | Leírás |
---|---|---|---|
-Name |
Sztring | 0 | A beállítani kívánt kimeneti kötés neve. |
-Value |
Objektum | 2 | A beállítani kívánt kimeneti kötés értéke, amely a ByValue folyamatból lesz elfogadva. |
-Clobber |
SwitchParameter | Nevezett | (Nem kötelező) Ha meg van adva, kényszeríti az értéket egy adott kimeneti kötésre. |
A következő gyakori paraméterek is támogatottak:
Verbose
Debug
ErrorAction
ErrorVariable
WarningAction
WarningVariable
OutBuffer
PipelineVariable
OutVariable
További információ: CommonParameters.
Push-OutputBinding példa: HTTP-válaszok
A HTTP-eseményindítók egy névvel ellátott response
kimeneti kötéssel ad vissza választ. Az alábbi példában a kimeneti kötés response
értéke "1. kimenet":
PS >Push-OutputBinding -Name response -Value ([HttpResponseContext]@{
StatusCode = [System.Net.HttpStatusCode]::OK
Body = "output #1"
})
Mivel a kimenet a HTTP-hez van adva, amely csak egy adott értéket fogad el, a rendszer hibát jelez, ha Push-OutputBinding
a rendszer második alkalommal hívja meg.
PS >Push-OutputBinding -Name response -Value ([HttpResponseContext]@{
StatusCode = [System.Net.HttpStatusCode]::OK
Body = "output #2"
})
Az olyan kimenetek esetében, amelyek csak egyszeri értékeket fogadnak el, a -Clobber
paraméterrel felülbírálhatja a régi értéket a gyűjteményhez való hozzáadás helyett. Az alábbi példa feltételezi, hogy már hozzáadott egy értéket. A következő -Clobber
példa válasza felülírja a meglévő értéket a "3. kimenet" érték visszaadásához:
PS >Push-OutputBinding -Name response -Value ([HttpResponseContext]@{
StatusCode = [System.Net.HttpStatusCode]::OK
Body = "output #3"
}) -Clobber
Push-OutputBinding példa: Üzenetsor kimeneti kötése
Push-OutputBinding
az adatok kimeneti kötésekbe való küldésére szolgál, például egy Azure Queue Storage kimeneti kötésre. Az alábbi példában az üzenetsorba írt üzenet értéke "1. kimenet":
PS >Push-OutputBinding -Name outQueue -Value "output #1"
A Storage-üzenetsor kimeneti kötése több kimeneti értéket fogad el. Ebben az esetben az alábbi példát hívja meg, miután az első írás után egy listát ír az üzenetsorba két elemet tartalmazó listával: "output #1" és "output #2".
PS >Push-OutputBinding -Name outQueue -Value "output #2"
Az alábbi példa, amikor az előző kettő után van meghívva, két további értéket ad hozzá a kimeneti gyűjteményhez:
PS >Push-OutputBinding -Name outQueue -Value @("output #3", "output #4")
Amikor az üzenetsorba íródott, az üzenet a következő négy értéket tartalmazza: "output #1", "output #2", "output #3" és "output #4".
Get-OutputBinding parancsmag
A Get-OutputBinding
parancsmaggal lekérheti a kimeneti kötésekhez jelenleg beállított értékeket. Ez a parancsmag lekéri a kimeneti kötések nevét és azok értékeit tartalmazó kivonatolót.
Az alábbi példa az aktuális kötési értékek visszaadására mutat Get-OutputBinding
be példát:
Get-OutputBinding
Name Value
---- -----
MyQueue myData
MyOtherQueue myData
Get-OutputBinding
egy , a -Name
visszaadott kötés szűrésére használható paramétert is tartalmaz, ahogyan az alábbi példában is látható:
Get-OutputBinding -Name MyQ*
Name Value
---- -----
MyQueue myData
A helyettesítő karakterek (*) támogatottak.Get-OutputBinding
Naplózás
A PowerShell-függvények naplózása a szokásos PowerShell-naplózáshoz hasonlóan működik. A naplózási parancsmagokkal minden kimeneti streambe írhat. Minden parancsmag a Functions által használt naplószintre van leképezetten.
Függvények naplózási szintje | Naplózási parancsmag |
---|---|
Hiba | Write-Error |
Figyelmeztetés | Write-Warning |
Tájékoztatás | Write-Information Write-Host Write-Output A naplószintre ír Information . |
Hibakeresés | Write-Debug |
Trace | Write-Progress Write-Verbose |
A parancsmagok mellett a folyamatba írt összes írás a naplószintre Information
lesz átirányítva, és az alapértelmezett PowerShell-formázással jelenik meg.
Fontos
A parancsmagok vagy Write-Debug
parancsmagok Write-Verbose
használata nem elegendő a részletes és hibakeresési szintű naplózás megtekintéséhez. A naplószint küszöbértékét is konfigurálnia kell, amely deklarálja, hogy milyen szintű naplók érdeklik. További információ: A függvényalkalmazás naplószintjének konfigurálása.
A függvényalkalmazás naplószintjének konfigurálása
Az Azure Functions segítségével meghatározhatja a küszöbértéket, hogy könnyen szabályozhassa a Functions naplókba való írásának módját. A konzolra írt összes nyomkövetés küszöbértékének beállításához használja a logging.logLevel.default
fájlban lévő tulajdonságothost.json
. Ez a beállítás a függvényalkalmazás összes függvényére vonatkozik.
Az alábbi példa a küszöbértéket úgy állítja be, hogy az összes függvény esetében engedélyezze a részletes naplózást, de a küszöbértéket úgy állítja be, hogy engedélyezze a hibakeresési naplózást egy nevesített MyFunction
függvény esetében:
{
"logging": {
"logLevel": {
"Function.MyFunction": "Debug",
"default": "Trace"
}
}
}
További információ: host.json referencia.
A naplók megtekintése
Ha a függvényalkalmazás az Azure-ban fut, az Alkalmazás Elemzések segítségével figyelheti. A függvénynaplók megtekintésével és lekérdezésével kapcsolatos további információkért olvassa el az Azure Functions monitorozását.
Ha a függvényalkalmazást helyileg futtatja fejlesztésre, a rendszer alapértelmezés szerint naplózza a naplókat. A naplók a konzolon való megtekintéséhez állítsa be a AZURE_FUNCTIONS_ENVIRONMENT
környezeti változót Development
a függvényalkalmazás indítása előtt.
Eseményindítók és kötések típusai
A függvényalkalmazáshoz számos eseményindító és kötés érhető el. Az eseményindítók és kötések teljes listája itt található.
Az összes eseményindító és kötés a kódban néhány valós adattípusként jelenik meg:
- Hashtable
- húr
- bájt[]
- egész
- double
- HttpRequestContext
- HttpResponseContext
A listában az első öt típus a standard .NET-típusok. Az utolsó kettőt csak a HttpTrigger-eseményindító használja.
A függvények minden kötési paraméterének ilyen típusúnak kell lennie.
HTTP-eseményindítók és kötések
A HTTP- és webhook-eseményindítók és HTTP-kimeneti kötések kérés- és válaszobjektumokat használnak a HTTP-üzenetküldés megjelenítéséhez.
Objektum kérése
A szkriptbe átadott kérelemobjektum a HttpRequestContext
következő tulajdonságokkal rendelkezik:
Tulajdonság | Leírás | Típus |
---|---|---|
Body |
A kérelem törzsét tartalmazó objektum. Body az adatok alapján a legjobb típusba van szerializálva. Ha például az adatok JSON-ként vannak átadva, kivonatolóként lesznek átadva. Ha az adatok sztringek, azokat sztringként adjuk át. |
object |
Headers |
A kérelemfejléceket tartalmazó szótár. | Szótári sztring,sztring<>* |
Method |
A kérés HTTP-metódusa. | húr |
Params |
A kérés útválasztási paramétereit tartalmazó objektum. | Szótári sztring,sztring<>* |
Query |
A lekérdezési paramétereket tartalmazó objektum. | Szótári sztring,sztring<>* |
Url |
A kérés URL-címe. | húr |
* Minden Dictionary<string,string>
kulcs érzéketlen a kis- és nagybetűkhez.
Válaszobjektum
A válaszobjektum, amelyet vissza kell küldenie, az alábbi HttpResponseContext
tulajdonságokkal rendelkezik:
Tulajdonság | Leírás | Típus |
---|---|---|
Body |
A válasz törzsét tartalmazó objektum. | object |
ContentType |
Rövid kéz a válasz tartalomtípusának beállításához. | húr |
Headers |
A válaszfejléceket tartalmazó objektum. | Szótár vagy kivonatoló |
StatusCode |
A válasz HTTP-állapotkódja. | sztring vagy int |
A kérés és a válasz elérése
HA HTTP-eseményindítókkal dolgozik, ugyanúgy érheti el a HTTP-kérést, mint bármely más bemeneti kötés esetén. A blokkban param
van.
HttpResponseContext
A válasz visszaadásához használjon objektumot az alábbiak szerint:
function.json
{
"bindings": [
{
"type": "httpTrigger",
"direction": "in",
"authLevel": "anonymous"
},
{
"type": "http",
"direction": "out",
"name": "Response"
}
]
}
run.ps1
param($req, $TriggerMetadata)
$name = $req.Query.Name
Push-OutputBinding -Name Response -Value ([HttpResponseContext]@{
StatusCode = [System.Net.HttpStatusCode]::OK
Body = "Hello $name!"
})
A függvény meghívásának eredménye a következő:
PS > irm http://localhost:5001?Name=Functions
Hello Functions!
Típus-öntés triggerekhez és kötésekhez
Bizonyos kötések, például a blobkötés esetében megadhatja a paraméter típusát.
Ha például sztringként szeretné megadni a Blob Storage-ból származó adatokat, adja hozzá a következő típust a blokkhoz param
:
param([string] $myBlob)
PowerShell-profil
A PowerShell-ben létezik egy PowerShell-profil fogalma. Ha nem ismeri a PowerShell-profilokat, olvassa el a Profilok ismertetése című témakört.
A PowerShell Functionsben a profilszkript végrehajtása powerShell-feldolgozópéldányonként egyszer történik az alkalmazásban az első üzembe helyezéskor és az inaktív állapot (hideg kezdés) után. Ha az egyidejűség a PSWorkerInProcConcurrencyUpperBound érték beállításával engedélyezve van, a rendszer minden létrehozott runspace esetében futtatja a profilszkriptet.
Ha függvényalkalmazást hoz létre olyan eszközökkel, mint a Visual Studio Code és az Azure Functions Core Tools, a rendszer alapértelmezés szerint profile.ps1
létrehozza az Ön számára. Az alapértelmezett profil megmarad a Core Tools GitHub-adattárban , és a következőket tartalmazza:
- Automatikus MSI-hitelesítés az Azure-ban.
- Ha szeretné, bekapcsolhatja az Azure PowerShell
AzureRM
PowerShell-aliasokat.
PowerShell-verziók
Az alábbi táblázat a Functions-futtatókörnyezet egyes főverziói számára elérhető PowerShell-verziókat és a szükséges .NET-verziót mutatja be:
Functions-verzió | PowerShell-verzió | .NET-verzió |
---|---|---|
4.x | PowerShell 7.2 | .NET 6 |
Az aktuális verziót bármelyik függvényből kinyomtathatja $PSVersionTable
.
Az Azure Functions futtatókörnyezet támogatási szabályzatával kapcsolatos további információkért tekintse meg ezt a cikket
Helyi futtatás adott verzióban
A PowerShell 7.0 támogatása az Azure Functionsben 2022. december 3-án véget ért. A PowerShell 7.2 helyi futtatásakor történő használatához hozzá kell adnia a beállítást "FUNCTIONS_WORKER_RUNTIME_VERSION" : "7.2"
a Values
local.setting.json fájlban lévő tömbhöz a projekt gyökérkönyvtárában. Ha helyileg fut a PowerShell 7.2-ben, a local.settings.json fájl a következő példához hasonlóan néz ki:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"FUNCTIONS_WORKER_RUNTIME": "powershell",
"FUNCTIONS_WORKER_RUNTIME_VERSION" : "7.2"
}
}
Feljegyzés
A PowerShell Functionsben a "~7" érték FUNCTIONS_WORKER_RUNTIME_VERSION esetében a "7.0.x" értékre utal. Nem frissítjük automatikusan a "~7" verziójú PowerShell-függvényalkalmazásokat 7.2-re. A PowerShell-függvényalkalmazások esetében a továbbiakban azt követeljük meg, hogy az alkalmazások megadják a megcélzni kívánt fő- és alverziót is. Ezért meg kell említeni a "7.2" értéket, ha a "7.2.x" célértéket szeretné elérni
A PowerShell-verzió módosítása
A PowerShell 7.0 támogatása az Azure Functionsben 2022. december 3-án véget ért. A függvényalkalmazás PowerShell 7.2-re való frissítéséhez győződjön meg arról, hogy a FUNCTIONS_EXTENSION_VERSION értéke ~4. Ennek módjáról további információt az aktuális futtatókörnyezeti verzió megtekintése és frissítése című témakörben talál.
Az alábbi lépésekkel módosíthatja a függvényalkalmazás által használt PowerShell-verziót. Ezt az Azure Portalon vagy a PowerShell használatával teheti meg.
Az Azure Portalon keresse meg a függvényalkalmazást.
A Gépház csoportban válassza a Konfiguráció lehetőséget. Az Általános beállítások lapon keresse meg a PowerShell-verziót.
Válassza ki a kívánt PowerShell Core-verziót , és válassza a Mentés lehetőséget. Amikor figyelmeztetést ad a függőben lévő újraindításról, válassza a Folytatás lehetőséget. A függvényalkalmazás újraindul a kiválasztott PowerShell-verzióban.
A függvényalkalmazás a konfiguráció módosítása után újraindul.
Függőségkezelés
A Functions lehetővé teszi a PowerShell-gyűjtemény használatát a függőségek kezeléséhez. Ha engedélyezve van a függőségkezelés, a requirements.psd1 fájl használatával automatikusan letölti a szükséges modulokat. Ezt a viselkedést úgy engedélyezheti, hogy a managedDependency
tulajdonságot a host.json fájl gyökerére állítja, ahogyan az alábbi példában is true
látható:
{
"managedDependency": {
"enabled": true
}
}
Új PowerShell-függvényprojekt létrehozásakor a függőségkezelés alapértelmezés szerint engedélyezve van az Azure-modullal Az
együtt. A jelenleg támogatott modulok maximális száma 10. A támogatott szintaxis vagy a MajorNumber.*
modul pontos verziója, ahogyan az alábbi requirements.psd1 példában is látható:
@{
Az = '1.*'
SqlServer = '21.1.18147'
}
A requirements.psd1 fájl frissítésekor a frissített modulok újraindítás után települnek.
Célspecifikus verziók
Előfordulhat, hogy a requirements.psd1 fájlban meg szeretné célozni a modul egy adott verzióját. Ha például az Az.Accounts régebbi verzióját szeretné használni, mint a mellékelt Az modulban, akkor egy adott verziót kell megcélznia az alábbi példában látható módon:
@{
'Az.Accounts' = '1.9.5'
}
Ebben az esetben egy importálási utasítást is hozzá kell adnia a profile.ps1 fájl elejéhez, amely a következő példához hasonlóan néz ki:
Import-Module Az.Accounts -RequiredVersion '1.9.5'
Ily módon a függvény indításakor először az Az.Account modul régebbi verziója lesz betöltve.
Függőségkezelési szempontok
A függőségkezelés használatakor a következő szempontokat kell figyelembe venni:
A felügyelt függőségekhez hozzá kell férni a letöltési modulokhoz
https://www.powershellgallery.com
. Helyi futtatáskor győződjön meg arról, hogy a futtatókörnyezet minden szükséges tűzfalszabály hozzáadásával hozzáfér ehhez az URL-címhez.A felügyelt függőségek jelenleg nem támogatják azokat a modulokat, amelyek megkövetelik, hogy a felhasználó a licencet interaktív módon fogadja el, vagy kapcsolót adjon meg
-AcceptLicense
a meghíváskorInstall-Module
.
Függőségkezelési alkalmazás beállításai
A felügyelt függőségek letöltésének és telepítésének módosításához az alábbi alkalmazásbeállítások használhatók.
Függvényalkalmazás beállítása | Alapértelmezett érték | Leírás |
---|---|---|
MDMaxBackgroundUpgradePeriod | 7.00:00:00 (hét nap) |
Szabályozza a PowerShell-függvényalkalmazások háttérfrissítési időszakát. További információ: MDMaxBackgroundUpgradePeriod. |
MDNewSnapshotCheckPeriod | 01:00:00 (egy óra) |
Megadja, hogy az egyes PowerShell-feldolgozók milyen gyakran ellenőrzik, hogy a felügyelt függőségfrissítések telepítve lettek-e. További információ: MDNewSnapshotCheckPeriod. |
MDMinBackgroundUpgradePeriod | 1.00:00:00 (egy nap) |
Az egy korábbi frissítés-ellenőrzés utáni időszak egy újabb frissítési ellenőrzés megkezdése előtt. További információ: MDMinBackgroundUpgradePeriod. |
Az alkalmazásfrissítés lényegében belül kezdődik MDMaxBackgroundUpgradePeriod
, és a frissítési folyamat körülbelül a következőn MDNewSnapshotCheckPeriod
belül fejeződik be.
Egyéni modulok
A saját egyéni moduljai használata az Azure Functionsben eltér attól, ahogyan a PowerShell esetében általában tenné.
A modul a helyi számítógépen az egyik globálisan elérhető mappába lesz telepítve a $env:PSModulePath
saját számítógépén. Az Azure-ban való futtatáskor nincs hozzáférése a számítógépre telepített modulokhoz. Ez azt jelenti, hogy a $env:PSModulePath
PowerShell-függvényalkalmazások eltérnek a szokásos PowerShell-szkriptektől $env:PSModulePath
.
A Functionsben PSModulePath
két elérési út található:
- A
Modules
függvényalkalmazás gyökerében található mappa. - A PowerShell nyelvi feldolgozója által felügyelt mappa elérési útja
Modules
.
Függvényalkalmazás-szintű modulok mappa
Egyéni modulok használatához elhelyezhet olyan modulokat, amelyektől a függvények függenek egy Modules
mappában. Ebből a mappából a modulok automatikusan elérhetők a függvények futtatókörnyezetében. A függvényalkalmazás bármely függvénye használhatja ezeket a modulokat.
Feljegyzés
A requirements.psd1 fájlban megadott modulok automatikusan letöltődnek, és bekerülnek az elérési útba, így nem kell őket belefoglalnia a modulok mappájába. Ezeket a rendszer helyileg tárolja a $env:LOCALAPPDATA/AzureFunctions
mappában és a /data/ManagedDependencies
mappában, amikor a felhőben fut.
Az egyéni modul funkcióinak kihasználásához hozzon létre egy Modules
mappát a függvényalkalmazás gyökerében. Másolja a függvényekben használni kívánt modulokat erre a helyre.
mkdir ./Modules
Copy-Item -Path /mymodules/mycustommodule -Destination ./Modules -Recurse
Modules
Egy mappában a függvényalkalmazásnak a következő mappastruktúrával kell rendelkeznie:
PSFunctionApp
| - MyFunction
| | - run.ps1
| | - function.json
| - Modules
| | - MyCustomModule
| | - MyOtherCustomModule
| | - MySpecialModule.psm1
| - local.settings.json
| - host.json
| - requirements.psd1
A függvényalkalmazás indításakor a PowerShell nyelvi feldolgozója hozzáadja ezt Modules
a mappát a mappához, így ugyanúgy támaszkodhat a $env:PSModulePath
modul automatikus betöltésére, mint egy normál PowerShell-szkriptben.
Nyelvi feldolgozói szintű modulok mappa
A PowerShell nyelvi feldolgozója gyakran használ több modult. Ezek a modulok a következő utolsó pozícióban vannak definiálva PSModulePath
: .
A modulok aktuális listája a következő:
- Microsoft.PowerShell.Archive: az archívumok( például
.zip
, stb.).nupkg
használatához használt modul. - ThreadJob: A PowerShell-feladat API-k szálalapú implementálása.
Alapértelmezés szerint a Functions ezeknek a moduloknak a legújabb verzióját használja. Egy adott modulverzió használatához helyezze az adott verziót a Modules
függvényalkalmazás mappájába.
Környezeti változók
A Functionsben az alkalmazásbeállítások, például a szolgáltatás kapcsolati sztring környezeti változókként jelennek meg a végrehajtás során. Ezeket a beállításokat $env:NAME_OF_ENV_VAR
az alábbi példában látható módon érheti el:
param($myTimer)
Write-Host "PowerShell timer trigger function ran! $(Get-Date)"
Write-Host $env:AzureWebJobsStorage
Write-Host $env:WEBSITE_SITE_NAME
A függvényalkalmazás beállításai többféleképpen is hozzáadhatók, frissíthetők és törölhetők:
A függvényalkalmazás beállításainak módosításához újra kell indítani a függvényalkalmazást.
Helyi futtatáskor az alkalmazásbeállítások a local.settings.json projektfájlból lesznek beolvasva.
Egyidejűség
Alapértelmezés szerint a Functions PowerShell-futtatókörnyezet egyszerre csak egy függvény meghívását tudja feldolgozni. Ez az egyidejűségi szint azonban nem feltétlenül elegendő a következő helyzetekben:
- Amikor egyszerre sok meghívást próbál kezelni.
- Ha olyan függvényei vannak, amelyek más függvényeket is meghívnak ugyanabban a függvényalkalmazásban.
A számítási feladatok típusától függően néhány egyidejűségi modellt is megvizsgálhat:
Növekedés
FUNCTIONS_WORKER_PROCESS_COUNT
. Ez lehetővé teszi a függvényhívások kezelését több folyamaton belül, amelyek bizonyos processzor- és memóriaterhelést okoznak. Az I/O-hez kötött függvények általában nem szenvednek ettől a többletterheléstől. A processzorhoz kötött függvények esetében a hatás jelentős lehet.Növelje az
PSWorkerInProcConcurrencyUpperBound
alkalmazásbeállítás értékét. Ez lehetővé teszi több futtató tér létrehozását ugyanazon a folyamaton belül, ami jelentősen csökkenti a processzor- és memóriaterhelést.
Ezeket a környezeti változókat a függvényalkalmazás alkalmazásbeállításaiban állíthatja be.
A használati esettől függően a Durable Functions jelentősen javíthatja a méretezhetőséget. További információ: Durable Functions-alkalmazásminták.
Feljegyzés
Előfordulhat, hogy "a kérések várólistára kerülnek, mert nincsenek elérhető futtatóterek" figyelmeztetések, vegye figyelembe, hogy ez nem hiba. Az üzenet azt jelzi, hogy a kérések várólistára kerülnek, és azokat az előző kérések befejezésekor kezeli a rendszer.
Az egyidejűség használatának szempontjai
A PowerShell alapértelmezés szerint egy single_threaded szkriptnyelv. Egyidejűség azonban több PowerShell-futtatótér használatával is hozzáadható ugyanabban a folyamatban. A létrehozott futtatóterek számát, így az egyidejű szálak számát feldolgozónként az alkalmazásbeállítás korlátozza PSWorkerInProcConcurrencyUpperBound
. A futtatókörnyezetek száma alapértelmezés szerint 1000-ra van állítva a Functions-futtatókörnyezet 4.x verziójában. A 3.x és újabb verziókban a futtatóterek maximális száma 1. Az átviteli sebességet befolyásolja a kiválasztott csomagban elérhető processzor és memória mennyisége.
Az Azure PowerShell bizonyos folyamatszintű környezeteket és állapotokat használ a felesleges gépelések elkerülése érdekében. Ha azonban bekapcsolja az egyidejűséget a függvényalkalmazásban, és olyan műveleteket hív meg, amelyek módosítják az állapotot, versenyfeltételekkel járhat. Ezeket a versenyfeltételeket nehéz hibakeresésre használni, mert az egyik hívás egy adott állapotra támaszkodik, a másik meghívás pedig módosította az állapotot.
Óriási érték van az Azure PowerShell-lel való egyidejűségben, mivel egyes műveletek jelentős időt is igénybe vehetnek. Azonban körültekintően kell eljárnia. Ha azt gyanítja, hogy versenyhelyzetet tapasztal, állítsa a PSWorkerInProcConcConcurrencyUpperBound alkalmazásbeállítást 1
a nyelvi feldolgozó folyamatszintű elkülönítésére az egyidejűség érdekében.
Függvényszkriptfájl konfigurálása
Alapértelmezés szerint egy PowerShell-függvény egy olyan fájlból run.ps1
lesz végrehajtva, amely ugyanazt a szülőkönyvtárat használja, mint a megfelelő function.json
.
A scriptFile
tulajdonság a function.json
következő példához hasonló mappastruktúra lekérésére használható:
FunctionApp
| - host.json
| - myFunction
| | - function.json
| - lib
| | - PSFunction.ps1
Ebben az esetben a function.json
for myFunction
tartalmaz egy scriptFile
tulajdonságot, amely hivatkozik a fájlra az exportált függvény futtatásához.
{
"scriptFile": "../lib/PSFunction.ps1",
"bindings": [
// ...
]
}
PowerShell-modulok használata entryPoint konfigurálásával
Ez a cikk a PowerShell-függvényeket a sablonok által létrehozott alapértelmezett run.ps1
szkriptfájlban jeleníti meg.
A függvényeket azonban a PowerShell-modulokba is belefoglalhatja. A modulban található adott függvénykódra a function.json konfigurációs fájljának és entryPoint
mezőinek használatával scriptFile
hivatkozhat.
Ebben az esetben entryPoint
egy függvény vagy parancsmag neve a PowerShell-modulban scriptFile
.
Vegye figyelembe a következő mappastruktúrát:
FunctionApp
| - host.json
| - myFunction
| | - function.json
| - lib
| | - PSFunction.psm1
Hol PSFunction.psm1
található a következő:
function Invoke-PSTestFunc {
param($InputBinding, $TriggerMetadata)
Push-OutputBinding -Name OutputBinding -Value "output"
}
Export-ModuleMember -Function "Invoke-PSTestFunc"
Ebben a példában a konfiguráció egy olyan tulajdonságot myFunction
tartalmaz, amely egy másik mappában lévő PowerShell-modulra hivatkozikPSFunction.psm1
.scriptFile
A entryPoint
tulajdonság a Invoke-PSTestFunc
függvényre hivatkozik, amely a modul belépési pontja.
{
"scriptFile": "../lib/PSFunction.psm1",
"entryPoint": "Invoke-PSTestFunc",
"bindings": [
// ...
]
}
Ezzel a konfigurációval a rendszer pontosan úgy hajtja végre a Invoke-PSTestFunc
végrehajtást, ahogy tenné run.ps1
.
A PowerShell-függvények szempontjai
A PowerShell-függvények használatakor vegye figyelembe a következő szakaszokban ismertetett szempontokat.
Hideg kezdés
Amikor az Azure Functionst kiszolgáló nélküli üzemeltetési modellben fejleszti, a hidegindítások valósággá alakulnak. A hidegindítás azt az időtartamot jelenti, amely alatt a függvényalkalmazás elkezd futni egy kérés feldolgozásához. A használatalapú csomagban gyakrabban fordul elő hidegindítás, mert a függvényalkalmazás inaktivitási időszakokban leáll.
Modulok kötegelve az Install-Module használata helyett
A szkript minden meghíváskor fut. Kerülje a szkript használatát Install-Module
. Ehelyett a közzététel előtt használja Save-Module
, hogy a függvénynek ne kelljen időt pazarolnia a modul letöltésére. Ha a hidegindítások hatással vannak a függvényekre, fontolja meg a függvényalkalmazás üzembe helyezését egy Olyan App Service-csomagban , amely mindig be van állítva, vagy egy Prémium csomagra.
Következő lépések
További információkat találhat az alábbi forrásokban: