Azure Functions – Příručka pro vývojáře v PowerShellu
Tento článek obsahuje podrobnosti o tom, jak psát Azure Functions pomocí PowerShellu.
Funkce Azure PowerShellu (funkce) je reprezentovaná jako skript PowerShellu, který se spustí při aktivaci. Každý skript funkce má související function.json
soubor, který definuje, jak se funkce chová, například jak se aktivuje, a její vstupní a výstupní parametry. Další informace najdete v článku o triggerech a vazbách.
Stejně jako jiné druhy funkcí přebírají funkce skriptů PowerShellu parametry, které odpovídají názvům všech vstupních vazeb definovaných v function.json
souboru. Předá TriggerMetadata
se také parametr, který obsahuje další informace o triggeru, který funkci spustil.
Tento článek předpokládá, že už jste si přečetli referenční informace pro vývojáře azure Functions. Měli byste také dokončit rychlý start functions pro PowerShell a vytvořit první funkci PowerShellu.
Struktura složek
Požadovaná struktura složek pro projekt PowerShellu vypadá takto: Toto výchozí nastavení je možné změnit. Další informace najdete v části scriptFile níže.
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
V kořenovém adresáři projektu je sdílený host.json
soubor, který se dá použít ke konfiguraci aplikace funkcí. Každá funkce má složku s vlastním souborem kódu (.ps1) a konfiguračním souborem vazby (function.json
). Název nadřazeného adresáře function.json souboru je vždy název vaší funkce.
Některé vazby vyžadují přítomnost extensions.csproj
souboru. Rozšíření vazeb požadovaná ve verzi 2.x a novějších verzích modulu runtime Functions jsou definována v extensions.csproj
souboru se skutečnými soubory knihovny ve bin
složce. Při místním vývoji musíte zaregistrovat rozšíření vazeb. Při vývoji funkcí na webu Azure Portal se tato registrace provádí za vás.
V aplikacích funkcí PowerShellu můžete volitelně mít profile.ps1
, který se spustí, když se aplikace funkcí spustí (jinak se označuje jako studený start). Další informace najdete v profilu PowerShellu.
Definování skriptu PowerShellu jako funkce
Modul runtime služby Functions ve výchozím nastavení hledá vaši funkci v umístění , kde run.ps1
run.ps1
sdílí stejný nadřazený adresář jako odpovídající function.json
.
Skript se předá několik argumentů při spuštění. Pokud chcete tyto parametry zpracovat, přidejte param
do horní části skriptu blok, jak je znázorněno v následujícím příkladu:
# $TriggerMetadata is optional here. If you don't need it, you can safely remove it from the param block
param($MyFirstInputBinding, $MySecondInputBinding, $TriggerMetadata)
Parametr TriggerMetadata
Parametr TriggerMetadata
slouží k zadání dalších informací o triggeru. Další metadata se liší od vazby na vazbu, ale všechny obsahují sys
vlastnost, která obsahuje následující data:
$TriggerMetadata.sys
Vlastnost | Popis | Typ |
---|---|---|
UtcNow | Kdy se ve standardu UTC aktivovala funkce | DateTime |
MethodName | Název funkce, která se aktivovala | string |
RandGuid | jedinečný identifikátor GUID pro toto spuštění funkce | string |
Každý typ triggeru má jinou sadu metadat. Například for $TriggerMetadata
QueueTrigger
obsahuje InsertionTime
, Id
DequeueCount
, mimo jiné. Další informace o metadatech triggeru fronty najdete v oficiální dokumentaci k aktivačním událostem fronty. Podívejte se do dokumentace k triggerům , se kterými pracujete, a podívejte se, co se nachází v metadatech triggeru.
Vazby
V PowerShellu jsou vazby nakonfigurované a definované v function.json funkce. Funkce pracují s vazbami několika způsoby.
Čtení aktivačních událostí a vstupních dat
Aktivační události a vstupní vazby se čtou jako parametry předané vaší funkci. Vstupní vazby mají v function.json nastavenou direction
hodnotu in
. Vlastnost name
definovaná v function.json
je název parametru param
v bloku. Vzhledem k tomu, že PowerShell používá pro vazbu pojmenované parametry, nezáleží na pořadí parametrů. Osvědčeným postupem je však dodržovat pořadí vazeb definovaných v objektu function.json
.
param($MyFirstInputBinding, $MySecondInputBinding)
Zápis výstupních dat
Ve službě Functions má výstupní vazba nastavenou direction
hodnotu out
v function.json. K zápisu do výstupní vazby můžete použít rutinu Push-OutputBinding
, která je k dispozici modulu runtime služby Functions. Ve všech případech name
vlastnost vazby, jak je definována, function.json
odpovídá Name
parametru rutiny Push-OutputBinding
.
Následující příklad ukazuje, jak volat Push-OutputBinding
ve skriptu funkce:
param($MyFirstInputBinding, $MySecondInputBinding)
Push-OutputBinding -Name myQueue -Value $myValue
Prostřednictvím kanálu můžete také předat hodnotu pro určitou vazbu.
param($MyFirstInputBinding, $MySecondInputBinding)
Produce-MyOutputValue | Push-OutputBinding -Name myQueue
Push-OutputBinding
chová se odlišně na základě hodnoty zadané pro -Name
:
Pokud zadaný název nelze přeložit na platnou výstupní vazbu, vyvolá se chyba.
Když výstupní vazba přijme kolekci hodnot, můžete volat
Push-OutputBinding
opakovaně, aby se nasdílel více hodnot.Pokud výstupní vazba přijímá pouze jednu hodnotu, vyvolá volání
Push-OutputBinding
druhé chyby.
Syntaxe push-outputbinding
Následující parametry jsou platné pro volání Push-OutputBinding
:
Name | Type | Position | Popis |
---|---|---|---|
-Name |
String | 0 | Název výstupní vazby, kterou chcete nastavit. |
-Value |
Object | 2 | Hodnota výstupní vazby, kterou chcete nastavit, která je přijata z kanálu ByValue. |
-Clobber |
SwitchParameter | Pojmenovaný | (Volitelné) Při zadání vynutí nastavení hodnoty pro zadanou výstupní vazbu. |
Podporují se také následující běžné parametry:
Verbose
Debug
ErrorAction
ErrorVariable
WarningAction
WarningVariable
OutBuffer
PipelineVariable
OutVariable
Další informace naleznete v tématu o CommonParameters.
Příklad push-outputBinding: Odpovědi HTTP
Trigger HTTP vrátí odpověď pomocí výstupní vazby s názvem response
. V následujícím příkladu má výstupní vazba response
hodnotu "output #1":
PS >Push-OutputBinding -Name response -Value ([HttpResponseContext]@{
StatusCode = [System.Net.HttpStatusCode]::OK
Body = "output #1"
})
Vzhledem k tomu, že výstup je do protokolu HTTP, který přijímá pouze jednu hodnotu, vyvolá se při druhém zavolání chyby Push-OutputBinding
.
PS >Push-OutputBinding -Name response -Value ([HttpResponseContext]@{
StatusCode = [System.Net.HttpStatusCode]::OK
Body = "output #2"
})
Pro výstupy, které přijímají pouze hodnoty singleton, můžete použít -Clobber
parametr k přepsání staré hodnoty místo pokusu o přidání do kolekce. Následující příklad předpokládá, že jste již přidali hodnotu. Když použijete -Clobber
odpověď z následujícího příkladu, přepíše existující hodnotu tak, aby vrátila hodnotu "output #3":
PS >Push-OutputBinding -Name response -Value ([HttpResponseContext]@{
StatusCode = [System.Net.HttpStatusCode]::OK
Body = "output #3"
}) -Clobber
Příklad Push-OutputBinding: Výstupní vazba fronty
Push-OutputBinding
slouží k odesílání dat do výstupních vazeb, jako je výstupní vazba azure Queue Storage. V následujícím příkladu má zpráva zapsaná do fronty hodnotu "output #1":
PS >Push-OutputBinding -Name outQueue -Value "output #1"
Výstupní vazba fronty služby Storage přijímá více výstupních hodnot. V tomto případě volání následujícího příkladu po prvním zápisu do fronty seznam se dvěma položkami: "output #1" a "output #2".
PS >Push-OutputBinding -Name outQueue -Value "output #2"
Následující příklad, když je volána za předchozími dvěma, přidá do výstupní kolekce dvě další hodnoty:
PS >Push-OutputBinding -Name outQueue -Value @("output #3", "output #4")
Při zápisu do fronty zpráva obsahuje tyto čtyři hodnoty: "output #1", "output #2", "output #3" a "output #4".
Rutina Get-OutputBinding
Pomocí rutiny Get-OutputBinding
můžete načíst hodnoty aktuálně nastavené pro výstupní vazby. Tato rutina načte hashtable, která obsahuje názvy výstupních vazeb s příslušnými hodnotami.
Následuje příklad použití Get-OutputBinding
k vrácení aktuálních hodnot vazby:
Get-OutputBinding
Name Value
---- -----
MyQueue myData
MyOtherQueue myData
Get-OutputBinding
obsahuje také parametr s názvem -Name
, který lze použít k filtrování vrácené vazby, jako v následujícím příkladu:
Get-OutputBinding -Name MyQ*
Name Value
---- -----
MyQueue myData
Zástupné cardy (*) jsou podporovány v Get-OutputBinding
.
Protokolování
Protokolování ve funkcích PowerShellu funguje jako běžné protokolování PowerShellu. Pomocí rutin protokolování můžete zapisovat do každého výstupního datového proudu. Každá rutina se mapuje na úroveň protokolu používanou funkcí.
Úroveň protokolování funkcí | Rutina protokolování |
---|---|
Chyba | Write-Error |
Upozorňující | Write-Warning |
Informační | Write-Information Write-Host Write-Output Zapisuje se na Information úroveň protokolu. |
Ladění | Write-Debug |
Trasování | Write-Progress Write-Verbose |
Kromě těchto rutin se všechno zapsané do kanálu přesměruje na Information
úroveň protokolu a zobrazí se s výchozím formátováním PowerShellu.
Důležité
Použití rutin Write-Verbose
nebo Write-Debug
rutin nestačí k zobrazení podrobného protokolování a protokolování na úrovni ladění. Musíte také nakonfigurovat prahovou hodnotu na úrovni protokolu, která deklaruje, jakou úroveň protokolů skutečně zajímáte. Další informace najdete v tématu Konfigurace úrovně protokolu aplikace funkcí.
Konfigurace úrovně protokolu aplikace funkcí
Azure Functions umožňuje definovat prahovou úroveň, která usnadňuje řízení způsobu, jakým functions zapisuje do protokolů. Pokud chcete nastavit prahovou hodnotu pro všechny trasování zapsané do konzoly, použijte logging.logLevel.default
vlastnost v host.json
souboru. Toto nastavení platí pro všechny funkce ve vaší aplikaci funkcí.
Následující příklad nastaví prahovou hodnotu pro povolení podrobného protokolování pro všechny funkce, ale nastaví prahovou hodnotu pro povolení protokolování ladění pro funkci s názvem MyFunction
:
{
"logging": {
"logLevel": {
"Function.MyFunction": "Debug",
"default": "Trace"
}
}
}
Další informace najdete v host.json referenčních informacích.
Zobrazení protokolů
Pokud je vaše aplikace funkcí spuštěná v Azure, můžete ji monitorovat pomocí Application Insights. Další informace o zobrazení a dotazování protokolů funkcí najdete v monitorování služby Azure Functions .
Pokud používáte aplikaci Funkcí místně pro vývoj, protokoluje se výchozí nastavení systému souborů. Pokud chcete zobrazit protokoly v konzole, nastavte proměnnou AZURE_FUNCTIONS_ENVIRONMENT
prostředí na Development
před spuštěním aplikace funkcí.
Typy triggerů a vazeb
Pro použití s vaší aplikací funkcí je k dispozici celá řada triggerů a vazeb. Úplný seznam triggerů a vazeb najdete tady.
Všechny triggery a vazby jsou v kódu reprezentovány jako několik skutečných datových typů:
- Hashtable
- string
- byte[]
- int
- double
- HttpRequestContext
- HttpResponseContext
Prvních pět typů v tomto seznamu je standardních typů .NET. Poslední dva jsou používány pouze triggerem HttpTrigger.
Každý parametr vazby ve vašich funkcích musí být jedním z těchto typů.
Triggery a vazby HTTP
Triggery HTTP a webhooky a výstupní vazby HTTP používají objekty požadavků a odpovědí k reprezentaci zasílání zpráv HTTP.
Objekt požadavku
Objekt požadavku předaný do skriptu je typu HttpRequestContext
, který má následující vlastnosti:
Vlastnost | Popis | Typ |
---|---|---|
Body |
Objekt, který obsahuje text požadavku. Body je serializován do nejlepšího typu na základě dat. Pokud jsou například data JSON, předají se jako hashovací tabulka. Pokud jsou data řetězcem, předají se jako řetězec. |
objekt |
Headers |
Slovník, který obsahuje hlavičky požadavku. | Řetězec slovníku<, řetězec>* |
Method |
Metoda HTTP požadavku. | string |
Params |
Objekt, který obsahuje parametry směrování požadavku. | Řetězec slovníku<, řetězec>* |
Query |
Objekt, který obsahuje parametry dotazu. | Řetězec slovníku<, řetězec>* |
Url |
Adresa URL požadavku. | string |
* Všechny Dictionary<string,string>
klíče nerozlišují malá a velká písmena.
Objekt odpovědi
Objekt odpovědi, který byste měli odeslat zpět, je typu HttpResponseContext
, který má následující vlastnosti:
Vlastnost | Popis | Typ |
---|---|---|
Body |
Objekt, který obsahuje text odpovědi. | objekt |
ContentType |
Krátká ruka pro nastavení typu obsahu pro odpověď. | string |
Headers |
Objekt, který obsahuje hlavičky odpovědi. | Slovník nebo hashtable |
StatusCode |
Stavový kód HTTP odpovědi. | řetězec nebo int |
Přístup k požadavku a odpovědi
Při práci s triggery HTTP můžete k požadavku HTTP přistupovat stejným způsobem jako u jakékoli jiné vstupní vazby. Je v param
bloku.
K vrácení odpovědi použijte HttpResponseContext
objekt, jak je znázorněno v následujícím příkladu:
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!"
})
Výsledkem vyvolání této funkce by bylo:
PS > irm http://localhost:5001?Name=Functions
Hello Functions!
Přetypování typů pro triggery a vazby
U určitých vazeb, jako je vazba objektu blob, můžete zadat typ parametru.
Pokud například chcete mít data ze služby Blob Storage zadaná jako řetězec, přidejte do bloku param
následující typ přetypování:
param([string] $myBlob)
Profil PowerShellu
V PowerShellu je koncept profilu PowerShellu. Pokud neznáte profily PowerShellu, přečtěte si informace o profilech.
Ve funkcích PowerShellu se skript profilu spustí jednou pro instanci pracovního procesu PowerShellu v aplikaci při prvním nasazení a po idizování (studené spuštění). Pokud je povolena souběžnost nastavením hodnoty PSWorkerInProcConcurrencyUpperBound , skript profilu se spustí pro každý vytvořený runspace.
Když vytvoříte aplikaci funkcí pomocí nástrojů, jako je Visual Studio Code a Azure Functions Core Tools, vytvoří se vám výchozí nastavení profile.ps1
. Výchozí profil se udržuje v úložišti GitHub Core Tools a obsahuje:
- Automatické ověřování MSI do Azure.
- Možnost zapnout aliasy PowerShellu v Azure PowerShellu
AzureRM
, pokud chcete.
Verze PowerShellu
Následující tabulka uvádí verze PowerShellu dostupné pro každou hlavní verzi modulu runtime Functions a požadovanou verzi .NET:
Verze služby Functions | Verze Powershellu | Verze .NET |
---|---|---|
4.x | PowerShell 7.4 | .NET 8 |
4.x | PowerShell 7.2 (konec podpory) | .NET 6 |
Aktuální verzi můžete zobrazit tiskem $PSVersionTable
z libovolné funkce.
Další informace o zásadách podpory modulu runtime služby Azure Functions najdete v tomto článku.
Poznámka:
Podpora PowerShellu 7.2 ve službě Azure Functions končí 8. listopadu 2024. Při upgradu funkcí PowerShellu 7.2 na spuštění v PowerShellu 7.4 možná budete muset vyřešit některé zásadní změny. Postupujte podle tohoto průvodce migrací a upgradujte na PowerShell 7.4.
Spuštění místního prostředí v konkrétní verzi
Při místním spouštění funkcí PowerShellu je potřeba do pole v souboru local.setting.json v kořenovém adresáři projektu přidat nastavení "FUNCTIONS_WORKER_RUNTIME_VERSION" : "7.4"
Values
. Při místním spuštění v PowerShellu 7.4 vypadá váš local.settings.json soubor jako v následujícím příkladu:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"FUNCTIONS_WORKER_RUNTIME": "powershell",
"FUNCTIONS_WORKER_RUNTIME_VERSION" : "7.4"
}
}
Poznámka:
Ve funkcích PowerShellu se hodnota ~7 pro FUNCTIONS_WORKER_RUNTIME_VERSION označuje jako 7.0.x. Neupgradujeme automaticky aplikace funkcí PowerShellu, které mají hodnotu ~7 na 7.4. V případě aplikací funkcí PowerShellu budeme vyžadovat, aby aplikace zadaly hlavní i podverzi, na kterou chtějí cílit. Proto je nutné zmínit "7,4", pokud chcete cílit na "7.4.x".
Změna verze PowerShellu
Před migrací aplikace funkcí PowerShellu do PowerShellu 7.4 vezměte v úvahu tyto aspekty:
Vzhledem k tomu, že migrace může ve vaší aplikaci zavést zásadní změny, přečtěte si tuto příručku k migraci před upgradem aplikace na PowerShell 7.4.
Ujistěte se, že vaše aplikace funkcí běží na nejnovější verzi modulu runtime Functions v Azure, což je verze 4.x. Další informace naleznete v tématu Zobrazení a aktualizace aktuální verze modulu runtime.
Pomocí následujících kroků můžete změnit verzi PowerShellu používanou vaší aplikací funkcí. Můžete to udělat buď na webu Azure Portal, nebo pomocí PowerShellu.
Na webu Azure Portal přejděte do aplikace funkcí.
V části Nastavení zvolte Konfigurace. Na kartě Obecné nastavení vyhledejte verzi PowerShellu.
Zvolte požadovanou verzi PowerShellu Core a vyberte Uložit. Když se zobrazí upozornění na čekající restartování, zvolte Pokračovat. Aplikace funkcí se restartuje ve zvolené verzi PowerShellu.
Poznámka:
Podpora Azure Functions pro PowerShell 7.4 je obecně dostupná (GA). PowerShell 7.4 se na webu Azure Portal může stále zobrazovat ve verzi Preview, ale brzy se aktualizuje tak, aby odrážel stav ga.
Aplikace funkcí se restartuje po provedení změny konfigurace.
Správa závislostí
Funkce umožňují využít galerii Prostředí PowerShell ke správě závislostí. Při povolené správě závislostí se soubor requirements.psd1 používá k automatickému stahování požadovaných modulů. Toto chování povolíte nastavením managedDependency
vlastnosti v true
kořenovém adresáři souboru host.json, jak je znázorněno v následujícím příkladu:
{
"managedDependency": {
"enabled": true
}
}
Při vytváření nového projektu funkcí PowerShellu je ve výchozím nastavení povolená správa závislostí s zahrnutým modulem AzureAz
. Maximální počet modulů, které jsou aktuálně podporovány, je 10. Podporovaná syntaxe je MajorNumber.*
nebo přesná verze modulu, jak je znázorněno v následujícím příkladu requirements.psd1:
@{
Az = '1.*'
SqlServer = '21.1.18147'
}
Při aktualizaci souboru requirements.psd1 se po restartování nainstalují aktualizované moduly.
Cílení na konkrétní verze
V souboru requirements.psd1 můžete chtít cílit na konkrétní verzi modulu. Pokud byste například chtěli použít starší verzi Az.Accounts než v zahrnuté verzi modulu Az, museli byste cílit na konkrétní verzi, jak je znázorněno v následujícím příkladu:
@{
'Az.Accounts' = '1.9.5'
}
V tomto případě musíte také přidat příkaz importu do horní části souboru profile.ps1, který vypadá jako v následujícím příkladu:
Import-Module Az.Accounts -RequiredVersion '1.9.5'
Tímto způsobem se při spuštění funkce nejprve načte starší verze modulu Az.Account.
Důležité informace o správě závislostí
Při použití správy závislostí platí následující aspekty:
Spravované závislosti vyžadují přístup ke
https://www.powershellgallery.com
stahování modulů. Při místním spuštění se ujistěte, že modul runtime má přístup k této adrese URL přidáním požadovaných pravidel brány firewall.Spravované závislosti v současné době nepodporují moduly, které vyžadují, aby uživatel přijal licenci, a to buď interaktivně přijetím licence, nebo poskytnutím
-AcceptLicense
přepínače při vyvoláníInstall-Module
.Spravované závislosti se nepodporují, když hostujete aplikaci funkcí v plánu Flex Consumption. Místo toho musíte definovat vlastní moduly.
Nastavení aplikace pro správu závislostí
Pomocí následujících nastavení aplikace můžete změnit způsob stahování a instalace spravovaných závislostí.
Nastavení aplikace funkcí | Výchozí hodnota | Popis |
---|---|---|
MDMaxBackgroundUpgradePeriod | 7.00:00:00 (sedm dní) |
Řídí období aktualizace na pozadí pro aplikace funkcí PowerShellu. Další informace najdete v tématu MDMaxBackgroundUpgradePeriod. |
MDNewSnapshotCheckPeriod | 01:00:00 (jedna hodina) |
Určuje, jak často každý pracovní proces PowerShellu kontroluje, jestli byly nainstalovány upgrady spravovaných závislostí. Další informace najdete v tématu MDNewSnapshotCheckPeriod. |
MDMinBackgroundUpgradePeriod | 1.00:00:00 (jeden den) |
Časové období po předchozí kontrole upgradu před spuštěním jiné kontroly upgradu. Další informace najdete v tématu MDMinBackgroundUpgradePeriod. |
Upgrade aplikace se v podstatě spustí v rámci MDMaxBackgroundUpgradePeriod
a proces upgradu se dokončí přibližně v rámci MDNewSnapshotCheckPeriod
.
Vlastní moduly
Využití vlastních modulů ve službě Azure Functions se liší od toho, jak byste to normálně dělali pro PowerShell.
Na místním počítači se modul nainstaluje do jedné z globálně dostupných složek ve vašem $env:PSModulePath
počítači . Při spuštění v Azure nemáte přístup k modulům nainstalovaným na vašem počítači. To znamená, že se $env:PSModulePath
aplikace funkcí PowerShellu liší od $env:PSModulePath
normálního skriptu PowerShellu.
Ve službě Functions PSModulePath
obsahuje dvě cesty:
- Složka
Modules
, která existuje v kořenovém adresáři vaší aplikace funkcí. - Cesta ke
Modules
složce, kterou řídí pracovní proces jazyka PowerShellu.
Složka modulů na úrovni aplikace funkcí
Pokud chcete použít vlastní moduly, můžete umístit moduly, na kterých vaše funkce závisí ve Modules
složce. Z této složky jsou moduly automaticky dostupné modulu runtime funkcí. Všechny funkce v aplikaci funkcí můžou tyto moduly používat.
Poznámka:
Moduly zadané v souboru requirements.psd1 se automaticky stáhnou a zahrnou do cesty, takže je nemusíte zahrnout do složky modulů. Jsou uloženy místně ve $env:LOCALAPPDATA/AzureFunctions
složce a ve /data/ManagedDependencies
složce při spuštění v cloudu.
Pokud chcete využít výhod funkce vlastního modulu, vytvořte Modules
složku v kořenovém adresáři aplikace funkcí. Zkopírujte moduly, které chcete použít ve svých funkcích, do tohoto umístění.
mkdir ./Modules
Copy-Item -Path /mymodules/mycustommodule -Destination ./Modules -Recurse
Modules
U složky by vaše aplikace funkcí měla mít následující strukturu složek:
PSFunctionApp
| - MyFunction
| | - run.ps1
| | - function.json
| - Modules
| | - MyCustomModule
| | - MyOtherCustomModule
| | - MySpecialModule.psm1
| - local.settings.json
| - host.json
| - requirements.psd1
Když spustíte aplikaci funkcí, pracovní proces jazyka PowerShell tuto Modules
složku přidá do $env:PSModulePath
této složky, abyste se mohli spolehnout na automatické načítání modulů stejně jako v běžném skriptu PowerShellu.
Složka modulů na úrovni pracovního procesu jazyka
Pracovní proces jazyka PowerShellu běžně používá několik modulů. Tyto moduly jsou definovány v poslední pozici PSModulePath
.
Aktuální seznam modulů je následující:
- Microsoft.PowerShell.Archive: modul používaný pro práci s archivy, jako je
.zip
,.nupkg
a další. - ThreadJob: Implementace rozhraní API úloh PowerShellu založená na vláknech.
Služba Functions ve výchozím nastavení používá nejnovější verzi těchto modulů. Pokud chcete použít konkrétní verzi modulu, vložte tuto konkrétní verzi do Modules
složky vaší aplikace funkcí.
Proměnné prostředí
Ve službě Functions se nastavení aplikace, jako jsou připojovací řetězec služby, zobrazují během provádění jako proměnné prostředí. K těmto nastavením se dostanete pomocí příkazu $env:NAME_OF_ENV_VAR
, jak je znázorněno v následujícím příkladu:
param($myTimer)
Write-Host "PowerShell timer trigger function ran! $(Get-Date)"
Write-Host $env:AzureWebJobsStorage
Write-Host $env:WEBSITE_SITE_NAME
Nastavení aplikace funkcí můžete přidat, aktualizovat a odstranit několika způsoby:
Změny nastavení aplikace funkcí vyžadují restartování aplikace funkcí.
Při místním spuštění se nastavení aplikace načítá ze souboru projektu local.settings.json .
Souběžnost
Modul runtime PowerShellu functions ve výchozím nastavení může zpracovat pouze jedno vyvolání funkce najednou. Tato úroveň souběžnosti ale nemusí být v následujících situacích dostačující:
- Při pokusu o zpracování velkého počtu vyvolání najednou.
- Pokud máte funkce, které volají další funkce ve stejné aplikaci funkcí.
V závislosti na typu úlohy můžete prozkoumat několik modelů souběžnosti:
Zvýšit
FUNCTIONS_WORKER_PROCESS_COUNT
. To umožňuje zpracování volání funkcí v několika procesech ve stejné instanci, což přináší určité režijní náklady na procesor a paměť. Obecně platí, že vstupně-výstupní funkce nebudou touto režií trpět. U funkcí vázaných na procesor může být dopad významný.PSWorkerInProcConcurrencyUpperBound
Zvyšte hodnotu nastavení aplikace. To umožňuje vytvářet více prostředí runspace ve stejném procesu, což výrazně snižuje režijní náklady na procesor a paměť.
Tyto proměnné prostředí nastavíte v nastavení aplikace vaší aplikace funkcí.
V závislosti na vašem případu použití může Durable Functions výrazně zlepšit škálovatelnost. Další informace najdete v tématu Vzory aplikací Durable Functions.
Poznámka:
Může se zobrazit upozornění ,že se požadavky zařadí do fronty kvůli žádným dostupným prostředím runspaces", upozorňujeme, že se nejedná o chybu. Zpráva vám říká, že se požadavky zařadí do fronty a po dokončení předchozích požadavků se budou zpracovávat.
Důležité informace o používání souběžnosti
PowerShell je ve výchozím nastavení single_threaded skriptovací jazyk. Souběžnost se ale dá přidat pomocí několika prostředí Runspace v PowerShellu ve stejném procesu. Počet vytvořených prostředí runspace a počet souběžných vláken na pracovní proces je omezen PSWorkerInProcConcurrencyUpperBound
nastavením aplikace. Ve výchozím nastavení je počet runspaces nastavený na 1 000 ve verzi 4.x modulu runtime Služby Functions. Ve verzích 3.x a níže je maximální počet runspaces nastaven na hodnotu 1. Propustnost bude ovlivněna množstvím procesoru a paměti dostupné ve vybraném plánu.
Azure PowerShell používá některé kontexty a stav na úrovni procesu, které vám pomůžou ušetřit před nadbytečným psaním. Pokud ale ve své aplikaci funkcí zapnete souběžnost a vyvoláte akce, které změní stav, můžete skončit s podmínkami časování. Tyto podmínky časování jsou obtížné ladit, protože jedno vyvolání závisí na určitém stavu a druhé vyvolání změnilo stav.
Existuje obrovská hodnota souběžnosti s Azure PowerShellem, protože některé operace můžou nějakou dobu trvat. Musíte však pokračovat s opatrností. Pokud máte podezření, že dochází k konfliktu časování, nastavte nastavení aplikace PSWorkerInProcConcurrencyUpperBound na 1
úroveň procesu jazyka pro souběžnost.
Konfigurace souboru scriptFile funkce
Ve výchozím nastavení se spustí funkce PowerShellu ze run.ps1
souboru, který sdílí stejný nadřazený adresář jako odpovídající function.json
.
Vlastnost scriptFile
v objektu function.json
lze použít k získání struktury složek, která vypadá jako v následujícím příkladu:
FunctionApp
| - host.json
| - myFunction
| | - function.json
| - lib
| | - PSFunction.ps1
V tomto případě obsahuje scriptFile
vlastnost odkazující function.json
myFunction
na soubor s exportovanou funkcí, která se má spustit.
{
"scriptFile": "../lib/PSFunction.ps1",
"bindings": [
// ...
]
}
Konfigurace vstupního bodu pomocí modulů PowerShellu
Tento článek ukazuje funkce PowerShellu ve výchozím run.ps1
souboru skriptu vygenerovaném šablonami.
Funkce ale můžete zahrnout i do modulů PowerShellu. Na konkrétní kód funkce v modulu můžete odkazovat pomocí scriptFile
polí entryPoint
v konfiguračním souboru function.json.
V tomto případě entryPoint
je název funkce nebo rutiny v modulu PowerShellu, na který scriptFile
odkazuje .
Zvažte následující strukturu složek:
FunctionApp
| - host.json
| - myFunction
| | - function.json
| - lib
| | - PSFunction.psm1
Kde PSFunction.psm1
obsahuje:
function Invoke-PSTestFunc {
param($InputBinding, $TriggerMetadata)
Push-OutputBinding -Name OutputBinding -Value "output"
}
Export-ModuleMember -Function "Invoke-PSTestFunc"
V tomto příkladu konfigurace myFunction
zahrnuje scriptFile
vlastnost, která odkazuje PSFunction.psm1
, což je modul PowerShellu v jiné složce. Vlastnost entryPoint
odkazuje na Invoke-PSTestFunc
funkci, což je vstupní bod v modulu.
{
"scriptFile": "../lib/PSFunction.psm1",
"entryPoint": "Invoke-PSTestFunc",
"bindings": [
// ...
]
}
S touto konfigurací se Invoke-PSTestFunc
provede přesně tak, jak by to bylo run.ps1
.
Důležité informace o funkcích PowerShellu
Při práci s funkcemi PowerShellu mějte na paměti důležité informace v následujících částech.
Studený start
Při vývoji Azure Functions v modelu bezserverového hostování jsou studené starty realitou. Studený start označuje dobu potřebnou ke spuštění aplikace funkcí ke zpracování požadavku. V plánu Consumption dochází častěji ke studenému spuštění, protože aplikace funkcí se vypne během období nečinnosti.
Sbalování modulů místo použití modulu Install-Module
Váš skript se spustí při každém vyvolání. Vyhněte se použití Install-Module
ve skriptu. Místo toho použijte Save-Module
před publikováním, aby funkce nemusela ztrácet čas stažením modulu. Pokud na vaše funkce dopadají studené starty, zvažte nasazení aplikace funkcí do plánu služby App Service nastaveného tak, aby byla vždy zapnutá nebo na plán Premium.
Další kroky
Další informace naleznete v následujících zdrojích: