Restore a snapshot
Generally available; Added in 0.0.0
Restore a snapshot of a cluster or data streams and indices.
You can restore a snapshot only to a running cluster with an elected master node. The snapshot repository must be registered and available to the cluster. The snapshot and cluster versions must be compatible.
To restore a snapshot, the cluster's global metadata must be writable. Ensure there are't any cluster blocks that prevent writes. The restore operation ignores index blocks.
Before you restore a data stream, ensure the cluster contains a matching index template with data streams enabled. To check, use the index management feature in Kibana or the get index template API:
GET _index_template/*?filter_path=index_templates.name,index_templates.index_template.index_patterns,index_templates.index_template.data_stream
If no such template exists, you can create one or restore a cluster state that contains one. Without a matching index template, a data stream can't roll over or create backing indices.
If your snapshot contains data from App Search or Workplace Search, you must restore the Enterprise Search encryption key before you restore the snapshot.
Required authorization
- Cluster privileges:
manage
Query parameters
-
Explicit operation timeout for connection to master node
Values are
-1
or0
. -
Should this request wait until the operation has completed before returning
POST /_snapshot/my_repository/snapshot_2/_restore?wait_for_completion=true
{
"indices": "index_1,index_2",
"ignore_unavailable": true,
"include_global_state": false,
"rename_pattern": "index_(.+)",
"rename_replacement": "restored_index_$1",
"include_aliases": false
}
resp = client.snapshot.restore(
repository="my_repository",
snapshot="snapshot_2",
wait_for_completion=True,
indices="index_1,index_2",
ignore_unavailable=True,
include_global_state=False,
rename_pattern="index_(.+)",
rename_replacement="restored_index_$1",
include_aliases=False,
)
const response = await client.snapshot.restore({
repository: "my_repository",
snapshot: "snapshot_2",
wait_for_completion: "true",
indices: "index_1,index_2",
ignore_unavailable: true,
include_global_state: false,
rename_pattern: "index_(.+)",
rename_replacement: "restored_index_$1",
include_aliases: false,
});
response = client.snapshot.restore(
repository: "my_repository",
snapshot: "snapshot_2",
wait_for_completion: "true",
body: {
"indices": "index_1,index_2",
"ignore_unavailable": true,
"include_global_state": false,
"rename_pattern": "index_(.+)",
"rename_replacement": "restored_index_$1",
"include_aliases": false
}
)
$resp = $client->snapshot()->restore([
"repository" => "my_repository",
"snapshot" => "snapshot_2",
"wait_for_completion" => "true",
"body" => [
"indices" => "index_1,index_2",
"ignore_unavailable" => true,
"include_global_state" => false,
"rename_pattern" => "index_(.+)",
"rename_replacement" => "restored_index_$1",
"include_aliases" => false,
],
]);
curl -X POST -H "Authorization: ApiKey $ELASTIC_API_KEY" -H "Content-Type: application/json" -d '{"indices":"index_1,index_2","ignore_unavailable":true,"include_global_state":false,"rename_pattern":"index_(.+)","rename_replacement":"restored_index_$1","include_aliases":false}' "$ELASTICSEARCH_URL/_snapshot/my_repository/snapshot_2/_restore?wait_for_completion=true"
client.snapshot().restore(r -> r
.ignoreUnavailable(true)
.includeAliases(false)
.includeGlobalState(false)
.indices("index_1,index_2")
.renamePattern("index_(.+)")
.renameReplacement("restored_index_$1")
.repository("my_repository")
.snapshot("snapshot_2")
.waitForCompletion(true)
);
{
"indices": "index_1,index_2",
"ignore_unavailable": true,
"include_global_state": false,
"rename_pattern": "index_(.+)",
"rename_replacement": "restored_index_$1",
"include_aliases": false
}
{
"indices": "index_1"
}