Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a cikk részletesen ismerteti, hogyan ír Azure Functions a PowerShell használatával.
Egy Azure PowerShell-függvény (függvény) PowerShell-szkriptként van ábrázolva, amely végrehajtódik, amikor aktiválódik. 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ó: Azure Functions triggerek és hozzárendelések fogalmai.
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 a Azure Functions fejlesztői útmutatót. Azt is feltételezi, hogy elvégezte a PowerShellhez készült Functions gyorsindítót, hogy elkészítse az első PowerShell-függvényt.
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 lásd 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. Amikor függvényeket fejleszt az Azure portálon, ezt a regisztrációt automatikusan elvégzik ön helyett.
A PowerShell-függvényalkalmazásokban szükség lehet egy profile.ps1 futtatására, ami akkor fut, amikor a függvényalkalmazás elindul (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 Functionök futtatókörnyezete megkeresi a függvényt run.ps1, ahol run.ps1 ugyanabban a szülőkönyvtárban található, mint a hozzá tartozó function.json.
A szkript több argumentumot is átad 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. Ezek a metaadatok kötéstől kötésig változnak, 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ő |
| MódszerNév | Az aktivált függvény neve | karakterlánc |
| RandGuid | a függvény végrehajtásának egyedi GUID-ja | karakterlánc |
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 egy függvény function.json fájlban vannak konfigurálva és definiálva. A függvények sokféleképpen lépnek kapcsolatba a kötésekkel.
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 beállítása in a function.json fájlban. A name-ben meghatározott 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 function.json által meghatározott rendelkezések sorrendjét.
param($MyFirstInputBinding, $MySecondInputBinding)
Kimeneti adatok írása
A Functionsben a kimeneti kötésnél a direction értékét out-ra állítják a function.json fájlban. A Push-OutputBinding parancsmaggal, amely elérhető a függvények futtatókörnyezetében, írhat kimeneti kötésre. A name kötés tulajdonsága minden esetben megfelel a function.json paraméternek, amelyet a Name parancsmag határoz meg.
Az alábbi példa bemutatja, hogyan hívja meg a Push-OutputBinding elemet a függvényskriptjében:
param($MyFirstInputBinding, $MySecondInputBinding)
Push-OutputBinding -Name myQueue -Value $myValue
Egy adott kötés értékét is átadhatja a pipeline-on 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, hibaüzenet jelenik meg.
Ha a kimeneti kötés értékgyűjteményt fogad el, többször is meghívhat
Push-OutputBindingtöbb érték leküldésére.Ha a kimeneti kötés csak egyetlen értéket fogad el, akkor a
Push-OutputBindingújbóli meghívása hibát eredményez.
Push-OutputBinding szintaxis
A híváshoz Push-OutputBindingaz alábbi paraméterek érvényesek:
| Név | Típus | Pozíció | Leírás |
|---|---|---|---|
-Name |
Sztring | 1 | 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 |
kapcsolóParaméter | Nevű | (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:
VerboseDebugErrorActionErrorVariableWarningActionWarningVariableOutBufferPipelineVariableOutVariable
További információért lásd: A CommonParameters című részt.
Push-OutputBinding példa: HTTP-válaszok
Az HTTP-eseményindító egy response nevű kimeneti kötést használva ad vissza választ. Az alábbi példában a kimeneti kötés response értéke "1. kimenet":
Push-OutputBinding -Name response -Value ([HttpResponseContext]@{
StatusCode = [System.Net.HttpStatusCode]::OK
Body = "output #1"
})
Mivel a kimenet HTTP formátumú, amely csak egyetlen értéket fogad el, hibát jelez, ha Push-OutputBinding második alkalommal van meghívva.
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 -Clobber használatával a következő példa válasza felülírja a meglévő értéket, és "3. kimenet" értéket ad vissza.
Push-OutputBinding -Name response -Value ([HttpResponseContext]@{
StatusCode = [System.Net.HttpStatusCode]::OK
Body = "output #3"
}) -Clobber
Push-OutputBinding példa: Sorkimeneti kötés
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":
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 első írás után hívja meg az alábbi példát, ami felsorol két elemet az üzenetsorba: "output #1" és "output #2".
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:
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ér egy hashtáblát, amely tartalmazza a kimeneti kötések neveit és az azokhoz tartozó értékeket.
Az alábbi példa az aktuális kötési értékek visszaadására használ Get-OutputBinding :
Get-OutputBinding
Name Value
---- -----
MyQueue myData
MyOtherQueue myData
Get-OutputBinding egy , a -Namevisszaadott 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 a Get-OutputBinding-ben.
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 Az Information naplószintre ír üzeneteket. |
| Hibakeresés | Write-Debug |
| Nyom | 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
Write-Verbose vagy Write-Debug parancsmagok 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
Azure Functions lehetővé teszi a küszöbérték szintjének meghatározását, hogy könnyen irányíthassa a Functions naplózási módját. A konzolra írt nyomkövetések összességének küszöbértékét a logging.logLevel.default tulajdonsággal a host.json fájlban állíthatja be. 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 MyFunctionfü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ása az Azure-ban fut, az Application Insights segítségével figyelheti. A függvénynaplók megtekintéséről és lekérdezéséről a monitoring Azure Functions című témakörben olvashat.
Ha helyileg futtatja a Function App-ot fejlesztési célokra, a naplók alapértelmezetten a fájlrendszerbe kerülnek. 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ájáért tekintse meg a támogatott kötéseket.
Az összes eseményindító és kötés a kódban néhány valós adattípusként jelenik meg:
- Hasítótábla
- karakterlánc
- bájt[]
- int
- dupla
- HTTP kérelem környezet
- HttpResponseContext
A lista első öt típusa standard .NET típus. 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 HttpRequestContextkö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. Például, ha az adatok JSON formátumúak, kivonattáblázatként lesznek átadva. Ha az adat karakterlánc, akkor karakterláncként adjuk át. |
objektum |
Headers |
A kérelemfejléceket tartalmazó szótár. | Szótár |
Method |
A kérés HTTP-metódusa. | karakterlánc |
Params |
A kérés útválasztási paramétereit tartalmazó objektum. | Szótár |
Query |
A lekérdezési paramétereket tartalmazó objektum. | Szótár |
Url |
A kérés URL-címe. | karakterlánc |
* 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 HttpResponseContexttulajdonságokkal rendelkezik:
| Tulajdonság | Leírás | Típus |
|---|---|---|
Body |
A válasz törzsét tartalmazó objektum. | objektum |
ContentType |
Rövid kéz a válasz tartalomtípusának beállításához. | karakterlánc |
Headers |
A válaszfejléceket tartalmazó objektum. | Szótár vagy hash-tábla |
StatusCode |
A válasz HTTP-állapotkódja. | string 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.
Az alábbi példában látható módon egy HttpResponseContext objektum használatával adjon vissza egy választ.
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ő:
irm http://localhost:5001?Name=Functions
Hello Functions!
Típuskonverzió 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 olyan eszközökkel hoz létre függvényalkalmazásokat, mint például Visual Studio Code és Azure Functions Core Tools, a rendszer létrehoz egy alapértelmezett profile.ps1. Az alapértelmezett profil a Core Tools GitHub adattárban van fenntartva, és a következőket tartalmazza:
- Automatikus MSI-hitelesítés Azure.
- Ha szeretné, bekapcsolhatja a Azure PowerShell
AzureRMPowerShell-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:
| Függvények verziója | PowerShell-verzió | .NET verzió |
|---|---|---|
| 4.x | PowerShell 7.4 | .NET 8 |
| 4.x | PowerShell 7.2 (támogatás vége) | .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áról további információt ebben a cikkben.
Megjegyzés
A PowerShell 7.2 támogatása az Azure Functionsben 2024. november 8-án ér véget. Előfordulhat, hogy a PowerShell 7.2-függvények PowerShell 7.4-en való futtatására való frissítésekor néhány kompatibilitástörő módosítást meg kell oldania. A PowerShell 7.4-re való frissítéshez kövesse ezt a migrációs útmutatót.
Helyi futtatás adott verzióban
Amikor helyben futtat PowerShell-függvényeket, hozzá kell adnia a beállítást "FUNCTIONS_WORKER_RUNTIME_VERSION" : "7.4" a projekt gyökérkönyvtárában található local.setting.json fájl Values tömbjéhez. Ha helyileg fut a PowerShell 7.4-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.4"
}
}
Megjegyzé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.4-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. A "7.4"-et meg kell említeni, ha a "7.4.x" értéket szeretné célba venni
A PowerShell-verzió módosítása
A PowerShell-függvényalkalmazás PowerShell 7.4-be való migrálása előtt vegye figyelembe ezeket a szempontokat:
Mivel a migrálás kompatibilitástörő változásokat eredményezhet az alkalmazásban, tekintse át ezt a migrációs útmutatót az alkalmazás PowerShell 7.4-re való frissítése előtt.
Győződjön meg arról, hogy a függvényalkalmazás a Functions-futtatókörnyezet legújabb verzióján fut a Azure 4.x-es verziójában. További információt az aktuális futtatókörnyezeti verzió megtekinté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 a műveletet a Azure portálon vagy a PowerShell használatával hajthatja végre.
A Azure portálon keresse meg a függvényalkalmazást.
A Beállítások területen 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.
Megjegyzés
Azure Functions PowerShell 7.4 támogatása általánosan elérhető (GA). Előfordulhat, hogy a PowerShell 7.4 továbbra is előzetes verzióként jelenik meg a Azure portálon, de ez az érték hamarosan frissül, hogy tükrözze a ga állapotát.
A függvényalkalmazás a konfiguráció módosítása után újraindul.
Függőségkezelés
A PowerShellben írt Azure Functions moduljainak kezelése kétféleképpen közelíthető meg: a modulokat közvetlenül az alkalmazás tartalmában helyezheted el, vagy használhatod a "Managed Dependencies" funkciót. Minden módszernek megvannak a maga előnyei, és a megfelelő kiválasztása az Ön igényeitől függ.
A megfelelő modulkezelési megközelítés kiválasztása
Miért érdemes használni a Felügyelt függőségek funkciót?
-
Egyszerűsített kezdeti telepítés: Automatikusan kezeli a modul telepítését a
requirements.psd1fájl alapján. - Automatikus frissítések: A modulok automatikusan frissülnek, beleértve a biztonsági javításokat is, manuális beavatkozás nélkül.
Miért érdemes modulokat belefoglalni az alkalmazás tartalmába?
- Nem függ a PowerShell Gallery: A modulok az alkalmazáshoz vannak csomagolva, így megszűnnek a külső függőségek.
- További szabályozás: Elkerüli az automatikus frissítések által okozott regressziók kockázatát, így teljes mértékben szabályozhatja a modulverziók használatát.
- Kompatibilitás: Flex Consumption rendszeren működik, és a többi Linux SKU-hoz is ajánlott.
Felügyelt függőségek funkció
A Felügyelt függőségek funkció lehetővé teszi, hogy Azure Functions automatikusan letöltse és kezelje a requirements.psd1 fájlban megadott PowerShell-modulokat. Ez a funkció alapértelmezés szerint engedélyezve van az új PowerShell-függvényalkalmazásokban.
A requirements.psd1 konfigurálása
Ha felügyelt függőségeket szeretne használni Azure Functions a PowerShell-lel, konfigurálnia kell egy requirements.psd1 fájlt. Ez a fájl megadja a függvény által igényelt modulokat, és Azure Functions automatikusan letölti és frissíti ezeket a modulokat, így biztosítva, hogy a környezet up-to-date maradjon.
Így állítsd be és konfiguráld a requirements.psd1 fájlt:
- Hozzon létre egy
requirements.psd1fájlt a Azure függvény gyökérkönyvtárában, ha még nem létezik. - Határozza meg a modulokat és azok verzióit egy PowerShell-adatstruktúrában.
requirements.psd1 példafájl:
@{
'Az' = '9.*' # Specifies the Az module and will use the latest version with major version 9
}
Modulok beépítése az alkalmazás tartalmába
A modulverziók hatékonyabb szabályozása és a külső erőforrásoktól való függőségek elkerülése érdekében a modulokat közvetlenül a függvényalkalmazás tartalmába is belefoglalhatja.
Egyéni modulok belefoglalása:
Hozzon létre egy
Modulesmappát a függvényalkalmazás gyökerénél.mkdir ./ModulesMásolja a modulokat a
Modulesmappába az alábbi módszerek egyikével:Ha a modulok már elérhetők helyileg:
Copy-Item -Path /mymodules/mycustommodule -Destination ./Modules -RecurseA
Save-Moduleletöltése a PowerShell GalériábólSave-Module -Name MyCustomModule -Path ./ModulesA
Save-PSResourcemodulPSResourceGethasználata:Save-PSResource -Name MyCustomModule -Path ./Modules
A függvényalkalmazásnak a következő struktú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.
Megjegyzés
Ha a függvényalkalmazás forrásvezérlés alatt áll, győződjön meg arról, hogy a hozzáadott Modulok mappában lévő összes tartalmat nem zárja ki a .gitignore. Ha például az egyik modul tartalmaz egy bin könyvtárat, amely ki van hagyva, a .gitignore-t úgy szeretné módosítani, hogy kicseréli bin a következőre:
**/bin/**
!Modules/**
Felügyelt függőségek hibaelhárítása
Felügyelt függőségek engedélyezése
Ahhoz, hogy a felügyelt függőségek működjenek, engedélyezni kell a funkciót host.json:
{
"managedDependency": {
"enabled": true
}
}
Célspecifikus verziók
Adott modulverziók megcélzásakor fontos mindkét lépést követni a modul megfelelő verziójának betöltése érdekében:
Adja meg a modul verzióját a következő helyen
requirements.psd1:@{ 'Az.Accounts' = '1.9.5' }Importálási utasítás hozzáadása a következőhöz
profile.ps1:Import-Module Az.Accounts -RequiredVersion '1.9.5'
Az alábbi lépések végrehajtásával biztosítható, hogy a függvény indításakor a megadott verzió be legyen töltve.
Adott felügyelt függőség időközi beállításainak konfigurálása
A felügyelt függőségek letöltésének és telepítésének módját az alábbi alkalmazásbeállítások használatával konfigurálhatja:
| Beállítás | Alapértelmezett érték | Leírás |
|---|---|---|
| MDMaxHátterfrissítésiIdőszak |
7.00:00:00 (hét nap) |
Szabályozza a PowerShell-függvényalkalmazások háttérfrissítési időszakát. |
| MDNewSnapshotCheckPeriod |
01:00:00 (egy óra) |
Megadja, hogy a PowerShell-feldolgozó milyen gyakran keres frissítéseket. |
| MDMinBackgroundUpgradePeriod |
1.00:00:00 (egy nap) |
A frissítési ellenőrzések közötti minimális idő. |
Függőségkezelési szempontok
-
Internet-hozzáférés: A felügyelt függőségek hozzáférést igényelnek a letöltési modulokhoz
https://www.powershellgallery.com. Győződjön meg arról, hogy a környezet engedélyezi ezt a hozzáférést, beleértve a tűzfal-/VNet-szabályok szükség szerinti módosítását is. A szükséges végpontokat a hibaelhárítási parancsmagok ismertetik. Ezek a végpontok igény szerint hozzáadhatók az engedélyezési listához. - Licenc elfogadása: A felügyelt függőségek nem támogatják a licenc elfogadását igénylő modulokat.
- Flex fogyasztási terv: A Flex fogyasztási terv nem támogatja a felügyelt függőségek funkciót. Használjon inkább egyéni modulokat.
-
Modulhelyek: A helyi számítógépen a modulok általában a globálisan elérhető mappák egyikében vannak telepítve.
$env:PSModulePathHa az Azure-ben fut, a PowerShell-függvényalkalmazás$env:PSModulePathkülönbözik egy normál PowerShell szkript$env:PSModulePath-tól, és tartalmazza az alkalmazás tartalmával feltöltöttModulesmappát, valamint egy különálló helyet, amelyet a felügyelt függőségek kezelnek.
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_VARaz 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:
- Az Azure portálon
Az Azure CLI használatával - Azure PowerShell használatával
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övelje a(z)
FUNCTIONS_WORKER_PROCESS_COUNTértékét. A beállítás növelése 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-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
PSWorkerInProcConcurrencyUpperBoundalkalmazásbeállítás értékét. A beállítás növelése 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.
Megjegyzés
Előfordulhat, hogy "a kérések várólistára kerülnek, mert nincsenek elérhető futtatóterek" figyelmeztetések. Ez az üzenet nem hiba. Az üzenet azt jelzi, hogy a kérések várólistára kerülnek. A rendszer az előző kérések teljesítésekor kezeli őket.
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. A függvényalkalmazás átviteli sebességére hatással van a kiválasztott csomagban elérhető processzor és memória mennyisége.
Azure PowerShell process-level környezeteket és állapotokat használ a felesleges gépelés elkerülése érdekében. Ha azonban engedélyezi az egyidejűséget a függvényalkalmazásban, és olyan műveleteket hív meg, amelyek módosítják az állapotot, versenyfeltételekhez vezethet. 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.
A Azure PowerShell egyidejűségében óriási érték van, 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 PSWorkerInProcConcurrencyUpperBound alkalmazásbeállítást 1, és használja helyette a nyelvi munkás folyamatszintű elkülönítését az egyidejű feldolgozás érdekében.
Függvény scriptFile konfigurálása
Alapértelmezés szerint egy PowerShell-függvény egy olyan fájlból run.ps1lesz 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
A cikkben szereplő PowerShell-függvények a sablonok által létrehozott alapértelmezett run.ps1 szkriptfájllal jelennek meg.
A függvényeket azonban a PowerShell-modulokba is belefoglalhatja. A function.json konfigurációs fájlban található scriptFile és entryPoint mezők használatával hivatkozhat a modulban található adott függvénykódra.
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
Amikor PSFunction.psm1 tartalmazza:
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 hivatkozikscriptFile.PSFunction.psm1 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
Az Azure Functions kiszolgáló nélküli üzemeltetési modellben való fejlesztésekor a hidegindítás valós jelenség. 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.
Az Install-Module használatának mellőzése
Az Install-Module függvényszkriptben minden egyes meghívás során való futtatása teljesítményproblémákat okozhat. Ehelyett használja a Save-Module vagy Save-PSResource jelöléseket, majd tegye közzé a függvényalkalmazást a szükséges modulok kötegeléséhez.
További információ: Függőségkezelés.
Következő lépések
További információt a következő források tartalmaznak: