Removals for ECE 3.0edit

With the release of Elastic Cloud Enterprise version 3.0 a number of features, API endpoints, and Elastic Stack versions will no longer be supported. Check the following information for details about what will be removed, and migration options if appropriate.

Check the following sections for more detail:

Features removed in ECE 3.0edit

The following set of features are removed in Elastic Cloud Enterprise 3.0.

Custom deployment templates must support node_roles and include all components

When creating custom deployment templates, aside from the Hot data and Content tier, platform admins were previously able to decide whether or not to include other components, such as Enterprise Search, Kibana, and others. This is in addition to the option to disable a component by setting its size to 0GB.

In ECE version 2.9.0, we introduced a new node_roles field to configure which node roles are assigned to each Elasticsearch node, and which added support for features such as autoscaling and the frozen data tier. As part of this change, all components are now required to be included in custom templates when using node_roles. When a component is included it is still be possible to disable it by setting its size to 0GB, excluding the hot data and content tier which is required and must be enabled.

Starting with ECE version 3.0, all custom deployment templates are required to support node_roles and must include all components. Existing deployments will be required to migrate to use node_roles before upgrading to Elastic Stack version 8.0 or above.

If there are deployment templates in your environment that were not updated to support node_roles or that do not include all components, you must first update them before you are able to upgrade your environment to ECE version 3.0 or above.

You can use this step-by-step guide that describes the migration process.

Removing support for the dedicated App Search component

In ECE version 2.4.0 we introduced support for an Elastic App Search component with a dedicated App Search deployment template. In ECE version 2.6.0, we expanded that support to Elastic Enterprise Search that gives you access both to App Search and Workplace Search.

Starting from ECE version 3.0 we will no longer support the App Search deployment template or App Search component in custom deployment templates.

If there are active deployments in your ECE environment that are still using the legacy App Search deployment template or the App Search component in a custom deployment template, you must first migrate them to use Enterprise Search before you are able to upgrade your environment to ECE version 3.0 or above.

You can use the following step-by-step guide that will walk you through the migration process.

Removing support for the dedicated Cross-Cluster-Search (CCS) deployment template

Previously, we supported CCS using a dedicated CCS deployment template. In ECE version 2.9.0, we expanded that support to all deployment templates, making CCS (and CCR) available in all deployments using compatible Elastic Stack versions.

Starting with ECE version 3.0, we no longer support the dedicated CCS deployment template.

If there are active deployments in your environment created using the CCS template, you must first migrate them to a different template before you are able to upgrade your environment to ECE version 3.0 or above.

You can use this step-by-step guide that describes the migration process.

Removing support for Elastic Stack versions 2.x and 5.x

In ECE 2.x versions, you could upload older 2.x and 5.x Elastic Stack packs and create new deployments using those versions. As described on our End-of-Life page, maintenance for those versions ended more than two years ago.

Starting with ECE version 3.0, we no longer support version 2.x or 5.x deployments.

If there are active deployments in your ECE environment using those versions, you must first upgrade them to Elastic Stack 6.0 or above before you are able to upgrade your environment to ECE version 3.0 or above. We highly recommend upgrading to a supported version as described on our End-of-Life page.

Refer to our Upgrade documentation to upgrade your deployments to a newer Elastic Stack version.

Removing support for index curation

Index curation enabled you to easily and automatically move indices from hot to cold data nodes after a certain time period. In ECE version 2.2, we released support for index lifecycle management (ILM) that offers a much more robust mechanism to move your data across the different phases as it matures and is less frequently searched.

Starting with ECE version 3.0, we no longer support index curation.

If you have active deployments using index curation, you must first migrate them to use ILM before you are able to upgrade your environment to ECE version 3.0 or above.

You can use this step-by-step guide that describes the migration process.

Remove logging and metrics index curator

Logging and metrics curator was a process that ran on coordinating nodes that enforced index retention on system-managed indices in the logging and metrics cluster.

Starting with ECE version 3.0, we no longer use the curator process for logging and metrics index retention. Instead, we will install default ILM policies for system-managed logging and metrics indices in the logging and metrics cluster. If log and metrics retention was customized in previous versions of ECE, we won’t install the default ILM policies to avoid pruning logs and metrics that were intended to be retained. The upgrade log will warn you about this and output the custom retention policy that was detected.

To configure system log and metrics indices retention, see setting retention period for logging and metrics indices.

Removing support for Elasticsearch remote clusters “sniff mode”

When creating or editing a deployment, the node_type field was used to configure which Elasticsearch node roles should be assigned to each node. Starting with Elastic Stack 7.10, Elasticsearch supports a new method to configure and manage Elasticsearch node roles using a single node.roles setting. With this change, we introduced a new node_roles field in our ECE API to take advantage of the new Elasticsearch setting.

Starting with Elastic Stack version 8.0, the legacy node role configuration is no longer supported in Elasticsearch and, as a result, we are also removing support for the legacy node_type field. Requests to create or update deployments using Elastic Stack version 8.0 or above will be rejected. You can, however, continue and use the node_type field to create and manage deployments using older stack versions.

As a first step, before you migrate a deployment to use node_roles, the relevant deployment template associated with that deployment (as configured in the deployment_template field in the deployment JSON) must be updated to support node_roles. System-owned templates all support the new node_roles field. To learn more about how to update custom deployment templates, refer to Custom deployment templates must support node_roles and include all components.

If you are using the ECE user console to manage your deployment, this change should be transparent. The deployment will automatically migrate to use the new node_roles field when you upgrade to a stack version that supports the new field. If you are using the ECE API to create and manage deployments, you must edit your payload and replace the node_type field with the new node_roles field to assign node roles to each Elasticsearch node.

You can use this step-by-step guide that describes the migration process.

Removing the IP filtering API endpoints
We introduced the Traffic Filters API in ECE version 2.6.0. The IP Filtering API endpoints were deprecated in the same release. We are removing access to the IP Filtering endpoints in ECE version 3.0 to consolidate on the newer set of API endpoints.
Change in CORS behavior
We implemented CORS behavior handling in the proxy to match legacy behavior, and since the stack now fully supports CORS handling on its own, we no longer need to do this for current versions. Beginning with ECE version 3.0, we now rely on the stack implementation for all clusters that support it.

API endpoints removed in ECE 3.0edit

The following set endpoints have removed from the Elastic Cloud Enterprise RESTful API in version 3.0. Check Deployments API replaces clusters API for options on how to migrate to a different endpoint before upgrading ECE.

POST /cluster/_search
Use POST /deployments/_search instead.
GET /clusters/apm
Use GET /deployments instead.
POST /clusters/apm
Use PUT /deployments/{deployment_id} instead.
POST /clusters/apm/_resync
Use POST /deployments/_resync instead.
POST /clusters/apm/_search
Use POST /deployments/_search instead.
GET /clusters/apm/{cluster_id}
Use GET /deployments/{deployment_id} instead.
DELETE /clusters/apm/{cluster_id}
Use DELETE /deployments/{deployment_id}/{resource_kind}/{ref_id} instead.
POST /clusters/apm/{cluster_id}/_reset-token
Use POST /deployments/{deployment_id}/apm/{ref_id}/_reset-token instead.
POST /clusters/apm/{cluster_id}/_restart
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/_restart instead.
POST /clusters/apm/{cluster_id}/_shutdown
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/_shutdown instead.
POST /clusters/apm/{cluster_id}/_upgrade
Use POST /deployments/{deployment_id}/{stateless_resource_kind}/{ref_id}/_upgrade instead.
POST /clusters/apm/{cluster_id}/instances/_move
POST /clusters/apm/{cluster_id}/instances/_start
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/_start instead.
POST /clusters/apm/{cluster_id}/instances/_stop
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/_stop instead.
POST /clusters/apm/{cluster_id}/instances/maintenance-mode/_start
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/maintenance-mode/_start instead.
POST /clusters/apm/{cluster_id}/instances/maintenance-mode/_stop
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/maintenance-mode/_stop instead.
POST /clusters/apm/{cluster_id}/instances/{instance_ids}/_move
POST /clusters/apm/{cluster_id}/instances/{instance_ids}/_start
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/{instance_ids}/_start instead.
POST /clusters/apm/{cluster_id}/instances/{instance_ids}/_stop
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/{instance_ids}/_stop instead.
POST /clusters/apm/{cluster_id}/instances/{instance_ids}/maintenance-mode/_start
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/{instance_ids}/maintenance-mode/_start instead.
POST /clusters/apm/{cluster_id}/instances/{instance_ids}/maintenance-mode/_stop
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/{instance_ids}/maintenance-mode/_stop instead.
PUT /clusters/apm/{cluster_id}/metadata/name/{new_name}
Use PUT /deployments/{deployment_id} instead.
GET /clusters/apm/{cluster_id}/metadata/raw
Use GET /deployments/{deployment_id}?show_metadata=true instead.
POST /clusters/apm/{cluster_id}/metadata/raw
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/metadata/raw instead.
GET /clusters/apm/{cluster_id}/metadata/settings
Use GET /deployments/{deployment_id} instead.
PATCH /clusters/apm/{cluster_id}/metadata/settings
Use PUT /deployments/{deployment_id} instead.
GET /clusters/apm/{cluster_id}/plan
Use GET /deployments/{deployment_id} instead.
POST /clusters/apm/{cluster_id}/plan
Use PUT /deployments/{deployment_id} instead.
GET /clusters/apm/{cluster_id}/plan/activity
Use GET /deployments/{deployment_id} instead.
GET /clusters/apm/{cluster_id}/plan/pending
Use GET /deployments/{deployment_id} instead.
DELETE /clusters/apm/{cluster_id}/plan/pending
Use DELETE /deployments/{deployment_id}/{resource_kind}/{ref_id}/plan/pending instead.
GET /clusters/elasticsearch
Use GET /deployments instead.
POST /clusters/elasticsearch
Use POST /deployments instead.
POST /clusters/elasticsearch/_resync
Use POST /deployments/_resync instead.
POST /clusters/elasticsearch/_search
Use POST /deployments/_search instead.
GET /clusters/elasticsearch/ccs/eligible_remotes
Use POST /deployments/eligible-remote-clusters instead.
GET /clusters/elasticsearch/{cluster_id}
Use GET /deployments/{deployment_id} instead.
DELETE /clusters/elasticsearch/{cluster_id}
Use DELETE /deployments/{deployment_id} instead.
POST /clusters/elasticsearch/{cluster_id}/_restart
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/_restart instead.
POST /clusters/elasticsearch/{cluster_id}/_resync
Use POST /deployments/{deployment_id}/_resync instead.
POST /clusters/elasticsearch/{cluster_id}/_shutdown
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/_shutdown instead.
POST /clusters/elasticsearch/{cluster_id}/_snapshot
Use Elasticsearch snapshot API and snapshot lifecycle management APIs.
GET /clusters/elasticsearch/{cluster_id}/ccs
Use Elasticsearch remote info API.
GET /clusters/elasticsearch/{cluster_id}/ccs/settings
Use GET /deployments/{deployment_id}/elasticsearch/{ref_id}/remote-clusters instead.
PUT /clusters/elasticsearch/{cluster_id}/ccs/settings
Use PUT /deployments/{deployment_id}/elasticsearch/{ref_id}/remote-clusters instead.
GET /clusters/elasticsearch/{cluster_id}/curation/settings
Curation no longer available. Use Elasticsearch index lifecycle management instead.
PUT /clusters/elasticsearch/{cluster_id}/curation/settings
Curation no longer available. Use Elasticsearch index lifecycle management instead.
POST /clusters/elasticsearch/{cluster_id}/instances/_move
POST /clusters/elasticsearch/{cluster_id}/instances/_start
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/_start instead.
POST /clusters/elasticsearch/{cluster_id}/instances/_stop
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/_stop instead.
POST /clusters/elasticsearch/{cluster_id}/instances/maintenance-mode/_start
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/maintenance-mode/_start instead.
POST /clusters/elasticsearch/{cluster_id}/instances/maintenance-mode/_stop
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/maintenance-mode/_stop instead.
PUT /clusters/elasticsearch/{cluster_id}/instances/settings
Use PUT /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/overrides instead.
POST /clusters/elasticsearch/{cluster_id}/instances/{instance_ids}/_move
POST /clusters/elasticsearch/{cluster_id}/instances/{instance_ids}/_start
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/{instance_ids}/_start instead.
POST /clusters/elasticsearch/{cluster_id}/instances/{instance_ids}/_stop
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/{instance_ids}/_stop instead.
POST /clusters/elasticsearch/{cluster_id}/instances/{instance_ids}/maintenance-mode/_start
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/{instance_ids}/maintenance-mode/_start instead.
POST /clusters/elasticsearch/{cluster_id}/instances/{instance_ids}/maintenance-mode/_stop
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/{instance_ids}/maintenance-mode/_stop instead.
PUT /clusters/elasticsearch/{cluster_id}/instances/{instance_ids}/settings
Use PUT /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/{instance_ids}/overrides instead.
GET /clusters/elasticsearch/{cluster_id}/keystore
Use GET /deployments/{deployment_id}/elasticsearch/{ref_id}/keystore instead.
PATCH /clusters/elasticsearch/{cluster_id}/keystore
Use PATCH /deployments/{deployment_id}/elasticsearch/{ref_id}/keystore instead.
PUT /clusters/elasticsearch/{cluster_id}/metadata/name/{new_name}
Use PUT /deployments/{deployment_id} instead.
GET /clusters/elasticsearch/{cluster_id}/metadata/raw
Use GET /deployments/{deployment_id}?show_metadata=true instead.
POST /clusters/elasticsearch/{cluster_id}/metadata/raw
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/metadata/raw instead.
GET /clusters/elasticsearch/{cluster_id}/metadata/settings
Use GET /deployments/{deployment_id} instead.
PATCH /clusters/elasticsearch/{cluster_id}/metadata/settings
Use PUT /deployments/{deployment_id} instead.
DELETE /clusters/elasticsearch/{cluster_id}/monitoring
Use PUT /deployments/{deployment_id} instead.
POST /clusters/elasticsearch/{cluster_id}/monitoring/{dest_cluster_id}
Use PUT /deployments/{deployment_id} instead.
GET /clusters/elasticsearch/{cluster_id}/plan
Use GET /deployments/{deployment_id} instead.
POST /clusters/elasticsearch/{cluster_id}/plan
Use PUT /deployments/{deployment_id} instead.
POST /clusters/elasticsearch/{cluster_id}/plan/_migrate
GET /clusters/elasticsearch/{cluster_id}/plan/activity
Use GET /deployments/{deployment_id}?show_plan_history=true&show_plan_logs=true instead.
GET /clusters/elasticsearch/{cluster_id}/plan/pending
Use GET /deployments/{deployment_id} instead.
DELETE /clusters/elasticsearch/{cluster_id}/plan/pending
Use DELETE /deployments/{deployment_id}/{resource_kind}/{ref_id}/plan/pending instead.
GET /clusters/elasticsearch/{cluster_id}/proxy/{elasticsearch_path}
Use GET /deployments/{deployment_id}/{resource_kind}/{ref_id}/proxy/{proxy_path} instead.
POST /clusters/elasticsearch/{cluster_id}/proxy/{elasticsearch_path}
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/proxy/{proxy_path} instead.
PUT /clusters/elasticsearch/{cluster_id}/proxy/{elasticsearch_path}
Use PUT /deployments/{deployment_id}/{resource_kind}/{ref_id}/proxy/{proxy_path} instead.
DELETE /clusters/elasticsearch/{cluster_id}/proxy/{elasticsearch_path}
Use DELETE /deployments/{deployment_id}/{resource_kind}/{ref_id}/proxy/{proxy_path} instead.
PUT /clusters/elasticsearch/{cluster_id}/settings/security/legacy
Endpoint was used for 2.x versions of Elasticsearch which are EOL and unsupported in ECE 3.0.
GET /clusters/elasticsearch/{cluster_id}/snapshot/settings
Use GET /deployments/{deployment_id} instead.
PATCH /clusters/elasticsearch/{cluster_id}/snapshot/settings
Use PUT /deployments/{deployment_id} instead.
GET /clusters/elasticsearch/{cluster_id}/support/_generate-diagnostics
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/diagnostics/_capture instead.
GET /clusters/elasticsearch/{cluster_id}/support/_generate-logs
GET /clusters/enterprise_search/{cluster_id}/proxy/{enterprise_search_path}
Use GET /deployments/{deployment_id}/{resource_kind}/{ref_id}/proxy/{proxy_path} instead.
POST /clusters/enterprise_search/{cluster_id}/proxy/{enterprise_search_path}
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/proxy/{proxy_path} instead.
PUT /clusters/enterprise_search/{cluster_id}/proxy/{enterprise_search_path}
Use PUT /deployments/{deployment_id}/{resource_kind}/{ref_id}/proxy/{proxy_path} instead.
DELETE /clusters/enterprise_search/{cluster_id}/proxy/{enterprise_search_path}
Use DELETE /deployments/{deployment_id}/{resource_kind}/{ref_id}/proxy/{proxy_path} instead.
GET /clusters/kibana
Use GET /deployments instead.
POST /clusters/kibana
Use PUT /deployments/{deployment_id} instead.
POST /clusters/kibana/_resync
Use POST /deployments/_resync instead.
POST /clusters/kibana/_search
Use POST /deployments/_search instead.
GET /clusters/kibana/{cluster_id}
Use GET /deployments/{deployment_id} instead.
DELETE /clusters/kibana/{cluster_id}
Use DELETE /deployments/{deployment_id}/{resource_kind}/{ref_id} instead.
POST /clusters/kibana/{cluster_id}/_restart
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/_restart instead.
POST /clusters/kibana/{cluster_id}/_resync
Use POST /deployments/{deployment_id}/_resync instead.
POST /clusters/kibana/{cluster_id}/_shutdown
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/_shutdown instead.
POST /clusters/kibana/{cluster_id}/_upgrade
Use POST /deployments/{deployment_id}/{stateless_resource_kind}/{ref_id}/_upgrade instead.
POST /clusters/kibana/{cluster_id}/instances/_move
POST /clusters/kibana/{cluster_id}/instances/_start
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/_start instead.
POST /clusters/kibana/{cluster_id}/instances/_stop
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/_stop instead.
POST /clusters/kibana/{cluster_id}/instances/maintenance-mode/_start
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/maintenance-mode/_start instead.
POST /clusters/kibana/{cluster_id}/instances/maintenance-mode/_stop
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/maintenance-mode/_stop instead.
POST /clusters/kibana/{cluster_id}/instances/{instance_ids}/_move
POST /clusters/kibana/{cluster_id}/instances/{instance_ids}/_start
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/{instance_ids}/_start instead.
POST /clusters/kibana/{cluster_id}/instances/{instance_ids}/_stop
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/{instance_ids}/_stop instead.
POST /clusters/kibana/{cluster_id}/instances/{instance_ids}/maintenance-mode/_start
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/{instance_ids}/maintenance-mode/_start instead.
POST /clusters/kibana/{cluster_id}/instances/{instance_ids}/maintenance-mode/_stop
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/instances/{instance_ids}/maintenance-mode/_stop instead.
PUT /clusters/kibana/{cluster_id}/metadata/name/{new_name}
Use PUT /deployments/{deployment_id} instead.
GET /clusters/kibana/{cluster_id}/metadata/raw
Use GET /deployments/{deployment_id}?show_metadata=true instead.
POST /clusters/kibana/{cluster_id}/metadata/raw
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/metadata/raw instead.
GET /clusters/kibana/{cluster_id}/metadata/settings
Use GET /deployments/{deployment_id} instead.
PATCH /clusters/kibana/{cluster_id}/metadata/settings
Use PUT /deployments/{deployment_id} instead.
GET /clusters/kibana/{cluster_id}/plan
Use GET /deployments/{deployment_id} instead.
POST /clusters/kibana/{cluster_id}/plan
Use PUT /deployments/{deployment_id} instead.
GET /clusters/kibana/{cluster_id}/plan/activity
Use GET /deployments/{deployment_id}?show_plan_history=true&show_plan_logs=true instead.
GET /clusters/kibana/{cluster_id}/plan/pending
Use GET /deployments/{deployment_id} instead.
DELETE /clusters/kibana/{cluster_id}/plan/pending
Use DELETE /deployments/{deployment_id}/{resource_kind}/{ref_id}/plan/pending instead.
GET /clusters/kibana/{cluster_id}/proxy/{kibana_path}
Use GET /deployments/{deployment_id}/{resource_kind}/{ref_id}/proxy/{proxy_path} instead.
POST /clusters/kibana/{cluster_id}/proxy/{kibana_path}
Use POST /deployments/{deployment_id}/{resource_kind}/{ref_id}/proxy/{proxy_path} instead.
PUT /clusters/kibana/{cluster_id}/proxy/{kibana_path}
Use PUT /deployments/{deployment_id}/{resource_kind}/{ref_id}/proxy/{proxy_path} instead.
DELETE /clusters/kibana/{cluster_id}/proxy/{kibana_path}
Use DELETE /deployments/{deployment_id}/{resource_kind}/{ref_id}/proxy/{proxy_path} instead.
GET /deployments/ip-filtering/associations/{association_type}/{associated_entity_id}/rulesets
Use GET /deployments/traffic-filter/associations/{association_type}/{associated_entity_id}/rulesets instead.
GET /deployments/ip-filtering/rulesets
Use GET /deployments/traffic-filter/rulesets instead.
POST /deployments/ip-filtering/rulesets
Use POST /deployments/traffic-filter/rulesets instead.
GET /deployments/ip-filtering/rulesets/{ruleset_id}
Use GET /deployments/traffic-filter/rulesets/{ruleset_id} instead.
PUT /deployments/ip-filtering/rulesets/{ruleset_id}
Use PUT /deployments/traffic-filter/rulesets/{ruleset_id} instead.
DELETE /deployments/ip-filtering/rulesets/{ruleset_id}
Use DELETE /deployments/traffic-filter/rulesets/{ruleset_id} instead.
GET /deployments/ip-filtering/rulesets/{ruleset_id}/associations
Use GET /deployments/traffic-filter/rulesets/{ruleset_id}/associations instead.
POST /deployments/ip-filtering/rulesets/{ruleset_id}/associations
Use POST /deployments/traffic-filter/rulesets/{ruleset_id}/associations instead.
DELETE /deployments/ip-filtering/rulesets/{ruleset_id}/associations/{association_type}/{associated_entity_id}
Use DELETE /deployments/traffic-filter/rulesets/{ruleset_id}/associations/{association_type}/{associated_entity_id} instead.
POST /platform/configuration/security/deployment/_disable
The security deployment is required in Elastic Cloud Enterprise 3.0, so there is no longer an API for disabling it.
POST /platform/configuration/security/deployment/_enable
The security deployment is already enabled in Elastic Cloud Enterprise 3.0, so there is no longer an API for enabling it.
GET /platform/configuration/templates/deployments
Use GET /deployments/templates instead.
POST /platform/configuration/templates/deployments
Use POST /deployments/templates instead.
DELETE /platform/configuration/templates/deployments/{template_id}
Use DELETE /deployments/templates/{template_id} instead.
GET /platform/configuration/templates/deployments/{template_id}
Use GET /deployments/templates/{template_id} instead.
PUT /platform/configuration/templates/deployments/{template_id}
Use PUT /deployments/templates/{template_id} instead.
POST /users/auth/reauthenticate
Use API keys instead.

Deployments API replaces clusters APIedit

Starting in Elastic Cloud Enterprise 3.0, there is no longer a top-level concept of clusters. Deployments are now the only top level model, and they represent a collection of resources. A resource is essentially what used to be called a cluster. It represents a deployable product with an infrastructure plan and a topology of instances that are deployed on one or more allocators. A resource has a kind (Elasticsearch, Kibana, Enterprise Search, and so on) and a reference ID (refid) that uniquely identifies it within the deployment. The resource kind and refid are used throughout the API to replace operations that used to be for operating on individual clusters. You can retrieve the resources and their corresponding refids for a given deployment by using the Get Deployment API.

As an example, in Elastic Cloud Enterprise 2, you could use the clusters API like so to create a deployment:

POST /api/v1/clusters/elasticsearch
{
  "cluster_name": "My deployment",
  "plan": {
    "cluster_topology": [
      {
        "id": "hot_content",
        "node_type": {
          "data": true,
          "master": true,
          "ingest": true,
          "ml": false
        },
        "node_roles": [
          "master",
          "ingest",
          "transform",
          "data_hot",
          "remote_cluster_client",
          "data_content"
        ],
        "zone_count": 1,
        "elasticsearch": {
          "node_attributes": {
            "data": "hot"
          },
          "enabled_built_in_plugins": []
        },
        "instance_configuration_id": "data.default",
        "size": {
          "value": 4096,
          "resource": "memory"
        }
      },
      {
        "id": "warm",
        "node_type": {
          "data": true,
          "master": false,
          "ingest": false,
          "ml": false
        },
        "node_roles": [
          "data_warm",
          "remote_cluster_client"
        ],
        "zone_count": 1,
        "elasticsearch": {
          "node_attributes": {
            "data": "warm"
          },
          "enabled_built_in_plugins": []
        },
        "instance_configuration_id": "data.highstorage",
        "size": {
          "value": 0,
          "resource": "memory"
        }
      },
      {
        "id": "cold",
        "node_type": {
          "data": true,
          "master": false,
          "ingest": false,
          "ml": false
        },
        "node_roles": [
          "data_cold",
          "remote_cluster_client"
        ],
        "zone_count": 1,
        "elasticsearch": {
          "node_attributes": {
            "data": "cold"
          },
          "enabled_built_in_plugins": []
        },
        "instance_configuration_id": "data.highstorage",
        "size": {
          "value": 0,
          "resource": "memory"
        }
      },
      {
        "id": "frozen",
        "node_type": {
          "data": true,
          "master": false,
          "ingest": false,
          "ml": false
        },
        "node_roles": [
          "data_frozen"
        ],
        "zone_count": 1,
        "elasticsearch": {
          "node_attributes": {
            "data": "frozen"
          },
          "enabled_built_in_plugins": []
        },
        "instance_configuration_id": "data.frozen",
        "size": {
          "value": 0,
          "resource": "memory"
        }
      },
      {
        "id": "coordinating",
        "node_type": {
          "ingest": true,
          "master": false,
          "data": false,
          "ml": false
        },
        "node_roles": [
          "ingest",
          "remote_cluster_client"
        ],
        "zone_count": 1,
        "instance_configuration_id": "coordinating",
        "size": {
          "value": 0,
          "resource": "memory"
        },
        "elasticsearch": {
          "enabled_built_in_plugins": []
        }
      },
      {
        "id": "master",
        "node_type": {
          "master": true,
          "data": false,
          "ml": false,
          "ingest": false
        },
        "node_roles": [
          "master",
          "remote_cluster_client"
        ],
        "zone_count": 1,
        "instance_configuration_id": "master",
        "size": {
          "value": 0,
          "resource": "memory"
        },
        "elasticsearch": {
          "enabled_built_in_plugins": []
        }
      },
      {
        "id": "ml",
        "node_type": {
          "ml": true,
          "data": false,
          "master": false,
          "ingest": false
        },
        "node_roles": [
          "ml",
          "remote_cluster_client"
        ],
        "zone_count": 1,
        "instance_configuration_id": "ml",
        "size": {
          "value": 0,
          "resource": "memory"
        },
        "elasticsearch": {
          "enabled_built_in_plugins": []
        }
      }
    ],
    "elasticsearch": {
      "version": "7.15.1"
    },
    "autoscaling_enabled": false,
    "deployment_template": {
      "id": "default"
    }
  }
}
POST /api/v1/clusters/kibana
{
  "elasticsearch_cluster_id": {elasticsearch_id},
  "plan": {
    "zone_count": 1,
    "cluster_topology": [
      {
        "instance_configuration_id": "kibana",
        "size": {
          "value": 1024,
          "resource": "memory"
        },
        "zone_count": 1
      }
    ],
    "kibana": {
      "version": "7.15.1"
    }
  }
}

With the deployments API, you can create the same deployment like so:

POST /api/v1/deployments
{
  "resources": {
    "elasticsearch": [
      {
        "ref_id": "main-elasticsearch",
        "region": "ece-region",
        "plan": {
          "cluster_topology": [
            {
              "id": "hot_content",
              "node_roles": [
                "master",
                "ingest",
                "transform",
                "data_hot",
                "remote_cluster_client",
                "data_content"
              ],
              "zone_count": 1,
              "elasticsearch": {
                "node_attributes": {
                  "data": "hot"
                },
                "enabled_built_in_plugins": []
              },
              "instance_configuration_id": "data.default",
              "size": {
                "value": 4096,
                "resource": "memory"
              }
            },
            {
              "id": "warm",
              "node_roles": [
                "data_warm",
                "remote_cluster_client"
              ],
              "zone_count": 1,
              "elasticsearch": {
                "node_attributes": {
                  "data": "warm"
                },
                "enabled_built_in_plugins": []
              },
              "instance_configuration_id": "data.highstorage",
              "size": {
                "value": 0,
                "resource": "memory"
              }
            },
            {
              "id": "cold",
              "node_roles": [
                "data_cold",
                "remote_cluster_client"
              ],
              "zone_count": 1,
              "elasticsearch": {
                "node_attributes": {
                  "data": "cold"
                },
                "enabled_built_in_plugins": []
              },
              "instance_configuration_id": "data.highstorage",
              "size": {
                "value": 0,
                "resource": "memory"
              }
            },
            {
              "id": "frozen",
              "node_roles": [
                "data_frozen"
              ],
              "zone_count": 1,
              "elasticsearch": {
                "node_attributes": {
                  "data": "frozen"
                },
                "enabled_built_in_plugins": []
              },
              "instance_configuration_id": "data.frozen",
              "size": {
                "value": 0,
                "resource": "memory"
              }
            },
            {
              "id": "coordinating",
              "node_roles": [
                "ingest",
                "remote_cluster_client"
              ],
              "zone_count": 1,
              "instance_configuration_id": "coordinating",
              "size": {
                "value": 0,
                "resource": "memory"
              },
              "elasticsearch": {
                "enabled_built_in_plugins": []
              }
            },
            {
              "id": "master",
              "node_roles": [
                "master",
                "remote_cluster_client"
              ],
              "zone_count": 1,
              "instance_configuration_id": "master",
              "size": {
                "value": 0,
                "resource": "memory"
              },
              "elasticsearch": {
                "enabled_built_in_plugins": []
              }
            },
            {
              "id": "ml",
              "node_roles": [
                "ml",
                "remote_cluster_client"
              ],
              "zone_count": 1,
              "instance_configuration_id": "ml",
              "size": {
                "value": 0,
                "resource": "memory"
              },
              "elasticsearch": {
                "enabled_built_in_plugins": []
              }
            }
          ],
          "elasticsearch": {
            "version": "7.15.1"
          },
          "autoscaling_enabled": false,
          "deployment_template": {
            "id": "default"
          }
        },
        "settings": {
          "dedicated_masters_threshold": 6,
          "snapshot": {
            "enabled": false
          }
        }
      }
    ],
    "kibana": [
      {
        "ref_id": "main-kibana",
        "elasticsearch_cluster_ref_id": "main-elasticsearch",
        "region": "ece-region",
        "plan": {
          "zone_count": 1,
          "cluster_topology": [
            {
              "instance_configuration_id": "kibana",
              "size": {
                "value": 1024,
                "resource": "memory"
              },
              "zone_count": 1
            }
          ],
          "kibana": {
            "version": "7.15.1"
          }
        }
      }
    ],
    "apm": [],
    "enterprise_search": []
  },
  "name": "My deployment",
  "metadata": {
    "system_owned": false
  }
}

You can find many more examples in our Elastic Cloud Enterprise API documentation.

Deprecated Elastic Stack versionsedit

Elastic Stack verson 5.6.0 is no longer maintained and will not be supported on ECE 3.0. You must upgrade to Elastic Stack version 6.0 or above before upgrading to ECE 3.0, and we strongly recommend upgrading to a maintained version. More information is available on the Elastic products end-of-life page.