適用於 Azure Functions 的 Azure Blob 記憶體觸發程式
偵測到新的或更新的 Blob 時,Blob 記憶體觸發程式會啟動函式。 Blob 內容會當做 函式的輸入來提供。
提示
有數種方式可以根據儲存體容器中 Blob 的變更來執行函式程式碼。 如果您選擇使用 Blob 記憶體觸發程式,請注意提供兩個實作:輪詢式實作(本文中參考)和事件型實作。 建議您使用 事件型實 作,因為它的延遲比另一個低。 此外,Flex Consumption 方案僅支援事件型 Blob 記憶體觸發程式。
如需 Blob 記憶體觸發程式兩個實作之間的差異,以及其他觸發選項的詳細資訊,請參閱 使用 Blob。
如需安裝和組態詳細數據的詳細資訊,請參閱概 觀。
重要
本文使用索引標籤來支援多個版本的 Node.js 程式設計模型。 v4 模型已正式推出,旨在為 JavaScript 和 TypeScript 開發人員提供更靈活且更直覺的體驗。 如需 v4 模型運作方式的更多詳細資料,請參閱 Azure Functions Node.js 開發人員指南。 若要深入了解 v3 與 v4 之間的差異,請參閱移轉指南。
Azure Functions 支援兩種適用於 Python 的程式設計模型。 您定義系結的方式取決於您所選擇的程式設計模型。
Python v2 程式設計模型可讓您直接在 Python 函式程式代碼中使用裝飾項目來定義系結。 如需詳細資訊,請參閱 Python 開發人員指南。
本文支援這兩種程序設計模型。
範例
您可以使用下列其中一種 C# 模式來建立 C# 函式:
- 隔離的背景工作模型:在與運行時間隔離的背景工作進程中執行的已編譯 C# 函式。 需要隔離的背景工作進程,才能支援在 LTS 和非 LTS 版本 .NET 和 .NET Framework 上執行的 C# 函式。 隔離背景工作進程函式的延伸模組會使用
Microsoft.Azure.Functions.Worker.Extensions.*
命名空間。 - 同進程模型:在與 Functions 運行時間相同的進程中執行的已編譯 C# 函式。 在此模型的變化中,函式可以使用 C# 腳本來執行,主要支援 C# 入口網站編輯。 進程內函式的延伸模組會使用
Microsoft.Azure.WebJobs.Extensions.*
命名空間。
重要
內含式模型支援將於 2026 年 11 月 10 日結束。 強烈建議您將應用程式移轉至隔離式背景工作角色模型,以取得完整支援。
下列範例是 C# 函式 ,會在隔離的背景工作進程中執行,並使用 Blob 觸發程式搭配 Blob 輸入和 Blob 輸出 Blob 系結。 函式會藉由在test-samples-trigger容器中建立 Blob 來觸發。 它會從 test-samples-input 容器讀取文字檔,並根據觸發的檔名,在輸出容器中建立新的文本檔。
public static class BlobFunction
{
[Function(nameof(BlobFunction))]
[BlobOutput("test-samples-output/{name}-output.txt")]
public static string Run(
[BlobTrigger("test-samples-trigger/{name}")] string myTriggerItem,
[BlobInput("test-samples-input/sample1.txt")] string myBlob,
FunctionContext context)
{
var logger = context.GetLogger("BlobFunction");
logger.LogInformation("Triggered Item = {myTriggerItem}", myTriggerItem);
logger.LogInformation("Input Item = {myBlob}", myBlob);
// Blob Output
return "blob-output content";
}
}
此函式會在容器中 myblob
新增或更新 Blob 時寫入記錄檔。
@FunctionName("blobprocessor")
public void run(
@BlobTrigger(name = "file",
dataType = "binary",
path = "myblob/{name}",
connection = "MyStorageAccountAppSetting") byte[] content,
@BindingName("name") String filename,
final ExecutionContext context
) {
context.getLogger().info("Name: " + filename + " Size: " + content.length + " bytes");
}
下列範例顯示 Blob 觸發程式 TypeScript 程式代碼。 函式會在容器中 samples-workitems
新增或更新 Blob 時寫入記錄檔。
Blob 觸發程序路徑 samples-workitems/{name}
中的字串 {name}
會建立繫結運算式,您可以在函式程式碼中用來存取觸發 Blob 的檔案名稱。 如需詳細資訊,請參閱 本文稍後的 Blob 名稱模式 。
import { app, InvocationContext } from '@azure/functions';
export async function storageBlobTrigger1(blob: Buffer, context: InvocationContext): Promise<void> {
context.log(
`Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
);
}
app.storageBlob('storageBlobTrigger1', {
path: 'samples-workitems/{name}',
connection: 'MyStorageAccountAppSetting',
handler: storageBlobTrigger1,
});
下列範例顯示 Blob 觸發程式 JavaScript 程式代碼。 函式會在容器中 samples-workitems
新增或更新 Blob 時寫入記錄檔。
Blob 觸發程序路徑 samples-workitems/{name}
中的字串 {name}
會建立繫結運算式,您可以在函式程式碼中用來存取觸發 Blob 的檔案名稱。 如需詳細資訊,請參閱 本文稍後的 Blob 名稱模式 。
const { app } = require('@azure/functions');
app.storageBlob('storageBlobTrigger1', {
path: 'samples-workitems/{name}',
connection: 'MyStorageAccountAppSetting',
handler: (blob, context) => {
context.log(
`Storage blob function processed blob "${context.triggerMetadata.name}" with size ${blob.length} bytes`
);
},
});
下列範例示範如何建立函式,以在檔案新增至 source
Blob 記憶體容器時執行。
函式組態檔 (function.json) 包含與 的系blobTrigger
type
結,並將 direction
設定為 in
。
{
"bindings": [
{
"name": "InputBlob",
"type": "blobTrigger",
"direction": "in",
"path": "source/{name}",
"connection": "MyStorageAccountConnectionString"
}
]
}
以下是 run.ps1 檔案的相關程序代碼。
param([byte[]] $InputBlob, $TriggerMetadata)
Write-Host "PowerShell Blob trigger: Name: $($TriggerMetadata.Name) Size: $($InputBlob.Length) bytes"
此範例會使用 SDK 類型直接存取 Blob 記憶體觸發程式所提供的基礎 BlobClient
物件:
import logging
import azure.functions as func
import azurefunctions.extensions.bindings.blob as blob
app = func.FunctionApp(http_auth_level=func.AuthLevel.ANONYMOUS)
@app.blob_trigger(
arg_name="client", path="PATH/TO/BLOB", connection="AzureWebJobsStorage"
)
def blob_trigger(client: blob.BlobClient):
logging.info(
f"Python blob trigger function processed blob \n"
f"Properties: {client.get_blob_properties()}\n"
f"Blob content head: {client.download_blob().read(size=1)}"
)
如需使用其他 SDK 類型的範例,請參閱 ContainerClient
和 StorageStreamDownloader
範例。
若要深入瞭解,包括如何在專案中啟用 SDK 類型系結,請參閱 SDK 類型系結。
此範例會記錄來自傳入 Blob 元數據的資訊。
import logging
import azure.functions as func
app = func.FunctionApp()
@app.function_name(name="BlobTrigger1")
@app.blob_trigger(arg_name="myblob",
path="PATH/TO/BLOB",
connection="CONNECTION_SETTING")
def test_function(myblob: func.InputStream):
logging.info(f"Python blob trigger function processed blob \n"
f"Name: {myblob.name}\n"
f"Blob Size: {myblob.length} bytes")
屬性
進程內和隔離的背景工作進程 C# 連結庫都會使用 BlobAttribute 屬性來定義函式。 C# 文稿會改用function.json組態檔,如 C# 腳本指南中所述。
屬性的建構函式會採用下列參數:
參數 | 描述 |
---|---|
BlobPath | blob 的路徑。 |
[連接] | 指定 Azure Blob 連線方式的應用程式設定或設定集合的名稱。 請參閱連線。 |
存取權限 | 指出您要讀取或寫入。 |
來源 | 設定觸發事件的來源。 用於BlobTriggerSource.EventGrid 事件方格型 Blob 觸發程式,可提供較低的延遲。 默認值為 BlobTriggerSource.LogsAndContainerScan ,它會使用標準輪詢機制來偵測容器中的變更。 |
以下是方法簽章中的 BlobTrigger
屬性:
[Function(nameof(BlobFunction))]
[BlobOutput("test-samples-output/{name}-output.txt")]
public static string Run(
[BlobTrigger("test-samples-trigger/{name}")] string myTriggerItem,
[BlobInput("test-samples-input/sample1.txt")] string myBlob,
FunctionContext context)
當您在本機開發時,請在集合中的 local.settings.json 檔案Values
中新增應用程式設定。
裝飾項目
僅適用於 Python v2 程式設計模型。
針對使用裝飾項目定義的 Python v2 函式,裝飾專案上的 blob_trigger
下列屬性會定義 Blob 記憶體觸發程式:
屬性 | 說明 |
---|---|
arg_name |
在函式簽章中宣告參數名稱。 觸發函式時,此參數的值會包含佇列訊息的內容。 |
path |
要監視的容器。 可能是 Blob 名稱模式。 |
connection |
儲存體帳戶連接字串。 |
source |
設定觸發事件的來源。 用於EventGrid 事件方格型 Blob 觸發程式,可提供較低的延遲。 默認值為 LogsAndContainerScan ,它會使用標準輪詢機制來偵測容器中的變更。 |
如需使用 function.json 定義的 Python 函式,請參閱組 態 一節。
註釋
屬性 @BlobTrigger
可用來讓您存取觸發函式的 Blob。 如需詳細資訊, 請參閱觸發程式範例 。 source
使用屬性來設定觸發事件的來源。 用於EventGrid
事件方格型 Blob 觸發程式,可提供較低的延遲。 默認值為 LogsAndContainerScan
,它會使用標準輪詢機制來偵測容器中的變更。 |
組態
僅適用於 Python v1 程式設計模型。
下表說明您在 function.json 檔案中設定的繫結設定屬性。
function.json 屬性 | 描述 |
---|---|
type | 必須設定為 blobTrigger 。 當您在 Azure 入口網站中建立觸發程序時,會自動設定此屬性。 |
direction | 必須設定為 in 。 當您在 Azure 入口網站中建立觸發程序時,會自動設定此屬性。 使用區段中會指出例外狀況。 |
name | 表示函式程式碼中 Blob 的變數名稱。 |
path | 要監視的容器。 可能是 Blob 名稱模式。 |
connection | 指定 Azure Blob 連線方式的應用程式設定或設定集合的名稱。 請參閱連線。 |
source | 設定觸發事件的來源。 用於EventGrid 事件方格型 Blob 觸發程式,可提供較低的延遲。 默認值為 LogsAndContainerScan ,它會使用標準輪詢機制來偵測容器中的變更。 |
如需完整範例,請參閱範例一節。
中繼資料
Blob 觸發程式提供數個元數據屬性。 這些屬性可作為其他系結中系結表達式的一部分,或做為程式代碼中的參數。 這些值具有與 CloudBlob 類型相同的語意。
屬性 | 類型 | 描述 |
---|---|---|
BlobTrigger |
string |
觸發 Blob 的路徑。 |
Uri |
System.Uri |
主要位置的 Blob URI。 |
Properties |
BlobProperties | Blob 的系統屬性。 |
Metadata |
IDictionary<string,string> |
Blob 的使用者定義元數據。 |
下列範例會記錄觸發 Blob 的路徑,包括容器:
public static void Run(string myBlob, string blobTrigger, ILogger log)
{
log.LogInformation($"Full blob path: {blobTrigger}");
}
中繼資料
Blob 觸發程式提供數個元數據屬性。 這些屬性可作為其他系結中系結表達式的一部分,或做為程式代碼中的參數。
屬性 | 說明 |
---|---|
blobTrigger |
觸發 Blob 的路徑。 |
uri |
主要位置的 Blob URI。 |
properties |
Blob 的系統屬性。 |
metadata |
Blob 的使用者定義元數據。 |
中繼資料
元數據可透過 $TriggerMetadata
參數取得。
使用方式
Blob 觸發程式支援的系結類型取決於函式應用程式中所使用的擴充套件版本和 C# 形式。
Blob 觸發程式可以系結至下列類型:
類型 | 描述 |
---|---|
string |
Blob 內容做為字串。 當 Blob 內容是簡單的文字時, 請使用 。 |
byte[] |
Blob 內容的位元組。 |
JSON 可序列化型別 | 當 Blob 包含 JSON 數據時,Functions 會嘗試將 JSON 數據還原串行化為一般舊的 CLR 物件 (POCO) 類型。 |
數據流1 | Blob 內容的輸入數據流。 |
BlobClient1、 BlockBlobClient1、 PageBlobClient1、 AppendBlobClient1、 BlobBaseClient1 |
線上至 Blob 的用戶端。 此類型集提供處理 Blob 的最大控制,而且如果連線有足夠的許可權,則可用來回寫至 Blob。 |
1 若要使用這些類型,您必須參考 Microsoft.Azure.Functions.Worker.Extensions.Storage.Blobs 6.0.0 或更新版本 ,以及 SDK 類型系結的常見相依性。
只有在 Blob 大小很小時,才建議系結至 string
或 Byte[]
。 這是建議的,因為整個 Blob 內容會載入記憶體中。 對於大部分的 Blob,請使用 Stream
或 BlobClient
類型。 如需詳細資訊,請參閱 並行和記憶體使用量。
如果您在嘗試系結至其中一個記憶體 SDK 類型時收到錯誤訊息,請確定您有正確的記憶體 SDK 版本的參考。
您也可以使用 StorageAccountAttribute 來指定要使用的記憶體帳戶。 當您需要使用與連結庫中其他函式不同的記憶體帳戶時,可以執行此動作。 建構函式會採用包含記憶體 連接字串的應用程式設定名稱。 屬性可以在參數、方法或類別層級套用。 下列範例顯示類別層級和方法層級:
[StorageAccount("ClassLevelStorageAppSetting")]
public static class AzureFunctions
{
[FunctionName("BlobTrigger")]
[StorageAccount("FunctionLevelStorageAppSetting")]
public static void Run( //...
{
....
}
要使用的記憶體帳戶會依下列順序決定:
- 屬性
BlobTrigger
的Connection
屬性。 - 套
StorageAccount
用至與 屬性相同的參數BlobTrigger
的屬性。 - 套
StorageAccount
用至函式的屬性。 - 套
StorageAccount
用至 類別的屬性。 - 函式應用程式的預設記憶體帳戶,定義於應用程式設定中
AzureWebJobsStorage
。
屬性 @BlobTrigger
可用來讓您存取觸發函式的 Blob。 如需詳細資訊, 請參閱觸發程式範例 。
透過符合系結名稱參數在 function.json 檔案中指定名稱的參數存取 Blob 數據。
透過輸入為 InputStream 的參數存取 Blob 數據。 如需詳細資訊, 請參閱觸發程式範例 。
Functions 也支援適用於 Azure Blob 記憶體的 Python SDK 類型系結,可讓您使用這些基礎 SDK 類型來處理 Blob 數據:
重要
Python 的 SDK 類型支援目前為預覽狀態,且僅支援 Python v2 程式設計模型。 如需詳細資訊,請參閱 Python 中的 SDK 類型。
連線
屬性 connection
是環境組態的參考,指定應用程式應該如何連線到 Azure Blob。 此屬性可以指定:
- 包含 連接字串 的應用程式設定名稱
- 多個應用程式設定的共用前置詞名稱,一起定義身分識別型連線。
如果設定的值與單一設定完全相符,又與其他設定的開頭相符,則會使用完全相符項目。
連接字串
若要取得連接字串,請遵循管理儲存體帳戶存取金鑰所示的步驟。 連接字串 必須是一般用途的記憶體帳戶,而不是 Blob 記憶體帳戶。
此 連接字串 應該儲存在應用程式設定中,其名稱符合系結組態的 屬性所connection
指定的值。
如果應用程式設定名稱以 「AzureWebJobs」 開頭,您就只能在這裡指定名稱的其餘部分。 例如,如果您設定 connection
為 「MyStorage」,Functions 運行時間會尋找名為 「AzureWebJobsMyStorage」 的應用程式設定。 如果您保留connection
空白,Functions 運行時間會在名為 AzureWebJobsStorage
的應用程式設定中使用預設的記憶體 連接字串。
身分識別型連線
如果您使用 5.x 版或更高版本的延伸模組(non-.NET 語言堆疊組合 3.x 或更新版本),而不是使用具有秘密的 連接字串,您可以讓應用程式使用 Microsoft Entra 身分識別。 若要使用身分識別,您可以在對應至 connection
觸發程式和系結組態中 屬性的通用前置詞下定義設定。
如果您要將 設定 connection
為 「AzureWebJobsStorage」,請參閱 使用身分識別連線到主機記憶體。 針對所有其他連線,擴充功能需要下列屬性:
屬性 | 環境變數範本 | 描述 | 範例值 |
---|---|---|---|
Blob 服務 URI | <CONNECTION_NAME_PREFIX>__serviceUri 1 |
您使用 HTTPS 設定所連線之 Blob 服務的數據平面 URI。 | https://<storage_account_name>.blob.core.windows.net |
1 <CONNECTION_NAME_PREFIX>__blobServiceUri
可作為別名。 如果 Blob 觸發程式將使用聯機組態, blobServiceUri
也必須隨附 queueServiceUri
。 請參閱下方 。
serviceUri
在 Blob、佇列和/或數據表之間使用整體聯機組態時,無法使用表單。 URI 只能指定 Blob 服務。 或者,您可以針對每個服務提供特別的 URI,以允許使用單一連線。 如果提供這兩個版本,則會使用多重服務窗體。 若要設定多個服務的連線,而不是 <CONNECTION_NAME_PREFIX>__serviceUri
,請設定:
屬性 | 環境變數範本 | 描述 | 範例值 |
---|---|---|---|
Blob 服務 URI | <CONNECTION_NAME_PREFIX>__blobServiceUri |
您使用 HTTPS 設定所連線之 Blob 服務的數據平面 URI。 | https://<storage_account_name>.blob.core.windows.net |
佇列服務 URI (Blob 觸發程式2 的必要專案) | <CONNECTION_NAME_PREFIX>__queueServiceUri |
使用 HTTPS 配置之佇列服務的數據平面 URI。 只有 Blob 觸發程式才需要此值。 | https://<storage_account_name>.queue.core.windows.net |
2 Blob 觸發程式會藉由將有害 Blob 寫入佇列來處理多個重試失敗。 在表單中serviceUri
AzureWebJobsStorage
,會使用連接。 不過,指定 blobServiceUri
時,也必須提供佇列服務 URI。queueServiceUri
建議您使用與 Blob 服務相同的記憶體帳戶中的服務。 您也需要指派記憶體佇列數據參與者之類的角色,以確保觸發程式可以在設定的佇列服務中讀取和寫入訊息。
其他屬性可以設定為自定義連線。 請參閱身分識別型連線的通用屬性。
主控於 Azure Functions 服務時,以身分識別為基礎的連接會使用受控識別。 雖然可以使用 credential
和 clientID
屬性指定使用者指派的身分識別,但預設會使用系統指派的身分識別。 請注意,不支援以資源識別碼來設定使用者指派的身分識別。 在本機開發等其他內容中執行時,雖然這可以自訂,但仍會改用您的開發人員身分識別。 請參閱使用身分識別型連線進行本機開發。
授與權限給身分識別
正在使用的任何身分識別,都必須具有執行預期動作的權限。 有關大多數 Azure 服務,意即您需要指派 Azure RBAC 的角色,利用提供這些權限的內建或自訂角色。
重要
部分權限可能會由所有內容都不需要的目標服務公開。 可以的話,請遵循最低權限原則,只授與身分識別所需的權限。 例如,如果應用程式只需要能夠讀取資料來源,請使用只有讀取權限的角色。 不宜指派也允許寫入該服務的角色,因為讀取作業不需要這麼多權限。 同樣地,最好確保角色指派的範圍僅限於需要讀取的資源。
您必須建立可在執行階段存取 Blob 容器的角色指派。 擁有者之類的管理角色不足夠。 下表顯示在一般作業中使用 Blob 儲存體延伸模組時建議的內建角色。 您的應用程式可能會根據您撰寫的程式碼而要求進一步權限。
繫結類型 | 內建角色範例 |
---|---|
觸發程序 | 記憶體 Blob 數據擁有者和記憶體佇列數據參與者 1 也必須將額外權限授予 AzureWebJobsStorage 連線。2 |
輸入繫結 | 儲存體 Blob 資料讀者 |
輸出繫結 | 儲存體 Blob 資料擁有者 |
1 Blob 觸發程序會藉由將有害 Blob 寫入儲存體帳戶中由連線所指定的佇列,來處理多個重試失敗。
2 AzureWebJobsStorage 連線會針對啟用觸發程序的 Blob 和佇列在內部使用。 如果將其設定成使用身分識別型連線,則需要超出預設需求的額外權限。 所需的權限是由儲存體 Blob 資料擁有者、儲存體佇列資料參與者和儲存體帳戶參與者的角色所涵蓋。 如需深入了解,請參閱使用身分識別連線到主機儲存體。
Blob 名稱模式
您可以在 屬性function.json或屬性建構函式中BlobTrigger
指定 Blob 名稱模式path
。 名稱模式可以是 篩選或系結表達式。 下列各節提供範例。
提示
容器名稱不能在名稱模式中包含解析程式。
取得檔名和擴展名
下列範例示範如何分別系結至 Blob 檔名和擴展名:
"path": "input/{blobname}.{blobextension}",
如果 blob 命名為 original-Blob1.txt,函式程式代碼中的 和 blobextension
變數值blobname
會是 original-Blob1 和 txt。
篩選 Blob 名稱
下列範例只會在開頭為 “original-” 字串之容器中的 input
Blob 上觸發:
"path": "input/original-{name}",
如果 blob 名稱original-Blob1.txt,函式程式代碼Blob1.txt
中的變數值為 name
。
篩選文件類型
下列範例只會在 .png 檔案上觸發:
"path": "samples/{name}.png",
篩選檔名中的大括號
若要尋找檔名中的大括弧,請使用兩個大括弧來逸出大括弧。 下列範例會篩選名稱中有大括弧的 Blob:
"path": "images/{{20140101}}-{name}",
如果 blob 命名 {20140101}為 -soundfile.mp3,函 name
式程式代碼中的變數值會 soundfile.mp3。
輪詢和延遲
輪詢可在檢查記錄和執行定期容器掃描之間作為混合式。 Blob 會一次以 10,000 個群組掃描,並在間隔之間使用接續令牌。 如果您的函式應用程式位於取用方案上,如果函式應用程式閑置,處理新的 Blob 最多可能會延遲 10 分鐘。
警告
記憶體記錄是以「盡最大努力」 為基礎建立。 不保證會擷取所有事件。 在某些情況下,可能會遺漏記錄。
如果您需要更快速或更可靠的 Blob 處理,您應該考慮將裝載切換為使用已啟用 Always On 的 App Service 方案,這可能會導致成本增加。 您也可以考慮使用傳統輪詢 Blob 觸發程式以外的觸發程式。 如需 Blob 記憶體容器之各種觸發選項的詳細資訊和比較,請參閱 Blob 容器上的觸發程式。
Blob 收據
Azure Functions 運行時間可確保相同新的或更新的 Blob 不會多次呼叫 Blob 觸發程式函式。 若要判斷指定的 Blob 版本是否已處理,它會維護 Blob 收據。
Azure Functions 會將 Blob 收據儲存在函式應用程式的 Azure 儲存器帳戶中名為 azure-webjobs-hosts 的容器中(由應用程式設定 AzureWebJobsStorage
定義)。 Blob 收據有下列資訊:
- 觸發函式(
<FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME>
例如:MyFunctionApp.Functions.CopyBlob
) - 容器名稱
- Blob 型態 (
BlockBlob
或PageBlob
) - Blob 名稱
- ETag (Blob 版本識別符,例如:
0x8D1DC6E70A277EF
若要強制重新處理 Blob,請手動從 azure-webjobs-hosts 容器刪除該 Blob 的 Blob 收據。 雖然重新處理可能不會立即發生,但保證會在稍後的時間點發生。 若要立即重新處理,可以更新 azure-webjobs-hosts/blobscaninfo 中的 scaninfo Blob。 屬性之後 LatestScan
具有上次修改時間戳的任何 Blob 都會再次掃描。
有害 Blob
當指定 Blob 的 Blob 觸發程式函式失敗時,Azure Functions 預設會重試該函式共五次。
如果所有 5 次嘗試都失敗,Azure Functions 會將訊息新增至名為 webjobs-blobtrigger-poison 的記憶體佇列。 可設定重試次數上限。 相同的 MaxDequeueCount 設定用於有害 Blob 處理和有害佇列訊息處理。 有害 Blob 的佇列訊息是 JSON 物件,其中包含下列屬性:
- FunctionId (格式
<FUNCTION_APP_NAME>.Functions.<FUNCTION_NAME>
) - BlobType (
BlockBlob
或PageBlob
) - ContainerName
- BlobName
- ETag (Blob 版本識別符,例如:
0x8D1DC6E70A277EF
記憶體使用量和並行存取
當您系結至 不支援數據流的輸出類型 時,例如 string
、 或 Byte[]
,運行時間必須在處理期間將整個 Blob 載入記憶體中一次以上。 這可能會導致處理 Blob 時記憶體使用量高於預期。 可能的話,請使用資料流支持類型。 類型支援取決於 C# 模式和延伸模組版本。 如需詳細資訊,請參閱 系結類型。
此時,運行時間必須在處理期間將整個 Blob 載入記憶體中一次以上。 這可能會導致處理 Blob 時記憶體使用量高於預期。
當多個函式實例同時處理 Blob 數據時,記憶體使用量可能會進一步受到影響。 如果您使用 Blob 觸發程式發生記憶體問題,請考慮減少允許的並行執行次數。 當然,減少並行可能會有增加等候處理的 Blob 待辦專案副作用。 函式應用程式的記憶體限制取決於方案。 如需詳細資訊,請參閱服務限制。
您可以控制並行執行數目的方式取決於您所使用的記憶體擴充功能版本。
使用記憶體擴充功能或更新版本的 5.0.0 版時,您可以使用 host.json blob 組態中的 設定來控制觸發maxDegreeOfParallelism
並行。
限制會分別套用至使用 Blob 觸發程式的每個函式。
host.json屬性
host.json檔案包含控制 Blob 觸發程式行為的設定。 如需可用設定的詳細資訊,請參閱host.json設定一節。