ORACLE CLOUD FUNCTIONS → STACKIT · TUTORIAL
Moving OCI Functions to STACKIT as containers
STACKIT has no function service, and StackToIT says so in the assessment: an OCI function is run as a container on STACKIT Kubernetes Engine (SKE) or as a Docker app on Cloud Foundry, and its triggers are replaced. This tutorial assesses a small estate with a function, its application, an events rule and the bucket that fires it, then walks through the container, the image registry, the settings and the trigger.
A function, assessed
The estate was written for this page and assessed on 4 November 2026. Left: the function from the demo input. Right: the record the run keeps for it in assessment.json, copied from the run. assessment.json is written as a single line, so the pane shows selected fields of each unit, indented and nested as in the file, with the values unchanged.
resource "oci_functions_function" "thumbnailer" {
application_id = oci_functions_application.images.id
display_name = "thumbnailer"
image = var.function_image
memory_in_mbs = 256
timeout_in_seconds = 60
config = {
SIZE = "256"
}
}{
"id": "oci_functions_function.thumbnailer",
"wave": 4,
"depends_on": [
"oci_functions_application.images"
],
"result": {
"class": "CONTAINERIZE",
"confidence": "MEDIUM",
"target": {
"service": "SKE workload (or Cloud Foundry Docker app)"
},
"reason": "STACKIT has no function service. Run the function image as a container on SKE or Cloud Foundry, and replace its triggers."
}
}CONTAINERIZE, MEDIUM
The function and its application both land on SKE or Cloud Foundry. The class says the image is the unit of migration, not the source code.
Six settings stay with you
application_id, config, display_name, image, memory_in_mbs and timeout_in_seconds are listed as critical settings left to you. The application adds compartment_id, config, display_name and subnet_ids.
No resource block is written
No STACKIT resource block is written for any unit. The candidate target lists stackit_ske_cluster, which is the cluster, not the workload on it: the Deployment or Cloud Foundry app is yours to define.
The trigger the run hands over
The events rule that fires the function on every object upload is not in the catalogue of this build. It is MANUAL_REVIEW, nothing of it is assessed or drafted, and the function carries a warning that it is linked to it. assessment.json is written as a single line, so the pane shows selected fields of each unit, indented and nested as in the file, with the values unchanged.
resource "oci_events_rule" "upload" {
compartment_id = var.compartment_id
display_name = "on-upload"
is_enabled = true
condition = "{\"eventType\":[\"com.oraclecloud.objectstorage.createobject\"]}"
actions {
actions {
action_type = "FAAS"
is_enabled = true
function_id = oci_functions_function.thumbnailer.id
}
}
}{
"id": "oci_events_rule.upload",
"wave": 5,
"depends_on": [
"oci_functions_function.thumbnailer"
],
"result": {
"class": "MANUAL_REVIEW",
"confidence": "LOW",
"reason": "oci_events_rule is not in the knowledge base catalogue; an architect has to decide the target. Nothing of this resource is assessed or drafted (unknown source type)."
}
}A trigger is design work
The rule listens for the create-object event of Oracle Object Storage and invokes the function. A function-as-a-service platform does that for you; on SKE you build the path from event to container yourself.
STACKIT lists no bucket notification setup
The supported-operations page lists Get Bucket Notification Configuration but not Put. Do not plan on a bucket that calls your container; plan on a poller, a queue or an upload path that calls it.
The move in order
The run puts the network and bucket first, then the application, then the function. The trigger comes last because it needs both ends.
1. Confirm how each function is packaged
OCI Functions is built on the Fn Project and has code-only functions on a managed runtime and image-based functions. An image-based function is already a container image. A code-only function has to be packaged into an image first.
2. Provide a cluster or a Cloud Foundry space
SKE is a managed, certified Kubernetes service. The report states which SKE versions are supported as of the day the pages were read, 3 November 2026: 1.36 is suitable as a landing, 1.32 to 1.34 have expired.
3. Push the image to a STACKIT registry
The container registry endpoint is registry.onstackit.cloud. Tag the image as registry.onstackit.cloud/PROJECT/IMAGE:VERSION, log in and push. For the pipeline, create a robot account: it gets an expiry in days, and STACKIT recommends granting only the permissions that are needed.
4. Turn the function into a service
A function receives a request and returns a response. As general Kubernetes practice, not run output: on SKE the same image runs behind a Deployment and a Service, or as a Job where it is triggered rarely. The Oracle platform caps request and response payloads at 6 MB; your service has the limits you configure.
5. Carry the settings across
Application config such as BUCKET and function config such as SIZE become environment variables. memory_in_mbs of 256 and timeout_in_seconds of 60 become container memory limits and request timeouts you set.
6. Replace the trigger and test
Choose how an upload reaches the container, run both paths side by side with test objects, and only then remove the OCI function and its events rule.
How the functions estate mapped
| OCI resource | STACKIT target | Class and wave |
|---|---|---|
| oci_core_vcn.fn and oci_core_subnet.fn | STACKIT network | RECONFIGURE, waves 1 and 2 |
| oci_objectstorage_bucket.media | STACKIT Object Storage | RECONFIGURE, wave 1 |
| oci_functions_application.images | SKE workload (or Cloud Foundry Docker app) | CONTAINERIZE, wave 3 |
| oci_functions_function.thumbnailer | SKE workload (or Cloud Foundry Docker app) | CONTAINERIZE, wave 4 |
| oci_events_rule.upload | No target stated | MANUAL_REVIEW, wave 5 |
Five of six units are MEDIUM, the events rule is LOW. Without a lock file entry for the oci provider, MEDIUM is the ceiling. The mapping on the Oracle Cloud page agrees: OCI Functions map to SKE or Cloud Foundry, class CONTAINERIZE.
The SKE version, as the run states it
The run reads the SKE lifecycle pages and states each version as of 3 November 2026.
Land on 1.36
1.36 is supported, released 27 August 2026 with an expiry on 9 June 2027, and marked suitable as a landing.
Expired versions
1.32, 1.33 and 1.34 have expired. The provider applies a mandatory update to a cluster on an expired version.
1.35 is unknown
The pages read give no release date for 1.35, so its state is UNKNOWN. The report adds that the 1.34 deprecation note names 1.35 as the upgrade target, so do not read UNKNOWN as unsupported; check the version list of your project.
Re-read after 1 February 2027
The run does not vouch for these states after that date.
Questions platform teams ask
Is there a STACKIT service that runs functions?
The assessment states that STACKIT has no function service. Functions run as containers on SKE or Cloud Foundry, with the triggers rebuilt by you.
Do I need to rewrite the function code?
Not necessarily. An image-based function is a container image already and can be pushed to a STACKIT registry. You add what the platform did for you: an HTTP entry point, configuration through environment variables and a trigger.
Why is the events rule not mapped?
The catalogue of this build has no entry for it, so the run classifies it MANUAL_REVIEW and assesses nothing. You design the replacement yourself.
SKE or Cloud Foundry?
The assessment names both and decides neither. SKE is a certified Kubernetes service for standard Kubernetes workloads. The STACKIT Cloud Foundry page on containers and buildpacks describes staging an app with a buildpack and does not say whether a ready-made container image can be pushed, so confirm that with STACKIT before you pick Cloud Foundry for the function image. As general practice, prefer the platform your team already operates.
Sources
Your next move: STACKIT.
Tell us about your estate. We show you what StackToIT delivers for it: target architecture, Terraform artifacts and a structured migration plan.