Insights & Blog

Azure Functions vs Logic Apps vs Durable Functions: Architecture and Cost Comparison

Compare Azure Functions, Logic Apps and Durable Functions: hosting, connectors, orchestration, security and a transparent workload-based cost model.

By Hetal KCloud & MLOps

Azure Functions, Logic Apps and Durable Functions: execution, integration and persistent orchestration

Azure Functions vs Logic Apps vs Durable Functions: Architecture and Cost Comparison

Azure Functions vs Logic Apps is primarily a choice between custom execution and managed integration. Use Functions for event-driven application code, Logic Apps for connector-rich business workflows, and Durable Functions when Functions needs persistent, code-based orchestration. Durable Functions extends Azure Functions; it is not a separate hosting plan. Both Logic Apps and Durable Functions can coordinate long-running processes and human decisions. A hybrid can separate connectivity from domain logic, but adds operational boundaries. Compare the exact hosting plan, connector behavior, security requirements and cost per completed transaction before deciding. Neither performance nor price has a universal winner.

Key takeaways

  • Begin with one business transaction and its failure paths, not a product preference.
  • Compare Functions hosting separately from workflow design and durable storage.
  • Choose Logic Apps Consumption or Standard deliberately; managed connector charges can remain in Standard.
  • Persist waiting workflows instead of holding an HTTP request or worker open.
  • Measure accepted outcomes, retries, operator effort and total cost together.

What is Azure Functions?

Azure Functions runs application code in response to an event. A function app groups functions with shared configuration and a hosting environment. Each function has a trigger: an HTTP request, queue message, scheduled timer or storage event, for example. Bindings provide supported connections to data and messaging services. C#, JavaScript, Python and other supported language stacks let developers own parsing, computation and application rules. See the Functions overview.

Typical starting points include webhook validation, lightweight APIs, file processing, scheduled cleanup and queue consumers. An ordinary Function can participate in a larger workflow through messages and application state without using Durable Functions. The team then owns that coordination. Do not hold one invocation open for a multi-day business process: worker restarts, HTTP timeouts and lost progress require a different design.

What is Azure Logic Apps?

Logic Apps connects systems using workflows built from triggers, actions, conditions and connector operations. It suits Microsoft 365, Dynamics, ERP and partner integration when managed connectivity removes repeated authentication and protocol work. The visual designer is one authoring surface; workflow definitions, custom code and deployment pipelines are also available. Integration accounts and B2B artifacts may be relevant to partner agreements, schemas, maps and EDI requirements. They are not mandatory for every workflow. See the Logic Apps overview.

Consumption provides a multitenant workflow resource. Standard provides a single-tenant runtime with multiple workflows and stateful or stateless execution choices. A connector is not a promise that every operation supports the same identity, network route, payload or throttle. Verify the actual operation before committing to an architecture.

Standard C# code-first workflows: distinguish preview from established options

The Logic Apps Standard SDK for C# workflows is documented as preview at this review. Its limitations include unavailable service-provider operations, dynamic schemas and managed-identity connector authentication. Evaluate its current support contract before production adoption. This preview is distinct from calling Functions, editing JSON definitions or using custom .NET functions inside Standard workflows. Logic Apps is not limited to no-code development.

What is Azure Durable Functions?

Durable Functions adds stateful orchestration to a function app. Client functions start or query an instance; orchestrators coordinate steps; activities perform work; entities manage durable state through their supported programming model. History and messages are persisted by a configured backend. The runtime can reconstruct progress by replay rather than requiring a worker to remain alive. The programming-model reference explains these roles; the overview explains the extension relationship.

An orchestrator must remain deterministic across replay. Put network calls, database writes and arbitrary side effects in activities or supported durable APIs. Use the orchestration context for time and durable timers; do not use ordinary sleep, random values or current-clock reads to make replay-sensitive decisions. Activities still need idempotency because re-execution can occur. Persistent history is coordination state, not your complete business ledger. See orchestrator constraints.

Azure Functions vs Logic Apps vs Durable Functions: key differences

Decision dimensionAzure FunctionsAzure Logic AppsDurable Functions
PurposeExecute custom event-driven logicIntegrate systems through workflowsCoordinate stateful application processes
RelationshipAzure execution serviceIntegration service with hosting choicesExtension running within Functions
AuthoringApplication source codeDesigner/definitions; code extensions; C# SDK previewProgrammatic durable APIs
BoundaryInvocation and function appWorkflow and connector operationOrchestration instance and activity
TriggersHTTP, timer and supported event bindingsPolling, push and request triggersClient starts; external signals
ConnectivityBindings, SDKs and APIs; check connector maturityBuilt-in and managed connectorsActivities use Functions connectivity
OrchestrationApplication owns coordination unless extendedWorkflow engine coordinates stepsDurable runtime coordinates code
StateExternal application persistence when neededStateful history; stateless option in StandardPersisted history/entity state
Long durationSplit work; respect execution/HTTP limitsUse supported stateful workflow patternsPersist waits between activities
Human decisionsBuild callback and state handlingApproval/connectivity patternsExternal events and timeouts
Custom logicPrimary strengthInline/custom code or called APIsActivity code and orchestration logic
ConditionsLanguage control flowConditions, switches and expressionsDeterministic language control flow
ParallelismTrigger/concurrency or application codeParallel branches and loopsFan-out/fan-in of activities
RetriesTrigger-specific and application policyAction retry policiesActivity retry/exception handling
RecoveryRe-delivery or application checkpointRun-after scopes and compensationReplay persisted progress; compensate side effects
EventsQueue consumers and event handlersConnector triggers and event actionsStart/signal persistent processes
ScalingHosting plan and trigger dependentHosting, connector and workflow limitsFunctions host plus backend capacity
LatencyCold/warm host and dependency effectsTrigger, engine and connector effectsScheduling, replay and activity effects
HostingFlex, legacy Consumption, Premium, Dedicated, Container AppsConsumption or Standard optionsSelected compatible Functions plan
NetworkingPlan-specific integration and endpointsRuntime and connector route differHost plus backend connectivity
IdentityEntra/managed identity where supportedOperation-specific authenticationClient, activity and backend identities
SecurityCode, input, bindings and permissionsWorkflow access and connector privilegesHistory exposure and signal authorization
MonitoringApplication Insights and Azure MonitorRun history plus diagnostic telemetryInstance history plus correlated telemetry
DebuggingLocal code tests and host toolsDesigner, local Standard and run diagnosticsReplay-aware tests and activity debugging
CI/CDCode plus infrastructure artifactsDefinitions/connections plus infrastructureVersion compatible orchestrations and activities
OperationsOwn code and dependency behaviorOwn connections, workflow design and exceptionsOwn state retention, versions and recovery
BillingSelected compute meters plus dependenciesAction/connector or hosting meters plus dependenciesHost plus chosen durable backend
ComplexityLow for isolated handlers; grows with manual workflowLower connector plumbing; governance still neededLess manual checkpointing; replay discipline needed
Team fitDevelopers maintaining business logicIntegration engineers and developersDevelopers comfortable with distributed state
Enterprise fitAPIs, transformations and event consumersERP/SaaS/B2B coordinationBatch, approvals and application orchestration

This is a qualitative architecture matrix, not a speed ranking. Confirm limits against the selected release, region, connector and hosting plan. A simple queue consumer should not acquire an orchestration engine merely to make the table look complete.

Architecture diagrams: execution, integration and durable coordination

A. Event-driven Functions

Event ingress: HTTP request OR Event Grid OR Service Bus; Function invocation: Validate event and run custom business rules; Governed destination: SQL, Storage or an authorized external API. Solid: execution/data path. Retry behavior depends on the trigger. Identity, correlation and telemetry cover every boundary.
Event ingress: HTTP request OR Event Grid OR Service Bus; Function invocation: Validate event and run custom business rules; Governed destination: SQL, Storage or an authorized external API. Solid: execution/data path. Retry behavior depends on the trigger. Identity, correlation and telemetry cover every boundary.

Authenticate the ingress and validate the event before business work. Choose HTTP for a request/response contract, Event Grid for supported event notification, and Service Bus for brokered work with queue semantics. These are alternatives, not interchangeable delivery guarantees. Identity and telemetry span the path; retry ownership must be explicit.

B. Connector-driven Logic Apps

Workflow trigger: Request, polling or supported push event; Actions + routing: Conditions, transformation and error paths; Connectors + systems: ERP, CRM, Microsoft 365 or external APIs. Consumption: multitenant workflow. Standard: single-tenant runtime. Managed connector execution may remain outside that runtime.
Workflow trigger: Request, polling or supported push event; Actions + routing: Conditions, transformation and error paths; Connectors + systems: ERP, CRM, Microsoft 365 or external APIs. Consumption: multitenant workflow. Standard: single-tenant runtime. Managed connector execution may remain outside that runtime.

A trigger creates a workflow instance. Actions transform and route data through supported connectors. Consumption and Standard host the engine differently; a managed connector can still execute outside a Standard runtime. Draw that boundary in a network review rather than assuming a private host makes every downstream operation private.

C. Durable Functions

Client / event: Start an authorized orchestration instance; Orchestrator: Schedule activities; replay recorded progress; Activities: Parallel or sequential external business work. The backend exchanges history with orchestration. Human events and durable timers resume waiting work; activities own side effects.
Client / event: Start an authorized orchestration instance; Orchestrator: Schedule activities; replay recorded progress; Activities: Parallel or sequential external business work. The backend exchanges history with orchestration. Human events and durable timers resume waiting work; activities own side effects.

The orchestrator schedules activities and waits for results or events. The durable backend persists coordination history, rather than being the business destination after the activities. Arrows to the backend in this figure represent state exchange, not an additional sequential business step. Monitoring correlates the client, instance and activities.

Azure Functions hosting plans explained

PlanBilling/capacityScaling and startupKey design check
Flex ConsumptionOn-demand execution/memory meters; optional always-ready baselineEvent-driven; configurable concurrency; LinuxVNet integration, memory choice and regional quota
Legacy ConsumptionExecution meters and applicable grantsEvent-driven; cold starts possibleExisting platform needs, limited execution time and migration
PremiumProvisioned instances/resourcesEvent-driven with warm capacityBaseline cost, network requirements and minimum instances
Dedicated/App ServiceApp Service capacityManual/autoscale; configure Always OnShared capacity, isolation and plan limits
Container AppsContainer Apps billing modelReplica/trigger configurationContainer image, scaling integration and environment charges

Microsoft recommends Flex Consumption for new serverless function apps where requirements fit. It offers Linux execution, configurable memory and virtual networking. Premium, Dedicated and Container Apps address different capacity or packaging requirements. The legacy plan remains relevant to existing workloads and platform dependencies. Do not copy limits or deployment-slot assumptions between plans. See hosting comparison and Flex guidance.

Check the exact runtime, OS, trigger, region and quota before provisioning. Current hosting documentation has inconsistent Linux Consumption retirement labels: its summary marks Linux retired while its retirement note gives 30 September 2028. For an existing app, confirm the applicable migration notice in Azure rather than interpreting that summary as a universal immediate shutdown. Runtime-version retirement is a separate issue.

Logic Apps Consumption vs Standard

DimensionConsumptionStandard
Runtime/resourceMultitenant; one workflow per resourceSingle-tenant; multiple workflows share capacity
StateStateful workflowStateful or stateless; choose deliberately
Connector executionBuilt-in and hosted managed operationsIn-runtime built-ins plus hosted managed operations
ProvisioningConsumption meteringWorkflow hosting capacity; other Standard environments have different terms
NetworkValidate connector/endpoint routeVNet/private endpoint capabilities; connector route still matters
DeploymentWorkflow resource and connectionsProject/package plus infrastructure and connections
PerformanceShared service limits and operation throttlesTune capacity and workflow settings; downstream throttles remain
MonitoringTrigger/run/action history and diagnosticsStateful history and diagnostics; stateless history differs
EconomicsMetered executions and related resourcesHosting floor plus applicable connector/storage charges
Typical evaluationIntermittent integration with modest operation countsConsolidated integrations needing runtime/network control

A Standard stateless workflow is not an alternative name for a durable approval process. Choose stateful execution when persistence and recovery are required. Standard capacity can be efficient when utilized, but multiple workflows also share a failure and resource boundary. Reserve capacity for peaks, not just monthly averages. Reference: hosting and workflow comparison.

Durable Functions orchestration patterns

PatternPractical applicationControl to design
ChainingValidate → extract → post documentRetry and business outcome per activity
Fan-out/fan-inValidate independent document pages in parallelBound concurrency and aggregate errors
Async HTTP APIAccept a job then expose statusProtect status endpoints; return before long work
MonitorCheck an external job until completeBackoff, deadline and stop condition
Human interactionWait for an authorized reviewerEvent identity, duplicate signals and expiry
Durable timerEscalate after a decision deadlineContext time and cancel unused timers
Sub-orchestrationReusable approval subprocessVersion compatible parent/child contracts
Long approvalPause claim progression for specialist reviewRetention, escalation and late-event policy

For document approval, store the file in governed object storage, pass a reference, validate in an activity, await a reviewer event with a durable deadline, then post an accepted result. Resume from recorded progress after interruption; do not repeat a payment or ERP write blindly. External events, timers, monitor and fan-out guidance describe these mechanics.

Select the backend separately. Durable Task Scheduler is Azure-managed; the Azure Storage provider uses queues, tables and blobs. Other providers have specific support requirements. Microsoft currently recommends the scheduler, but region, compatibility, retention and cost still require assessment. Its Consumption SKU has a GA announcement, although an older billing table still labels it preview. Verify the selected SKU in the target region. Use the current provider list/CLI in the scheduler documentation; do not assume global availability. See backend options.

When to choose Functions, Logic Apps or Durable Functions

Choose Functions for a bounded custom operation

A developer-owned calculation, webhook handler or queue transformation may need no workflow designer. Favor the simplest handler that satisfies validation, replay and observability requirements. High event volume is a reason to measure concurrency and dependency limits, not automatic evidence that one platform wins on price.

Choose Logic Apps for integration-led workflows

ERP synchronization, Microsoft 365 routing, partner messaging and connector-heavy approvals can justify managed workflow capabilities. Evaluate connector licensing, API limits and operational visibility alongside development effort. A team maintaining dozens of vendor interfaces may spend more on custom upkeep than on action charges.

Choose Durable Functions for code-led persistent coordination

Use it when application developers need stateful branching, parallel activities, timers and explicit recovery in code. Logic Apps can also implement long-running workflows; Durable Functions is not inherently more capable just because its authoring model is programmatic. Skill fit, backend behavior and change management often settle the decision.

Hybrid architecture: Logic Apps + Functions + Durable Functions

Logic Apps intake: Email connector or protected API; Function validation: Check file, metadata and business reference; Durable coordination: Activities, review signal and deadline; Logic Apps output: Post accepted result to ERP or CRM. Object storage owns files. ERP owns accepted records. Correlate every handoff; make posting idempotent and route failures to an operator.
Logic Apps intake: Email connector or protected API; Function validation: Check file, metadata and business reference; Durable coordination: Activities, review signal and deadline; Logic Apps output: Post accepted result to ERP or CRM. Object storage owns files. ERP owns accepted records. Correlate every handoff; make posting idempotent and route failures to an operator.

An illustrative invoice process starts through an email connector or protected API. Logic Apps owns inbound connectivity; a Function validates file metadata; Durable Functions coordinates extraction, business checks and any human review. Logic Apps then invokes the ERP connector. The file store owns documents, the ERP owns accepted financial records, and durable history owns orchestration progress. Carry one business correlation ID across all components.

Place authorization before starting work and before accepting an approval. Limit each identity to its data and operation. Define retry ownership at every handoff, with idempotency keys on posting. Route exhausted or invalid cases to an exception queue and operator workflow. This design adds hosting, connector and telemetry charges: omit services whose responsibility is already met elsewhere.

Azure Functions vs Logic Apps pricing: model the business transaction

Pricing review: 30 October 2026; East US; USD; public pay-as-you-go planning basis. These are editable planning settings, not a quote. The official pricing pages expose dynamic rates that were not reliably available for every configuration in this review. Therefore the examples calculate usage quantities and provide configurable rate formulas, not invented dollar totals. Check agreement discounts, tax, currency, region and grant eligibility in your subscription. Sources: Functions pricing and Logic Apps pricing.

Meter the complete execution path

OptionCore cost expressionCosts to add
Functions on demandBillable executions × execution rate + metered GB-seconds × compute rateAlways-ready baseline/execution if enabled; storage, network, telemetry and dependencies
Functions Premium/DedicatedProvisioned resource units × billed hoursScale floor, idle capacity, storage and dependencies
Logic Apps ConsumptionΣ billable operations of each class × its ratePolling, retries, loops, retention, integration account and downstream services
Logic Apps StandardHosting capacity × hours + applicable managed connector metersState storage, network, telemetry and dependencies
Durable FunctionsSelected Functions plan + chosen backend metersActivities, replay behavior, retention, signaling and dependencies

For Functions, measure metered instance memory and execution time under the actual concurrency configuration; allocating configured memory independently to every concurrent request can overstate billable GB-seconds. Apply free grants only when eligible and only once across shared usage. For Logic Apps, count the executed trigger/action path, including retries, branches and loop iterations. Polls can be billed even when no workflow starts. Standard built-in operations and managed operations have different meters; fixed hosting does not cover everything. See usage metering.

Durable waiting is not continuous orchestrator compute: an awaited durable task yields execution. Activities, backend storage/actions, retention, polling and provisioned capacity can still cost money. Consumption-plan orchestrator replays are billable invocations; other plan behavior differs. Avoid applying that legacy statement indiscriminately to every hosting meter. Scheduler billing and Azure Storage transaction costs are separate choices. See Durable billing.

Four configurable monthly scenarios

ScenarioExplicit illustrative assumptionsCalculated usage inputsComparison to price
A. Simple API100,000 requests; serial 0.2-second execution; 1 GB metered memory; 99% completion; no retries100,000 calls; 20,000 GB-s; 99,000 successful transactionsFunctions execution + compute; equivalent Logic Apps action path; add durable overhead only if needed
B. Enterprise integration100,000 runs; 5 built-in and 4 standard managed operations/run; 2% retry one managed action; 98% completion500,000 built-in operations; 402,000 managed operations; 98,000 successesConsumption operations versus Standard host + managed meters; include connections and ERP charges
C. Approval100,000 instances; 4 activities × 0.25 seconds × 1 GB; 8 billable host invocations/instance assumed; 3-day approval wait; 97% completion100,000 activity GB-s; 800,000 assumed host invocations; 97,000 successes; backend actions measured separatelyDurable host/backend versus equivalent stateful Logic Apps path; do not bill 72 hours as active compute
D. High volume1,000,000 events; serial 0.15 seconds × 1 GB; one retry on 3%; 99.5% completion1,030,000 handler executions; 154,500 GB-s; 995,000 successesOn-demand versus provisioned capacity; queue, dependency and monitoring limits included

All counts above are assumptions for planning, not measured benchmarks or universal billing multipliers. Actual trigger batching, instance concurrency, workflow paths, grants and backend history change them. For each option calculate infrastructure + connector/action + state + monitoring + dependencies + operations labor, then divide by successful business transactions. A cheap invocation with expensive manual recovery may be the more costly design.

The downloadable worksheet has separate rate, unit, grant, region and evidence fields. Unknown prices remain unknown rather than silently becoming zero. Enter storage transactions/GB-months, log ingestion/retention, network transfer, Service Bus, API Management, ERP licensing and any integration-account charges. Avoid counting the same managed meter as both a connector and an action. Compare a realistic peak-capacity floor with a quiet month as well as the average.

Performance, latency and scalability: a reproducible test

Use equivalent contracts and dependency stubs first, then repeat against the real integration sandbox. Record region, runtime/extensions, plan, memory, concurrency, payload sizes, connector operation, backend and deployment commit. Keep data and accepted outcomes identical. A Function response time and a multi-day approval completion time cannot be compared as the same latency.

Test phaseControlled workloadEvidence to collect
Cold and warmIsolated event after idle; repeat on warmed capacityStartup frequency; p50/p95/p99 ingress-to-result
Steady and burstFixed rate then burst with known queue depthThroughput, backlog age, dependency throttles and errors
RecoveryDependency outage, duplicate delivery and worker interruptionAccepted completion, recovery time and duplicate side effects
Long workflowApproval signal before/after deadlineCorrect terminal state, late-event handling and retained evidence
EconomicSame completed business workloadMeter exports and cost per accepted outcome

Run multiple trials, preserve raw results and separate warm/cold samples. Declare a business SLO before selecting concurrency. Report both successes and failures; discarded timeouts can make a fast-looking p95 misleading. No benchmark was executed for this article. Microsoft’s reliability guidance is a starting point, not a substitute for your measurements.

Enterprise security and governance

Separate the workflow author, runtime identity, reviewer and operator. Use Entra ID and managed identity where the selected operation supports them; assign narrow RBAC and data permissions. A Function key is not equivalent to per-user business authorization. Protect APIs and approval callbacks, rotate unavoidable secrets through controlled configuration, and keep secrets out of source and run history. References: Functions connections and Logic Apps security.

Review ingress, egress, private endpoints and connector execution routes independently. Minimize payloads in history and logs, agree retention/deletion, restrict diagnostics access and validate residency across every dependency. Encryption alone does not establish compliance. Security acceptance should include a denied-access test, expired credential behavior and a demonstrated separation between test and production. The C# Standard SDK preview has authentication limitations; do not assume mature designer capabilities carry over to it.

Error handling, monitoring and reliability checklist

  • Use a stable business idempotency key and atomically record accepted side effects.
  • Bound transient retries; do not retry invalid business data indefinitely.
  • Define poison/dead-letter handling and an operator owner.
  • Model partial completion and compensation explicitly; a refund is not a database rollback.
  • Propagate business, workflow and trace correlation identifiers without sensitive payloads.
  • Alert on backlog age, terminal failures and stalled approvals, not only CPU.
  • Exercise recovery and document safe resubmission rules.
  • Retain business audit evidence independently where required; run history is not a complete audit system.

Logic Apps scopes and run-after paths can model recovery; Durable exceptions and activities can coordinate compensation. Neither makes external writes exactly-once by default. Workflow error handling and idempotent Functions design explain why retry policy and business correctness must be designed together.

DevOps and CI/CD comparison

Keep code, definitions, Bicep or Terraform, connection references and configuration contracts in version control. GitHub Actions or Azure DevOps should build, test and promote the same artifact with environment-specific identity and settings. Standard can separate workflow project deployment from infrastructure. Do not copy developer connection secrets into a release package. See Standard deployment guidance.

Test expressions, mappings, activity logic and end-to-end recovery. Use deployment slots only where the chosen plan supports them. Version long-running instances deliberately: changing orchestration order or activity signatures can break replay. Drain, route or version in-flight work with a documented rollback strategy rather than simply overwriting it. See Durable versioning guidance.

Practical .NET / C# and workflow examples

These are concise structural examples, reviewed against Microsoft APIs but not compiled or deployed in this environment. Start with an Azure Functions v4 isolated-worker template and a currently supported .NET target. Pin compatible stable worker, Service Bus and DurableTask extension versions in your project. Avoid mixing Microsoft.Azure.WebJobs in-process APIs with isolated-worker code. The isolated-worker reference notes in-process support ends 10 November 2026.

1. Service Bus Function: reject invalid input and preserve retry behavior

using Microsoft.Azure.Functions.Worker;
using Microsoft.Extensions.Logging;

public sealed class ValidateInvoice(ILogger<ValidateInvoice> log)
{
    [Function(nameof(ValidateInvoice))]
    public void Run(
        [ServiceBusTrigger("invoice-jobs", Connection = "ServiceBus")]
        string documentId)
    {
        if (string.IsNullOrWhiteSpace(documentId))
            throw new InvalidOperationException("Missing document reference");
        // Replace with validated, idempotent application work.
        // Do not log document contents or credentials.
        log.LogInformation("Validated an invoice work item");
    }
}

The sample does not implement business persistence. Configure the identity-based Service Bus connection, permissions, retry and dead-letter policy separately; do not swallow processing failures. See Service Bus trigger.

2. Logic Apps workflow: safe, small request example

{
  "definition": {
    "$schema": "https://schema.management.azure.com/providers/Microsoft.Logic/schemas/2016-06-01/workflowdefinition.json#",
    "contentVersion": "1.0.0.0",
    "triggers": {
      "Request": {
        "type": "Request",
        "kind": "Http",
        "inputs": {
          "schema": {
            "type": "object",
            "properties": {
              "documentId": {
                "type": "string"
              }
            },
            "required": [
              "documentId"
            ]
          }
        }
      }
    },
    "actions": {
      "Acknowledged": {
        "type": "Response",
        "kind": "Http",
        "inputs": {
          "statusCode": 202,
          "body": {
            "state": "received"
          }
        },
        "runAfter": {}
      }
    },
    "outputs": {}
  },
  "kind": "Stateful"
}

This Standard workflow definition demonstrates a request and response only. It does not enqueue work, enforce documentId semantics or authorize a caller. Add those controls before accepting a real job. A 202 response alone is not a durable acceptance guarantee. See the trigger/action schema.

3. Durable orchestration: an approval with an expiry

using Microsoft.Azure.Functions.Worker;
using Microsoft.DurableTask;

public static class ApprovalFlow
{
    [Function(nameof(ApprovalFlow))]
    public static async Task<string> Run(
        [OrchestrationTrigger] TaskOrchestrationContext ctx)
    {
        string id = ctx.GetInput<string>()
            ?? throw new InvalidOperationException("Missing document ID");
        await ctx.CallActivityAsync("ValidateDocument", id);
        using var timerCancel = new CancellationTokenSource();
        Task expiry = ctx.CreateTimer(
            ctx.CurrentUtcDateTime.AddDays(3), timerCancel.Token);
        Task<bool> approval = ctx.WaitForExternalEvent<bool>("Approval");
        if (await Task.WhenAny(approval, expiry) == expiry)
            return "expired";
        timerCancel.Cancel();
        if (!await approval) return "rejected";
        await ctx.CallActivityAsync("PostApprovedDocument", id);
        return "approved";
    }
}

Implement and register the named activities and a protected client/callback separately. Add bounded activity retry and compensation according to the downstream contract. Never accept an unverified boolean from a public endpoint as approval: authenticate the reviewer, authorize that instance and deduplicate signals. The sample omits those application components and does not constitute a deployable approval system.

Enterprise use cases: illustrative architecture choices

Business requirementCandidate and integrationControls and economic trade-off
Insurance claimsLogic Apps intake; Durable evidence/approval coordination; claims APIRestrict claim access; long retention and specialist exceptions drive cost
Invoice automationLogic Apps connector plus Function validation; optional durable reviewIdempotent ERP posting; action count and extraction service cost
Healthcare administrationStateful workflow around approved scheduling interfacesMinimize patient data; connector access, residency and review controls
Manufacturing alertsQueue-triggered Function transforms equipment eventsDevice/source trust; bursts, broker limits and false-alert handling
Retail order coordinationDurable activities across stock, payment and fulfillment APIsCompensation and duplicate prevention; downstream limits dominate
Financial reviewLogic Apps evidence routing or Durable domain workflowSeparate reviewer role and audit ledger; retention and manual work
CRM/ERP synchronizationLogic Apps supported connectors; custom Function for mappingsConflict ownership and loop prevention; poll/retry connector meters
SaaS event processingFunction consumer; durable extension only for persistent jobsTenant authorization and quotas; throughput plus capacity floor

These are hypothetical design starting points, not completed client projects. The candidate depends on the actual connector, security review and accepted business outcome. A healthcare or financial workflow does not become compliant merely because it runs in Azure.

Choosing the right Azure serverless architecture

Custom operation?: Simple event logic: evaluate Functions; Connector-led flow?: Evaluate Consumption or Standard Logic Apps; Persistent code flow?: Evaluate Durable Functions and its backend; Need both boundaries?: Test a hybrid only when responsibilities justify it. These are alternative starting candidates, not sequential steps. Reject options that fail identity, network, recovery or support requirements.
Custom operation?: Simple event logic: evaluate Functions; Connector-led flow?: Evaluate Consumption or Standard Logic Apps; Persistent code flow?: Evaluate Durable Functions and its backend; Need both boundaries?: Test a hybrid only when responsibilities justify it. These are alternative starting candidates, not sequential steps. Reject options that fail identity, network, recovery or support requirements.
Decision inputsStarting candidateValidate before selection
Custom code, simple event, short durationFunctionsLatency, concurrency, dependencies and host cost
Managed connectors, intermittent integrationLogic Apps ConsumptionExecuted operations, connector permissions and limits
Consolidated workflows, network/runtime controlLogic Apps StandardCapacity utilization, statefulness and connector route
Persistent state, human signals, domain branchingDurable FunctionsReplay, backend, versioning and operations skill
Connectivity and application orchestration both substantialHybridWhether added boundaries earn their operating cost

Score requirements in plain language: code complexity, connector coverage, state, duration, human input, volume, concurrency, identity, networking, latency, team skills, monitoring, operational ownership, hosting, cost, maintainability and existing Microsoft investments. Avoid arbitrary weighted scores that conceal a failed mandatory security requirement. Reject infeasible candidates first; prototype the remaining trade-off.

Common Azure serverless architecture mistakes

MistakeMitigation
One invocation waits for a business approvalPersist state; use an event and deadline
Designer convenience decides architectureValidate contracts, support and operator ownership
Connector meters ignoredCount actual actions, retries, polls and applicable rates
Durable treated as a hosting planChoose host and backend independently
Replay ignoredKeep orchestrators deterministic and side effects in activities
Clock/network calls in orchestratorUse context time and durable/activity APIs
Duplicate events assumed impossibleUse business idempotency and atomic acceptance
No dead-letter ownerAssign alerts, triage and safe resubmission
Cold starts ignoredTest idle-to-first-result and warm capacity cost
Storage/network assumed freeInclude retention, transfer and backend meters
Shared powerful credentialsUse scoped identity and controlled secret rotation
Missing correlationCarry business and technical identifiers safely
Success-only dashboardsAlert on backlog, failures and stalled instances
Plan parity assumedCheck OS, region, feature and extension support
All three services used everywhereKeep only justified responsibility boundaries

Enterprise implementation roadmap

PhaseActivities and deliverableAcceptance and accountable roles
1. Assess processAgree transaction, SLO and exception owner; process briefBusiness owner accepts outcome and recovery needs
2. Inventory integrationsMap APIs, connectors, identities and data; contract inventoryIntegration architect and system owners validate access
3. Select architectureCompare feasible options; decision recordArchitect and operations owner accept boundaries
4. Model security/costThreat review and dated meter modelSecurity and FinOps approve assumptions and budget
5. Prove designEquivalent workload and failure tests; evidence packEngineering demonstrates correctness and measurable SLO
6. ImplementPipelines, tests, runbooks and version strategyRelease owner accepts rollback and support readiness
7. Operate/improveMonitor outcomes, meters and exceptions; review backlogOperations and business owners agree improvements

Set timelines after discovering integration constraints. An unapproved ERP interface or missing data owner is not solved by choosing a faster authoring tool.

How Prominent AI Services LLP can help

Prominent’s published API and system integration scope includes contracts, mappings, authentication, recovery and monitoring. Its Cloud and DevOps services cover cloud architecture, infrastructure as code, CI/CD and operational reviews. Start with an assessment or proof of concept, then agree implementation, dedicated engineering capacity or ongoing support as appropriate. No certification, fixed saving or delivery timeline is implied.

For the broader deployment-boundary decision, see microservices vs monolithic architecture. A workflow engine is not a reason by itself to split an application into services.

Frequently asked questions

What is the difference between Azure Functions and Logic Apps?

Functions centers on event-driven custom code; Logic Apps centers on integration workflows and connector operations. Both can combine code and connectivity, so choose by the responsibilities you need to maintain.

What is the difference between Azure Functions and Durable Functions?

Durable Functions extends Functions with persistent orchestration, activities, entities and durable waiting. Ordinary Functions still suit isolated handlers and workflows coordinated elsewhere.

Are Durable Functions a separate Azure service?

Durable Functions is an extension in a function app, not a separate compute plan. Its configured orchestration backend, such as Durable Task Scheduler, can be a separate Azure resource with its own charges.

When should I use Logic Apps instead of Azure Functions?

Evaluate Logic Apps when supported connectors, integration operations and workflow visibility remove substantial custom plumbing. Confirm security, API limits and total executed-operation cost.

Which is cheaper: Azure Functions or Logic Apps?

There is no universal answer. Compare the exact plan, executed path, connector costs, backend, monitoring, dependencies and operational effort per successfully completed transaction.

What is Azure Functions Flex Consumption?

It is a Linux-based serverless hosting option with configurable memory, event-driven scaling, virtual network integration and optional always-ready capacity. Confirm regional support, quota and runtime compatibility.

What is the difference between Logic Apps Consumption and Standard?

Consumption uses a multitenant, single-workflow resource. Standard supports multiple stateful or stateless workflows on a single-tenant runtime, with a different capacity and connector billing model.

Can Logic Apps call Azure Functions?

Yes. Use an appropriate supported operation or authenticated API call. Validate identity, routing, retry behavior and the endpoint contract.

Can Azure Functions trigger Logic Apps?

Yes, through an authorized request endpoint or an event source consumed by the workflow. Use the integration mechanism that fits delivery and security requirements.

When should I use Durable Functions?

Use it for code-led processes needing persistent coordination, activities, timers, external signals or parallel work. Do not add it to a simple event handler without a stateful requirement.

Does Durable Functions support long-running workflows?

Yes. Persistent coordination lets a process wait and resume without one invocation running continuously. Individual activities, retention and hosting constraints still matter.

What are common Durable Functions orchestration patterns?

Chaining, fan-out/fan-in, asynchronous HTTP, monitoring, human interaction, durable timers and sub-orchestrations. Each needs explicit failure and completion semantics.

How are Durable Functions billed?

Through the selected Functions hosting plan and durable backend, plus related dependencies. Activity execution, replay behavior, backend actions or storage and telemetry can contribute.

Do Durable Functions incur costs while waiting?

A durable wait does not keep orchestrator execution billing running continuously. Backend retention, other work and provisioned hosting capacity can still create charges.

Are Azure Functions suitable for enterprise integration?

Yes, especially custom transformations, APIs and event consumers. Your team still owns contracts, authorization, recovery and observability; managed integration workflows may reduce connector maintenance.

Does Logic Apps support custom code?

Yes: definitions, inline/custom code and called Functions are options. The Standard C# code-first SDK is separately documented as preview with limitations at this review.

Which service scales better?

Scaling depends on the hosting plan, trigger, connector throttles, backend and downstream capacity. Benchmark an equivalent accepted workload rather than ranking product names.

How do you secure Azure serverless workflows?

Authorize ingress and business decisions, use narrowly scoped identities where supported, secure connections/history, validate network paths and test denied access. Review each selected SKU and operation.

Can all three services be used together?

Yes. Logic Apps can own connectivity, Functions custom operations and Durable Functions stateful coordination. Use that combination only when the responsibility split justifies its added cost and operations.

Which Azure service is best for an approval workflow?

Logic Apps can fit integration-led approvals; Durable Functions can fit domain-heavy code-led approvals. Decide using identity, callback security, deadlines, retention, connector needs and team skills.

Technical sources reviewed 30 October 2026. Recommendations, usage scenarios and diagrams are illustrative. No customer outcomes, deployed sample results, benchmark measurements or unverified cloud prices are claimed.

From insight to implementation

Turn these ideas into a practical plan

Discuss how the ideas in this article apply to your business, systems and data. We’ll help you identify a focused first step.