Orchestrate Azure without the Logic Apps glue.

Trigger on Blob and Data Lake arrivals, stream Event Hub and Service Bus messages, call Functions, and kick off Data Factory pipelines and Batch jobs, all from one flow. Chain storage, compute, and messaging into a single execution history instead of wiring Logic Apps, Event Grid subscriptions, and Function bindings between every pair of services.

Blueprints for Azure orchestration.

Azure's Blob Storage, Event Hub, Service Bus, Functions, Batch, and Data Factory each work well alone, but chaining them today usually means a Logic App, an Event Grid subscription, and a Function binding wired one pair at a time. Kestra triggers on a blob arrival or an Event Hub message, calls a Function, publishes to Service Bus, and runs a Data Factory pipeline or a Microsoft Fabric job, all inside one execution history. Provision the underlying resources with Terraform and the whole estate runs from one control plane.

Route Azure Blob arrivals into a cross-cloud ETL and dbt Cloud buildOpen blueprint
Page on-call automatically when Event Hub volume dropsOpen blueprint
Chain Blob, an Azure Function, Service Bus, and Data Factory in one flowOpen blueprint
Scale Batch pools on idle utilization and purge cold blobs on the same scheduleOpen blueprint
Archive backups into a dated prefix and gate the expiry cleanup behind a human reviewOpen blueprint

A weekly flow lists a container, copies each blob into a dated archive prefix, and notifies Slack with the count. It then pauses before deleting expired backups so only the destructive step waits on a named reviewer.

The full YAML and topology will appear here once the azure-blob-backup-retention-cutover blueprint is published in the catalog.

View on the blueprints catalog
Browse all 21 Azure blueprints

Above Azure's per-service triggers and Logic Apps glue.

Azure ships 41 tasks and 7 triggers across storage, messaging, compute, and Batch, each with its own trigger surface. Kestra wires them into one flow, with one execution history, without Logic Apps connectors, Event Grid subscriptions, or Function bindings between every pair of services.

Blob and Data Lake triggers fire on arrival, not on a Data Factory schedule

blob.Trigger and adls.Trigger poll a container on an interval, filter by prefix and regex, and fire once per matched file. The action property moves or deletes processed blobs so the same file never fires twice. No Event Grid subscription or Data Factory storage-event trigger is required just to react to a new file.

Event Hub streaming, batch and real-time, in the same flow

eventhubs.RealtimeTrigger starts an event processor that fires one execution per message; eventhubs.Consume polls in batches on a schedule for aggregation and threshold checks. Both checkpoint to Blob Storage automatically, so no separate Stream Analytics job is needed just to track what has already been read.

Service Bus queues and topics orchestrated without a Logic App relay

servicebus.Publish, servicebus.Consume, and the polling and real-time triggers read and write queues and topic subscriptions directly. A message becomes a flow input or output without a Logic App connector translating between the bus and whatever runs next.

Functions callable from any trigger, not just Event Grid or Blob bindings

function.HttpFunction invokes an Azure Function over HTTP from any Kestra trigger: a webhook, a Kafka message, a dbt completion, a schedule. A Function no longer needs its own Event Grid subscription or Blob-triggered binding to run; it becomes one step in a larger flow instead of an isolated endpoint.

Cross-service chains span the whole estate in one execution

A single flow can move from a blob arrival through a Function transform, a Service Bus publish, and a Data Factory run, with retries scoped to each step and one execution ID covering every hop. Today that same chain usually means a Logic App workflow stitching four services' native triggers together by hand.

Cost-aware Batch scaling and storage lifecycle, enforced automatically

monitoring.Query reads a pool's utilization metric, an If task decides whether to scale, and batch.pool.Resize adjusts dedicated and low-priority node counts. blob.DeleteList clears blobs past a retention prefix on the same schedule. Both run as an automated gate, not a person approving a cost dashboard.

How teams use Azure and Kestra

Patterns cloud platform teams run in production today. Each one shows the flow end to end, with the real plugin classes in play.

Event-driven

Route blob arrivals into cross-cloud and cross-service pipelines

blob.Trigger polls the stage container under a prefix, moves each processed file to an archive path, and fans it out with a ForEach. Files can load into a cross-cloud warehouse, trigger a dbt build, or feed a Data Factory pipeline, all from one arrival event, without an Event Grid rule per destination.

One trigger, many destinations

Prefix-based routing lives in the flow, not in a Data Factory linked service per target.

Move-after-processing prevents duplicates

The action property moves processed blobs so the next poll never reprocesses them.

Audit trail covers the whole chain

One execution links the blob event, the load, and the transform, across clouds if needed.

Trigger icon
blob trigger
prefix filter
ForEach icon
for each blob
parallel fan-out
Load icon
load downstream
cross-cloud warehouse
TriggerRun icon
dbt build
transform
Streaming

Watch Event Hub volume and page on-call before a silent drop becomes an outage

A schedule runs eventhubs.Consume every 5 minutes to pull whatever landed in a 30-second window. An If task compares the count against the floor for a healthy producer. Below it, PagerDutyAlert fires with a dedup key, so a stalled producer pages on-call before a downstream job fails on missing data.

Checkpointed, never double-counts

Consume checkpoints to Blob Storage, so each window only counts events not yet read.

One incident, not one per poll

The PagerDuty dedup key keeps repeated low-volume windows on a single incident.

Tunable per hub

The volume floor is a flow value, not a hardcoded threshold buried in a Function.

Schedule icon
every 5 min
schedule
Consume icon
consume batch
window count
If icon
below floor?
If gate
PagerDutyAlert icon
page on-call
dedup key
Cross-service

Chain Blob, Functions, and Service Bus into one execution across the estate

A blob arrival calls function.HttpFunction to validate and reshape the file, publishes the result with servicebus.Publish for any downstream subscriber, then runs datafactory.CreateRun for the heavier processing. Teams gets one notification for the whole chain, not one per service.

Four services, one execution ID

Blob, Functions, Service Bus, and Data Factory share one audit trail end to end.

No Logic App relay

Each hop calls the next service's plugin task directly, no connector translating between them.

Retries stay local

A Function timeout retries the Function step only, not the whole chain.

Trigger icon
blob trigger
new file
HttpFunction icon
azure function
transform
Publish icon
service bus publish
notify subscribers
CreateRun icon
data factory pipeline
downstream ETL
TeamsIncomingWebhook icon
notify
Teams
Cost & lifecycle

Scale Batch pools on utilization and retire cold blobs on the same schedule

An hourly flow runs monitoring.Query against a Batch pool's utilization metric. An If task decides whether to scale, and batch.pool.Resize sets new dedicated and low-priority counts. The same run purges blobs past a retention prefix with blob.DeleteList, both automated, no dashboard click.

Automated, not a human click

The scale and purge decisions are both an If gate, not an approval step.

Cost and storage in one run

Compute scaling and blob retention share the same schedule and execution ID.

Dedicated and low-priority tuned separately

targetDedicatedNodes and targetLowPriorityNodes scale independently.

Schedule icon
hourly schedule
cron
Query icon
query pool metric
Monitor.Query
If icon
scale decision
If gate
Resize icon
resize pool
scale nodes
DeleteList icon
purge cold blobs
retention cleanup
Disaster recovery

Archive backups into a dated prefix and gate the expiry cleanup behind a human review

A weekly flow lists a container, copies each blob into a dated archive prefix with blob.Copy, and notifies Slack with the count. The storage account's own GRS or RA-GRS replication handles the actual cross-region copy. The flow then Pauses before deleting expired backups; a named reviewer resumes it, and only then does blob.DeleteList remove them. Deleting a backup is worth a second pair of eyes.

Cross-region copy runs unattended

Only the destructive step, deleting expired backups, waits on a human.

Named reviewer, logged

The Pause task records who approved the deletion and when.

Replication and cleanup share one history

The copy count, the approval, and the delete all trace to one execution.

Schedule icon
weekly schedule
cron
List icon
list container
source container
Copy icon
copy to archive
dated prefix
SlackIncomingWebhook icon
notify
Slack summary
Pause icon
approval gate
before expiry delete
DeleteList icon
delete expired
after resume

Kestra vs the orchestration alternatives Azure teams evaluate

Capability
Azure Data Factory
Microsoft Fabric
Airflow
Trigger on Blob/ADLS arrival, Event Hub, or Service Bus message
Native triggers across all three, no glue
Storage event trigger via Event Grid wiringEventstream item, Fabric-scopedSensors and hooks per source, custom code
Chain Functions, Service Bus, and Data Factory in one flow
Native plugin tasks, any order
Web/Webhook activities glue services togetherFabric-centric, limited outside the workspaceCustom operators per service
Real-time Event Hub consumption, one execution per message
eventhubs.RealtimeTrigger
Stream Analytics job requiredEventstream item inside the workspaceKafka sensor plus custom consumer code
Cross-service audit trail in one place
One execution ID spans every service
Per-pipeline monitor, Functions and Service Bus separateFabric monitoring hub, external services invisiblePer-DAG logs, external calls opaque
Automated cost guardrail on compute scaling
Monitor.Query + If + pool.Resize in one flow
Autoscale formulas, no cross-service conditionFabric capacity is a separate, fixed purchaseCustom sensor plus scaling script
Approval gate before a destructive action
Pause + resume, named reviewer logged
Requires a Logic App approval connectorNot nativeCustom operator with an external wait
Self-hosted, air-gapped, OSS edition
Self-hosted by default, OSS edition free
Azure-managed onlyMicrosoft-managed onlySelf-hosted
Vendor lock-in
Azure is one plugin among hundreds; flows stay portable
ADF pipelines are Azure-onlyFabric items are Microsoft-onlyPortable, but no managed cloud offering
Deeper comparisonKestra vs Azure Data Factory

Side-by-side breakdown across event triggers, cross-service chaining, Batch cost guardrails, and running off the Azure-managed-only model.

See the full comparison

Azure & Kestra: common questions

Find answers to your questions right here, and don't hesitate to Contact Us if you couldn't find what you're looking for.

See How

Ready to orchestrate your Azure estate?

Trigger on Blob and Event Hub arrivals, chain Functions and Service Bus, run Data Factory and Batch jobs, and gate the one step that deserves a human review. Open source, self-hosted, event-driven.