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. Předpokládá se také, že jste dokončili rychlý start functions pro PowerShell a vytvořili 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 .
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ává 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. Tato 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 interagují s vazbami mnoha 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 |
Objekt | 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 mnoho 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ředávají 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 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í. Tuto operaci můžete provést 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í
Správa modulů ve službě Azure Functions napsaná v PowerShellu se dá přistupovat dvěma způsoby: pomocí funkce Spravované závislosti nebo zahrnutím modulů přímo do obsahu aplikace. Každá metoda má své vlastní výhody a výběr správné metody závisí na vašich konkrétních potřebách.
Volba správného přístupu ke správě modulů
Proč používat funkci Spravované závislosti?
-
Zjednodušená počáteční instalace: Automaticky zpracovává instalaci modulu na základě vašeho
requirements.psd1
souboru. - Automatické upgrady: Moduly se aktualizují automaticky, včetně oprav zabezpečení, aniž by bylo nutné provést ruční zásah.
Proč zahrnout moduly do obsahu aplikace?
- Žádná závislost na Galerie prostředí PowerShell: Moduly jsou součástí vaší aplikace a eliminují externí závislosti.
- Větší kontrola: Zabraňuje riziku regresí způsobených automatickými upgrady a poskytuje úplnou kontrolu nad tím, které verze modulů se používají.
- Kompatibilita: Funguje na Flex Consumption a doporučuje se pro ostatní skladové položky Linuxu.
Funkce spravovaných závislostí
Funkce Spravované závislosti umožňuje službě Azure Functions automaticky stahovat a spravovat moduly PowerShellu requirements.psd1
zadané v souboru. Tato funkce je ve výchozím nastavení povolená v nových aplikacích funkcí PowerShellu.
Konfigurace requirements.psd1
Pokud chcete používat spravované závislosti ve službě Azure Functions s PowerShellem, musíte nakonfigurovat requirements.psd1
soubor. Tento soubor určuje moduly, které vaše funkce vyžaduje, a Azure Functions tyto moduly automaticky stáhne a aktualizuje, aby vaše prostředí zůstalo aktuální.
Tady je postup nastavení a konfigurace requirements.psd1
souboru:
- Pokud ještě neexistuje, vytvořte
requirements.psd1
soubor v kořenovém adresáři funkce Azure Functions. - Definujte moduly a jejich verze ve struktuře dat PowerShellu.
Příklad souboru requirements.psd1
:
@{
'Az' = '9.*' # Specifies the Az module and will use the latest version with major version 9
}
Zahrnutí modulů do obsahu aplikace
Pokud chcete mít větší kontrolu nad verzemi modulů a vyhnout se závislostem na externích prostředcích, můžete zahrnout moduly přímo do obsahu aplikace funkcí.
Zahrnutí vlastních modulů:
Vytvořte
Modules
složku v kořenovém adresáři aplikace funkcí.mkdir ./Modules
Zkopírujte moduly do
Modules
složky pomocí jedné z následujících metod:Pokud už jsou moduly dostupné místně:
Copy-Item -Path /mymodules/mycustommodule -Destination ./Modules -Recurse
Použití
Save-Module
k načtení z Galerie prostředí PowerShell:Save-Module -Name MyCustomModule -Path ./Modules
Použití
Save-PSResource
zPSResourceGet
modulu:Save-PSResource -Name MyCustomModule -Path ./Modules
Aplikace funkcí by měla mít následující strukturu:
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.
Poznámka:
Pokud je vaše aplikace funkcí ve správě zdrojového kódu, měli byste potvrdit, že veškerý obsah ve složce Modules, kterou přidáte, není vyloučen .gitignore. Pokud například jeden z modulů obsahuje složku přihrádky, která je vyloučená, budete chtít soubor .gitignore upravit nahrazením bin
**/bin/**
!Modules/**
Řešení potíží se spravovanými závislostmi
Povolení spravovaných závislostí
Aby spravované závislosti fungovaly, musí být tato funkce povolená v host.json:
{
"managedDependency": {
"enabled": true
}
}
Cílení na konkrétní verze
Při cílení na konkrétní verze modulů je důležité postupovat podle obou následujících kroků, abyste měli jistotu, že se načte správná verze modulu:
Zadejte verzi modulu v
requirements.psd1
:@{ 'Az.Accounts' = '1.9.5' }
Přidejte příkaz importu do
profile.ps1
:Import-Module Az.Accounts -RequiredVersion '1.9.5'
Následujícím postupem zajistíte, že se při spuštění funkce načte zadaná verze.
Konfigurace konkrétního nastavení intervalu spravované závislosti
Způsob stahování a instalace spravovaných závislostí můžete nakonfigurovat pomocí následujících nastavení aplikace:
Nastavení | Výchozí hodnota | Popis |
---|---|---|
MDMaxBackgroundUpgradePeriod |
7.00:00:00 (sedm dní) |
Řídí období aktualizace na pozadí pro aplikace funkcí PowerShellu. |
MDNewSnapshotCheckPeriod |
01:00:00 (jedna hodina) |
Určuje, jak často pracovní proces PowerShellu kontroluje aktualizace. |
MDMinBackgroundUpgradePeriod |
1.00:00:00 (jeden den) |
Minimální doba mezi kontrolami upgradu |
Důležité informace o správě závislostí
-
Přístup k internetu: Spravované závislosti vyžadují přístup ke
https://www.powershellgallery.com
stahování modulů. Ujistěte se, že vaše prostředí umožňuje tento přístup, včetně úprav pravidel brány firewall nebo virtuální sítě podle potřeby. - Přijetí licence: Spravované závislosti nepodporují moduly, které vyžadují přijetí licence.
- Plán Flex Consumption: Funkce Spravovaných závislostí není v plánu Flex Consumption podporovaná. Místo toho použijte vlastní moduly.
-
Umístění modulů: Na místním počítači se moduly obvykle instalují do jedné z globálně dostupných složek ve vašem
$env:PSModulePath
počítači . Při spuštění v Azure$env:PSModulePath
se aplikace funkcí PowerShellu liší od$env:PSModulePath
běžného skriptu PowerShellu a bude obsahovatModules
složku nahranou s obsahem aplikace a samostatné umístění spravované spravovanými závislostmi.
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
. Zvýšení tohoto nastavení 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 netrpí touto režií. U funkcí vázaných na procesor může být dopad významný.PSWorkerInProcConcurrencyUpperBound
Zvyšte hodnotu nastavení aplikace. Zvýšení tohoto nastavení umožňuje vytvořit více prostředí runspace ve stejném procesu, což výrazně snižuje režii procesoru a paměti.
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 aplikace funkcí má vliv na množství 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
Funkce PowerShellu v tomto článku se zobrazují s výchozím run.ps1
souborem 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.
Vyhněte se používání modulu Install-Module
Spuštění Install-Module
ve skriptu funkce při každém vyvolání může způsobit problémy s výkonem. Místo toho použijte Save-Module
nebo Save-PSResource
před publikováním aplikace funkcí zabalte potřebné moduly.
Další informace najdete v části Správa závislostí.
Další kroky
Další informace naleznete v následujících zdrojích: