--- title: "Functions FAQ" description: "Short answers about Functions activation, runtimes, limits, dedicated replicas, the function URL, billing, and troubleshooting, each linking to the full page." content_type: "faq" product: "functions" platform: "MyAccount" url: "/myaccount/functions/faq/" --- # Functions FAQ ## What is Function as a Service (FaaS)? Function as a Service (FaaS) runs your code without servers for you to manage. E2E's FaaS platform is called Functions. You write a function, E2E builds and runs it, and you call it over its own public HTTPS URL. See [Functions](/myaccount/functions/). ## What can I build with Functions? Functions suits jobs that start from an HTTP request and answer quickly: APIs and webhooks, backends for a frontend, microservices, automation, and data processing. See [What you can build](/myaccount/functions/concepts/what-you-can-build/). ## Which regions is Functions available in? Functions is available only in Delhi. ## What does activating Functions do? Activation sets up Functions for your account. You activate once, before you create your first function. Activation reserves a dedicated outbound IP for the account. From then on, the CPU monthly minimum applies each month. A prepaid account pays the minimum from its prepaid balance when it activates. See [Activate Functions](/myaccount/functions/how-to/activate-functions/). ## What runtimes are supported? Functions run Python, Node.js, Go, C#, or PHP, or your own container image. For every version, see [Runtimes and hardware](/myaccount/functions/concepts/runtimes-and-hardware/). ## Can I run machine learning models on Functions? Yes, on CPU hardware. Add your libraries to a Python runtime's `requirements.txt`, or package the model in a **Custom Container Image**. If only part of an application should run as a function, deploy that part alone, such as the inference step, and keep the rest elsewhere. To serve a model on a GPU, use [TIR](/tir/). See [What you can build](/myaccount/functions/concepts/what-you-can-build/#lightweight-ai-inference). ## What is a function handler? The handler is the entry point of your function code. It receives the request as an event, runs your logic, and returns a response. In the FastAPI, Flask, and Express runtimes there is no handler. You write an ordinary app with its own routes. See [Requests and responses](/myaccount/functions/concepts/requests-and-responses/). ## How do I deploy a function? Create a function in one of three ways: write code in the editor from a runtime template, upload a ZIP of your code, or deploy a custom container image. See [Create a function](/myaccount/functions/how-to/create-a-function/), [Upload code as a ZIP](/myaccount/functions/how-to/upload-code-as-a-zip/), and [Deploy a custom container image](/myaccount/functions/how-to/deploy-a-custom-container-image/). ## What are dedicated replicas? Dedicated replicas are instances of a function kept always running to avoid cold starts. A CPU or container function can have 1 to 5. See [Keep a function ready with dedicated replicas](/myaccount/functions/how-to/keep-a-function-ready-with-dedicated-replicas/). ## How do I avoid cold starts? For a CPU or container function, turn on **Enable Dedicated Replica** and set **Minimum Replica** from 1 to 5. That many instances stay running. See [Keep a function ready with dedicated replicas](/myaccount/functions/how-to/keep-a-function-ready-with-dedicated-replicas/). ## What happens when a function receives a large number of requests? The function scales automatically. More instances start under load, and fewer run when demand drops. See [Functions](/myaccount/functions/). ## What is a function's URL? Each function gets its own public HTTPS URL. Copy it from the function's **Info** tab. See [Call a function](/myaccount/functions/how-to/call-a-function/). ## What outbound IP address do functions use? All the functions in an account use a dedicated outbound IP reserved when Functions is activated. It is shown as **Outbound IP** on the **Info** tab of any function. Every function calls external services from that one address. An external system can allow that address in its firewall, for API integrations or IP-based access control. See [Activate Functions](/myaccount/functions/how-to/activate-functions/#what-activation-gives-you). ## How can I update my function code after deployment? Open the function, edit the code, requirements, or environment variables, and click **Save**. Saving rebuilds and redeploys the function. See [Edit a function](/myaccount/functions/how-to/edit-a-function/). ## What configuration options are available for functions? You choose memory, timeout, environment variables, and, for CPU and container functions, dedicated replicas. See [Create a function](/myaccount/functions/how-to/create-a-function/). ## What are environment variables in functions? Environment variables hold configuration, such as database URLs, service endpoints, and application settings, separately from your code. You change a value without changing the code. See [Use environment variables](/myaccount/functions/how-to/use-environment-variables/). ## What does the function execution timeout mean? **Timeout (sec)** is the seconds a function can run before it is stopped, from 1 to 600. The default is 15 seconds. See [Create a function](/myaccount/functions/how-to/create-a-function/). ## What are the limits of a function? - Name: up to 40 characters. - **Memory**: 128, 256, 512, or 1024 MB. Each size comes with a share of a CPU. - **Timeout (sec)**: 1 to 600 seconds. The default is 15 seconds. - ZIP upload: up to 50 MB compressed and 200 MB extracted. - **Ephemeral Storage**: 5 GB. - Dedicated replicas: 1 to 5, for CPU and container functions. - Request body, in the Python and Node.js HTTP runtimes: 10 MB by default. The init function can raise it up to 1000 MB. See [Create a function](/myaccount/functions/how-to/create-a-function/) and [Requests and responses](/myaccount/functions/concepts/requests-and-responses/). ## How can I monitor function activity? The **Logs** tab shows a function's runtime logs, and the **Monitoring** tab shows **Memory Usage** and **Invocation Count** charts. See [View logs and monitoring](/myaccount/functions/how-to/view-logs-and-monitoring/). ## What are the possible states of a function? A function's **Status** is one of **Creating**, **Deploying**, **Running**, or **Failed**. See [Create a function](/myaccount/functions/how-to/create-a-function/). ## Why might a function fail during deployment? A function reads **Failed** when its build does not succeed. Check that the requirements or package file lists every dependency your code needs, with the right versions. Check that you set the environment variables your code needs, and that the code reads them by the keys you set. A function refused at **Create** because its ZIP has no root directory also appears as **Failed**. A failed function shows a **Build Logs** tab on its page. Its **Logs** tab combines runtime and build logs. See [Troubleshooting Functions](/myaccount/functions/troubleshooting/functions/). ## Can I deploy functions using my own container image? Yes. Choose **Custom Container Image**, and in the `Dockerfile` tab set the BASE_IMAGE argument to your public image. A private image, such as one in E2E Container Registry, cannot be used. The image must be built for `linux/amd64` and run as a non-root user. By default the container must listen on port 8080. See [Deploy a custom container image](/myaccount/functions/how-to/deploy-a-custom-container-image/). ## Can functions interact with other cloud services? Yes. Functions can connect to databases, object storage, messaging, APIs, and other cloud services through the account's dedicated outbound IP. See [Activate Functions](/myaccount/functions/how-to/activate-functions/). ## How is Functions billed? Functions is billed on the memory your functions use over time, counted in GB-seconds. The CPU monthly minimum includes 4,50,000 GB-seconds of CPU usage. For the rates, see [E2E's pricing page](https://www.e2enetworks.com/pricing). For how the bill is worked out, see [Billing](/myaccount/functions/concepts/billing/). ## Why am I charged for Functions even if I only created and deleted functions? The CPU monthly minimum applies for each month in which Functions is active, however little you use. A prepaid account pays it from its prepaid balance when it activates. For a prepaid account, each activation charges the minimum again, even in the same month. The minimum stays on the bill, and is not refunded, if you deactivate later that month. See [Billing](/myaccount/functions/concepts/billing/). To stop the minimum for later months, delete every function and deactivate Functions. See [Deactivate Functions](/myaccount/functions/how-to/deactivate-functions/). ## Why does my function say it does not adhere to the format? You see "Your function code does not adhere to the E2E Function format as suggested, please review your code." It appears when you create a function whose required files are missing or misnamed. It also appears for a ZIP with no root directory. See [Troubleshooting Functions](/myaccount/functions/troubleshooting/functions/#your-function-code-does-not-adhere-to-the-e2e-function-format-as-suggested-please-review-your-code). ## What happens if my code is larger than 50 MB? A ZIP you upload can be up to 50 MB compressed and 200 MB extracted. A larger ZIP gets "The uploaded ZIP file is too large. Maximum allowed size is 50MB." See [The uploaded ZIP file is too large](/myaccount/functions/troubleshooting/functions/#the-uploaded-zip-file-is-too-large-maximum-allowed-size-is-50mb). Code you write in the editor is packed into a ZIP when you click **Create** or **Save**. Code too large for a 50 MB ZIP gets "Generated ZIP exceeds the 50MB limit." The function is then not created or saved. See [Generated ZIP exceeds the 50MB limit](/myaccount/functions/troubleshooting/functions/#generated-zip-exceeds-the-50mb-limit). ## How do I delete a function or deactivate Functions? Deleting a function removes its running service and its stored code for good. Delete a function with the trash can icon under **Actions** in the Functions list. To deactivate Functions, first delete every function. Deactivating releases the account's outbound IP. If you activate again, you can get a different IP. See [Delete a function](/myaccount/functions/how-to/delete-a-function/) and [Deactivate Functions](/myaccount/functions/how-to/deactivate-functions/).