> ## Documentation Index
> Fetch the complete documentation index at: https://docs.tensor9.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Lambda

> AWS Lambda. Runs a function on demand in response to events or HTTP calls, billed per request and millisecond, with a fifteen minute maximum runtime.

**On this page**

* [Coverage by target cloud](#coverage-by-target-cloud)
* [How the targets compare](#how-the-targets-compare)
  * [Max adaptation](#max-adaptation)
  * [Infrastructure-only adaptation](#infrastructure-only-adaptation)
* [On Google Cloud](#on-google-cloud)
* [On Azure](#on-azure)
  * [Via AKS function Deployments](#via-aks-function-deployments)
  * [Via Azure Container Apps](#via-azure-container-apps)
  * [Via Azure Functions (Flex Consumption)](#via-azure-functions-flex-consumption)
  * [Via Azure Functions (Premium)](#via-azure-functions-premium)
* [On OCI](#on-oci)
  * [Via OKE function Deployments](#via-oke-function-deployments)
  * [Via OCI Functions](#via-oci-functions)
* [On Private Kubernetes](#on-private-kubernetes)
  * [Via Kubernetes Cluster](#via-kubernetes-cluster)
  * [Via Knative Service](#via-knative-service)

## Coverage by target cloud

| Target             | Available |
| ------------------ | --------- |
| Google Cloud       | ✓         |
| Azure              | ✓         |
| OCI                | ✓         |
| Private Kubernetes | ✓         |

## How the targets compare

Each row compares a capability of Lambda with its adaptation on each target.
A dash means this row is not stated for that target.

### Max adaptation

| Capability                                                     | Lambda                                                                                                       | Google Cloud                                                                                    | Azure · AKS function Deployments                              | Azure · Azure Functions (Flex Consumption)                                                                                                                                                  | Azure · Azure Functions (Premium)                                                                                                                                                               | OCI · OKE function Deployments                                | Private Kubernetes · Kubernetes Cluster                                             | Private Kubernetes · Knative Service                                                                       |
| -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------- | ----------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| Execution model · scaling behavior                             | managed, scales on demand                                                                                    | Cloud Run gen2 service, request-driven autoscaling with scale-to-zero                           | always-on AKS Deployment                                      | Azure Functions Flex Consumption, with per-function target-based scaling to 1000 instances and scale-to-zero                                                                                | Azure Functions Premium (Elastic Premium), with always-ready + prewarmed instances and HTTP scale-out to a 20-100 SKU ceiling                                                                   | always-on OKE Deployment                                      | always-on Deployment                                                                | Knative Service, request-driven autoscaling                                                                |
| Concurrency · request isolation                                | 1 request per sandbox                                                                                        | 1 active HTTP request per instance; timed-out code can continue                                 | Deployment replicas; no Lambda reserved-concurrency admission | one invoke per instance, set at the platform (per-instance concurrency 1), so concurrent invokes land on separate instances                                                                 | one invoke per instance, with concurrent invokes scaling onto separate instances (verified to scale under burst)                                                                                | Deployment replicas; no Lambda reserved-concurrency admission | no per-replica concurrency cap on Kubernetes                                        | one request per pod through Knative containerConcurrency=1; fleet reserved concurrency is a separate limit |
| Minimum warm capacity · cold-start behavior                    | provisioned concurrency (optional)                                                                           | scales to zero by default; CPU throttled outside requests; cold start measured 365 ms p50       | -                                                             | -                                                                                                                                                                                           | always-ready and prewarmed instances reduce cold-start latency (\~200 ms); they are billed continuously                                                                                         | -                                                             | -                                                                                   | 1 replica minimum by default                                                                               |
| Scale bound · instance cap                                     | reserved concurrency (optional)                                                                              | revision max instance count; temporary excess and multiple revisions prevent a strict fleet cap | -                                                             | -                                                                                                                                                                                           | -                                                                                                                                                                                               | -                                                             | -                                                                                   | -                                                                                                          |
| Compute sizing · CPU from memory                               | CPU allocation is memory/1769 vCPU; this rate limits throughput independently of the number of visible cores | rounded up to gen2 CPU tiers \{1, 2, 4, 6, 8}; 512 MiB memory floor                             | -                                                             | mapped onto the plan's instance size, up to the \~4 GB ceiling shared with the runtime bundle                                                                                               | mapped onto the Premium instance SKU (EP1/EP2/EP3)                                                                                                                                              | -                                                             | the same continuous rate, enforced by the Linux CFS scheduler                       | the same continuous rate, enforced by the Linux CFS scheduler                                              |
| Packaging · how functions ship                                 | container image or Lambda zip                                                                                | a built container image serving the Invoke API with the AWS-provided runtime client             | function container in a cluster-accessible registry           | a code package (zip): the package includes the AWS-provided runtime client and the Tensor9 adapter, and container images route elsewhere                                                    | a custom container image or a code package: Premium hosts both, so a container-image function runs as-is                                                                                        | function container in a cluster-accessible registry           | a built container image serving the Invoke API with the AWS-provided runtime client | a built container image serving the Invoke API with the AWS-provided runtime client                        |
| Invocation · how calls arrive                                  | Invoke API + event sources                                                                                   | Invoke API, synchronous, via the caller's routing layer                                         | Invoke API, synchronous, in-cluster                           | -                                                                                                                                                                                           | -                                                                                                                                                                                               | Invoke API, synchronous, in-cluster                           | Invoke API, synchronous, in-cluster                                                 | Invoke API, synchronous, in-cluster                                                                        |
| Endpoint access · who can reach the endpoint                   | public endpoint + SigV4 auth                                                                                 | public endpoint + IAM invoker auth, matching Lambda's own data-plane posture                    | -                                                             | -                                                                                                                                                                                           | -                                                                                                                                                                                               | -                                                             | -                                                                                   | -                                                                                                          |
| Keyless auth                                                   | Yes - IAM roles / SigV4                                                                                      | Yes - audience-bound identity tokens, no keys                                                   | -                                                             | -                                                                                                                                                                                           | -                                                                                                                                                                                               | -                                                             | -                                                                                   | -                                                                                                          |
| API coverage                                                   | full                                                                                                         | partial                                                                                         | partial                                                       | partial                                                                                                                                                                                     | partial                                                                                                                                                                                         | partial                                                       | partial                                                                             | partial                                                                                                    |
| Per-invoke isolation · what the platform can't fully reproduce | private /tmp + memory cap per concurrent invoke                                                              | -                                                                                               | -                                                             | full per-invoke isolation (a separate instance each), bounded by the plan's \~0.8 GB /tmp and \~4 GB instance memory                                                                        | full per-invoke isolation (a separate instance each), with GB-sized /tmp and larger memory than the Flex Consumption option                                                                     | -                                                             | -                                                                                   | -                                                                                                          |
| Routing layer delivery · how the routing layer ships           | n/a                                                                                                          | -                                                                                               | -                                                             | a binary inside the code package (Flex Consumption is code-only, with no separately deployed service adapter), so a routing-layer update requires rebuilding the package on the next deploy | a binary inside the deployed artifact (Premium hosts a single container, no separately deployed service adapter), so a routing-layer update requires rebuilding the artifact on the next deploy | -                                                             | -                                                                                   | -                                                                                                          |
| Egress identity · keyless auth                                 | IAM roles / SigV4                                                                                            | -                                                                                               | -                                                             | egress mapped to an Azure managed identity, no keys                                                                                                                                         | egress mapped to an Azure managed identity, no keys                                                                                                                                             | -                                                             | -                                                                                   | -                                                                                                          |
| Callee resolution · by name at request time                    | native                                                                                                       | -                                                                                               | -                                                             | the caller's routing layer resolves each callee by function name; ingress hostnames are platform-assigned, so hostnames are not fixed during compilation                                    | the caller's routing layer resolves each callee by function name; ingress hostnames are platform-assigned, so hostnames are not fixed during compilation                                        | -                                                             | -                                                                                   | -                                                                                                          |
| Scale bound · never unbounded                                  | account concurrency limit                                                                                    | -                                                                                               | -                                                             | -                                                                                                                                                                                           | -                                                                                                                                                                                               | -                                                             | -                                                                                   | 10 replicas maximum by default                                                                             |
| Network isolation                                              | Yes - VPC controls                                                                                           | -                                                                                               | -                                                             | -                                                                                                                                                                                           | -                                                                                                                                                                                               | -                                                             | -                                                                                   | Yes - no internet egress; cluster-local only                                                               |

### Infrastructure-only adaptation

| Capability                                                     | Lambda                                                                                                       | Azure · Azure Container Apps                                                                                                                             | OCI · OCI Functions                                                                                                                                                                    |
| -------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Execution model · scaling behavior                             | managed, scales on demand                                                                                    | managed container platform (KEDA / Envoy / Dapr), scales per request with scale-to-zero on HTTP/event triggers                                           | managed FaaS, scales per request with scale-to-zero                                                                                                                                    |
| Concurrency · request isolation                                | 1 request per sandbox                                                                                        | one invoke per worker process, enforced by the adapter                                                                                                   | 1 request per container, enforced by the platform; concurrent requests use separate containers, reusing warm capacity when available                                                   |
| Compute sizing · CPU from memory                               | CPU allocation is memory/1769 vCPU; this rate limits throughput independently of the number of visible cores | mapped onto the Container App's cpu/memory allocation                                                                                                    | memory rounds up to an OCI tier (e.g. 1769 MiB → 2048); the tier determines CPU                                                                                                        |
| Packaging · how functions ship                                 | container image or Lambda zip                                                                                | a built container image serving the Invoke API with the AWS-provided runtime client                                                                      | a built container image serving the Invoke API with the AWS-provided runtime client                                                                                                    |
| Egress identity · keyless auth                                 | IAM roles / SigV4                                                                                            | egress mapped to an Azure managed identity, no keys                                                                                                      | -                                                                                                                                                                                      |
| Inbound admission · how one invoke per process is held         | platform holds 1 request per sandbox                                                                         | a routing layer admits each invoke to a free single-request worker, concurrency-aware                                                                    | -                                                                                                                                                                                      |
| Per-invoke isolation · what the platform can't fully reproduce | private /tmp + memory cap per concurrent invoke                                                              | full at one-invoke-per-replica; in packed mode co-located workers share /tmp + host resources                                                            | -                                                                                                                                                                                      |
| Callee resolution · by name at request time                    | native                                                                                                       | the caller's routing layer resolves each callee by function name; ingress hostnames are platform-assigned, so hostnames are not fixed during compilation | -                                                                                                                                                                                      |
| API coverage                                                   | full                                                                                                         | partial                                                                                                                                                  | partial                                                                                                                                                                                |
| Minimum warm capacity · cold-start behavior                    | provisioned concurrency (optional)                                                                           | -                                                                                                                                                        | scales to zero; image-cached cold start measured 365 ms p50 (n=20); a cold-cache image pull took about 49 s in the recorded run. Cache availability is not guaranteed on later starts. |
| Grouping · function resources                                  | function                                                                                                     | -                                                                                                                                                        | application + function                                                                                                                                                                 |
| Callee resolution by name                                      | Yes - native                                                                                                 | -                                                                                                                                                        | Yes - re-resolves after a redeploy                                                                                                                                                     |
| Keyless auth                                                   | Yes - IAM roles / SigV4                                                                                      | -                                                                                                                                                        | Yes - appliance resource-principal signing, no keys                                                                                                                                    |

## On Google Cloud

| Capability                                                   | Area              | Support      | Required tier | Operations | Notes                                                                                                                                                                                                                                                                                                                                              |
| ------------------------------------------------------------ | ----------------- | ------------ | ------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Compute sizing                                               | Configuration     | Supported    | -             | -          | memory is applied as authored; CPU derived from Lambda's delivered compute (the continuous memory/1769 vCPU credit rate, not the stepped visible-core count), ceiled to Cloud Run gen2's CPU tier \{1, 2, 4, 6, 8}; a sub-1-vCPU function rounds up to a full vCPU (fractional CPU needs gen1), and memory below 512 MiB is raised to gen2's floor |
| Environment variables                                        | Configuration     | Supported    | -             | -          | set on the function's workload                                                                                                                                                                                                                                                                                                                     |
| Ephemeral storage (/tmp)                                     | Configuration     | Supported    | -             | -          | a sized in-memory /tmp matching the authored ephemeral storage (512 MB default); writes count against function memory                                                                                                                                                                                                                              |
| Reserved concurrency                                         | Configuration     | Partial      | -             | -          | Maps to the revision's maximum instance count with one request per instance. Cloud Run can temporarily exceed this setting, including during replacement; multiple revisions can also serve traffic. This is not strict fleet-wide admission control. Unauthored functions use the platform default.                                               |
| Timeout                                                      | Configuration     | Partial      | -             | -          | The authored timeout sets Cloud Run's request deadline. A missed deadline returns HTTP 504, but the handler can continue running; this setting does not provide Lambda's execution-termination guarantee.                                                                                                                                          |
| Event source mappings                                        | Event integration | Out of scope | -             | -          | not compiled; the build stops with a clear error rather than silently dropping them                                                                                                                                                                                                                                                                |
| Asynchronous (Event) invocation                              | Invocation        | Out of scope | -             | -          | the Event invocation type of Invoke is not served; a synchronous RequestResponse Invoke is                                                                                                                                                                                                                                                         |
| Layers                                                       | Packaging         | Out of scope | -             | -          | not compiled; the build stops with a clear error                                                                                                                                                                                                                                                                                                   |
| Zip packaging                                                | Packaging         | Supported    | -             | -          | a zip-packaged function is built into a container image at release: the runtime base plus your code, fronted by the AWS-provided runtime client                                                                                                                                                                                                    |
| Aliases / versions / provisioned concurrency / function URLs | Routing           | Out of scope | -             | -          | not compiled; the build stops with a clear error                                                                                                                                                                                                                                                                                                   |

| Operation                | Area       | Support      | Depth      | Notes                                                                                                                                         |
| ------------------------ | ---------- | ------------ | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------- |
| Invoke                   | Invocation | Supported    | Common     | synchronous RequestResponse routed to the callee by function name through the caller's routing layer; verified on a live release (2026-07-08) |
| InvokeWithResponseStream | Invocation | Out of scope | Most usage | response streaming is not served; the synchronous RequestResponse invoke is the served path                                                   |

#### How it works

On AWS your application calls Lambda through the AWS SDK; those calls are unchanged. At deploy time the compiler turns each function into a container image in the customer's own registry: a container-image function uses the configured Lambda-compatible entrypoint, and a zip-packaged function is built into a container image at release. The AWS runtime client runs the handler; an HTTP Invoke wrapper delivers requests to that runtime. At runtime every invocation uses the Lambda Invoke protocol: the function image serves the **Invoke** API on its port, and the reply uses Lambda's own framing, including function errors; execution deadlines follow the target limits below. Only synchronous request/response invokes are served.

Cloud Run differs from the cluster targets by being container-serverless with true scale-to-zero, managed by Google . When no invokes arrive the service scales to zero (CPU throttled outside requests) and scales back up per request. Google, not Tensor9, enforces one request per instance, so Cloud Run holds one active HTTP request per instance. Code can continue after an HTTP timeout, so this setting alone does not guarantee that a timed-out handler has stopped before another request arrives. The configured timeout becomes Cloud Run's request deadline: expiration returns HTTP 504 without terminating the container. A sized in-memory `/tmp` matches the authored ephemeral storage. Reserved concurrency maps to the revision's maximum instance count, which Cloud Run can temporarily exceed; multiple revisions can also serve requests. This setting does not provide strict fleet-wide admission control. Cross-function invokes route through a caller-side adapter that resolves the callee by name, bound at apply, since the platform assigns a hostname the name alone cannot predict; the layer authenticates with identity tokens issued for the destination service, with no AWS keys on the path.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJPbiBHb29nbGUgQ2xvdWQsIHRoZSBhcHBsaWNhdGlvbidzIHVuY2hhbmdlZCBTREsgaW52b2tlIHJlYWNoZXMgYSBUZW5zb3I5IGFkYXB0ZXIgYmVzaWRlIGl0LCB3aGljaCByZXNvbHZlcyB0aGUgY2FsbGVlIGJ5IGZ1bmN0aW9uIG5hbWUgYW5kIGZvcndhcmRzIHRvIGEgR29vZ2xlIENsb3VkIFJ1biBnZW4yIHNlcnZpY2UgdGhhdCBzY2FsZXMgZnJvbSB6ZXJvIGFuZCBlbmZvcmNlcyBvbmUgcmVxdWVzdCBwZXIgaW5zdGFuY2UgYXQgdGhlIHBsYXRmb3JtLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6IzMzNDE1NX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJsay1jciIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB4PSI4IiB5PSIzMCIgd2lkdGg9IjgyMCIgaGVpZ2h0PSIxNTAiIHJ4PSIxNiIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjI2IiB5PSI1MiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzA0Nzg1NyI+T04gR09PR0xFIENMT1VEPC90ZXh0Pgo8cmVjdCB4PSIyOCIgeT0iODAiIHdpZHRoPSIxMzAiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI5MyIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEyLjVweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjkzIiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA1OTY2OSI+c2FtZSBTREs8L3RleHQ+CjxsaW5lIHgxPSIxNTgiIHkxPSIxMTMiIHgyPSIyMjQiIHkyPSIxMTMiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2xrLWNyKSIvPgo8dGV4dCB4PSIxOTEiIHk9IjEwNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM2NDc0OGI7IGZvbnQtc2l6ZTo4LjVweCI+aW52b2tlKCk8L3RleHQ+CjxyZWN0IHg9IjIyOCIgeT0iNzYiIHdpZHRoPSIxODIiIGhlaWdodD0iNzQiIHJ4PSIxMiIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSIzMTkiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMnB4Ij5hZGFwdGVyPC90ZXh0Pgo8dGV4dCB4PSIzMTkiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+YmVzaWRlIHlvdXIgYXBwPC90ZXh0Pgo8bGluZSB4MT0iNDEwIiB5MT0iMTEzIiB4Mj0iNDc2IiB5Mj0iMTEzIiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNsay1jcikiLz4KPHRleHQgeD0iNDQzIiB5PSIxMDUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmb250LXNpemU6OC41cHgiPmJ5IG5hbWU8L3RleHQ+CjxyZWN0IHg9IjQ4MCIgeT0iNzYiIHdpZHRoPSIzMjAiIGhlaWdodD0iNzQiIHJ4PSIxMiIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI2NDAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMnB4Ij5DbG91ZCBSdW4gKGdlbjIpPC90ZXh0Pgo8dGV4dCB4PSI2NDAiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPnNjYWxlcyAwIOKGkiBOIMK3IDEgcmVxIC8gaW5zdGFuY2U8L3RleHQ+Cjwvc3ZnPg==" alt="On Google Cloud, the application's unchanged SDK invoke reaches a Tensor9 adapter beside it, which resolves the callee by function name and forwards to a Google Cloud Run gen2 service that scales from zero and enforces one request per instance at the platform." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJPbiBHb29nbGUgQ2xvdWQsIHRoZSBhcHBsaWNhdGlvbidzIHVuY2hhbmdlZCBTREsgaW52b2tlIHJlYWNoZXMgYSBUZW5zb3I5IGFkYXB0ZXIgYmVzaWRlIGl0LCB3aGljaCByZXNvbHZlcyB0aGUgY2FsbGVlIGJ5IGZ1bmN0aW9uIG5hbWUgYW5kIGZvcndhcmRzIHRvIGEgR29vZ2xlIENsb3VkIFJ1biBnZW4yIHNlcnZpY2UgdGhhdCBzY2FsZXMgZnJvbSB6ZXJvIGFuZCBlbmZvcmNlcyBvbmUgcmVxdWVzdCBwZXIgaW5zdGFuY2UgYXQgdGhlIHBsYXRmb3JtLiI+PHN0eWxlPnRleHR7Zm9udC1mYW1pbHk6SW50ZXIsLWFwcGxlLXN5c3RlbSxCbGlua01hY1N5c3RlbUZvbnQsJ1NlZ29lIFVJJyxSb2JvdG8sJ0hlbHZldGljYSBOZXVlJyxBcmlhbCxzYW5zLXNlcmlmO2ZpbGw6I2NiZDVlMX08L3N0eWxlPgo8ZGVmcz48bWFya2VyIGlkPSJsay1jciIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB4PSI4IiB5PSIzMCIgd2lkdGg9IjgyMCIgaGVpZ2h0PSIxNTAiIHJ4PSIxNiIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjI2IiB5PSI1MiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5MGRlYzgiPk9OIEdPT0dMRSBDTE9VRDwvdGV4dD4KPHJlY3QgeD0iMjgiIHk9IjgwIiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iOTMiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMi41cHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI5MyIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzYiPnNhbWUgU0RLPC90ZXh0Pgo8bGluZSB4MT0iMTU4IiB5MT0iMTEzIiB4Mj0iMjI0IiB5Mj0iMTEzIiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNsay1jcikiLz4KPHRleHQgeD0iMTkxIiB5PSIxMDUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmb250LXNpemU6OC41cHgiPmludm9rZSgpPC90ZXh0Pgo8cmVjdCB4PSIyMjgiIHk9Ijc2IiB3aWR0aD0iMTgyIiBoZWlnaHQ9Ijc0IiByeD0iMTIiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iMzE5IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTJweCI+YWRhcHRlcjwvdGV4dD4KPHRleHQgeD0iMzE5IiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPmJlc2lkZSB5b3VyIGFwcDwvdGV4dD4KPGxpbmUgeDE9IjQxMCIgeTE9IjExMyIgeDI9IjQ3NiIgeTI9IjExMyIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjbGstY3IpIi8+Cjx0ZXh0IHg9IjQ0MyIgeT0iMTA1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZm9udC1zaXplOjguNXB4Ij5ieSBuYW1lPC90ZXh0Pgo8cmVjdCB4PSI0ODAiIHk9Ijc2IiB3aWR0aD0iMzIwIiBoZWlnaHQ9Ijc0IiByeD0iMTIiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNjQwIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+Q2xvdWQgUnVuIChnZW4yKTwvdGV4dD4KPHRleHQgeD0iNjQwIiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5zY2FsZXMgMCDihpIgTiDCtyAxIHJlcSAvIGluc3RhbmNlPC90ZXh0Pgo8L3N2Zz4=" alt="On Google Cloud, the application's unchanged SDK invoke reaches a Tensor9 adapter beside it, which resolves the callee by function name and forwards to a Google Cloud Run gen2 service that scales from zero and enforces one request per instance at the platform." />
</div>

<p className="t9-caption">Each function runs as a Cloud Run service that scales to zero; Google enforces one request per instance, and a caller-side adapter routes cross-function invokes by name with keyless auth.</p>

#### Operations and migration

**Operations.** Google operates Cloud Run's scaling and availability; Tensor9 operates the invoke path. Invoke permissions are granted manually, and services run on the project's default compute account.

**Migration.** The function is compiled at the build and ships as its container image; there is no data to migrate at cutover.

**Capacity and speed.** Throughput and latency are Cloud Run's own, reported by your monitoring.

#### Limitations

△ Where Lambda and Cloud Run stay different

* **CPU rounds up to a Cloud Run tier.** CPU allocation rounds up to a gen2 tier; a sub-vCPU function rounds up to a full vCPU, and memory below the platform floor is brought up to it.
* **The HTTP timeout does not terminate the handler.** Cloud Run can return HTTP 504 while code continues running. Workloads that require execution to stop at the deadline need handler cancellation or process termination beyond this native request setting.
* **Maximum instances is not exact reserved concurrency.** Cloud Run can temporarily exceed the revision's maximum, and multiple revisions may serve traffic. One request per instance does not impose a strict admission limit across the fleet.
* **Cross-function calls reach only the same stack.** A call to a function the build cannot see returns a clear error rather than reaching the wrong service.
* **Synchronous invoke only.** An asynchronous (Event) invoke returns a clear error; layers, event source mappings, aliases, and function URLs stop the build with a clear error rather than dropping silently.

#### Other considerations

Consider request isolation, idle capacity, and how functions call one another.

* **One active HTTP request per instance.** Google applies this request limit at the platform. Warm requests reuse process memory and `/tmp`; code left running after an HTTP timeout can overlap a later request.
* **Scale-to-zero removes idle instance compute; the next invoke may cold-start:** the service scales to zero when no invokes arrive and back up per request, so instance compute follows the configured billing mode; registry storage, networking and other resources can still incur charges. A request arriving after scale-to-zero may need a container start.
* **A callee address is bound at apply.** Cloud Run assigns a hostname the function name alone cannot predict, so cross-function routing is resolved when the stack is applied and a callee that moves is picked up on the next apply; every hop authenticates with keyless identity tokens rather than AWS keys.
* **Store durable state in a backing service.** Function storage is temporary. Persist data through the services your handler calls so it survives instance replacement.

#### Function lifecycle and invocation

Maximum adaptation separates function lifecycle from invocation. Supported lifecycle requests record the desired function and reconcile it onto the selected hosting service; creation can return Pending before deployment finishes. The target service's observed address then supplies the invocation route. A function must be Active before callers rely on that route.

Invoke remains a request to the deployed handler through the Lambda adapter. Function readiness, successful HTTP delivery and a successful handler result are separate outcomes. Lifecycle adaptation does not add asynchronous event delivery, event sources, aliases or other features excluded by this target's operation table. Existing performance results apply to the recorded invocation workload, not to runtime creation or code-update latency.

## On Azure

### Via AKS function Deployments

| Capability                                                 | Area          | Support      | Required tier | Operations | Notes                                                                                                                                   |
| ---------------------------------------------------------- | ------------- | ------------ | ------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| Environment variables                                      | Configuration | Supported    | -             | -          | Configured on the function workload.                                                                                                    |
| Ephemeral storage (/tmp)                                   | Configuration | Out of scope | -             | -          | The container filesystem does not reproduce Lambda's configured /tmp cap.                                                               |
| Function lifecycle                                         | Configuration | Partial      | -             | -          | Supported lifecycle requests reconcile function configuration onto the selected cluster; invocation requires observed Active readiness. |
| Reserved concurrency                                       | Configuration | Out of scope | -             | -          | A Deployment replica count is not a Lambda reserved-concurrency limit.                                                                  |
| Timeout                                                    | Configuration | Partial      | -             | -          | The authored timeout does not provide a per-request Kubernetes process deadline.                                                        |
| Event sources, layers, aliases, versions and function URLs | Integration   | Out of scope | -             | -          | These source integrations are outside the selected Kubernetes function deployment.                                                      |
| Asynchronous (Event) invocation                            | Invocation    | Out of scope | -             | -          | This target serves synchronous calls; it does not provide an asynchronous event queue.                                                  |
| Zip packaging                                              | Packaging     | Supported    | -             | -          | The runtime base and function code are built into a container image.                                                                    |

| Operation                | Area       | Support      | Depth      | Notes                                                                                        |
| ------------------------ | ---------- | ------------ | ---------- | -------------------------------------------------------------------------------------------- |
| Invoke                   | Invocation | Supported    | Common     | Synchronous RequestResponse calls reach the configured function through its cluster Service. |
| InvokeWithResponseStream | Invocation | Out of scope | Most usage | Response streaming is outside this deployment contract.                                      |

#### How it works

Each function runs as an always-on Deployment on AKS, behind a cluster-local Service. A Lambda Invoke wrapper accepts synchronous requests and passes events to the function runtime. A runtime interface client runs the handler; the client alone does not make an arbitrary container expose the Invoke API.

#### Function packaging and lifecycle

Zip functions are built into a container image with their runtime. Container-image functions need the configured Lambda-compatible entrypoint and Invoke wrapper. Publish the image to a registry the cluster can access, configure environment values, and wait for the deployed function to become ready. Supported lifecycle calls record desired configuration and update the selected hosting resources; a pending deployment is not yet an invocation endpoint.

#### Cluster networking and identity

The customer configures the Azure virtual network, cluster access and node capacity. Callers must be able to reach the function Service, and the function needs network access to its dependencies. Azure workload identity can grant the function access to selected Azure services. The node or kubelet identity used for image pulls is a different identity. An AWS SDK call through another service adapter uses that adapter's authorization path; native cloud access is configured separately.

#### Execution limits and operations

A Deployment does not supply Lambda's per-invocation sandbox, reserved-concurrency admission or request-driven scale-to-zero behavior. The authored timeout is not a Kubernetes process deadline, and container storage does not reproduce the configured Lambda /tmp quota. Asynchronous Event invocation, response streaming and the listed event integrations remain outside this target. Plan node upgrades and capacity, collect function logs, and verify handler errors as well as successful HTTP calls.

### Via Azure Container Apps

| Capability                                                   | Area              | Support      | Required tier | Operations | Notes                                                                                                                                                                                                                                                                                 |
| ------------------------------------------------------------ | ----------------- | ------------ | ------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Compute sizing                                               | Configuration     | Supported    | -             | -          | memory is applied as authored; CPU derived from Lambda's delivered compute (the continuous memory/1769 vCPU credit rate, its binding throughput ceiling, not the stepped visible-core count) mapped onto the Container App's cpu/memory allocation                                    |
| Environment variables                                        | Configuration     | Supported    | -             | -          | your function's environment variables are set on its workload                                                                                                                                                                                                                         |
| Ephemeral storage (/tmp)                                     | Configuration     | Partial      | -             | -          | each invoke runs in its own process, but concurrent invokes on one replica share the container filesystem; a private, sized /tmp per concurrent invoke needs container privileges the managed platform withholds, and a single-invoke-per-replica mode restores it at a scale-up cost |
| Reserved concurrency                                         | Configuration     | Supported    | -             | -          | configured reserved concurrency maps to the app's replica/worker bound                                                                                                                                                                                                                |
| Timeout                                                      | Configuration     | Partial      | -             | -          | Container Apps has no per-request execution deadline. The authored value is passed through, but the connection backstop only limits the caller's response wait. It does not terminate the remote handler; the handler can continue after the wait ends.                               |
| Event source mappings                                        | Event integration | Out of scope | -             | -          | not compiled; the build stops with a clear error rather than silently dropping them                                                                                                                                                                                                   |
| Asynchronous (Event) invocation                              | Invocation        | Out of scope | -             | -          | the Event invocation type of Invoke is not served; a synchronous RequestResponse Invoke is                                                                                                                                                                                            |
| Layers                                                       | Packaging         | Out of scope | -             | -          | not compiled; the build stops with a clear error                                                                                                                                                                                                                                      |
| Zip packaging                                                | Packaging         | Supported    | -             | -          | a zip-packaged function is built into a container image at release: the runtime base plus your code, fronted by the AWS-provided runtime client                                                                                                                                       |
| Aliases / versions / provisioned concurrency / function URLs | Routing           | Out of scope | -             | -          | not compiled; the build stops with a clear error                                                                                                                                                                                                                                      |

| Operation                | Area       | Support      | Depth      | Notes                                                                                                                                                                                    |
| ------------------------ | ---------- | ------------ | ---------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Invoke                   | Invocation | Supported    | Common     | a sync Invoke routes to the Container App, resolved to the callee by function name through the caller's routing layer (Container Apps co-locates it on shared localhost, like Cloud Run) |
| InvokeWithResponseStream | Invocation | Out of scope | Most usage | response streaming is not served; the synchronous RequestResponse invoke is the served path                                                                                              |

#### How it works

On AWS your application calls Lambda through the AWS SDK; those calls are unchanged. At deploy time the compiler turns each function into a container image (a container-image function runs as-is; a zip-packaged function is built into a container image at release) and runs it on Azure Container Apps , a managed container platform, not Azure Functions. At runtime the adapter serves the synchronous **Invoke** and returns the supported Lambda response fields and function-error framing. Only synchronous request/response invokes are served.

What differs on Container Apps is **where single-request concurrency comes from**. Cloud Run and OCI Functions enforce one request per instance at the platform; Container Apps does not, so Tensor9's adapter owns the ingress port and admits each invoke onto a free single-request worker itself, concurrency-aware, never co-scheduling two invokes on one worker. The platform's own autoscaler still owns fleet scaling, moving replicas up and down with load and to zero when idle; the adapter ensures one active invocation per worker. At the default of one invoke per replica the platform's ingress is not concurrency-aware, so a fraction of simultaneous invokes are shed and retried. Packing several single-request workers per replica behind a concurrency-aware router removes that, at the cost of those co-located workers sharing the container's `/tmp` and host resources, which needs your confirmation that the handler tolerates it. Egress is mapped to an Azure managed identity, so requests need no AWS keys.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJPbiBBenVyZSwgdGhlIGFwcGxpY2F0aW9uJ3MgdW5jaGFuZ2VkIFNESyBpbnZva2UgcmVhY2hlcyBhIFRlbnNvcjkgYWRhcHRlciBvbiBzaGFyZWQgbG9jYWxob3N0IHRoYXQgb3ducyB0aGUgaW5ncmVzcyBwb3J0IGFuZCBhZG1pdHMgb25lIGludm9rZSBwZXIgd29ya2VyLCB0aGVuIGZvcndhcmRzIGJ5IGZ1bmN0aW9uIG5hbWUgdG8gYW4gQXp1cmUgQ29udGFpbmVyIEFwcCB3aG9zZSByZXBsaWNhIGZsZWV0IEtFREEgc2NhbGVzIHVwIGFuZCBkb3duIHdpdGggbG9hZC4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0ibGstYWNhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj48L2RlZnM+CjxyZWN0IHg9IjgiIHk9IjMwIiB3aWR0aD0iODIwIiBoZWlnaHQ9IjE1MCIgcng9IjE2IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMjYiIHk9IjUyIiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojMDQ3ODU3Ij5PTiBBWlVSRTwvdGV4dD4KPHJlY3QgeD0iMjgiIHk9IjgwIiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iOTMiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMi41cHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI5MyIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNTk2NjkiPnNhbWUgU0RLPC90ZXh0Pgo8bGluZSB4MT0iMTU4IiB5MT0iMTEzIiB4Mj0iMjI0IiB5Mj0iMTEzIiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNsay1hY2EpIi8+Cjx0ZXh0IHg9IjE5MSIgeT0iMTA1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YjsgZm9udC1zaXplOjguNXB4Ij5pbnZva2UoKTwvdGV4dD4KPHJlY3QgeD0iMjI4IiB5PSI3NiIgd2lkdGg9IjE4MiIgaGVpZ2h0PSI3NCIgcng9IjEyIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjMxOSIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEycHgiPmFkYXB0ZXI8L3RleHQ+Cjx0ZXh0IHg9IjMxOSIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5hZG1pdHMgMSBpbnZva2UgLyB3b3JrZXI8L3RleHQ+CjxsaW5lIHgxPSI0MTAiIHkxPSIxMTMiIHgyPSI0NzYiIHkyPSIxMTMiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2xrLWFjYSkiLz4KPHRleHQgeD0iNDQzIiB5PSIxMDUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmb250LXNpemU6OC41cHgiPmJ5IG5hbWU8L3RleHQ+CjxyZWN0IHg9IjQ4MCIgeT0iNzYiIHdpZHRoPSIzMjAiIGhlaWdodD0iNzQiIHJ4PSIxMiIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI2NDAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMnB4Ij5BenVyZSBDb250YWluZXIgQXBwPC90ZXh0Pgo8dGV4dCB4PSI2NDAiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM2NDc0OGIiPktFREEgc2NhbGVzIGNvbmZpZ3VyZWQgbWluIOKGkiBtYXg8L3RleHQ+Cjwvc3ZnPg==" alt="On Azure, the application's unchanged SDK invoke reaches a Tensor9 adapter on shared localhost that owns the ingress port and admits one invoke per worker, then forwards by function name to an Azure Container App whose replica fleet KEDA scales up and down with load." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJPbiBBenVyZSwgdGhlIGFwcGxpY2F0aW9uJ3MgdW5jaGFuZ2VkIFNESyBpbnZva2UgcmVhY2hlcyBhIFRlbnNvcjkgYWRhcHRlciBvbiBzaGFyZWQgbG9jYWxob3N0IHRoYXQgb3ducyB0aGUgaW5ncmVzcyBwb3J0IGFuZCBhZG1pdHMgb25lIGludm9rZSBwZXIgd29ya2VyLCB0aGVuIGZvcndhcmRzIGJ5IGZ1bmN0aW9uIG5hbWUgdG8gYW4gQXp1cmUgQ29udGFpbmVyIEFwcCB3aG9zZSByZXBsaWNhIGZsZWV0IEtFREEgc2NhbGVzIHVwIGFuZCBkb3duIHdpdGggbG9hZC4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0ibGstYWNhIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj48L2RlZnM+CjxyZWN0IHg9IjgiIHk9IjMwIiB3aWR0aD0iODIwIiBoZWlnaHQ9IjE1MCIgcng9IjE2IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMjYiIHk9IjUyIiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzkwZGVjOCI+T04gQVpVUkU8L3RleHQ+CjxyZWN0IHg9IjI4IiB5PSI4MCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjkzIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTIuNXB4Ij5Zb3VyIGFwcDwvdGV4dD4KPHRleHQgeD0iOTMiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM2Ij5zYW1lIFNESzwvdGV4dD4KPGxpbmUgeDE9IjE1OCIgeTE9IjExMyIgeDI9IjIyNCIgeTI9IjExMyIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjbGstYWNhKSIvPgo8dGV4dCB4PSIxOTEiIHk9IjEwNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZvbnQtc2l6ZTo4LjVweCI+aW52b2tlKCk8L3RleHQ+CjxyZWN0IHg9IjIyOCIgeT0iNzYiIHdpZHRoPSIxODIiIGhlaWdodD0iNzQiIHJ4PSIxMiIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSIzMTkiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMnB4Ij5hZGFwdGVyPC90ZXh0Pgo8dGV4dCB4PSIzMTkiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+YWRtaXRzIDEgaW52b2tlIC8gd29ya2VyPC90ZXh0Pgo8bGluZSB4MT0iNDEwIiB5MT0iMTEzIiB4Mj0iNDc2IiB5Mj0iMTEzIiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNsay1hY2EpIi8+Cjx0ZXh0IHg9IjQ0MyIgeT0iMTA1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZm9udC1zaXplOjguNXB4Ij5ieSBuYW1lPC90ZXh0Pgo8cmVjdCB4PSI0ODAiIHk9Ijc2IiB3aWR0aD0iMzIwIiBoZWlnaHQ9Ijc0IiByeD0iMTIiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNjQwIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTJweCI+QXp1cmUgQ29udGFpbmVyIEFwcDwvdGV4dD4KPHRleHQgeD0iNjQwIiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZmQ4Ij5LRURBIHNjYWxlcyBjb25maWd1cmVkIG1pbiDihpIgbWF4PC90ZXh0Pgo8L3N2Zz4=" alt="On Azure, the application's unchanged SDK invoke reaches a Tensor9 adapter on shared localhost that owns the ingress port and admits one invoke per worker, then forwards by function name to an Azure Container App whose replica fleet KEDA scales up and down with load." />
</div>

<p className="t9-caption">Each function runs on Azure Container Apps; an adapter owns the ingress port and admits one invoke per worker, since the platform does not hold single-request concurrency the way Cloud Run and OCI do.</p>

#### Operations and migration

**Operations.** Microsoft operates Azure Container Apps' scaling and availability; Tensor9 operates the invoke path, and the function code stays the vendor's.

**Migration.** The function is compiled at the build and ships as its container image; there is no data to migrate at cutover.

**Capacity and speed.** Throughput and latency are Azure Container Apps' own, reported by your monitoring.

#### Limitations

△ Where Lambda and Azure Container Apps stay different

* **The adapter limits concurrent requests per worker.** One invoke per worker is enforced by the adapter rather than enforced by the platform as on Cloud Run and OCI Functions.
* **Burst traffic can require retries.** At one invoke per replica the platform ingress is not concurrency-aware and sheds a fraction of simultaneous invokes (recovered by retry); a concurrency-aware router removes that but co-locates workers that share /tmp and host resources.
* **No per-request platform deadline.** The configured value is retained, but the connection backstop limits the caller's response wait, not remote handler execution. The handler can continue after the caller times out; this does not enforce Lambda's configured execution deadline.
* **Synchronous invoke only.** An asynchronous (Event) invoke returns a clear error; layers, event source mappings, aliases, and function URLs stop the build with a clear error rather than dropping silently.

#### Other considerations

Consider request isolation, idle capacity, and how functions call one another.

* **Fleet scaling and admission are separate.** KEDA adjusts replicas within the configured bounds, including zero when the minimum permits it; independently, the adapter admits each invoke onto a free single-request worker, so isolation holds one invoke per worker regardless of how many replicas are up.
* **Idle scales to zero; waking is a cold start:** when the configured minimum allows the fleet to reach zero after idle, the first invoke pays a container start and billing follows use rather than a minimum warm capacity, which is the trade against the Premium plan's always-ready instances.
* **Egress needs no keys:** the function's outbound calls are mapped to an Azure managed identity, so credentials are the platform's to rotate and nothing on the invoke path holds an AWS key.
* **Store durable state in a backing service.** Function storage is temporary. Persist data through the services your handler calls so it survives instance replacement.

#### Function lifecycle on Container Apps

Container App readiness establishes an invocation route, not a successful handler result. Per-worker admission, replica scaling and response-wait backstops remain distinct controls. See [function lifecycle and invocation](/service-adapters/aws/compute-containers/lambda#function-lifecycle-and-invocation) for Pending/Active state, supported lifecycle operations and invocation outcomes.

### Via Azure Functions (Flex Consumption)

| Capability                                                   | Area              | Support      | Required tier | Operations | Notes                                                                                                                                                                                                                                                       |
| ------------------------------------------------------------ | ----------------- | ------------ | ------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Compute sizing                                               | Configuration     | Supported    | -             | -          | memory is applied where it fits the plan's instance size; CPU derived from Lambda's delivered compute (the continuous memory/1769 vCPU credit rate, its binding throughput ceiling, not the stepped visible-core count); see the memory-ceiling limit below |
| Environment variables                                        | Configuration     | Supported    | -             | -          | your function's environment variables are set on its workload                                                                                                                                                                                               |
| Ephemeral storage (/tmp)                                     | Configuration     | Partial      | -             | -          | each invoke gets its own instance and its own /tmp (platform-isolated), but Flex Consumption caps instance /tmp near 0.8 GB, so a function that authored more ephemeral storage routes to a container option instead of running here                        |
| Reserved concurrency                                         | Configuration     | Supported    | -             | -          | configured reserved concurrency maps to the plan's maximum instance count                                                                                                                                                                                   |
| Timeout                                                      | Configuration     | Supported    | -             | -          | the authored timeout (Lambda's 3s default when unset) is enforced by the platform at the configured deadline; the adapter returns Lambda's timeout contract                                                                                                 |
| Event source mappings                                        | Event integration | Out of scope | -             | -          | not compiled; the build stops with a clear error rather than silently dropping them                                                                                                                                                                         |
| Asynchronous (Event) invocation                              | Invocation        | Out of scope | -             | -          | the Event invocation type of Invoke is not served; a synchronous RequestResponse Invoke is                                                                                                                                                                  |
| Container-image packaging                                    | Packaging         | Out of scope | -             | -          | Flex Consumption runs code packages, not container images, so a container-image function routes to a container option (Container Apps or the Premium plan) rather than stopping the build                                                                   |
| Layers                                                       | Packaging         | Out of scope | -             | -          | not compiled; the build stops with a clear error                                                                                                                                                                                                            |
| Zip packaging                                                | Packaging         | Supported    | -             | -          | the natural fit here, because Flex Consumption is code-only; the AWS-provided runtime client and the Tensor9 adapter ride in the same code package                                                                                                          |
| Aliases / versions / provisioned concurrency / function URLs | Routing           | Out of scope | -             | -          | not compiled; the build stops with a clear error                                                                                                                                                                                                            |

| Operation                | Area       | Support      | Depth      | Notes                                                                                                                                                                                                               |
| ------------------------ | ---------- | ------------ | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Invoke                   | Invocation | Supported    | Common     | a sync Invoke reaches the function through a translation layer that adapts Azure's HTTP-trigger invocation to the real Lambda runtime, with the callee resolved by function name through the caller's routing layer |
| InvokeWithResponseStream | Invocation | Out of scope | Most usage | response streaming is not served; the synchronous RequestResponse invoke is the served path                                                                                                                         |

#### How it works

On AWS your application calls Lambda through the AWS SDK; those calls are unchanged. At deploy time the compiler builds each function into a **code package**. Flex Consumption is code-only, so a container-image function routes to a container option (Container Apps or the Premium plan) rather than stopping the build. At runtime a translation layer adapts Azure's HTTP-trigger invocation to the real Lambda runtime and returns the supported Lambda response fields and function-error framing. Only synchronous request/response invokes are served.

Flex Consumption runs code packages. Tensor9 includes the routing binary with your handler and the AWS runtime client, and sets `http_concurrency` to one. The platform gives each concurrent invocation its own instance, with separate memory and `/tmp` storage.

Each function can scale to a thousand instances and to zero when idle. The package shares about 4 GB of instance memory with the runtime and has about 0.8 GB of `/tmp` storage. Updating the routing binary requires rebuilding and redeploying the package. Container Apps runs the adapter as a separate process; Premium keeps instances warm to reduce cold-start latency.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJPbiBBenVyZSwgdGhlIGFwcGxpY2F0aW9uJ3MgdW5jaGFuZ2VkIFNESyBpbnZva2UgcmVhY2hlcyBhIFRlbnNvcjkgcm91dGluZyBsYXllciBzaGlwcGVkIGFzIGEgYmluYXJ5IGluc2lkZSB0aGUgZGVwbG95ZWQgY29kZSBwYWNrYWdlIChwYWNrYWdlZCB3aXRoIHRoZSBoYW5kbGVyKSwgd2hpY2ggcmVzb2x2ZXMgYW5kIGZvcndhcmRzIGNhbGxzIGJ5IGZ1bmN0aW9uIG5hbWUgdG8gQXp1cmUgRnVuY3Rpb25zIG9uIHRoZSBGbGV4IENvbnN1bXB0aW9uIHBsYW4gKGNvZGUtb25seSksIHNjYWxpbmcgZnJvbSB6ZXJvIHRvd2FyZCBhIHRob3VzYW5kIGluc3RhbmNlcyBhdCBvbmUgaW52b2tlIHBlciBpbnN0YW5jZSwgZWFjaCBwbGF0Zm9ybS1pc29sYXRlZC4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0ibGstZmxleCIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB4PSI4IiB5PSIzMCIgd2lkdGg9IjgyMCIgaGVpZ2h0PSIxNTAiIHJ4PSIxNiIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjI2IiB5PSI1MiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzA0Nzg1NyI+T04gQVpVUkU8L3RleHQ+CjxyZWN0IHg9IjI4IiB5PSI4MCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjkzIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTIuNXB4Ij5Zb3VyIGFwcDwvdGV4dD4KPHRleHQgeD0iOTMiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDU5NjY5Ij5zYW1lIFNESzwvdGV4dD4KPGxpbmUgeDE9IjE1OCIgeTE9IjExMyIgeDI9IjIyNCIgeTI9IjExMyIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjbGstZmxleCkiLz4KPHRleHQgeD0iMTkxIiB5PSIxMDUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmb250LXNpemU6OC41cHgiPmludm9rZSgpPC90ZXh0Pgo8cmVjdCB4PSIyMjgiIHk9Ijc2IiB3aWR0aD0iMTgyIiBoZWlnaHQ9Ijc0IiByeD0iMTIiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iMzE5IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+cm91dGluZyBsYXllcjwvdGV4dD4KPHRleHQgeD0iMzE5IiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPmluIHRoZSBjb2RlIHBhY2thZ2U8L3RleHQ+CjxsaW5lIHgxPSI0MTAiIHkxPSIxMTMiIHgyPSI0NzYiIHkyPSIxMTMiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2xrLWZsZXgpIi8+Cjx0ZXh0IHg9IjQ0MyIgeT0iMTA1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YjsgZm9udC1zaXplOjguNXB4Ij5yb3V0ZSBieSBuYW1lPC90ZXh0Pgo8cmVjdCB4PSI0ODAiIHk9Ijc2IiB3aWR0aD0iMzIwIiBoZWlnaHQ9Ijc0IiByeD0iMTIiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNjQwIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTJweCI+QXp1cmUgRnVuY3Rpb25zIChGbGV4KTwvdGV4dD4KPHRleHQgeD0iNjQwIiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5zY2FsZXMgMCDihpIgMTAwMCDCtyAxIC8gaW5zdGFuY2U8L3RleHQ+Cjwvc3ZnPg==" alt="On Azure, the application's unchanged SDK invoke reaches a Tensor9 routing layer shipped as a binary inside the deployed code package (packaged with the handler), which resolves and forwards calls by function name to Azure Functions on the Flex Consumption plan (code-only), scaling from zero toward a thousand instances at one invoke per instance, each platform-isolated." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJPbiBBenVyZSwgdGhlIGFwcGxpY2F0aW9uJ3MgdW5jaGFuZ2VkIFNESyBpbnZva2UgcmVhY2hlcyBhIFRlbnNvcjkgcm91dGluZyBsYXllciBzaGlwcGVkIGFzIGEgYmluYXJ5IGluc2lkZSB0aGUgZGVwbG95ZWQgY29kZSBwYWNrYWdlIChwYWNrYWdlZCB3aXRoIHRoZSBoYW5kbGVyKSwgd2hpY2ggcmVzb2x2ZXMgYW5kIGZvcndhcmRzIGNhbGxzIGJ5IGZ1bmN0aW9uIG5hbWUgdG8gQXp1cmUgRnVuY3Rpb25zIG9uIHRoZSBGbGV4IENvbnN1bXB0aW9uIHBsYW4gKGNvZGUtb25seSksIHNjYWxpbmcgZnJvbSB6ZXJvIHRvd2FyZCBhIHRob3VzYW5kIGluc3RhbmNlcyBhdCBvbmUgaW52b2tlIHBlciBpbnN0YW5jZSwgZWFjaCBwbGF0Zm9ybS1pc29sYXRlZC4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0ibGstZmxleCIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB4PSI4IiB5PSIzMCIgd2lkdGg9IjgyMCIgaGVpZ2h0PSIxNTAiIHJ4PSIxNiIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjI2IiB5PSI1MiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5MGRlYzgiPk9OIEFaVVJFPC90ZXh0Pgo8cmVjdCB4PSIyOCIgeT0iODAiIHdpZHRoPSIxMzAiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI5MyIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEyLjVweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjkzIiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjNiI+c2FtZSBTREs8L3RleHQ+CjxsaW5lIHgxPSIxNTgiIHkxPSIxMTMiIHgyPSIyMjQiIHkyPSIxMTMiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2xrLWZsZXgpIi8+Cjx0ZXh0IHg9IjE5MSIgeT0iMTA1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZm9udC1zaXplOjguNXB4Ij5pbnZva2UoKTwvdGV4dD4KPHJlY3QgeD0iMjI4IiB5PSI3NiIgd2lkdGg9IjE4MiIgaGVpZ2h0PSI3NCIgcng9IjEyIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjMxOSIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPnJvdXRpbmcgbGF5ZXI8L3RleHQ+Cjx0ZXh0IHg9IjMxOSIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5pbiB0aGUgY29kZSBwYWNrYWdlPC90ZXh0Pgo8bGluZSB4MT0iNDEwIiB5MT0iMTEzIiB4Mj0iNDc2IiB5Mj0iMTEzIiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNsay1mbGV4KSIvPgo8dGV4dCB4PSI0NDMiIHk9IjEwNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZvbnQtc2l6ZTo4LjVweCI+cm91dGUgYnkgbmFtZTwvdGV4dD4KPHJlY3QgeD0iNDgwIiB5PSI3NiIgd2lkdGg9IjMyMCIgaGVpZ2h0PSI3NCIgcng9IjEyIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjY0MCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEycHgiPkF6dXJlIEZ1bmN0aW9ucyAoRmxleCk8L3RleHQ+Cjx0ZXh0IHg9IjY0MCIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+c2NhbGVzIDAg4oaSIDEwMDAgwrcgMSAvIGluc3RhbmNlPC90ZXh0Pgo8L3N2Zz4=" alt="On Azure, the application's unchanged SDK invoke reaches a Tensor9 routing layer shipped as a binary inside the deployed code package (packaged with the handler), which resolves and forwards calls by function name to Azure Functions on the Flex Consumption plan (code-only), scaling from zero toward a thousand instances at one invoke per instance, each platform-isolated." />
</div>

<p className="t9-caption">Each function ships as one code package (your handler, the AWS-provided runtime client, the adapter, and the routing-layer binary together) on the Flex Consumption plan, which scales per function toward a thousand instances.</p>

#### Operations and migration

**Operations.** Microsoft operates Azure Functions' Flex Consumption scaling and availability; Tensor9 operates the invoke path, and the function code stays the vendor's.

**Migration.** The function is compiled at the build and ships as its code package; there is no data to migrate at cutover.

**Capacity and speed.** Throughput and latency are the plan's own, reported by your monitoring.

#### Limitations

△ Where Lambda and the Flex Consumption plan stay different

* **Code packages only.** Flex Consumption runs code, not container images; a container-image function routes to a container option (Container Apps or the Premium plan) rather than running here.
* **Size ceilings.** About 0.8 GB /tmp and about 4 GB instance memory shared with the runtime bundle; a /tmp-heavy or high-memory function routes to a container option.
* **The routing layer updates only on redeploy.** It ships inside the code package, so a routing-layer update requires rebuilding and redeploying the package; there is no separately-deployed process to update on its own.
* **Synchronous invoke only.** An asynchronous (Event) invoke returns a clear error; layers, event source mappings, aliases, and function URLs stop the build with a clear error rather than dropping silently.

#### Other considerations

Consider request isolation, idle capacity, and how functions call one another.

* **Each concurrent invoke gets its own instance.** Tensor9 sets `http_concurrency` to one and the platform schedules to it, so every invoke has its own memory and `/tmp`; and no in-process state is shared across concurrent calls.
* **Flex Consumption scales to zero when idle:** per-function target-based scaling reaches toward a thousand instances and to zero when idle, so it can handle many concurrent invocations and billing follows use, with a cold start on the first invoke after idle.
* **Callees are resolved by the packaged routing binary:** the routing layer is included as a binary beside the handler and resolves a callee by function name inside the deployed set, so a call to a function outside the stack returns a clear error rather than reaching real AWS.
* **Store durable state in a backing service.** Function storage is temporary. Persist data through the services your handler calls so it survives instance replacement.

#### Function lifecycle on Flex Consumption

A ready Azure Functions deployment supplies the invocation route. Code packaging, instance-size limits and synchronous-only delivery remain unchanged by lifecycle adaptation. See [function lifecycle and invocation](/service-adapters/aws/compute-containers/lambda#function-lifecycle-and-invocation) for Pending/Active state, supported lifecycle operations and invocation outcomes.

### Via Azure Functions (Premium)

| Capability                                                   | Area              | Support      | Required tier | Operations | Notes                                                                                                                                                                                                                                            |
| ------------------------------------------------------------ | ----------------- | ------------ | ------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Compute sizing                                               | Configuration     | Supported    | -             | -          | memory is applied as authored; CPU derived from Lambda's delivered compute (the continuous memory/1769 vCPU credit rate, its binding throughput ceiling, not the stepped visible-core count), mapped onto the Premium instance SKU (EP1/EP2/EP3) |
| Environment variables                                        | Configuration     | Supported    | -             | -          | your function's environment variables are set on its workload                                                                                                                                                                                    |
| Ephemeral storage (/tmp)                                     | Configuration     | Supported    | -             | -          | each invoke gets platform-isolated instance storage; the Premium instance's /tmp is sized in GB (no \~0.8 GB code-plan cap), closer to Lambda's ephemeral storage than the Flex Consumption option                                               |
| Reserved concurrency                                         | Configuration     | Supported    | -             | -          | configured reserved concurrency maps to the plan's maximum instance count (Premium's burst ceiling is 20-100 by SKU)                                                                                                                             |
| Timeout                                                      | Configuration     | Supported    | -             | -          | the authored timeout (Lambda's 3s default when unset) is enforced by the platform at the configured deadline; the adapter returns Lambda's timeout contract                                                                                      |
| Event source mappings                                        | Event integration | Out of scope | -             | -          | not compiled; the build stops with a clear error rather than silently dropping them                                                                                                                                                              |
| Asynchronous (Event) invocation                              | Invocation        | Out of scope | -             | -          | the Event invocation type of Invoke is not served; a synchronous RequestResponse Invoke is                                                                                                                                                       |
| Container-image packaging                                    | Packaging         | Supported    | -             | -          | a container-image function runs directly, because Premium hosts custom containers, so the compiled image (AWS-provided runtime client + Tensor9 adapter + your handler + the routing-layer binary) runs as-is                                    |
| Layers                                                       | Packaging         | Out of scope | -             | -          | not compiled; the build stops with a clear error                                                                                                                                                                                                 |
| Zip packaging                                                | Packaging         | Supported    | -             | -          | a zip-packaged function ships as a code package (the runtime bundle rides in the package, as on the Flex Consumption option)                                                                                                                     |
| Aliases / versions / provisioned concurrency / function URLs | Routing           | Out of scope | -             | -          | not compiled; the build stops with a clear error                                                                                                                                                                                                 |

| Operation                | Area       | Support      | Depth      | Notes                                                                                                                                                                                                               |
| ------------------------ | ---------- | ------------ | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Invoke                   | Invocation | Supported    | Common     | a sync Invoke reaches the function through a translation layer that adapts Azure's HTTP-trigger invocation to the real Lambda runtime, with the callee resolved by function name through the caller's routing layer |
| InvokeWithResponseStream | Invocation | Out of scope | Most usage | response streaming is not served; the synchronous RequestResponse invoke is the served path                                                                                                                         |

#### How it works

On AWS your application calls Lambda through the AWS SDK; those calls are unchanged. At deploy time the compiler prepares each function for the Premium plan, which hosts the compiled container image directly or a code package. At runtime a translation layer adapts Azure's invocation to the real Lambda runtime and returns the supported Lambda response fields and function-error framing; the routing layer is included as a binary inside the deployed artifact, packaged with the handler. Only synchronous request/response invokes are served.

Premium keeps prewarmed instances ready to serve requests, corresponding to Lambda's provisioned concurrency. These instances reduce first-request latency and are billed continuously, including when idle. Each concurrent invocation runs on a separate instance with its own memory and gigabytes of `/tmp` storage, more than the code-only Flex plan provides.

HTTP scaling is limited to 20 to 100 instances, depending on the SKU, compared with a thousand on Flex Consumption. Premium suits functions that need low cold-start latency; Flex Consumption supports more concurrent instances and bills according to use.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJPbiBBenVyZSwgdGhlIGFwcGxpY2F0aW9uJ3MgdW5jaGFuZ2VkIFNESyBpbnZva2UgcmVhY2hlcyBhIFRlbnNvcjkgcm91dGluZyBsYXllciBzaGlwcGVkIGFzIGEgYmluYXJ5IGluc2lkZSB0aGUgZGVwbG95ZWQgYXJ0aWZhY3QgKHBhY2thZ2VkIHdpdGggdGhlIGhhbmRsZXIpLCB3aGljaCByZXNvbHZlcyBhbmQgZm9yd2FyZHMgY2FsbHMgYnkgZnVuY3Rpb24gbmFtZSB0byBBenVyZSBGdW5jdGlvbnMgb24gdGhlIFByZW1pdW0gcGxhbjogYWx3YXlzLXJlYWR5IHByZXdhcm1lZCBpbnN0YW5jZXMgaG9sZGluZyBhIG1pbmltdW0gd2FybSBjYXBhY2l0eSwgaG9zdGluZyBhIGNvbnRhaW5lciBpbWFnZSBvciBhIGNvZGUgcGFja2FnZSwgc2NhbGluZyBIVFRQIHRvIGEgcGVyLVNLVSBjZWlsaW5nIG9mIDIwIHRvIDEwMCBpbnN0YW5jZXMuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9ImxrLXByZW0iIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPjwvZGVmcz4KPHJlY3QgeD0iOCIgeT0iMzAiIHdpZHRoPSI4MjAiIGhlaWdodD0iMTUwIiByeD0iMTYiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSIyNiIgeT0iNTIiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiMwNDc4NTciPk9OIEFaVVJFPC90ZXh0Pgo8cmVjdCB4PSIyOCIgeT0iODAiIHdpZHRoPSIxMzAiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iI2ZmZiIgc3Ryb2tlPSIjZTJlOGYwIiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI5MyIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEyLjVweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjkzIiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA1OTY2OSI+c2FtZSBTREs8L3RleHQ+CjxsaW5lIHgxPSIxNTgiIHkxPSIxMTMiIHgyPSIyMjQiIHkyPSIxMTMiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2xrLXByZW0pIi8+Cjx0ZXh0IHg9IjE5MSIgeT0iMTA1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YjsgZm9udC1zaXplOjguNXB4Ij5pbnZva2UoKTwvdGV4dD4KPHJlY3QgeD0iMjI4IiB5PSI3NiIgd2lkdGg9IjE4MiIgaGVpZ2h0PSI3NCIgcng9IjEyIiBmaWxsPSIjZWNmZGY1IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjMxOSIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NzsgZm9udC1zaXplOjEycHgiPnJvdXRpbmcgbGF5ZXI8L3RleHQ+Cjx0ZXh0IHg9IjMxOSIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3Ij5pbiB0aGUgYXJ0aWZhY3Q8L3RleHQ+CjxsaW5lIHgxPSI0MTAiIHkxPSIxMTMiIHgyPSI0NzYiIHkyPSIxMTMiIHN0cm9rZT0iIzk0YTNiOCIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2xrLXByZW0pIi8+Cjx0ZXh0IHg9IjQ0MyIgeT0iMTA1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YjsgZm9udC1zaXplOjguNXB4Ij5yb3V0ZSBieSBuYW1lPC90ZXh0Pgo8cmVjdCB4PSI0ODAiIHk9Ijc2IiB3aWR0aD0iMzIwIiBoZWlnaHQ9Ijc0IiByeD0iMTIiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNjQwIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTJweCI+QXp1cmUgRnVuY3Rpb25zIChQcmVtaXVtKTwvdGV4dD4KPHRleHQgeD0iNjQwIiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5wcmV3YXJtZWQgwrcgMjAtMTAwIGJ5IFNLVTwvdGV4dD4KPC9zdmc+" alt="On Azure, the application's unchanged SDK invoke reaches a Tensor9 routing layer shipped as a binary inside the deployed artifact (packaged with the handler), which resolves and forwards calls by function name to Azure Functions on the Premium plan: always-ready prewarmed instances holding a minimum warm capacity, hosting a container image or a code package, scaling HTTP to a per-SKU ceiling of 20 to 100 instances." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJPbiBBenVyZSwgdGhlIGFwcGxpY2F0aW9uJ3MgdW5jaGFuZ2VkIFNESyBpbnZva2UgcmVhY2hlcyBhIFRlbnNvcjkgcm91dGluZyBsYXllciBzaGlwcGVkIGFzIGEgYmluYXJ5IGluc2lkZSB0aGUgZGVwbG95ZWQgYXJ0aWZhY3QgKHBhY2thZ2VkIHdpdGggdGhlIGhhbmRsZXIpLCB3aGljaCByZXNvbHZlcyBhbmQgZm9yd2FyZHMgY2FsbHMgYnkgZnVuY3Rpb24gbmFtZSB0byBBenVyZSBGdW5jdGlvbnMgb24gdGhlIFByZW1pdW0gcGxhbjogYWx3YXlzLXJlYWR5IHByZXdhcm1lZCBpbnN0YW5jZXMgaG9sZGluZyBhIG1pbmltdW0gd2FybSBjYXBhY2l0eSwgaG9zdGluZyBhIGNvbnRhaW5lciBpbWFnZSBvciBhIGNvZGUgcGFja2FnZSwgc2NhbGluZyBIVFRQIHRvIGEgcGVyLVNLVSBjZWlsaW5nIG9mIDIwIHRvIDEwMCBpbnN0YW5jZXMuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9ImxrLXByZW0iIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPjwvZGVmcz4KPHJlY3QgeD0iOCIgeT0iMzAiIHdpZHRoPSI4MjAiIGhlaWdodD0iMTUwIiByeD0iMTYiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSIyNiIgeT0iNTIiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTBkZWM4Ij5PTiBBWlVSRTwvdGV4dD4KPHJlY3QgeD0iMjgiIHk9IjgwIiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiMyNjI2MjYiIHN0cm9rZT0iIzNkNGU2NiIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iOTMiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMi41cHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI5MyIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzYiPnNhbWUgU0RLPC90ZXh0Pgo8bGluZSB4MT0iMTU4IiB5MT0iMTEzIiB4Mj0iMjI0IiB5Mj0iMTEzIiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNsay1wcmVtKSIvPgo8dGV4dCB4PSIxOTEiIHk9IjEwNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZvbnQtc2l6ZTo4LjVweCI+aW52b2tlKCk8L3RleHQ+CjxyZWN0IHg9IjIyOCIgeT0iNzYiIHdpZHRoPSIxODIiIGhlaWdodD0iNzQiIHJ4PSIxMiIgZmlsbD0iIzFhMzEyNiIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSIzMTkiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzg7IGZvbnQtc2l6ZToxMnB4Ij5yb3V0aW5nIGxheWVyPC90ZXh0Pgo8dGV4dCB4PSIzMTkiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjOCI+aW4gdGhlIGFydGlmYWN0PC90ZXh0Pgo8bGluZSB4MT0iNDEwIiB5MT0iMTEzIiB4Mj0iNDc2IiB5Mj0iMTEzIiBzdHJva2U9IiM0MTRlNjIiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNsay1wcmVtKSIvPgo8dGV4dCB4PSI0NDMiIHk9IjEwNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZvbnQtc2l6ZTo4LjVweCI+cm91dGUgYnkgbmFtZTwvdGV4dD4KPHJlY3QgeD0iNDgwIiB5PSI3NiIgd2lkdGg9IjMyMCIgaGVpZ2h0PSI3NCIgcng9IjEyIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjY0MCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEycHgiPkF6dXJlIEZ1bmN0aW9ucyAoUHJlbWl1bSk8L3RleHQ+Cjx0ZXh0IHg9IjY0MCIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+cHJld2FybWVkIMK3IDIwLTEwMCBieSBTS1U8L3RleHQ+Cjwvc3ZnPg==" alt="On Azure, the application's unchanged SDK invoke reaches a Tensor9 routing layer shipped as a binary inside the deployed artifact (packaged with the handler), which resolves and forwards calls by function name to Azure Functions on the Premium plan: always-ready prewarmed instances holding a minimum warm capacity, hosting a container image or a code package, scaling HTTP to a per-SKU ceiling of 20 to 100 instances." />
</div>

<p className="t9-caption">Each function runs on the Premium plan, which keeps always-ready prewarmed instances (to reduce cold-start latency) and hosts a container image or a code package.</p>

#### Operations and migration

**Operations.** Microsoft operates Azure Functions' Premium scaling and availability; Tensor9 operates the invoke path, and the function code stays the vendor's.

**Migration.** The function is compiled at the build and ships as its container image or code package; there is no data to migrate at cutover.

**Capacity and speed.** Throughput and latency are the plan's own, reported by your monitoring.

#### Limitations

△ Where Lambda and the Premium plan stay different

* **Warm instances bill continuously.** The always-ready floor is billed whether or not it serves traffic, so Premium costs more than the scale-to-zero options (Flex Consumption, Container Apps).
* **A lower ceiling than Flex Consumption.** HTTP scale-out reaches a 20-to-100-instance ceiling by SKU, well below Flex Consumption's thousand.
* **The routing layer updates only on redeploy.** It ships inside the deployed artifact (a single container or code package, not a separately deployed service), so a routing-layer update requires rebuilding and redeploying.
* **Synchronous invoke only.** An asynchronous (Event) invoke returns a clear error; layers, event source mappings, aliases, and function URLs stop the build with a clear error rather than dropping silently.

#### Other considerations

Consider request isolation, idle capacity, and how functions call one another.

* **Compare cold-start latency and instance limits.** Premium prewarms instances to reduce first-request latency, like Lambda's provisioned concurrency. Flex Consumption supports more concurrent instances.
* **Each concurrent invoke scales onto its own instance:** concurrent invokes spread across separate instances, each with its own memory and a GB-sized `/tmp` closer to Lambda's ephemeral storage than the code-only Flex plan, so no in-process state is shared across concurrent calls.
* **The plan hosts a container image or a code package:** unlike code-only Flex Consumption, Premium runs the compiled container image directly or a code package, so a `/tmp`-heavy or image-based function that Flex would route elsewhere runs here as-is.
* **Store durable state in a backing service.** Function storage is temporary. Persist data through the services your handler calls so it survives instance replacement.

#### Function lifecycle on Premium

The Premium deployment must become ready before invocation; its warm capacity and bundled routing-layer update lifecycle retain the costs and redeployment requirements above. See [function lifecycle and invocation](/service-adapters/aws/compute-containers/lambda#function-lifecycle-and-invocation) for Pending/Active state, supported lifecycle operations and invocation outcomes.

## On OCI

### Via OKE function Deployments

| Capability                                                 | Area          | Support      | Required tier | Operations | Notes                                                                                                                                   |
| ---------------------------------------------------------- | ------------- | ------------ | ------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------- |
| Environment variables                                      | Configuration | Supported    | -             | -          | Configured on the function workload.                                                                                                    |
| Ephemeral storage (/tmp)                                   | Configuration | Out of scope | -             | -          | The container filesystem does not reproduce Lambda's configured /tmp cap.                                                               |
| Function lifecycle                                         | Configuration | Partial      | -             | -          | Supported lifecycle requests reconcile function configuration onto the selected cluster; invocation requires observed Active readiness. |
| Reserved concurrency                                       | Configuration | Out of scope | -             | -          | A Deployment replica count is not a Lambda reserved-concurrency limit.                                                                  |
| Timeout                                                    | Configuration | Partial      | -             | -          | The authored timeout does not provide a per-request Kubernetes process deadline.                                                        |
| Event sources, layers, aliases, versions and function URLs | Integration   | Out of scope | -             | -          | These source integrations are outside the selected Kubernetes function deployment.                                                      |
| Asynchronous (Event) invocation                            | Invocation    | Out of scope | -             | -          | This target serves synchronous calls; it does not provide an asynchronous event queue.                                                  |
| Zip packaging                                              | Packaging     | Supported    | -             | -          | The runtime base and function code are built into a container image.                                                                    |

| Operation                | Area       | Support      | Depth      | Notes                                                                                        |
| ------------------------ | ---------- | ------------ | ---------- | -------------------------------------------------------------------------------------------- |
| Invoke                   | Invocation | Supported    | Common     | Synchronous RequestResponse calls reach the configured function through its cluster Service. |
| InvokeWithResponseStream | Invocation | Out of scope | Most usage | Response streaming is outside this deployment contract.                                      |

#### How it works

Each function runs as an always-on Deployment on OKE, behind a cluster-local Service. A Lambda Invoke wrapper accepts synchronous requests and passes events to the function runtime. A runtime interface client runs the handler; the client alone does not make an arbitrary container expose the Invoke API.

#### Function packaging and lifecycle

Zip functions are built into a container image with their runtime. Container-image functions need the configured Lambda-compatible entrypoint and Invoke wrapper. Publish the image to a registry the cluster can access, configure environment values, and wait for the deployed function to become ready. Supported lifecycle calls record desired configuration and update the selected hosting resources; a pending deployment is not yet an invocation endpoint.

#### Cluster networking and identity

The customer configures the OCI VCN, cluster access and node capacity. Callers must be able to reach the function Service, and the function needs network access to its dependencies. Configure the supported OCI workload identity or another approved credential for native OCI requests. Image-pull credentials and the cluster control-plane identity are separate from the function's runtime permissions. An AWS SDK call through another service adapter uses that adapter's authorization path; native cloud access is configured separately.

#### Execution limits and operations

A Deployment does not supply Lambda's per-invocation sandbox, reserved-concurrency admission or request-driven scale-to-zero behavior. The authored timeout is not a Kubernetes process deadline, and container storage does not reproduce the configured Lambda /tmp quota. Asynchronous Event invocation, response streaming and the listed event integrations remain outside this target. Plan node upgrades and capacity, collect function logs, and verify handler errors as well as successful HTTP calls.

### Via OCI Functions

| Capability                                                   | Area              | Support      | Required tier | Operations | Notes                                                                                                                                                                                                                               |
| ------------------------------------------------------------ | ----------------- | ------------ | ------------- | ---------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Compute sizing                                               | Configuration     | Supported    | -             | -          | memory selects the function's resource tier at build time, snapped up to an OCI tier (e.g. 1769 MiB → 2048); the tier determines CPU; memory ceils to an OCI tier up to 3072 MB; a larger Lambda stops the build with a clear error |
| Environment variables                                        | Configuration     | Supported    | -             | -          | set on the function's workload                                                                                                                                                                                                      |
| Ephemeral storage (/tmp)                                     | Configuration     | Out of scope | -             | -          | the function gets the container filesystem; Lambda's sized /tmp cap is not reproduced on OCI Functions                                                                                                                              |
| Reserved concurrency                                         | Configuration     | Out of scope | -             | -          | configured reserved concurrency is not honored on OCI Functions                                                                                                                                                                     |
| Timeout                                                      | Configuration     | Supported    | -             | -          | the authored timeout applies up to OCI's 300s ceiling (a longer Lambda timeout stops the build with a clear error); enforced by the platform, and the adapter returns Lambda's timeout contract                                     |
| Event source mappings                                        | Event integration | Out of scope | -             | -          | not compiled; the build stops with a clear error rather than silently dropping them                                                                                                                                                 |
| Asynchronous (Event) invocation                              | Invocation        | Out of scope | -             | -          | the Event invocation type of Invoke is not served; a synchronous RequestResponse Invoke is                                                                                                                                          |
| Layers                                                       | Packaging         | Out of scope | -             | -          | not compiled; the build stops with a clear error                                                                                                                                                                                    |
| Zip packaging                                                | Packaging         | Supported    | -             | -          | a zip-packaged function is built into a container image at release: the runtime base plus your code, fronted by the AWS-provided runtime client                                                                                     |
| Aliases / versions / provisioned concurrency / function URLs | Routing           | Out of scope | -             | -          | not compiled; the build stops with a clear error                                                                                                                                                                                    |

| Operation                | Area       | Support      | Depth      | Notes                                                                                                                                                                                                                                                                                                                                                                                                        |
| ------------------------ | ---------- | ------------ | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Invoke                   | Invocation | Supported    | Common     | synchronous RequestResponse resolved by function name at request time; a redeployed callee is picked up automatically. Signing, idle-resume, and a real Lambda handler running through the runtime interface client validated on live OCI (2026-07-10); warm p50 8.5 ms and steady-state cold-start p50 365 ms measured in-region, with image-cached cold-start results distinguished from first image pulls |
| InvokeWithResponseStream | Invocation | Out of scope | Most usage | response streaming is not served; the synchronous RequestResponse invoke is the served path                                                                                                                                                                                                                                                                                                                  |

#### How it works

On AWS your application calls Lambda through the AWS SDK; those calls are unchanged. At deploy time the compiler packages each function for OCI Functions: the function runs a real Lambda handler fronted by a supervisor image that speaks OCI Functions' own invocation contract, so only the image packaging differs from the cluster targets, not the handler. At runtime the adapter serves the synchronous **Invoke** and returns the supported Lambda response fields and function-error framing. Only synchronous request/response invokes are served.

OCI Functions differs by being **managed function hosting**: Oracle's platform owns the invocation lifecycle end to end, reusing warm containers and scaling to zero when idle. Concurrency is enforced by the platform: concurrent requests use separate containers, reusing warm capacity when available, so no request shares process memory with another, Lambda's default isolation, the same isolation as Cloud Run. Container Apps enforces this through the adapter. The adapter resolves a callee by its function name against the platform's own directory at request time, so a redeployed callee is picked up automatically on the next call with no stored address table; requests are signed with the appliance's own OCI identity (resource-principal or API-key signing), so requests need no AWS keys. Because OCI's platform has firmer ceilings than the other clouds, the authored timeout applies up to OCI's 300-second maximum and memory rounds up to an OCI tier, and a function configured above those limits is refused at the build with a clear error rather than running degraded.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJJbiBPQ0kgdGVuYW5jeSwgdGhlIGFwcGxpY2F0aW9uJ3MgdW5jaGFuZ2VkIFNESyBpbnZva2UgcmVhY2hlcyBhIFRlbnNvcjkgYWRhcHRlciBiZXNpZGUgaXQsIHdoaWNoIHJlc29sdmVzIHRoZSBjYWxsZWUgYnkgZnVuY3Rpb24gbmFtZSBhdCBjYWxsIHRpbWUgYW5kIGZvcndhcmRzIHRvIE9DSSBGdW5jdGlvbnMsIGFuIGFwcGxpY2F0aW9uLWFuZC1mdW5jdGlvbiBwYWlyIHdoZXJlIHRoZSBwbGF0Zm9ybSByZXVzZXMgd2FybSBjb250YWluZXJzIGFuZCBzdGFydHMgbW9yZSBmb3IgY29uY3VycmVudCBkZW1hbmQgYW5kIGhvbGRzIG9uZSByZXF1ZXN0IHBlciBjb250YWluZXIuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojMzM0MTU1fTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9ImxrLW9jaSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB4PSI4IiB5PSIzMCIgd2lkdGg9IjgyMCIgaGVpZ2h0PSIxNTAiIHJ4PSIxNiIgZmlsbD0iI2Y4ZmFmYyIgc3Ryb2tlPSIjY2JkNWUxIiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjI2IiB5PSI1MiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6IzA0Nzg1NyI+SU4gT0NJIFRFTkFOQ1k8L3RleHQ+CjxyZWN0IHg9IjI4IiB5PSI4MCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjkzIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTIuNXB4Ij5Zb3VyIGFwcDwvdGV4dD4KPHRleHQgeD0iOTMiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDU5NjY5Ij5zYW1lIFNESzwvdGV4dD4KPGxpbmUgeDE9IjE1OCIgeTE9IjExMyIgeDI9IjIyNCIgeTI9IjExMyIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjbGstb2NpKSIvPgo8dGV4dCB4PSIxOTEiIHk9IjEwNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM2NDc0OGI7IGZvbnQtc2l6ZTo4LjVweCI+aW52b2tlKCk8L3RleHQ+CjxyZWN0IHg9IjIyOCIgeT0iNzYiIHdpZHRoPSIxODIiIGhlaWdodD0iNzQiIHJ4PSIxMiIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSIzMTkiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMnB4Ij5hZGFwdGVyPC90ZXh0Pgo8dGV4dCB4PSIzMTkiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+YmVzaWRlIHlvdXIgYXBwPC90ZXh0Pgo8bGluZSB4MT0iNDEwIiB5MT0iMTEzIiB4Mj0iNDc2IiB5Mj0iMTEzIiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNsay1vY2kpIi8+Cjx0ZXh0IHg9IjQ0MyIgeT0iMTA1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YjsgZm9udC1zaXplOjguNXB4Ij5ieSBuYW1lPC90ZXh0Pgo8cmVjdCB4PSI0ODAiIHk9Ijc2IiB3aWR0aD0iMzIwIiBoZWlnaHQ9Ijc0IiByeD0iMTIiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iNjQwIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTJweCI+T0NJIEZ1bmN0aW9uczwvdGV4dD4KPHRleHQgeD0iNjQwIiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5tYW5hZ2VkIEZhYVMgwrcgMSByZXEgLyBjb250YWluZXI8L3RleHQ+Cjwvc3ZnPg==" alt="In OCI tenancy, the application's unchanged SDK invoke reaches a Tensor9 adapter beside it, which resolves the callee by function name at call time and forwards to OCI Functions, an application-and-function pair where the platform reuses warm containers and starts more for concurrent demand and holds one request per container." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJJbiBPQ0kgdGVuYW5jeSwgdGhlIGFwcGxpY2F0aW9uJ3MgdW5jaGFuZ2VkIFNESyBpbnZva2UgcmVhY2hlcyBhIFRlbnNvcjkgYWRhcHRlciBiZXNpZGUgaXQsIHdoaWNoIHJlc29sdmVzIHRoZSBjYWxsZWUgYnkgZnVuY3Rpb24gbmFtZSBhdCBjYWxsIHRpbWUgYW5kIGZvcndhcmRzIHRvIE9DSSBGdW5jdGlvbnMsIGFuIGFwcGxpY2F0aW9uLWFuZC1mdW5jdGlvbiBwYWlyIHdoZXJlIHRoZSBwbGF0Zm9ybSByZXVzZXMgd2FybSBjb250YWluZXJzIGFuZCBzdGFydHMgbW9yZSBmb3IgY29uY3VycmVudCBkZW1hbmQgYW5kIGhvbGRzIG9uZSByZXF1ZXN0IHBlciBjb250YWluZXIuIj48c3R5bGU+dGV4dHtmb250LWZhbWlseTpJbnRlciwtYXBwbGUtc3lzdGVtLEJsaW5rTWFjU3lzdGVtRm9udCwnU2Vnb2UgVUknLFJvYm90bywnSGVsdmV0aWNhIE5ldWUnLEFyaWFsLHNhbnMtc2VyaWY7ZmlsbDojY2JkNWUxfTwvc3R5bGU+CjxkZWZzPjxtYXJrZXIgaWQ9ImxrLW9jaSIgdmlld0JveD0iMCAwIDEwIDEwIiByZWZYPSI4IiByZWZZPSI1IiBtYXJrZXJXaWR0aD0iNyIgbWFya2VySGVpZ2h0PSI3IiBvcmllbnQ9ImF1dG8tc3RhcnQtcmV2ZXJzZSI+PHBhdGggZD0iTTAsMCBMMTAsNSBMMCwxMCB6IiBmaWxsPSIjOTRhM2I4Ii8+PC9tYXJrZXI+PC9kZWZzPgo8cmVjdCB4PSI4IiB5PSIzMCIgd2lkdGg9IjgyMCIgaGVpZ2h0PSIxNTAiIHJ4PSIxNiIgZmlsbD0iIzFhMjYzMSIgc3Ryb2tlPSIjM2Q0ZjY2IiBzdHJva2Utd2lkdGg9IjEuNCIgc3Ryb2tlLWRhc2hhcnJheT0iNSA1Ii8+Cjx0ZXh0IHg9IjI2IiB5PSI1MiIgc3R5bGU9ImZvbnQ6IDcwMCAxMHB4IEludGVyLCBzYW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMS4zcHg7IGZpbGw6ICM5NGEzYjg7IGZpbGw6ICM5MGRlYzgiPklOIE9DSSBURU5BTkNZPC90ZXh0Pgo8cmVjdCB4PSIyOCIgeT0iODAiIHdpZHRoPSIxMzAiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI5MyIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEyLjVweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjkzIiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjNiI+c2FtZSBTREs8L3RleHQ+CjxsaW5lIHgxPSIxNTgiIHkxPSIxMTMiIHgyPSIyMjQiIHkyPSIxMTMiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2xrLW9jaSkiLz4KPHRleHQgeD0iMTkxIiB5PSIxMDUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmb250LXNpemU6OC41cHgiPmludm9rZSgpPC90ZXh0Pgo8cmVjdCB4PSIyMjgiIHk9Ijc2IiB3aWR0aD0iMTgyIiBoZWlnaHQ9Ijc0IiByeD0iMTIiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iMzE5IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTJweCI+YWRhcHRlcjwvdGV4dD4KPHRleHQgeD0iMzE5IiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPmJlc2lkZSB5b3VyIGFwcDwvdGV4dD4KPGxpbmUgeDE9IjQxMCIgeTE9IjExMyIgeDI9IjQ3NiIgeTI9IjExMyIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjbGstb2NpKSIvPgo8dGV4dCB4PSI0NDMiIHk9IjEwNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZvbnQtc2l6ZTo4LjVweCI+YnkgbmFtZTwvdGV4dD4KPHJlY3QgeD0iNDgwIiB5PSI3NiIgd2lkdGg9IjMyMCIgaGVpZ2h0PSI3NCIgcng9IjEyIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjY0MCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEycHgiPk9DSSBGdW5jdGlvbnM8L3RleHQ+Cjx0ZXh0IHg9IjY0MCIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+bWFuYWdlZCBGYWFTIMK3IDEgcmVxIC8gY29udGFpbmVyPC90ZXh0Pgo8L3N2Zz4=" alt="In OCI tenancy, the application's unchanged SDK invoke reaches a Tensor9 adapter beside it, which resolves the callee by function name at call time and forwards to OCI Functions, an application-and-function pair where the platform reuses warm containers and starts more for concurrent demand and holds one request per container." />
</div>

<p className="t9-caption">Each function becomes an application-and-function pair on OCI Functions, Oracle's managed FaaS; the platform reuses warm containers and starts more for concurrent demand and holds one request per container.</p>

#### Operations and migration

**Operations.** Oracle operates OCI Functions' scaling and availability; Tensor9 operates the invoke path, and the function code stays the vendor's.

**Migration.** The function is compiled at the build and ships as its container image; there is no data to migrate at cutover.

**Capacity and speed.** Throughput and latency are OCI Functions' own, reported by your monitoring.

#### Limitations

△ Where Lambda and OCI Functions stay different

* **Timeout and memory meet OCI ceilings.** The configured timeout applies up to OCI's 300-second maximum and memory rounds up to an OCI tier; a Lambda function above those limits is rejected at the build with a clear error.
* **Lambda's /tmp cap is not restored.** Ephemeral /tmp is the container's own filesystem; Lambda's sized ephemeral-storage limit is not reproduced.
* **Reserved concurrency is not honored.** The platform manages scaling per request, so an configured reserved-concurrency setting is not applied.
* **Synchronous invoke only.** An asynchronous (Event) invoke returns a clear error; layers, event source mappings, aliases, and function URLs stop the build with a clear error rather than dropping silently.

#### Other considerations

Consider request isolation, idle capacity, and how functions call one another.

* **Concurrency is enforced by the platform.** Oracle assigns concurrent calls to separate container instances, so no invoke shares process memory with another (Lambda's default isolation), and a handler that leaned on shared in-process state across concurrent calls does not get it here.
* **Idle scales to zero; the first call is a cold start:** the platform owns the invocation lifecycle end to end, reusing warm containers and scaling to zero when idle, so billing follows use and a cold call pays a container start.
* **Callees are resolved at request time:** the adapter looks a callee up by function name against the platform's own directory on each call, so a redeployed callee is picked up automatically with no stored address table, and requests are signed with the appliance's OCI identity rather than AWS keys.
* **Store durable state in a backing service.** Function storage is temporary. Persist data through the services your handler calls so it survives instance replacement.

#### Function lifecycle on OCI Functions

OCI function creation and activation precede invocation on the observed function route. The invocation measurements above do not measure creation or update time; OCI execution and packaging limits remain as documented. See [function lifecycle and invocation](/service-adapters/aws/compute-containers/lambda#function-lifecycle-and-invocation) for Pending/Active state, supported lifecycle operations and invocation outcomes.

## On Private Kubernetes

### Via Kubernetes Cluster

| Capability                                                   | Area              | Support      | Required tier | Operations | Notes                                                                                                                                                                                                                                                                           |
| ------------------------------------------------------------ | ----------------- | ------------ | ------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Compute sizing                                               | Configuration     | Supported    | -             | -          | memory is applied as authored; CPU derived from Lambda's delivered compute (the continuous memory/1769 vCPU credit rate, its binding throughput ceiling, not the stepped visible-core count), emitted as a CFS CPU limit                                                        |
| Environment variables                                        | Configuration     | Supported    | -             | -          | set on the function's workload                                                                                                                                                                                                                                                  |
| Ephemeral storage (/tmp)                                     | Configuration     | Out of scope | -             | -          | the function gets the container filesystem; Lambda's sized /tmp cap is not reproduced on Kubernetes                                                                                                                                                                             |
| Reserved concurrency                                         | Configuration     | Out of scope | -             | -          | configured reserved concurrency is not honored on Kubernetes                                                                                                                                                                                                                    |
| Timeout                                                      | Configuration     | Partial      | -             | -          | Kubernetes has no per-request execution deadline. The authored value is passed through, but the connection backstop above Lambda's 900s maximum only limits the caller's response wait. It does not terminate the remote handler; the handler can continue after the wait ends. |
| Event source mappings                                        | Event integration | Out of scope | -             | -          | not compiled; the build stops with a clear error rather than silently dropping them                                                                                                                                                                                             |
| Asynchronous (Event) invocation                              | Invocation        | Out of scope | -             | -          | the Event invocation type of Invoke is not served; a synchronous RequestResponse Invoke is                                                                                                                                                                                      |
| Layers                                                       | Packaging         | Out of scope | -             | -          | not compiled; the build stops with a clear error                                                                                                                                                                                                                                |
| Zip packaging                                                | Packaging         | Supported    | -             | -          | a zip-packaged function is built into a container image at release: runtime base plus your code, fronted by the AWS-provided runtime client                                                                                                                                     |
| Aliases / versions / provisioned concurrency / function URLs | Routing           | Out of scope | -             | -          | not compiled; the build stops with a clear error                                                                                                                                                                                                                                |

| Operation                | Area       | Support      | Depth      | Notes                                                                                                     |
| ------------------------ | ---------- | ------------ | ---------- | --------------------------------------------------------------------------------------------------------- |
| Invoke                   | Invocation | Supported    | Common     | routed in-cluster by function name; the function serves the real Invoke API (synchronous RequestResponse) |
| InvokeWithResponseStream | Invocation | Out of scope | Most usage | response streaming is not served; the synchronous RequestResponse invoke is the served path               |

#### How it works

On AWS your application calls Lambda through the AWS SDK; those calls are unchanged. At deploy time the compiler turns each function into a container image in the customer's own registry: a container-image function keeps its handler code, with deployment packaging supplying the Invoke frontend around the runtime, and a zip-packaged function is built into a container image at release. At runtime the **service adapter** serves only the synchronous **Invoke** API and forwards each call to the deployed function, returning supported Lambda response fields: a handler that returns and one that throws use the supported response and function-error framing. Only synchronous request/response invokes are served.

Each function runs as an **always-on Kubernetes Deployment** with one warm replica. It stays running when idle and can handle concurrent invocations in the same pod, so the handler must support concurrent execution. Scaling uses the target cluster's autoscaling.

The adapter derives the function's cluster address from its name, without a lookup table. Kubernetes does not enforce Lambda's request timeout, reserved concurrency, or configured `/tmp` capacity. The running replica avoids starting a container for each incoming request, but consumes cluster capacity while idle.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJJbiB0aGUgdGFyZ2V0IGNsdXN0ZXIsIHRoZSBhcHBsaWNhdGlvbidzIHVuY2hhbmdlZCBTREsgaW52b2tlIHJlYWNoZXMgYSBUZW5zb3I5IGFkYXB0ZXIgYmVzaWRlIGl0LCB3aGljaCBmb3J3YXJkcyB0aGUgY2FsbCBieSBmdW5jdGlvbiBuYW1lIHRvIHRoZSBjYWxsZWUgcnVubmluZyBhcyBhbiBhbHdheXMtb24gS3ViZXJuZXRlcyBEZXBsb3ltZW50IChvbmUgd2FybSByZXBsaWNhLCBubyBzY2FsZS10by16ZXJvKSB0aGF0IHNlcnZlcyB0aGUgcmVhbCBJbnZva2UgQVBJIG9uIHBvcnQgODA4MC4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0ibGstazhzIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj48L2RlZnM+CjxyZWN0IHg9IjgiIHk9IjMwIiB3aWR0aD0iODIwIiBoZWlnaHQ9IjE1MCIgcng9IjE2IiBmaWxsPSIjZjhmYWZjIiBzdHJva2U9IiNjYmQ1ZTEiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMjYiIHk9IjUyIiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDojMDQ3ODU3Ij5JTiBUSEUgVEFSR0VUIENMVVNURVI8L3RleHQ+CjxyZWN0IHg9IjI4IiB5PSI4MCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjkzIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMGYxNzJhOyBmb250LXNpemU6MTIuNXB4Ij5Zb3VyIGFwcDwvdGV4dD4KPHRleHQgeD0iOTMiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDU5NjY5Ij5zYW1lIFNESzwvdGV4dD4KPGxpbmUgeDE9IjE1OCIgeTE9IjExMyIgeDI9IjIyNCIgeTI9IjExMyIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjbGstazhzKSIvPgo8dGV4dCB4PSIxOTEiIHk9IjEwNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICM2NDc0OGI7IGZvbnQtc2l6ZTo4LjVweCI+aW52b2tlKCk8L3RleHQ+CjxyZWN0IHg9IjIyOCIgeT0iNzYiIHdpZHRoPSIxODIiIGhlaWdodD0iNzQiIHJ4PSIxMiIgZmlsbD0iI2VjZmRmNSIgc3Ryb2tlPSIjMDU5NjY5IiBzdHJva2Utd2lkdGg9IjEuNyIvPgo8dGV4dCB4PSIzMTkiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDcwMCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTc7IGZvbnQtc2l6ZToxMnB4Ij5hZGFwdGVyPC90ZXh0Pgo8dGV4dCB4PSIzMTkiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzA0Nzg1NyI+YmVzaWRlIHlvdXIgYXBwPC90ZXh0Pgo8bGluZSB4MT0iNDEwIiB5MT0iMTEzIiB4Mj0iNDc2IiB5Mj0iMTEzIiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNsay1rOHMpIi8+Cjx0ZXh0IHg9IjQ0MyIgeT0iMTA1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YjsgZm9udC1zaXplOjguNXB4Ij46ODA4MDwvdGV4dD4KPHJlY3QgeD0iNDgwIiB5PSI3NiIgd2lkdGg9IjMyMCIgaGVpZ2h0PSI3NCIgcng9IjEyIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjY0MCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEycHgiPkt1YmVybmV0ZXMgRGVwbG95bWVudDwvdGV4dD4KPHRleHQgeD0iNjQwIiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5hbHdheXMtb24gwrcgMSB3YXJtIHJlcGxpY2E8L3RleHQ+Cjwvc3ZnPg==" alt="In the target cluster, the application's unchanged SDK invoke reaches a Tensor9 adapter beside it, which forwards the call by function name to the callee running as an always-on Kubernetes Deployment (one warm replica, no scale-to-zero) that serves the real Invoke API on port 8080." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJJbiB0aGUgdGFyZ2V0IGNsdXN0ZXIsIHRoZSBhcHBsaWNhdGlvbidzIHVuY2hhbmdlZCBTREsgaW52b2tlIHJlYWNoZXMgYSBUZW5zb3I5IGFkYXB0ZXIgYmVzaWRlIGl0LCB3aGljaCBmb3J3YXJkcyB0aGUgY2FsbCBieSBmdW5jdGlvbiBuYW1lIHRvIHRoZSBjYWxsZWUgcnVubmluZyBhcyBhbiBhbHdheXMtb24gS3ViZXJuZXRlcyBEZXBsb3ltZW50IChvbmUgd2FybSByZXBsaWNhLCBubyBzY2FsZS10by16ZXJvKSB0aGF0IHNlcnZlcyB0aGUgcmVhbCBJbnZva2UgQVBJIG9uIHBvcnQgODA4MC4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0ibGstazhzIiB2aWV3Qm94PSIwIDAgMTAgMTAiIHJlZlg9IjgiIHJlZlk9IjUiIG1hcmtlcldpZHRoPSI3IiBtYXJrZXJIZWlnaHQ9IjciIG9yaWVudD0iYXV0by1zdGFydC1yZXZlcnNlIj48cGF0aCBkPSJNMCwwIEwxMCw1IEwwLDEwIHoiIGZpbGw9IiM5NGEzYjgiLz48L21hcmtlcj48L2RlZnM+CjxyZWN0IHg9IjgiIHk9IjMwIiB3aWR0aD0iODIwIiBoZWlnaHQ9IjE1MCIgcng9IjE2IiBmaWxsPSIjMWEyNjMxIiBzdHJva2U9IiMzZDRmNjYiIHN0cm9rZS13aWR0aD0iMS40IiBzdHJva2UtZGFzaGFycmF5PSI1IDUiLz4KPHRleHQgeD0iMjYiIHk9IjUyIiBzdHlsZT0iZm9udDogNzAwIDEwcHggSW50ZXIsIHNhbnMtc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxLjNweDsgZmlsbDogIzk0YTNiODsgZmlsbDogIzkwZGVjOCI+SU4gVEhFIFRBUkdFVCBDTFVTVEVSPC90ZXh0Pgo8cmVjdCB4PSIyOCIgeT0iODAiIHdpZHRoPSIxMzAiIGhlaWdodD0iNjYiIHJ4PSIxMSIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI5MyIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2VkODsgZm9udC1zaXplOjEyLjVweCI+WW91ciBhcHA8L3RleHQ+Cjx0ZXh0IHg9IjkzIiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2MDAgMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjNiI+c2FtZSBTREs8L3RleHQ+CjxsaW5lIHgxPSIxNTgiIHkxPSIxMTMiIHgyPSIyMjQiIHkyPSIxMTMiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2xrLWs4cykiLz4KPHRleHQgeD0iMTkxIiB5PSIxMDUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjYzljZmQ4OyBmb250LXNpemU6OC41cHgiPmludm9rZSgpPC90ZXh0Pgo8cmVjdCB4PSIyMjgiIHk9Ijc2IiB3aWR0aD0iMTgyIiBoZWlnaHQ9Ijc0IiByeD0iMTIiIGZpbGw9IiMxYTMxMjYiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iMzE5IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4OyBmb250LXNpemU6MTJweCI+YWRhcHRlcjwvdGV4dD4KPHRleHQgeD0iMzE5IiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICM5MGRlYzgiPmJlc2lkZSB5b3VyIGFwcDwvdGV4dD4KPGxpbmUgeDE9IjQxMCIgeTE9IjExMyIgeDI9IjQ3NiIgeTI9IjExMyIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjbGstazhzKSIvPgo8dGV4dCB4PSI0NDMiIHk9IjEwNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZvbnQtc2l6ZTo4LjVweCI+OjgwODA8L3RleHQ+CjxyZWN0IHg9IjQ4MCIgeT0iNzYiIHdpZHRoPSIzMjAiIGhlaWdodD0iNzQiIHJ4PSIxMiIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI2NDAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMnB4Ij5LdWJlcm5ldGVzIERlcGxveW1lbnQ8L3RleHQ+Cjx0ZXh0IHg9IjY0MCIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+YWx3YXlzLW9uIMK3IDEgd2FybSByZXBsaWNhPC90ZXh0Pgo8L3N2Zz4=" alt="In the target cluster, the application's unchanged SDK invoke reaches a Tensor9 adapter beside it, which forwards the call by function name to the callee running as an always-on Kubernetes Deployment (one warm replica, no scale-to-zero) that serves the real Invoke API on port 8080." />
</div>

<p className="t9-caption">Each function runs as its own always-on Deployment; the adapter serves the synchronous invoke and returns the supported Lambda response fields and function-error framing.</p>

#### Operations and migration

**Operations.** Tensor9 runs each function as a cluster workload and operates the invoke path; the nodes and capacity it runs on are the customer's, and the function code stays the vendor's.

**Migration.** The function is compiled at the build and ships as its container image; there is no data to migrate at cutover.

**Capacity and speed.** The invoke's latency and throughput are the cluster's own, reported by your monitoring, not anything measured here.

#### Limitations

△ Where Lambda and an always-on Deployment stay different

* **No per-request deadline.** Kubernetes does not enforce the configured Lambda execution deadline. The connection timeout limits the caller's response wait; it does not terminate the remote handler, which can continue after that wait ends.
* **Lambda's /tmp cap is not restored.** Ephemeral /tmp is the container's own filesystem; Lambda's sized ephemeral-storage limit is not reproduced.
* **Reserved concurrency is not honored.** An always-on replica has no per-request admission point, so configured reserved concurrency is not honored.
* **Synchronous invoke only.** An asynchronous (Event) invoke returns a clear error; layers, event source mappings, aliases, and function URLs stop the build with a clear error rather than dropping silently.

#### Other considerations

Consider request isolation, idle capacity, and how functions call one another.

* **The warm replica consumes capacity while idle:** each function runs as one warm replica that stays up whether or not an invoke arrives, so there is no start-up latency and no scale-to-zero; cost comes from a continuously-running pod sized by the cluster autoscaling rather than pay-per-invoke.
* **Concurrent invokes share the always-on replica:** unlike the FaaS targets there is no per-request admission point, so invokes run together in the one pod and the handler must tolerate concurrent execution; you scale it with the cluster autoscaling rather than per invoke.
* **Function names determine their addresses:** the adapter composes the callee's in-cluster address straight from the function name with no lookup table, so a redeployed callee in the same stack is reached without a re-apply while a call outside the stack returns a clear error rather than reaching real AWS.
* **Store durable state in a backing service.** Function storage is temporary. Persist data through the services your handler calls so it survives instance replacement.

#### Function lifecycle on Kubernetes

The function reconciles to an always-on Deployment on your cluster. Readiness does not establish a handler result or restore the absent execution deadline, reserved concurrency or sized /tmp cap. See [function lifecycle and invocation](/service-adapters/aws/compute-containers/lambda#function-lifecycle-and-invocation) for Pending/Active state, supported lifecycle operations and invocation outcomes.

### Via Knative Service

| Capability                                                   | Area              | Support      | Required tier | Operations | Notes                                                                                                                                                                                                                    |
| ------------------------------------------------------------ | ----------------- | ------------ | ------------- | ---------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Compute sizing                                               | Configuration     | Supported    | -             | -          | memory is applied as authored; CPU derived from Lambda's delivered compute (the continuous memory/1769 vCPU credit rate, its binding throughput ceiling, not the stepped visible-core count), emitted as a CFS CPU limit |
| Environment variables                                        | Configuration     | Supported    | -             | -          | set on the function's workload                                                                                                                                                                                           |
| Ephemeral storage (/tmp)                                     | Configuration     | Out of scope | -             | -          | the function gets the container filesystem; Lambda's sized /tmp cap is not reproduced on Knative                                                                                                                         |
| Reserved concurrency                                         | Configuration     | Out of scope | -             | -          | configured reserved concurrency is not honored on Knative                                                                                                                                                                |
| Timeout                                                      | Configuration     | Partial      | -             | -          | the Knative revision default (300s) limits the HTTP response wait, not the authored Lambda execution timeout; the handler can continue after a response timeout                                                          |
| Event source mappings                                        | Event integration | Out of scope | -             | -          | not compiled; the build stops with a clear error rather than silently dropping them                                                                                                                                      |
| Asynchronous (Event) invocation                              | Invocation        | Out of scope | -             | -          | the Event invocation type of Invoke is not served; a synchronous RequestResponse Invoke is                                                                                                                               |
| Layers                                                       | Packaging         | Out of scope | -             | -          | not compiled; the build stops with a clear error                                                                                                                                                                         |
| Zip packaging                                                | Packaging         | Supported    | -             | -          | a zip-packaged function is built into a container image at release: runtime base plus your code, fronted by the AWS-provided runtime client                                                                              |
| Aliases / versions / provisioned concurrency / function URLs | Routing           | Out of scope | -             | -          | not compiled; the build stops with a clear error                                                                                                                                                                         |

| Operation                | Area       | Support      | Depth      | Notes                                                                                                     |
| ------------------------ | ---------- | ------------ | ---------- | --------------------------------------------------------------------------------------------------------- |
| Invoke                   | Invocation | Supported    | Common     | routed in-cluster by function name; the function serves the real Invoke API (synchronous RequestResponse) |
| InvokeWithResponseStream | Invocation | Out of scope | Most usage | response streaming is not served; the synchronous RequestResponse invoke is the served path               |

#### How it works

On AWS your application calls Lambda through the AWS SDK; those calls are unchanged. At deploy time the compiler turns each function into a container image in the customer's own registry: a container-image function uses the configured Lambda-compatible entrypoint, and a zip-packaged function is built into a container image at release. The AWS runtime client runs the handler; an HTTP Invoke wrapper delivers requests to that runtime. At runtime the **adapter** serves only the synchronous **Invoke** API and forwards each call to the deployed function, returning the supported Lambda response fields and function-error framing. Only synchronous request/response invokes are served.

Knative differs from the always-on Kubernetes Deployment by being **request-driven**: the platform scales the service up and down with load. By default it keeps one replica warm as a guard against cold starts and caps scale-out at a bounded ceiling (ten replicas by default, never unbounded). When a scaled-down revision is cold, the activator buffers the invoke while a new pod starts, so a cold call is delayed rather than dropped. Every function pod is restricted by a network policy: traffic in only from the Knative data plane and its own namespace, and no internet egress, so a function cannot quietly call back to real AWS. This option sits between the always-on Deployment and the managed function services (OCI Functions, Azure Functions): Tensor9 sets the replica limits (the minimum warm capacity and the ceiling) rather than a cloud provider. Knative's revision-default deadline limits the HTTP response wait, not Lambda's configured execution time. A timed-out response does not establish termination of the remote handler.

<div className="t9-diagram-scroll" role="region" aria-label="Scrollable diagram" tabIndex={0}>
  <img className="t9-diagram-light" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJJbiB0aGUgdGFyZ2V0IGNsdXN0ZXIsIHRoZSBhcHBsaWNhdGlvbidzIHVuY2hhbmdlZCBTREsgaW52b2tlIHJlYWNoZXMgYSBUZW5zb3I5IGFkYXB0ZXIgYmVzaWRlIGl0LCB3aGljaCBmb3J3YXJkcyB0aGUgY2FsbCBieSBmdW5jdGlvbiBuYW1lIHRvIHRoZSBjYWxsZWUgcnVubmluZyBhcyBhIGNsdXN0ZXItbG9jYWwgS25hdGl2ZSBTZXJ2aWNlIChhIG1pbmltdW0gd2FybSBjYXBhY2l0eSBvZiBvbmUgcmVwbGljYSBzY2FsaW5nIHVwIHRvIGEgYm91bmRlZCBjZWlsaW5nLCByZXF1ZXN0LWRyaXZlbiBhbmQgYmxvY2tlZCBmcm9tIHRoZSBpbnRlcm5ldCBieSBuZXR3b3JrIHBvbGljeSkgc2VydmluZyB0aGUgcmVhbCBJbnZva2UgQVBJIG9uIHBvcnQgODA4MC4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiMzMzQxNTV9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0ibGsta24iIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPjwvZGVmcz4KPHJlY3QgeD0iOCIgeT0iMzAiIHdpZHRoPSI4MjAiIGhlaWdodD0iMTUwIiByeD0iMTYiIGZpbGw9IiNmOGZhZmMiIHN0cm9rZT0iI2NiZDVlMSIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSIyNiIgeT0iNTIiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiMwNDc4NTciPklOIFRIRSBUQVJHRVQgQ0xVU1RFUjwvdGV4dD4KPHJlY3QgeD0iMjgiIHk9IjgwIiB3aWR0aD0iMTMwIiBoZWlnaHQ9IjY2IiByeD0iMTEiIGZpbGw9IiNmZmYiIHN0cm9rZT0iI2UyZThmMCIgc3Ryb2tlLXdpZHRoPSIxLjUiLz4KPHRleHQgeD0iOTMiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwZjE3MmE7IGZvbnQtc2l6ZToxMi41cHgiPllvdXIgYXBwPC90ZXh0Pgo8dGV4dCB4PSI5MyIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjAwIDExcHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNTk2NjkiPnNhbWUgU0RLPC90ZXh0Pgo8bGluZSB4MT0iMTU4IiB5MT0iMTEzIiB4Mj0iMjI0IiB5Mj0iMTEzIiBzdHJva2U9IiM5NGEzYjgiIHN0cm9rZS13aWR0aD0iMiIgbWFya2VyLWVuZD0idXJsKCNsay1rbikiLz4KPHRleHQgeD0iMTkxIiB5PSIxMDUiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMHB4ICdTRiBNb25vJywgdWktbW9ub3NwYWNlLCAnSmV0QnJhaW5zIE1vbm8nLCBNZW5sbywgbW9ub3NwYWNlOyBmaWxsOiAjNjQ3NDhiOyBmb250LXNpemU6OC41cHgiPmludm9rZSgpPC90ZXh0Pgo8cmVjdCB4PSIyMjgiIHk9Ijc2IiB3aWR0aD0iMTgyIiBoZWlnaHQ9Ijc0IiByeD0iMTIiIGZpbGw9IiNlY2ZkZjUiIHN0cm9rZT0iIzA1OTY2OSIgc3Ryb2tlLXdpZHRoPSIxLjciLz4KPHRleHQgeD0iMzE5IiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA3MDAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjMDQ3ODU3OyBmb250LXNpemU6MTJweCI+YWRhcHRlcjwvdGV4dD4KPHRleHQgeD0iMzE5IiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMC41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICMwNDc4NTciPmJlc2lkZSB5b3VyIGFwcDwvdGV4dD4KPGxpbmUgeDE9IjQxMCIgeTE9IjExMyIgeDI9IjQ3NiIgeTI9IjExMyIgc3Ryb2tlPSIjOTRhM2I4IiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjbGsta24pIi8+Cjx0ZXh0IHg9IjQ0MyIgeT0iMTA1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogIzY0NzQ4YjsgZm9udC1zaXplOjguNXB4Ij46ODA4MDwvdGV4dD4KPHJlY3QgeD0iNDgwIiB5PSI3NiIgd2lkdGg9IjMyMCIgaGVpZ2h0PSI3NCIgcng9IjEyIiBmaWxsPSIjZmZmIiBzdHJva2U9IiNlMmU4ZjAiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjY0MCIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNjUwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzBmMTcyYTsgZm9udC1zaXplOjEycHgiPktuYXRpdmUgU2VydmljZTwvdGV4dD4KPHRleHQgeD0iNjQwIiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjNjQ3NDhiIj5yZXF1ZXN0LWRyaXZlbiDCtyAxLTEwIHJlcGxpY2FzPC90ZXh0Pgo8L3N2Zz4=" alt="In the target cluster, the application's unchanged SDK invoke reaches a Tensor9 adapter beside it, which forwards the call by function name to the callee running as a cluster-local Knative Service (a minimum warm capacity of one replica scaling up to a bounded ceiling, request-driven and blocked from the internet by network policy) serving the real Invoke API on port 8080." />

  <img className="t9-diagram-dark" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4MzYiIGhlaWdodD0iMjAwIiB2aWV3Qm94PSIwIDAgODM2IDIwMCIgcm9sZT0iaW1nIiBhcmlhLWxhYmVsPSJJbiB0aGUgdGFyZ2V0IGNsdXN0ZXIsIHRoZSBhcHBsaWNhdGlvbidzIHVuY2hhbmdlZCBTREsgaW52b2tlIHJlYWNoZXMgYSBUZW5zb3I5IGFkYXB0ZXIgYmVzaWRlIGl0LCB3aGljaCBmb3J3YXJkcyB0aGUgY2FsbCBieSBmdW5jdGlvbiBuYW1lIHRvIHRoZSBjYWxsZWUgcnVubmluZyBhcyBhIGNsdXN0ZXItbG9jYWwgS25hdGl2ZSBTZXJ2aWNlIChhIG1pbmltdW0gd2FybSBjYXBhY2l0eSBvZiBvbmUgcmVwbGljYSBzY2FsaW5nIHVwIHRvIGEgYm91bmRlZCBjZWlsaW5nLCByZXF1ZXN0LWRyaXZlbiBhbmQgYmxvY2tlZCBmcm9tIHRoZSBpbnRlcm5ldCBieSBuZXR3b3JrIHBvbGljeSkgc2VydmluZyB0aGUgcmVhbCBJbnZva2UgQVBJIG9uIHBvcnQgODA4MC4iPjxzdHlsZT50ZXh0e2ZvbnQtZmFtaWx5OkludGVyLC1hcHBsZS1zeXN0ZW0sQmxpbmtNYWNTeXN0ZW1Gb250LCdTZWdvZSBVSScsUm9ib3RvLCdIZWx2ZXRpY2EgTmV1ZScsQXJpYWwsc2Fucy1zZXJpZjtmaWxsOiNjYmQ1ZTF9PC9zdHlsZT4KPGRlZnM+PG1hcmtlciBpZD0ibGsta24iIHZpZXdCb3g9IjAgMCAxMCAxMCIgcmVmWD0iOCIgcmVmWT0iNSIgbWFya2VyV2lkdGg9IjciIG1hcmtlckhlaWdodD0iNyIgb3JpZW50PSJhdXRvLXN0YXJ0LXJldmVyc2UiPjxwYXRoIGQ9Ik0wLDAgTDEwLDUgTDAsMTAgeiIgZmlsbD0iIzk0YTNiOCIvPjwvbWFya2VyPjwvZGVmcz4KPHJlY3QgeD0iOCIgeT0iMzAiIHdpZHRoPSI4MjAiIGhlaWdodD0iMTUwIiByeD0iMTYiIGZpbGw9IiMxYTI2MzEiIHN0cm9rZT0iIzNkNGY2NiIgc3Ryb2tlLXdpZHRoPSIxLjQiIHN0cm9rZS1kYXNoYXJyYXk9IjUgNSIvPgo8dGV4dCB4PSIyNiIgeT0iNTIiIHN0eWxlPSJmb250OiA3MDAgMTBweCBJbnRlciwgc2Fucy1zZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDEuM3B4OyBmaWxsOiAjOTRhM2I4OyBmaWxsOiAjOTBkZWM4Ij5JTiBUSEUgVEFSR0VUIENMVVNURVI8L3RleHQ+CjxyZWN0IHg9IjI4IiB5PSI4MCIgd2lkdGg9IjEzMCIgaGVpZ2h0PSI2NiIgcng9IjExIiBmaWxsPSIjMjYyNjI2IiBzdHJva2U9IiMzZDRlNjYiIHN0cm9rZS13aWR0aD0iMS41Ii8+Cjx0ZXh0IHg9IjkzIiB5PSIxMTAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIHN0eWxlPSJmb250OiA2NTAgMTMuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjYzljZWQ4OyBmb250LXNpemU6MTIuNXB4Ij5Zb3VyIGFwcDwvdGV4dD4KPHRleHQgeD0iOTMiIHk9IjEyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDYwMCAxMXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM2Ij5zYW1lIFNESzwvdGV4dD4KPGxpbmUgeDE9IjE1OCIgeTE9IjExMyIgeDI9IjIyNCIgeTI9IjExMyIgc3Ryb2tlPSIjNDE0ZTYyIiBzdHJva2Utd2lkdGg9IjIiIG1hcmtlci1lbmQ9InVybCgjbGsta24pIi8+Cjx0ZXh0IHg9IjE5MSIgeT0iMTA1IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTBweCAnU0YgTW9ubycsIHVpLW1vbm9zcGFjZSwgJ0pldEJyYWlucyBNb25vJywgTWVubG8sIG1vbm9zcGFjZTsgZmlsbDogI2M5Y2ZkODsgZm9udC1zaXplOjguNXB4Ij5pbnZva2UoKTwvdGV4dD4KPHJlY3QgeD0iMjI4IiB5PSI3NiIgd2lkdGg9IjE4MiIgaGVpZ2h0PSI3NCIgcng9IjEyIiBmaWxsPSIjMWEzMTI2IiBzdHJva2U9IiMwNTk2NjkiIHN0cm9rZS13aWR0aD0iMS43Ii8+Cjx0ZXh0IHg9IjMxOSIgeT0iMTEwIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogNzAwIDEzLjVweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogIzkwZGVjODsgZm9udC1zaXplOjEycHgiPmFkYXB0ZXI8L3RleHQ+Cjx0ZXh0IHg9IjMxOSIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTAuNXB4IEludGVyLCBzYW5zLXNlcmlmOyBmaWxsOiAjOTBkZWM4Ij5iZXNpZGUgeW91ciBhcHA8L3RleHQ+CjxsaW5lIHgxPSI0MTAiIHkxPSIxMTMiIHgyPSI0NzYiIHkyPSIxMTMiIHN0cm9rZT0iIzQxNGU2MiIgc3Ryb2tlLXdpZHRoPSIyIiBtYXJrZXItZW5kPSJ1cmwoI2xrLWtuKSIvPgo8dGV4dCB4PSI0NDMiIHk9IjEwNSIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDEwcHggJ1NGIE1vbm8nLCB1aS1tb25vc3BhY2UsICdKZXRCcmFpbnMgTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7IGZpbGw6ICNjOWNmZDg7IGZvbnQtc2l6ZTo4LjVweCI+OjgwODA8L3RleHQ+CjxyZWN0IHg9IjQ4MCIgeT0iNzYiIHdpZHRoPSIzMjAiIGhlaWdodD0iNzQiIHJ4PSIxMiIgZmlsbD0iIzI2MjYyNiIgc3Ryb2tlPSIjM2Q0ZTY2IiBzdHJva2Utd2lkdGg9IjEuNSIvPgo8dGV4dCB4PSI2NDAiIHk9IjExMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgc3R5bGU9ImZvbnQ6IDY1MCAxMy41cHggSW50ZXIsIHNhbnMtc2VyaWY7IGZpbGw6ICNjOWNlZDg7IGZvbnQtc2l6ZToxMnB4Ij5LbmF0aXZlIFNlcnZpY2U8L3RleHQ+Cjx0ZXh0IHg9IjY0MCIgeT0iMTI4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBzdHlsZT0iZm9udDogMTFweCBJbnRlciwgc2Fucy1zZXJpZjsgZmlsbDogI2M5Y2ZkOCI+cmVxdWVzdC1kcml2ZW4gwrcgMS0xMCByZXBsaWNhczwvdGV4dD4KPC9zdmc+" alt="In the target cluster, the application's unchanged SDK invoke reaches a Tensor9 adapter beside it, which forwards the call by function name to the callee running as a cluster-local Knative Service (a minimum warm capacity of one replica scaling up to a bounded ceiling, request-driven and blocked from the internet by network policy) serving the real Invoke API on port 8080." />
</div>

<p className="t9-caption">Each function runs as a cluster-local Knative Service that scales with request load behind the activator, blocked from the public internet by network policy.</p>

#### Operations and migration

**Operations.** Tensor9 runs each function as a Knative Service and operates the invoke path; the nodes and capacity it runs on are the customer's, and the function code stays the vendor's.

**Migration.** The function is compiled at the build and ships as its container image; there is no data to migrate at cutover.

**Capacity and speed.** The invoke's latency and throughput are the cluster's own, reported by your monitoring, not anything measured here.

#### Limitations

△ Where Lambda and a Knative Service stay different

* **Knative uses its default request deadline.** The Knative revision default limits the HTTP response wait rather than enforcing Lambda's configured execution deadline. The handler can continue after the response times out; that timeout is not a remote process-kill operation.
* **Reserved concurrency does not change the replica limit.** Scale is bounded by a minimum warm capacity and a fixed ceiling, but your reserved-concurrency setting does not move that ceiling.
* **Lambda's /tmp cap is not restored.** Ephemeral /tmp is the container's own filesystem; Lambda's sized ephemeral-storage limit is not reproduced.
* **Synchronous invoke only.** An asynchronous (Event) invoke returns a clear error; layers, event source mappings, aliases, and function URLs stop the build with a clear error rather than dropping silently.

#### Other considerations

Consider request isolation, idle capacity, and how functions call one another.

* **One replica stays warm by default:** the service keeps one replica warm by default and caps scale-out at a bounded ceiling, so a steady invoke is served warm while a scaled-down revision's first call is buffered by the activator and delayed rather than dropped.
* **Tensor9 sets the replica limits.** Tensor9 configures the minimum and maximum replica counts. Set the maximum for peak traffic and budget for one replica that remains running while idle.
* **Each function pod is blocked from the internet by network policy:** a network policy admits traffic only from the Knative data plane and the pod's own namespace and allows no internet egress, so a function cannot call back to real AWS; a callee is reached by composing its in-cluster address from the function name.
* **Store durable state in a backing service.** Function storage is temporary. Persist data through the services your handler calls so it survives instance replacement.

#### Function lifecycle on Knative

The function reconciles to a Knative revision and invokes through its cluster-local route. Revision readiness, the activator's response deadline and handler completion are separate; warm and maximum replicas retain the limits above. See [function lifecycle and invocation](/service-adapters/aws/compute-containers/lambda#function-lifecycle-and-invocation) for Pending/Active state, supported lifecycle operations and invocation outcomes.

[Service Catalog](/service-adapters/catalog).
