POST /accounts/{account_id}/containers/applications

Create a new application. An Application represents an intent to run one or more containers, with the same image, dynamically scheduled based on constraints

Servers

Path parameters

Name Type Required Description
account_id String Yes

Account identifier.

Request headers

Name Type Required Description
Content-Type String Yes The media type of the request body.

Default value: "application/json"

Request body fields

Name Type Required Description
constraints Object No
constraints.jurisdiction String No

Currently only "eu" and "fedramp" are supported. Overlap between jurisdiction and region is allowed for ENAM, WNAM (FedRAMP) and EEUR, WEUR (EU).

constraints.regions[] Array No
rollout_active_grace_period Integer No

Grace period for active instances to stay alive before becoming eligible for shutdown signal due to a rollout, in seconds. Defaults to 0.

Default value: 0

scheduling_policy String Yes

The scheduling policy to use for an application

Valid values:

  • "moon"
  • "gpu"
  • "fill_metals"
  • "regional"
  • "default"
max_instances Integer No

Maximum number of instances that the application will allow. This is relevant for applications that auto-scale.

durable_objects No

Set of properties to configure a durable object application in Cloudchamber.

name String Yes

The name for this application

priorities Object No

Defines priorities of application instances that are taken into account in scheduling decisions and used to determine what instances should be evicted in the face of resource scarcity. The feature is experimental and only supported with the "gpu" scheduling policy.

priorities.default Integer Yes

Application instance priority.

Default value: 50

configuration Object Yes

Properties required to create a cloudchamber deployment specified by the user

configuration.instance_type String No

The instance type will be used to configure vCPU, memory, and disk.

  • "lite": 1/16 vCPU, 256 MiB memory, 2 GB disk
  • "basic": 1/4 vCPU, 1 GiB memory, 4 GB disk
  • "standard-1": 1/2 vCPU, 4 GiB memory, 8 GB disk
  • "standard-2": 1 vCPU, 6 GiB memory, 12 GB disk
  • "standard-3": 2 vCPU, 8 GiB memory, 16 GB disk
  • "standard-4": 4 vCPU, 12 GiB memory, 20 GB disk

Default value: "lite"

configuration.network Object No
configuration.network.egress_from_landing_colo Boolean No

Egress packets sent by the container through a colo, if any, that has seen packets sent to the container first. Landing colos are tracked for individual 5-tuples.

configuration.network.ipv6_prefix_length Integer No

Prefix length of an IPv6 subnet assigned to a container.

configuration.network.ipv4_prefix_length Integer No

Prefix length of an IPv4 subnet assigned to a container.

configuration.network.assign_ipv4 String No

Valid values:

  • "account"
  • "predefined"
  • "none"
configuration.network.mode String No

Defines the kind of networking the container will have. If "public", the container will be assigned at least an IPv6, and an IPv4 if "assign_ipv4": true. If "public-by-port" is specified, the IP address assignment logic is the same as with "public". However, at least one port must be specified. Only packets sent to specified ports will be routed to the container. If "private", the container won't have any accessible public IPs, however it will be able to access the internet.

Valid values:

  • "public-by-port"
  • "public"
  • "private"
configuration.network.assign_ipv6 String No

Valid values:

  • "account"
  • "predefined"
  • "none"
configuration.vcpu Number No

Specify the vcpu to be used for the deployment. Vcpu must be at least 1. The input value will be rounded to the nearest 0.0001. The default will be the one configured for the account.

configuration.secrets[] Array No

A list of objects with secret names and the their access types from the account

configuration.secrets[].name String Yes

The name of the secret within the container

configuration.secrets[].type String Yes

The secret access type denotes how a secret is made available within a container. Available Options are "env".

Valid values:

  • "env"
configuration.secrets[].secret String Yes

Corresponding secret name from the account

configuration.provisioner Object No

Configuration for a VM provisioner.

configuration.provisioner.type String Yes

The provisioner to use.

Valid values:

  • "none"
  • "cloudinit"
configuration.ports[] Array No
configuration.ports[].port Integer No

Optional port number, it's assigned only if the user specified it. If it's not specified, the datacenter scheduler will decide it.

configuration.ports[].assign_port[] Array No

Choose a port number from a given set of port ranges and use it. It is an optional field. If it is set, "port" must not be provided. The same port ranges may be used with multiple ports as long as the port ranges are identical for each port. Otherwise no two port ranges must intersect and no fixed port must belong to any port range. The total port count for all port ranges should be sufficiently large for assigning the requested number of ports.

configuration.ports[].assign_port[].end Integer Yes

Last port number. Inclusive. It may be equal to the start one.

configuration.ports[].assign_port[].start Integer Yes

First port number. Inclusive.

configuration.ports[].name String Yes

A port name. The port array should not have duplicate names. The port name should be between 1 and 15 characters long. Only alphanumeric characters, dashes (-), and underscores (_) are allowed. No consecutive dashes. The value of the port is exposed to the user's application with a set of environment variables, where <name> below is the name of the port with dashes converted to underscores (example: "web-ui" becomes "web_ui"):

  • CLOUDFLARE_PORT_<name>: Port inside the container
  • CLOUDFLARE_HOST_PORT_<name>: Port outside the container
  • CLOUDFLARE_HOST_IP_<name>: Address of the external network interface the port is allocated on
  • CLOUDFLARE_HOST_ADDR_<name>: CLOUDFLARE_HOST_IP_<name>:CLOUDFLARE_HOST_PORT_<name>
configuration.environment_variables[] Array No

Container environment variables

configuration.environment_variables[].name String Yes

An environment variable name

configuration.environment_variables[].value String Yes

An environment variable value

configuration.entrypoint[] Array No

The entry point for the container, specifying the executable to run when the container starts. This can be overridden at run-time. If overridden, the default command from the image is ignored. Both entrypoint and command can be specified at run-time to completely replace the image defaults.

configuration.durable_object_offset_instances Integer No

The number of containers that should be prewarmed for this application, resulting in a number of deployments = number of durable object instances + this value. Omit to inherit the account default. When neither this field nor the account default is set, the system default applies.

configuration.dns Object No

Represents the /etc/resolv.conf that will appear in the deployment. If the 'dns' property is specified, even if empty object, will override the default resolv.conf of the container. The default resolv.conf of a container is 'servers = ["1.1.1.1", "9.9.9.9", "2606:4700:4700::1111"]', only if an IPv4 is assigned. The default for a non IPv4 deployment is 'servers = ["2606:4700:4700::1111", "2620:fe::fe"]'.

configuration.dns.servers[] Array No

List of DNS servers that the deployment will use to resolve domain names. You can only specify a maximum of 3.

configuration.dns.searches[] Array No

The container resolver will append these domains to every resolve query. For example, if you have 'google.com', and your deployment queries 'web', it will append 'google.com' to 'web' in the search query before trying 'web'. Limited to 6 domains.

configuration.labels[] Array No

Deployment labels

configuration.labels[].name String Yes

A label name

configuration.labels[].value String Yes

A label value

configuration.command[] Array No

The command to be executed when the container starts, passed to the entrypoint. This can be overridden at run-time. If only the command is overridden at run-time, it gets passed to the default entrypoint specified in the image.

configuration.lifecycle Object No

Lifecycle configuration for a deployment.

configuration.lifecycle.max_termination_duration String No

Duration string. From Go documentation: A string representing the duration in the form "3d1h3m". Leading zero units are omitted. As a special case, durations less than one second format use a smaller unit (milli-, micro-, or nanoseconds) to ensure that the leading digit is non-zero.

configuration.image String Yes

Image url

configuration.memory_mib Integer No

Specify the memory to be used for the deployment, in MiB. The default will be the one configured for the account.

configuration.observability Object No

Settings for deployment observability such as logging.

configuration.observability.logs Object No

Observability logging settings.

configuration.observability.logs.enabled Boolean No

Default value: false

configuration.ssh_public_key_ids[] Array No

A list of SSH public key IDs from the account

configuration.memory String No

A memory size that specifies its unit at the end.

configuration.wrangler_ssh Object No

Configuration properties for SSH'ing into a container with Wrangler

configuration.wrangler_ssh.port Number No

Default value: 22

configuration.wrangler_ssh.enabled Boolean No

Default value: true

configuration.checks[] Array No

Health and readiness checks for this deployment.

configuration.checks[].tls Boolean No

Connect to the port using TLS

Default value: false

configuration.checks[].port String Yes

The name of the port defined in the "ports" property of the deployment

configuration.checks[].name String No

Optional name for the check. If omitted, a name will be generated automatically.

configuration.checks[].interval String Yes

Duration string. From Go documentation: A string representing the duration in the form "3d1h3m". Leading zero units are omitted. As a special case, durations less than one second format use a smaller unit (milli-, micro-, or nanoseconds) to ensure that the leading digit is non-zero.

configuration.checks[].attempts_before_failure Integer No

Number of times to attempt the check before considering it to have failed

Default value: 1

configuration.checks[].timeout String Yes

Duration string. From Go documentation: A string representing the duration in the form "3d1h3m". Leading zero units are omitted. As a special case, durations less than one second format use a smaller unit (milli-, micro-, or nanoseconds) to ensure that the leading digit is non-zero.

configuration.checks[].type String Yes

Valid values:

  • "tcp"
  • "http"
configuration.checks[].grace_period String No

Duration string. From Go documentation: A string representing the duration in the form "3d1h3m". Leading zero units are omitted. As a special case, durations less than one second format use a smaller unit (milli-, micro-, or nanoseconds) to ensure that the leading digit is non-zero.

configuration.checks[].kind String Yes

Valid values:

  • "health"
  • "ready"
configuration.checks[].http Object No

Configuration for HTTP checks.

configuration.checks[].http.method String No

Available HTTP methods for health and readiness checks.

Valid values:

  • "OPTIONS"
  • "POST"
  • "PUT"
  • "DELETE"
  • "HEAD"
  • "GET"
  • "PATCH"
configuration.checks[].http.body String No

If the method is one of POST, PATCH or PUT, this is required. It's the body that will be passed to the HTTP healthcheck request.

configuration.checks[].http.headers Object No

HTTP headers to include in the request.

configuration.checks[].http.path String No

Path that will be used to perform the healthcheck.

Default value: "/"

configuration.trusted_user_ca_keys[] Array No
configuration.trusted_user_ca_keys[].name String No

Optional human readable name for this key

configuration.trusted_user_ca_keys[].public_key String Yes

An SSH public key

configuration.experimental_flags[] Array No

Opt-in experimental flags for this application. Only a subset of experimental flags can be set by users; unsupported values are rejected.

configuration.metadata_service Object No

Configuration for enabling the container metadata service.

configuration.metadata_service.enabled Boolean Yes

Whether the metadata service should be enabled for the deployment.

configuration.authorized_keys[] Array No
configuration.authorized_keys[].name String No

Optional human readable name for this key

configuration.authorized_keys[].public_key String Yes

An SSH public key

configuration.disk Object No

The disk configuration for this deployment. By default, all containers have a disk size of 2GB.

configuration.disk.size String No

A disk size that specifies its unit at the end.

configuration.disk.size_mb Integer No

Size of the disk, in MB.

affinities Object No

Defines affinity in application scheduling. (This still an experimental feature, some schedulers might not work with these affinities).

affinities.colocation String No

Colocation affinity is designed so schedulers try to place application instances all in the same way. Colocation is best-effort depending on available resources. If there is some leftover set of instances that can't be placed together, the scheduler will try to place them somewhere else.

Valid values:

  • "datacenter"
affinities.hardware_generation String No

To the extent possible, prefer nodes with specified characteristics when placing application instances.

Valid values:

  • "highest-overall-performance"
jobs Boolean No

Application config denoting deployments with Jobs type

Default value: false

observability Object No

Settings for application observability such as logging.

observability.target_instance_count Integer No

Fixed number of instances that should receive the application-level observability overlay. Mutually exclusive with target_instance_percentage.

observability.logs Object No

Observability logging settings.

observability.logs.enabled Boolean No

Default value: false

observability.target_instance_percentage Integer No

Percentage of instances that should receive the application-level observability overlay. This rounds up so at least this percentage of instances is targeted. Mutually exclusive with target_instance_count.

instances Integer Yes

Number of deployments to create

How to start integrating

  1. Add HTTP Task to your workflow definition.
  2. Search for the API you want to integrate with and click on the name.
    • This loads the API reference documentation and prepares the Http request settings.
  3. Click Test request to test run your request to the API and see the API's response.