Runtime and compute
Change an app's runtime stack and version, port, startup project, compute plan and persistent storage.
Requires: apps/write
Open the app, then Configuration → Runtime. Change the fields and choose Save.
Runtime stack and version
Choose the Runtime Stack and the Version. The list offers the versions your platform provides; a version the app still runs but that is no longer offered stays selectable, marked (no longer offered). Saving a new stack or version rebuilds the app — and its slots, which run on the app's stack and version.
For an app that runs a container image, the stack and version are not used.
Port
The Port is the port the app listens on, 1 to 65535. An instance receives traffic only once this port accepts connections.
For an app built from a repository, the port is written into the image when it is built: PORT,
SERVER_PORT or ASPNETCORE_HTTP_PORTS — see How an app is built.
Saving a new port does not rebuild the image, so after changing it choose Deploy to build the
app for the new port. Until then the new instances are checked on the new port while the code
listens on the old one, they never become ready, and the previous instances keep serving with the
app Degraded.
An environment variable named PORT is refused unless it has the same value as the port.
Startup project
Start Project is the path of the project a .NET build publishes, for example
src/MyApp/MyApp.csproj, at most 200 characters. The image runs the assembly named after the
project file; with no path it runs app.dll. Changing it rebuilds the app.
Compute plan
Choose the Compute Plan. The list shows each plan's name and description; plans a policy on the boundary does not allow are disabled. An app already on a plan that a policy no longer allows can keep it and still be edited.
A new plan replaces the instances without rebuilding the image. Without persistent storage the old instances keep serving until the new ones are ready — and keep serving if the new, larger ones do not fit on the cluster. With persistent storage the app is briefly down while it restarts.
A plan change does not resize a disk the app already has: the disk keeps the size it was created with.
Persistent storage
Turn on Persistent Storage to give the app a disk, mounted at /data, of the size in its
compute plan. Without it, the app's files last only as long as each instance.
- The disk can be attached to only one node of the cluster at a time, so an app with persistent storage is stopped before it is started again on every rollout, and is briefly down.
- The app and each of its slots get a disk of their own.
- The Files tab lets you browse and change the disk — see Files.
- Turning it off stops mounting the disk; the app no longer sees
/data. The disk itself is kept until the app is deleted, and turning persistent storage on again attaches the same disk.
compute_plan_not_found
400, with the platform's usual error body — see
The error body. error reads
Compute plan '<name>' not found. and module is apps.
The routes that return it, under
/boundaries/{boundaryId}/resourcegroups/{resourceGroupName}/resources/apps:
| Route | The plan checked |
|---|---|
POST {appName} |
The plan of the new app |
PUT {appName} and PATCH {appName} |
The plan the app has after the change |
POST {appName}/revisions/{number}/rollback |
The plan the revision had |
The app names a compute plan that is not one of the platform's plans; the name has to match exactly. The check runs every time an app is created, changed or rolled back — also when the plan itself does not change. An app whose plan a platform administrator has since renamed or removed therefore cannot be changed at all — not even a setting unrelated to the plan — until it moves to a plan that exists, and a rollback to a revision on such a plan is refused the same way.
Choose one of the plans the platform offers: the Compute Plan list in the portal, or
GET /boundaries/{boundaryId}/resources/appcomputeplans. For an app on a plan that no longer
exists, send the plan it should move to in the same change.
A plan that exists but that the boundary's compute plan policy does not allow is refused with
another code, compute_plan_not_allowed,
and status 422; its message lists the plans that are allowed. That check runs only when the
plan changes, so an app can keep a plan that a policy no longer allows.