Azure İşlevleri PowerShell geliştirici kılavuzu
Bu makalede, PowerShell kullanarak Azure İşlevleri yazma hakkında ayrıntılar sağlanır.
PowerShell Azure işlevi (işlev), tetiklendiğinde yürütülen bir PowerShell betiği olarak temsil edilir. Her işlev betiği, işlevin nasıl davrandığını tanımlayan, nasıl tetiklendiğini ve giriş ve çıkış parametreleri gibi ilgili function.json
bir dosyaya sahiptir. Daha fazla bilgi edinmek için Tetikleyiciler ve bağlama makalesine bakın.
Diğer işlev türleri gibi PowerShell betik işlevleri de dosyada tanımlanan function.json
tüm giriş bağlamalarının adlarıyla eşleşen parametreler alır. TriggerMetadata
ayrıca, işlevi başlatan tetikleyici hakkında ek bilgiler içeren bir parametre geçirilir.
Bu makalede, Azure İşlevleri geliştirici başvuruyu zaten okuduğunuz varsayılır. İlk PowerShell işlevinizi oluşturmak için PowerShell için İşlevler hızlı başlangıcını da tamamlamış olmanız gerekir.
Klasör yapısı
PowerShell projesi için gerekli klasör yapısı aşağıdaki gibi görünür. Bu varsayılan değer değiştirilebilir. Daha fazla bilgi için aşağıdaki scriptFile bölümüne bakın.
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
Projenin kökünde, işlev uygulamasını yapılandırmak için kullanılabilecek paylaşılan host.json
bir dosya vardır. Her işlevin kendi kod dosyası (.ps1) ve bağlama yapılandırma dosyası () içeren bir klasörü vardırfunction.json
. function.json dosyasının üst dizininin adı her zaman işlevinizin adıdır.
Bazı bağlamalar bir extensions.csproj
dosyanın bulunmasını gerektirir. İşlevler çalışma zamanının 2.x ve sonraki sürümlerinde gerekli olan bağlama uzantıları, klasöründeki gerçek kitaplık dosyalarıyla birlikte dosyada bin
tanımlanırextensions.csproj
. Yerel olarak geliştirirken bağlama uzantılarını kaydetmeniz gerekir. Azure portalında işlevler geliştirirken bu kayıt sizin için yapılır.
PowerShell İşlev Uygulamaları'nda, isteğe bağlı olarak bir profile.ps1
işlev uygulaması çalışmaya başladığında (aksi takdirde soğuk başlangıç olarak bilindiğinde) çalışan bir uygulamanız olabilir. Daha fazla bilgi için bkz . PowerShell profili.
PowerShell betiğini işlev olarak tanımlama
varsayılan olarak, İşlevler çalışma zamanı işlevinizi run.ps1
içinde arar ve burada run.ps1
ilgili function.json
ile aynı üst dizini paylaşır.
Betiğinize yürütmede bir dizi bağımsız değişken geçirilir. Bu parametreleri işlemek için aşağıdaki örnekte olduğu gibi betiğinizin en üstüne bir param
blok ekleyin:
# $TriggerMetadata is optional here. If you don't need it, you can safely remove it from the param block
param($MyFirstInputBinding, $MySecondInputBinding, $TriggerMetadata)
TriggerMetadata parametresi
TriggerMetadata
parametresi tetikleyici hakkında ek bilgi sağlamak için kullanılır. Ek meta veriler bağlamadan bağlamaya farklılık gösterir, ancak bunların tümü aşağıdaki verileri içeren bir sys
özellik içerir:
$TriggerMetadata.sys
Özellik | Açıklama | Tür |
---|---|---|
UtcNow | UTC'de işlev tetiklendiğinde | DateTime |
MethodName | Tetiklenen İşlevin adı | Dize |
RandGuid | işlevin bu yürütülmesi için benzersiz bir guid | Dize |
Her tetikleyici türünün farklı bir meta veri kümesi vardır. Örneğin , $TriggerMetadata
ve diğer öğeleri içerirDequeueCount
InsertionTime
Id
.QueueTrigger
Kuyruk tetikleyicisinin meta verileri hakkında daha fazla bilgi için kuyruk tetikleyicileri için resmi belgelere gidin. Tetikleyici meta verilerinin içinde neler olduğunu görmek için birlikte çalıştığınız tetikleyicilerle ilgili belgelere bakın.
Bağlamalar
PowerShell'de bağlamalar bir işlevin function.json yapılandırılır ve tanımlanır. İşlevler çeşitli yollarla bağlamalarla etkileşim kurar.
Tetikleyici ve giriş verilerini okuma
Tetikleyici ve giriş bağlamaları işlevinize geçirilen parametreler olarak okunur. Giriş bağlamaları, function.json içinde olarak ayarlanmıştır direction
in
. name
içinde function.json
tanımlanan özellik, bloğundaki parametresinin param
adıdır. PowerShell bağlama için adlandırılmış parametreler kullandığından, parametrelerin sırası önemli değildir. Ancak, içinde tanımlanan bağlamaların sırasını izlemek en iyi yöntemdir function.json
.
param($MyFirstInputBinding, $MySecondInputBinding)
Çıkış verileri yazma
İşlevler'de çıkış bağlamasının direction
function.json olarak ayarlanmıştır out
. İşlevler çalışma zamanı için kullanılabilen cmdlet'ini Push-OutputBinding
kullanarak bir çıkış bağlamasına yazabilirsiniz. Her durumda, name
bağlamanın içinde tanımlandığı function.json
gibi özelliği cmdlet'in parametresine Push-OutputBinding
karşılık gelirName
.
Aşağıda, işlev betiğinizde nasıl çağrılacakları Push-OutputBinding
gösterilmektedir:
param($MyFirstInputBinding, $MySecondInputBinding)
Push-OutputBinding -Name myQueue -Value $myValue
Ayrıca, işlem hattı aracılığıyla belirli bir bağlama için bir değer geçirebilirsiniz.
param($MyFirstInputBinding, $MySecondInputBinding)
Produce-MyOutputValue | Push-OutputBinding -Name myQueue
Push-OutputBinding
için -Name
belirtilen değere göre farklı davranır:
Belirtilen ad geçerli bir çıkış bağlamasına çözümlenemediğinde bir hata oluşur.
Çıkış bağlaması bir değer koleksiyonu kabul ettiğinde, birden çok değer göndermek için tekrar tekrar çağırabilirsiniz
Push-OutputBinding
.Çıkış bağlaması yalnızca tek bir değeri kabul ettiğinde, ikinci bir kez çağrılması
Push-OutputBinding
bir hataya neden olur.
Push-OutputBinding söz dizimi
Çağrısı için Push-OutputBinding
geçerli parametreler şunlardır:
Adı | Tip | Position | Açıklama |
---|---|---|---|
-Name |
String | 1 | Ayarlamak istediğiniz çıkış bağlamasının adı. |
-Value |
Object | 2 | Ayarlamak istediğiniz çıkış bağlamasının değeri, işlem hattı ByValue'dan kabul edilir. |
-Clobber |
SwitchParameter | Adlı | (İsteğe bağlı) Belirtildiğinde, değeri belirtilen çıkış bağlaması için ayarlanacak şekilde zorlar. |
Aşağıdaki ortak parametreler de desteklenir:
Verbose
Debug
ErrorAction
ErrorVariable
WarningAction
WarningVariable
OutBuffer
PipelineVariable
OutVariable
Daha fazla bilgi için bkz . CommonParameters Hakkında.
Push-OutputBinding örneği: HTTP yanıtları
HTTP tetikleyicisi adlı response
bir çıkış bağlaması kullanarak bir yanıt döndürür. Aşağıdaki örnekte, çıkış bağlaması response
"output #1" değerine sahiptir:
PS >Push-OutputBinding -Name response -Value ([HttpResponseContext]@{
StatusCode = [System.Net.HttpStatusCode]::OK
Body = "output #1"
})
Çıkış, yalnızca tek bir değeri kabul eden HTTP'ye geldiğinden, ikinci kez çağrıldığında Push-OutputBinding
bir hata oluşur.
PS >Push-OutputBinding -Name response -Value ([HttpResponseContext]@{
StatusCode = [System.Net.HttpStatusCode]::OK
Body = "output #2"
})
Yalnızca tekil değerleri kabul eden çıkışlar için, bir koleksiyona eklemeye çalışmak yerine eski değeri geçersiz kılmak için parametresini kullanabilirsiniz -Clobber
. Aşağıdaki örnekte zaten bir değer eklediğiniz varsayılır. kullanılarak -Clobber
, aşağıdaki örnekte verilen yanıt mevcut değeri geçersiz kılarak "çıktı #3" değerini döndürür:
PS >Push-OutputBinding -Name response -Value ([HttpResponseContext]@{
StatusCode = [System.Net.HttpStatusCode]::OK
Body = "output #3"
}) -Clobber
Push-OutputBinding örneği: Kuyruk çıkış bağlaması
Push-OutputBinding
Azure Kuyruk depolama çıkış bağlaması gibi çıkış bağlamalarına veri göndermek için kullanılır. Aşağıdaki örnekte kuyruğa yazılan iletinin değeri "output #1" şeklindedir:
PS >Push-OutputBinding -Name outQueue -Value "output #1"
Depolama kuyruğunun çıkış bağlaması birden çok çıkış değeri kabul eder. Bu durumda, kuyruğa ilk yazmadan sonra aşağıdaki örneği çağırarak iki öğe içeren bir liste oluşturun: "output #1" ve "output #2".
PS >Push-OutputBinding -Name outQueue -Value "output #2"
Aşağıdaki örnek, önceki iki örnekten sonra çağrıldığında çıkış koleksiyonuna iki değer daha ekler:
PS >Push-OutputBinding -Name outQueue -Value @("output #3", "output #4")
Kuyruğa yazıldığında, ileti şu dört değeri içerir: "output #1", "output #2", "output #3" ve "output #4".
Get-OutputBinding cmdlet'i
Çıkış bağlamalarınız için ayarlanmış olan değerleri almak için cmdlet'ini kullanabilirsiniz Get-OutputBinding
. Bu cmdlet, ilgili değerleriyle çıkış bağlamalarının adlarını içeren bir karma tablo alır.
Geçerli bağlama değerlerini döndürmek için kullanma Get-OutputBinding
örneği aşağıda verilmiştir:
Get-OutputBinding
Name Value
---- -----
MyQueue myData
MyOtherQueue myData
Get-OutputBinding
ayrıca, aşağıdaki örnekte olduğu gibi döndürülen bağlamayı filtrelemek için kullanılabilen adlı -Name
bir parametre içerir:
Get-OutputBinding -Name MyQ*
Name Value
---- -----
MyQueue myData
Joker karakterler (*) içinde Get-OutputBinding
desteklenir.
Günlük Kaydı
PowerShell işlevlerinde günlüğe kaydetme, normal PowerShell günlüğü gibi çalışır. Her çıkış akışına yazmak için günlük cmdlet'lerini kullanabilirsiniz. Her cmdlet İşlevler tarafından kullanılan bir günlük düzeyine eşler.
İşlev günlüğü düzeyi | Günlük cmdlet'i |
---|---|
Hata | Write-Error |
Uyarı | Write-Warning |
Bilgiler | Write-Information Write-Host Write-Output Günlük düzeyine Information yazar. |
Hata Ayıklama | Write-Debug |
İzleme | Write-Progress Write-Verbose |
Bu cmdlet'lere ek olarak, işlem hattına yazılan her şey günlük düzeyine Information
yönlendirilir ve varsayılan PowerShell biçimlendirmesiyle görüntülenir.
Önemli
Write-Verbose
veya Write-Debug
cmdlet'lerini kullanmak ayrıntılı ve hata ayıklama düzeyinde günlüğe kaydetmeyi görmek için yeterli değildir. Ayrıca günlük düzeyi eşiğini de yapılandırmanız gerekir. Bu eşik, hangi günlük düzeyini gerçekten önemsediğinizi bildirir. Daha fazla bilgi edinmek için bkz . İşlev uygulaması günlük düzeyini yapılandırma.
İşlev uygulaması günlük düzeyini yapılandırma
Azure İşlevleri, İşlevler'in günlüklere yazma biçimini denetlemeyi kolaylaştırmak için eşik düzeyini tanımlamanızı sağlar. Konsola yazılan tüm izlemelerin eşiğini ayarlamak için dosyasındaki logging.logLevel.default
host.json
özelliğini kullanın. Bu ayar, işlev uygulamanızdaki tüm işlevler için geçerlidir.
Aşağıdaki örnek, tüm işlevler için ayrıntılı günlük kaydını etkinleştirmek için eşiği ayarlar, ancak adlı MyFunction
işlev için hata ayıklama günlüğünü etkinleştirmek için eşiği ayarlar:
{
"logging": {
"logLevel": {
"Function.MyFunction": "Debug",
"default": "Trace"
}
}
}
Daha fazla bilgi için bkz . host.json başvurusu.
Günlükleri görüntüleme
İşlev Uygulamanız Azure'da çalışıyorsa, izlemek için Application Insights'ı kullanabilirsiniz. İşlev günlüklerini görüntüleme ve sorgulama hakkında daha fazla bilgi edinmek için izleme Azure İşlevleri okuyun.
İşlev Uygulamanızı geliştirme için yerel olarak çalıştırıyorsanız, varsayılan olarak dosya sistemini günlüğe kaydeder. Konsoldaki günlükleri görmek için, İşlev Uygulamasını başlatmadan önce ortam değişkenini olarak Development
ayarlayınAZURE_FUNCTIONS_ENVIRONMENT
.
Tetikleyiciler ve bağlama türleri
İşlev uygulamanızla kullanabileceğiniz bir dizi tetikleyici ve bağlama vardır. Tetikleyicilerin ve bağlamaların tam listesine buradan ulaşabilirsiniz.
Tüm tetikleyiciler ve bağlamalar kodda birkaç gerçek veri türü olarak gösterilir:
- Hashtable
- Dize
- bayt[]
- int
- çift
- HttpRequestContext
- HttpResponseContext
Bu listedeki ilk beş tür standart .NET türleridir. Son ikisi yalnızca HttpTrigger tetikleyicisi tarafından kullanılır.
İşlevlerinizdeki her bağlama parametresi bu türlerden biri olmalıdır.
HTTP tetikleyicileri ve bağlamaları
HTTP ve web kancası tetikleyicileri ve HTTP çıkış bağlamaları, HTTP mesajlaşmasını temsil etmek için istek ve yanıt nesnelerini kullanır.
İstek nesnesi
Betiğine geçirilen istek nesnesi, aşağıdaki özelliklere sahip olan türündedir HttpRequestContext
:
Özellik | Açıklama | Tür |
---|---|---|
Body |
İsteğin gövdesini içeren bir nesne. Body verileri temel alarak en iyi türe seri hale getirilir. Örneğin, veriler JSON ise karma tablo olarak geçirilir. Veriler bir dizeyse, dize olarak geçirilir. |
nesne |
Headers |
İstek üst bilgilerini içeren bir sözlük. | Sözlük<dizesi,dize>* |
Method |
İsteğin HTTP yöntemi. | Dize |
Params |
İsteğin yönlendirme parametrelerini içeren bir nesne. | Sözlük<dizesi,dize>* |
Query |
Sorgu parametrelerini içeren bir nesne. | Sözlük<dizesi,dize>* |
Url |
İsteğin URL'si. | Dize |
* Tüm Dictionary<string,string>
anahtarlar büyük/küçük harfe duyarlı değildir.
Yanıt nesnesi
Geri göndermeniz gereken yanıt nesnesi, aşağıdaki özelliklere sahip olan türündedir HttpResponseContext
:
Özellik | Açıklama | Tür |
---|---|---|
Body |
Yanıtın gövdesini içeren bir nesne. | nesne |
ContentType |
Yanıt için içerik türünü ayarlamak için kısa bir el. | Dize |
Headers |
Yanıt üst bilgilerini içeren bir nesne. | Sözlük veya Karma Tablo |
StatusCode |
Yanıtın HTTP durum kodu. | dize veya int |
İstek ve yanıta erişme
HTTP tetikleyicileriyle çalışırken, HTTP isteğine diğer giriş bağlamalarıyla yaptığınız gibi erişebilirsiniz. Blokta param
.
HttpResponseContext
Aşağıdaki gibi yanıt döndürmek için bir nesne kullanın:
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!"
})
Bu işlevi çağırmanın sonucu şu olacaktır:
PS > irm http://localhost:5001?Name=Functions
Hello Functions!
Tetikleyiciler ve bağlamalar için tür atama
Blob bağlaması gibi bazı bağlamalar için parametresinin türünü belirtebilirsiniz.
Örneğin, Blob depolamadan alınan verilerin dize olarak sağlanması için bloğuma param
aşağıdaki tür atamasını ekleyin:
param([string] $myBlob)
PowerShell profili
PowerShell'de PowerShell profili kavramı vardır. PowerShell profilleri hakkında bilginiz yoksa bkz . Profiller hakkında.
PowerShell İşlevleri'nde, profil betiği ilk dağıtıldığında ve boşta kaldığında (soğuk başlangıç) uygulamadaki PowerShell çalışan örneği başına bir kez yürütülür. PSWorkerInProcConcurrencyUpperBound değeri ayarlanarak eşzamanlılık etkinleştirildiğinde, oluşturulan her çalışma alanı için profil betiği çalıştırılır.
Visual Studio Code ve Azure İşlevleri Core Tools gibi araçları kullanarak bir işlev uygulaması oluşturduğunuzda, sizin için varsayılan bir varsayılan profile.ps1
oluşturulur. Varsayılan profil, Core Tools GitHub deposunda tutulur ve şunları içerir:
- Azure'da otomatik MSI kimlik doğrulaması.
- İstersensiniz Azure PowerShell PowerShell
AzureRM
diğer adlarını açabilirsiniz.
PowerShell sürümleri
Aşağıdaki tabloda İşlevler çalışma zamanının her ana sürümü için kullanılabilen PowerShell sürümleri ve gerekli .NET sürümü gösterilmektedir:
İşlevler sürümü | PowerShell sürümü | .NET sürümü |
---|---|---|
4.x | PowerShell 7.4 | .NET 8 |
4.x | PowerShell 7.2 (destek sona eriyor) | .NET 6 |
Herhangi bir işlevden yazdırarak $PSVersionTable
geçerli sürümü görebilirsiniz.
Azure İşlevleri çalışma zamanı destek ilkesi hakkında daha fazla bilgi edinmek için lütfen bu makaleye bakın
Not
Azure İşlevleri PowerShell 7.2 desteği 8 Kasım 2024'te sona erer. PowerShell 7.2 işlevlerinizi PowerShell 7.4'te çalışacak şekilde yükseltirken bazı hataya neden olan değişiklikleri çözmeniz gerekebilir. PowerShell 7.4'e yükseltmek için bu geçiş kılavuzunu izleyin.
Belirli bir sürümde yerel çalıştırma
PowerShell işlevlerinizi yerel olarak çalıştırırken, ayarı "FUNCTIONS_WORKER_RUNTIME_VERSION" : "7.4"
proje kökündeki Values
local.setting.json dosyasındaki diziye eklemeniz gerekir. PowerShell 7.4'te yerel olarak çalışırken, local.settings.json dosyanız aşağıdaki örneğe benzer:
{
"IsEncrypted": false,
"Values": {
"AzureWebJobsStorage": "",
"FUNCTIONS_WORKER_RUNTIME": "powershell",
"FUNCTIONS_WORKER_RUNTIME_VERSION" : "7.4"
}
}
Not
PowerShell İşlevleri'nde, FUNCTIONS_WORKER_RUNTIME_VERSION için "~7" değeri "7.0.x" anlamına gelir. "~7" içeren PowerShell İşlevi uygulamalarını otomatik olarak "7.4" sürümüne yükseltmeyiz. Bundan sonra PowerShell İşlev Uygulamaları için uygulamaların hedeflemek istedikleri ana ve ikincil sürümü belirtmesini zorunlu kılacak. Bu nedenle, "7.4.x"i hedeflemek istiyorsanız "7.4" denmesi gerekir
PowerShell sürümünü değiştirme
PowerShell işlev uygulamanızı PowerShell 7.4'e geçirmeden önce şu noktaları dikkate alın:
Geçiş, uygulamanızda hataya neden olan değişikliklere neden olabileceğinden, uygulamanızı PowerShell 7.4'e yükseltmeden önce bu geçiş kılavuzunu gözden geçirin.
İşlev uygulamanızın Azure'daki İşlevler çalışma zamanının en son sürümünde çalıştığından emin olun. Bu sürüm 4.x'tir. Daha fazla bilgi için bkz . Geçerli çalışma zamanı sürümünü görüntüleme ve güncelleştirme.
İşlev uygulamanız tarafından kullanılan PowerShell sürümünü değiştirmek için aşağıdaki adımları kullanın. Bunu Azure portalında veya PowerShell kullanarak yapabilirsiniz.
Ayarlar'ın altında Yapılandırma'yı seçin. Genel ayarlar sekmesinde PowerShell sürümünü bulun.
İstediğiniz PowerShell Core sürümünü seçin ve Kaydet'i seçin. Bekleyen yeniden başlatma hakkında uyarıldığında Devam'ı seçin. İşlev uygulaması seçilen PowerShell sürümünde yeniden başlatılır.
Not
PowerShell 7.4 için Azure İşlevleri desteği genel kullanıma sunulmuştur (GA). Azure portalında PowerShell 7.4'un hala önizleme olarak gösterildiğini görebilirsiniz, ancak bu durum yakında GA durumunu yansıtacak şekilde güncelleştirilecektir.
yapılandırmada değişiklik yapıldıktan sonra işlev uygulaması yeniden başlatılır.
Bağımlılık yönetimi
İşlevler, bağımlılıkları yönetmek için PowerShell galerisinden yararlanmanızı sağlar. Bağımlılık yönetimi etkinleştirildiğinde requirements.psd1 dosyası gerekli modülleri otomatik olarak indirmek için kullanılır. Aşağıdaki örnekte olduğu managedDependency
gibi, özelliğini true
host.json dosyasının kökünde olarak ayarlayarak bu davranışı etkinleştirirsiniz:
{
"managedDependency": {
"enabled": true
}
}
Yeni bir PowerShell işlevleri projesi oluşturduğunuzda bağımlılık yönetimi, Azure Az
modülü de dahil olmak üzere varsayılan olarak etkinleştirilir. Şu anda desteklenen en fazla modül sayısı 10'dur. Desteklenen söz dizimi, aşağıdaki requirements.psd1 örneğinde gösterildiği gibi tam modül sürümüdür MajorNumber.*
:
@{
Az = '1.*'
SqlServer = '21.1.18147'
}
requirements.psd1 dosyasını güncelleştirdiğinizde, güncelleştirilmiş modüller yeniden başlatıldıktan sonra yüklenir.
Belirli sürümleri hedefleme
Requirements.psd1 dosyanızda modülün belirli bir sürümünü hedeflemek isteyebilirsiniz. Örneğin, Az.Accounts'ın dahil edilen Az modülündekinden daha eski bir sürümünü kullanmak istiyorsanız, aşağıdaki örnekte gösterildiği gibi belirli bir sürümü hedeflemeniz gerekir:
@{
'Az.Accounts' = '1.9.5'
}
Bu durumda, profile.ps1 dosyanızın en üstüne aşağıdaki örneğe benzer bir içeri aktarma deyimi de eklemeniz gerekir:
Import-Module Az.Accounts -RequiredVersion '1.9.5'
Bu şekilde işlev başlatıldığında önce Az.Account modülünün eski sürümü yüklenir.
Bağımlılık yönetimiyle ilgili dikkat edilmesi gerekenler
Bağımlılık yönetimi kullanılırken aşağıdaki noktalar geçerlidir:
Yönetilen bağımlılıklar, modülleri indirmek için
https://www.powershellgallery.com
erişim gerektirir. Yerel olarak çalışırken, çalışma zamanının gerekli güvenlik duvarı kurallarını ekleyerek bu URL'ye erişebildiğinden emin olun.Yönetilen bağımlılıklar şu anda kullanıcının lisansı etkileşimli olarak kabul ederek veya çağrılırken anahtar sağlayarak
-AcceptLicense
lisans kabul etmelerini gerektiren modülleri desteklememektedirInstall-Module
.İşlev uygulamanızı bir Flex Consumption planında barındırdığınızda yönetilen bağımlılıklar desteklenmez. Bunun yerine kendi özel modüllerinizi tanımlamanız gerekir.
Bağımlılık yönetimi uygulama ayarları
Yönetilen bağımlılıkların indirilip yüklenme şeklini değiştirmek için aşağıdaki uygulama ayarları kullanılabilir.
İşlev Uygulaması ayarı | Varsayılan değer | Açıklama |
---|---|---|
MDMaxBackgroundUpgradePeriod | 7.00:00:00 (yedi gün) |
PowerShell işlev uygulamaları için arka plan güncelleştirme süresini denetler. Daha fazla bilgi edinmek için bkz . MDMaxBackgroundUpgradePeriod. |
MDNewSnapshotCheckPeriod | 01:00:00 (bir saat) |
Her PowerShell çalışanının yönetilen bağımlılık yükseltmelerinin yüklenip yüklenmediğini ne sıklıkta denetlediğini belirtir. Daha fazla bilgi edinmek için bkz . MDNewSnapshotCheckPeriod. |
MDMinBackgroundUpgradePeriod | 1.00:00:00 (bir gün) |
Başka bir yükseltme denetimi başlatılmadan önceki yükseltme denetiminden sonraki süre. Daha fazla bilgi edinmek için bkz . MDMinBackgroundUpgradePeriod. |
Temelde, uygulama yükseltmeniz içinde MDMaxBackgroundUpgradePeriod
başlar ve yükseltme işlemi yaklaşık MDNewSnapshotCheckPeriod
içinde tamamlar.
Özel modüller
Azure İşlevleri'da kendi özel modüllerinizden yararlanmanız, PowerShell için normal şekilde nasıl yapabileceğinizden farklıdır.
Yerel bilgisayarınızda modül, içindeki $env:PSModulePath
genel olarak kullanılabilir klasörlerden birine yüklenir. Azure'da çalışırken makinenizde yüklü modüllere erişiminiz yoktur. Bu, bir PowerShell işlev uygulaması için uygulamasının $env:PSModulePath
normal bir PowerShell betiğinden $env:PSModulePath
farklı olduğu anlamına gelir.
İşlevler'de iki PSModulePath
yol içerir:
Modules
İşlev uygulamanızın kökünde bulunan bir klasör.- PowerShell dil çalışanı tarafından denetlenen bir
Modules
klasörün yolu.
İşlev uygulaması düzeyinde modüller klasörü
Özel modülleri kullanmak için işlevlerinizin bağlı olduğu modülleri bir Modules
klasöre yerleştirebilirsiniz. Bu klasörden modüller işlevler çalışma zamanı tarafından otomatik olarak kullanılabilir. İşlev uygulamasındaki herhangi bir işlev bu modülleri kullanabilir.
Not
requirements.psd1 dosyasında belirtilen modüller otomatik olarak indirilir ve yola eklenir, bu nedenle bunları modüller klasörüne eklemeniz gerekmez. Bunlar bulutta çalıştırıldığında klasörde ve /data/ManagedDependencies
klasörde yerel olarak $env:LOCALAPPDATA/AzureFunctions
depolanır.
Özel modül özelliğinden yararlanmak için işlev uygulamanızın kökünde bir Modules
klasör oluşturun. İşlevlerinizde kullanmak istediğiniz modülleri bu konuma kopyalayın.
mkdir ./Modules
Copy-Item -Path /mymodules/mycustommodule -Destination ./Modules -Recurse
Bir Modules
klasörle, işlev uygulamanızın aşağıdaki klasör yapısına sahip olması gerekir:
PSFunctionApp
| - MyFunction
| | - run.ps1
| | - function.json
| - Modules
| | - MyCustomModule
| | - MyOtherCustomModule
| | - MySpecialModule.psm1
| - local.settings.json
| - host.json
| - requirements.psd1
İşlev uygulamanızı başlattığınızda PowerShell dil çalışanı, normal bir PowerShell betiğinde $env:PSModulePath
yaptığınız gibi modül otomatik yüklemesine güvenebilmeniz için bu Modules
klasörü öğesine ekler.
Dil çalışanı düzeyi modüller klasörü
PowerShell dil çalışanı tarafından yaygın olarak çeşitli modüller kullanılır. Bu modüller öğesinin son konumunda PSModulePath
tanımlanır.
Modüllerin geçerli listesi aşağıdaki gibidir:
- Microsoft.PowerShell.Archive: ,
.nupkg
ve diğerleri gibi.zip
arşivlerle çalışmak için kullanılan modül. - ThreadJob: PowerShell iş API'lerinin iş parçacığı tabanlı uygulaması.
İşlevler varsayılan olarak bu modüllerin en son sürümünü kullanır. Belirli bir modül sürümünü kullanmak için bu belirli sürümü işlev uygulamanızın Modules
klasörüne yerleştirin.
Ortam değişkenleri
İşlevler'de, hizmet bağlantı dizesi gibi uygulama ayarları yürütme sırasında ortam değişkenleri olarak sunulur. Aşağıdaki örnekte gösterildiği gibi kullanarak $env:NAME_OF_ENV_VAR
bu ayarlara erişebilirsiniz:
param($myTimer)
Write-Host "PowerShell timer trigger function ran! $(Get-Date)"
Write-Host $env:AzureWebJobsStorage
Write-Host $env:WEBSITE_SITE_NAME
İşlev uygulaması ayarlarını eklemenin, güncelleştirmenin ve silmenin birkaç yolu vardır:
İşlev uygulaması ayarlarında yapılan değişiklikler, işlev uygulamanızın yeniden başlatılmasını gerektirir.
Yerel olarak çalıştırıldığında, uygulama ayarları local.settings.json proje dosyasından okunur.
Eşzamanlılık
Varsayılan olarak, İşlevler PowerShell çalışma zamanı bir kerede bir işlevin yalnızca bir çağrısını işleyebilir. Ancak, bu eşzamanlılık düzeyi aşağıdaki durumlarda yeterli olmayabilir:
- Aynı anda çok sayıda çağrıyı işlemeye çalıştığınızda.
- Aynı işlev uygulamasının içinde diğer işlevleri çağıran işlevleriniz olduğunda.
İş yükünün türüne bağlı olarak keşfedebileceğiniz birkaç eşzamanlılık modeli vardır:
Artır
FUNCTIONS_WORKER_PROCESS_COUNT
. Bu, aynı örnek içindeki birden çok işlemdeki işlev çağrılarının işlenmesine olanak tanır ve bu da belirli CPU ve bellek ek yükü getirir. Genel olarak G/Ç'ye bağlı işlevler bu ek yükten muzdarip olmaz. CPU'ya bağlı işlevler için etki önemli olabilir.PSWorkerInProcConcurrencyUpperBound
Uygulama ayarı değerini artırın. Bu, aynı işlem içinde birden çok çalışma alanı oluşturulmasına olanak tanır ve bu da CPU ve bellek ek yükünü önemli ölçüde azaltır.
Bu ortam değişkenlerini işlev uygulamanızın uygulama ayarlarında ayarlarsınız.
Kullanım örneğine bağlı olarak, Dayanıklı İşlevler ölçeklenebilirliği önemli ölçüde iyileştirebilir. Daha fazla bilgi edinmek için bkz. Dayanıklı İşlevler uygulama desenleri.
Not
"Kullanılabilir çalışma alanları olmadığından istekler kuyruğa alınıyor" uyarılarını alabilirsiniz, bunun bir hata olmadığını lütfen unutmayın. İleti, isteklerin kuyruğa alındığını ve önceki istekler tamamlandığında işleneceğini söylüyor.
Eşzamanlılık kullanımıyla ilgili dikkat edilmesi gerekenler
PowerShell varsayılan olarak single_threaded bir betik dilidir. Ancak eşzamanlılık, aynı işlemde birden çok PowerShell çalışma alanı kullanılarak eklenebilir. Oluşturulan çalışma alanı sayısı ve dolayısıyla çalışan başına eş zamanlı iş parçacığı sayısı, uygulama ayarıyla PSWorkerInProcConcurrencyUpperBound
sınırlıdır. Varsayılan olarak, çalışma alanı sayısı İşlevler çalışma zamanının 4.x sürümünde 1.000 olarak ayarlanır. 3.x ve altındaki sürümlerde en fazla çalışma alanı sayısı 1 olarak ayarlanır. Aktarım hızı, seçilen planda kullanılabilir CPU ve bellek miktarından etkilenir.
Azure PowerShell, fazla yazma işleminden tasarruf etmenizi sağlamak için bazı işlem düzeyinde bağlamlar ve durum kullanır. Ancak işlev uygulamanızda eşzamanlılığı açar ve durumu değiştiren eylemleri çağırırsanız yarış koşullarıyla sonuçlanabilirsiniz. Bir çağrı belirli bir duruma bağlı olduğundan ve diğer çağrı durumu değiştirdiğinden bu yarış koşullarının hata ayıklaması zordur.
Azure PowerShell ile eşzamanlılık açısından çok büyük bir değer vardır çünkü bazı işlemler çok uzun sürebilir. Ancak dikkatli olmanız gerekir. Bir yarış durumuyla karşılaştığınızı düşünüyorsanız PSWorkerInProcConcurrencyUpperBound uygulama ayarını 1
olarak ayarlayın ve bunun yerine eşzamanlılık için dil çalışanı işlem düzeyi yalıtımını kullanın.
İşlev betiğini yapılandırmaDosya
Varsayılan olarak, bir PowerShell işlevi, karşılık gelen function.json
ile aynı üst dizini paylaşan bir dosyasından yürütülürrun.ps1
.
içindeki scriptFile
function.json
özelliği, aşağıdaki örneğe benzer bir klasör yapısı almak için kullanılabilir:
FunctionApp
| - host.json
| - myFunction
| | - function.json
| - lib
| | - PSFunction.ps1
Bu durumda, function.json
for myFunction
işlevi, çalıştırılacak dışarı aktarılan işleve sahip dosyaya başvuran bir scriptFile
özellik içerir.
{
"scriptFile": "../lib/PSFunction.ps1",
"bindings": [
// ...
]
}
EntryPoint yapılandırarak PowerShell modüllerini kullanma
Bu makalede, şablonlar tarafından oluşturulan varsayılan run.ps1
betik dosyasında PowerShell işlevleri gösterilmiştir.
Ancak, işlevlerinizi PowerShell modüllerine de ekleyebilirsiniz. function.json yapılandırma dosyasındaki ve entryPoint
alanlarını kullanarak scriptFile
modüldeki belirli işlev koduna başvurabilirsiniz.
Bu durumda, entryPoint
içinde başvuruda bulunan PowerShell modülündeki bir işlevin veya cmdlet'in adıdır scriptFile
.
Aşağıdaki klasör yapısını göz önünde bulundurun:
FunctionApp
| - host.json
| - myFunction
| | - function.json
| - lib
| | - PSFunction.psm1
İçerir:PSFunction.psm1
function Invoke-PSTestFunc {
param($InputBinding, $TriggerMetadata)
Push-OutputBinding -Name OutputBinding -Value "output"
}
Export-ModuleMember -Function "Invoke-PSTestFunc"
Bu örnekte, için myFunction
yapılandırması, başka bir klasördeki bir scriptFile
PowerShell modülü olan öğesine başvuran PSFunction.psm1
bir özellik içerir. entryPoint
özelliği modüldeki Invoke-PSTestFunc
giriş noktası olan işleve başvurur.
{
"scriptFile": "../lib/PSFunction.psm1",
"entryPoint": "Invoke-PSTestFunc",
"bindings": [
// ...
]
}
Bu yapılandırmayla, tam Invoke-PSTestFunc
olarak bir run.ps1
şekilde yürütülür.
PowerShell işlevleri için dikkat edilmesi gerekenler
PowerShell işlevleriyle çalışırken, aşağıdaki bölümlerde dikkat edilmesi gereken noktalara dikkat edin.
Soğuk Başlangıç
Sunucusuz barındırma modelinde Azure İşlevleri geliştirirken soğuk başlangıçlar gerçektir. Soğuk başlangıç , işlev uygulamanızın bir isteği işlemek için çalışmaya başlaması için geçen süreyi ifade eder. İşlev uygulamanız etkinlik dışı dönemlerde kapatılmalarından dolayı, tüketim planında soğuk başlatma daha sık gerçekleşir.
Install-Module yerine modülleri paketleme
Betiğiniz her çağrıda çalıştırılır. Betiğinizde kullanmaktan Install-Module
kaçının. Bunun yerine, işlevinizin modülü indirmek için zaman kaybetmemesi için yayımlamadan önce kullanın Save-Module
. Soğuk başlangıçlar işlevlerinizi etkiliyorsa işlev uygulamanızı her zaman açık veya Premium plana ayarlanmış bir App Service planına dağıtmayı göz önünde bulundurun.
Sonraki adımlar
Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın: