This article helps you resolve issues you may encounter using Cognite Functions.
Incorrect folder structure when deploying a function as a zip file
Cognite Functions expects
handler.py to be at the root of the zipped folder or at a path relative to the root as pointed to by the
The following errors occur when
handler.py is not found at either of these locations.
When using the API to publish the function, you may see this error message in CDF if the function deployment fails:
No Python module found at location "handler.py" in zip-file.
If you use the Cognite SDK to publish the function, you may see this error message if the function deployment fails:
No file found at location.
This typically occurs when the root folder is zipped and not the folder content. Here's an example of an incorrect folder structure:
If you run the zip command outside the
func/ folder, the folder structure becomes incorrect.
# pwd: ~/tmp
> zip -r func.zip func/
adding: func/ (stored 0%)
adding: func/handler.py (stored 0%)
adding: func/requirements.txt (stored 0%)
requirements.txt must be at the root of the zip-file.
cd into the
func folder before you zip the contents:
# pwd: ~/tmp/func
❯ zip -r func.zip *
adding: handler.py (stored 0%)
adding: requirements.txt (stored 0%)
Calling a Cognite Function from within a Cognite Function
When using API keys, you can call a Cognite Function from another Cognite Function. However, we have deprecated legacy authentication with API keys and strongly encourage customers to migrate from using API keys to using OpenID Connect authentication soon as possible. You can’t call a Cognite Function from within a Cognite Function if you authenticate with OIDC tokens.
Failed calls without logs
A function call returns with the status
Failed, and there are no logs to explain why it
Cognite Functions does not support the Python
logging module, and importing it can sometimes hide the stack trace of failed calls.
Rerun the function after replacing logging statements with print statements. Remove all imports of the logging module.
Multithreading is not behaving as expected
Avoid using multithreading from within the function as this may break the internal structure of the function such as function status reporting and error detection.
A faulty requirements.txt usually results in error messages from pip. These occur in the
error attribute of the object returned by the function
create operation. If the function deployment fails, the error also occurs in the CDF user interface.
We have experienced cases where the pip installation failed, but no error messages occurred in the pip log.
Test the installation locally:
pip install -r requirements.txt
For Cognite Functions on Azure, the
requirements.txt-file must be compatible with:
Incorrectly named requirements.txt
Your function call fails with the following message in the logs.
ModuleNotFoundError: No module named ...
Make sure the file requirements.txt is correctly named. If the file name is misspelled, the packages listed in the file will not be installed.
Absolute vs. relative imports
If the following message occurs in the function call logs, the relative import path could not be resolved.
ImportError: attempted relative import with no known parent package
The user is attempting to use relative imports within their handler.py.
Use absolute imports instead of relative imports to avoid ambiguity about where the package should be imported from. See RealPython: Absolute vs Relative Python Imports.
Scheduled function call fails/times out
The following error message in the function call logs can indicate a problem with the session used to instantiate
Could not fetch a valid token or a valid API key. Unable to instantiate a CogniteClient. Please verify your credentials.
Check CDF to see if the OIDC settings have been updated. This revokes all existing sessions, and all schedules will fail. Recreate the function schedules to solve this problem.
Switching from API keys to OIDC tokens
If functions authenticate with API keys, you can use the function's
external_id to link a schedule to the Cognite Function. If you delete the Cognite Function, the linked schedule will persist and can potentially be relinked to a new function with the same
If functions authenticate with OIDC-tokens, you must link a schedule to a Cognite Function via the function's ID. If you delete the Cognite Function, the schedule can never be relinked to any function since the ID never repeats. Thus, all schedules attached to a function are deleted together with the function.
Connecting to databases outside CDF
Although connecting to databases outside CDF is technically possible, Cognite doesn't provide an IP range/CIDR to add to an allowlist. This makes your database publicly available for any IP, making it highly insecure.
Cognite Functions is intended to be used with CDF data. Solutions such as Azure Functions or AWS Lambdas may be a better fit for generic or arbitrary code execution.
Download files to the function
If you are trying to download/create files from within a Cognite Function, you may see this error:
OSError: [Errno 30] Read-only file system
The function code only has
write access to the
For example, the following snippet creates a temporary directory inside
tmp. Use this directory to create temporary files required during function execution.
with tempfile.TemporaryDirectory() as tmpdirname:
print('created temporary directory', tmpdirname)
You cannot rely on files created during the execution of a function to be persisted and available in the next execution.