You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
| Host downloads blob, sends it to the worker. | Worker streams from Storage itself – lower latency & memory. |
597
+
| 100 MB size limit. | No hard limit; streams as big as Storage allows. |
598
+
| Only read/write bytes. | Full SDK surface: metadata, ACLs, legal hold, etc. |
599
+
600
+
### What you need
601
+
602
+
* Turn the feature on by setting `JAVA_ENABLE_SDK_TYPES` to `"true"` in your
603
+
app's settings.
604
+
***azure-functions-maven-plugin** (or Gradle plug-in) ≥ **1.38.0** – detects SDK-type parameters during build and adds the flag that activates the middleware.
605
+
* Your function app must reference:
606
+
607
+
*`azure-storage-blob` (always)
608
+
*`azure-identity` (only if you plan to use Managed Identity)
609
+
610
+
> The worker creates clients via reflection, so it relies on whatever Storage/Identity libraries you ship with the function.
611
+
612
+
### Authoring – it looks just like a normal binding
*`dataType` on **@BlobTrigger** is **ignored** when you bind to an SDK-type.
643
+
*`connection` can be a connection string **or** an identity-based prefix – both work with SDK-types.
644
+
645
+
### What happens under the hood (in one minute)
646
+
647
+
1.**Build:** the Maven plug-in scans your methods. If it sees `BlobClient` or `BlobContainerClient` it writes `"supportsDeferredBinding": true` into `function.json`.
648
+
2.**Startup:** the worker notices the flag and inserts **SdkTypeMiddleware** before your function executes.
649
+
3.**Invocation:** for each SDK-typed parameter the middleware
650
+
651
+
* reads the binding metadata,
652
+
* looks in the **WorkerObjectCache**; if no entry exists it uses reflection to construct the client,
653
+
* injects the client into the argument list.
654
+
655
+
The cache key is derived from container name + blob name (or just container, for `BlobContainerClient`) plus the connection prefix. Thus identical invocations reuse one client; distinct blobs get their own.
656
+
657
+
658
+
### Managed Identity
659
+
660
+
SDK-types honor the same identity-based connection settings you already use with classic bindings.
661
+
Simply point `connection` to an MI prefix and add `azure-identity` to your function’s dependencies – the worker will build `DefaultAzureCredential` reflectively.
|`SdkHydrationException`| Middleware failed to build the SDK client (missing env-vars, reflection error, credential failure). |
671
+
|`SdkTypeCreationException`| Factory couldn’t turn metadata into the final SDK-type (usually casting issues). |
672
+
673
+
Check the inner message for the exact cause; most issues are mis-spelled environment variables or missing dependencies.
674
+
675
+
### Future work
676
+
677
+
This is the **first** SDK-type preview. We plan to:
678
+
679
+
* Add more Storage client types, then branch into Cosmos DB, Event Hubs, etc.
680
+
* Promote the feature to General Availability once telemetry shows it’s solid.
681
+
682
+
Give it a try in a test function app and tell us how much faster your blob processing becomes!
683
+
684
+
580
685
## host.json properties
581
686
582
687
The [host.json](functions-host-json.md#blobs) file contains settings that control blob trigger behavior. See the [host.json settings](functions-bindings-storage-blob.md#hostjson-settings) section for details regarding available settings.
0 commit comments