As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Trabalhar com snapshots de índice do Amazon Elasticsearch Service
Snapshots são backups de índices e do estado de um cluster. O estado inclui configurações do cluster, informações de nó, configurações de índice e alocação de estilhaços.
No Amazon Elasticsearch Service, os snapshots vêm de duas formas: automatizado e manual.
-
Os snapshots automatizados são apenas para recuperação de cluster. Você pode usá-los para restaurar seu domínio em caso de status de cluster vermelho ou outra perda de dados. O Amazon ES armazena snapshots automatizados em um bucket do Amazon S3 pré-configurado sem custo adicional.
-
Os snapshots manuais são para recuperação de cluster ou movimentação de dados de um cluster para outro. Como o nome sugere, você precisa iniciar os snapshots manuais. Esses snapshots são armazenados no seu próprio bucket do Amazon S3, e cobranças padrão do S3 são aplicáveis. Se você tiver um snapshot de um cluster autogerenciado do Elasticsearch, poderá até usar esse snapshot para migrar para um domínio do Amazon ES.
Todos os domínios do Amazon ES têm snapshots automatizados, mas a frequência é diferente:
-
Para domínios executando o Elasticsearch 5.3 e posterior, Amazon ES tira snapshots automatizados a cada hora e retém até 336 deles por 14 dias.
-
Para domínios executando o Elasticsearch 5.1 e anterior, o Amazon ES tira snapshots automatizados diários (no horário que você especificar) e retém até 14 deles por 30 dias.
Se o cluster entrar no status vermelho, o Amazon ES interromperá a criação de snapshots automatizados. Se você não corrigir o problema dentro de duas semanas, poderá perder permanentemente os dados do cluster. Para obter etapas sobre a solução de problemas, consulte Status de cluster vermelho.
Tópicos
Pré-requisitos do snapshots manuais
Para criar os snapshots manualmente, é necessário trabalhar com o IAM e o Amazon S3. Verifique primeiro se você cumpre os pré-requisitos a seguir antes de tentar criar um snapshot.
Pré-requisito | Descrição |
---|---|
S3 bucket |
Armazena snapshots manuais para o domínio do Amazon ES. Anote o nome do bucket. Você precisará dele em dois locais:
Para obter mais informações, consulte Criar um bucket no Guia de conceitos básicos do Amazon Simple Storage Service. Não aplique uma regra de ciclo de vida do S3 Glacier a esse bucket. Os snapshots manuais não são compatíveis com a classe de armazenamento do S3 Glacier. |
IAM role (Função do IAM) |
Concede permissões ao Amazon Elasticsearch Service. O restante deste capítulo se refere
a essa função como A relação de confiança da função deve especificar o Amazon Elasticsearch Service na
declaração
A função deve ter a seguinte politica anexada:
Para obter mais informações, consulte Adicionar e remover permissões de identidade do IAM no Guia do usuário do IAM. |
Permissões |
É necessário ser capaz de assumir a função
Se não tiver
|
Registro de um repositório de snapshots manuais
Você deve registrar o repositório de snapshots com o Amazon Elasticsearch Service
antes de poder fazer snapshots de índices manuais. Esta operação única exige que você
assine a solicitação da AWS com credenciais que tenham permissão para acessar TheSnapshotRole
, conforme descrito em Pré-requisitos do snapshots manuais.
Você não pode usar curl
para executar essa operação porque ele não dá suporte à assinatura de solicitação
da AWS. Em vez disso, use o cliente do Python de amostra, Postman
PUT
elasticsearch-domain-endpoint
/_snapshot/my-snapshot-repo-name
{ "type": "s3", "settings": { "bucket": "s3-bucket-name
", "region": "region
", "role_arn": "arn:aws:iam::123456789012:role/TheSnapshotRole
" } }
Registrar um diretório de snapshots é uma operação única, mas para migrar de um domínio para outro, é preciso registrar o repositório de snapshots no domínio antigo e no novo. O nome do repositório é arbitrário.
-
Se você estiver migrando para um novo domínio (ou registrando o mesmo repositório com vários domínios por algum outro motivo), adicione
"readonly": true
a"settings"
ao registrar o repositório no novo domínio. Essa configuração ajuda a evitar a substituição acidental dos dados do domínio antigo. -
Para ativar a criptografia no lado do servidor com chaves gerenciadas pelo S3 para o repositório de snapshots, adicione
"server_side_encryption": true
a"settings"
.
Se o domínio residir em uma VPC, o computador deverá estar conectado à VPC para que
a solicitação registre o repositório de snapshots com êxito. O acesso a uma VPC varia
de acordo com a configuração de rede, mas geralmente requer uma conexão com VPN ou
rede corporativa. Para saber se você pode entrar no domínio do Amazon ES, navegue
até https://
em um navegador da Web e confira se você recebe a resposta JSON padrão.
your-vpc-domain
.region
.es.amazonaws.com
Se você usar o controle de acesso minucioso, consulte Snapshots manuais para obter uma etapa adicional.
Cliente de exemplo Python
Salve o código Python de exemplo a seguir como um arquivo Python, como register-repo.py
. O cliente requer os pacotes AWS SDK para Python (Boto3),
Um exemplo de código baseado em Java está disponível em Assinar solicitações de HTTP.
Você deve atualizar as seguintes variáveis: host
, region
, path
e payload
.
import boto3 import requests from requests_aws4auth import AWS4Auth host = '' # include https:// and trailing / region = '' # e.g. us-west-1 service = 'es' credentials = boto3.Session().get_credentials() awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token) # Register repository path = '_snapshot/
my-snapshot-repo-name
' # the Elasticsearch API endpoint url = host + path payload = { "type": "s3", "settings": { "bucket": "s3-bucket-name
", "region": "us-west-1
", "role_arn": "arn:aws:iam::123456789012:role/TheSnapshotRole
" } } headers = {"Content-Type": "application/json"} r = requests.put(url, auth=awsauth, json=payload, headers=headers) print(r.status_code) print(r.text) # # Take snapshot # # path = '_snapshot/my-snapshot-repo/my-snapshot' # url = host + path # # r = requests.put(url, auth=awsauth) # # print(r.text) # # # Delete index # # path = 'my-index' # url = host + path # # r = requests.delete(url, auth=awsauth) # # print(r.text) # # # Restore snapshot (all indices except Kibana and fine-grained access control) # # path = '_snapshot/my-snapshot-repo/my-snapshot/_restore' # url = host + path # # payload = { # "indices": "-.kibana*,-.opendistro_security", # "include_global_state": False # } # # headers = {"Content-Type": "application/json"} # # r = requests.post(url, auth=awsauth, json=payload, headers=headers) # # print(r.text) # # # Restore snapshot (one index) # # path = '_snapshot/my-snapshot-repo/my-snapshot/_restore' # url = host + path # # payload = {"indices": "my-index"} # # headers = {"Content-Type": "application/json"} # # r = requests.post(url, auth=awsauth, json=payload, headers=headers) # # print(r.text)
Manual deObtenção de snapshots manuais
Os snapshots não são instantâneos; eles levam tempo para serem concluídos e não representam exibições pontuais perfeitas do cluster. Enquanto um snapshot está em andamento, você ainda pode indexar documentos e fazer outras solicitações ao cluster, mas novos documentos (e atualizações em documentos existentes) geralmente não são incluídos no snapshot. O snapshot inclui estilhaços principais existentes quando Elasticsearch iniciou o snapshot. Dependendo do tamanho do grupo de threads de snapshot, diferentes fragmentos podem ser incluídos no snapshot em momentos um pouco diferentes.
Os snapshots do Elasticsearch são incrementais, o que significa que eles armazenam somente dados que foram alterados desde o último snapshot bem-sucedido. Essa natureza incremental significa que a diferença no uso de disco entre snapshots frequentes e infrequentes normalmente é mínima. Ou seja, criar snapshots por hora por uma semana (em um total de 168 snapshots) pode não usar muito mais espaço em disco do que criar um único snapshot no final da semana. Além disso, quanto maior a frequência da criação de snapshots, menos tempo eles demoram para serem concluídos. Alguns usuários do Elasticsearch criam snapshots a cada meia hora.
Você especifica duas informações ao criar um snapshot:
-
Nome do repositório de snapshots
-
Nome do snapshot
Os exemplos neste capítulo usam curl
Para obter um snapshot manualmente
-
Você não poderá obter um snapshot se houver um em andamento no momento. Para verificar, execute o seguinte comando:
curl -XGET '
elasticsearch-domain-endpoint
/_snapshot/_status' -
Execute o comando a seguir para obter um snapshot manualmente:
curl -XPUT '
elasticsearch-domain-endpoint
/_snapshot/repository
/snapshot-name
'
O tempo necessário para obter um snapshot aumenta de acordo com o tamanho do domínio
do Amazon ES. As operações de snapshot de longa duração, às vezes, encontram o seguinte
erro: 504
GATEWAY_TIMEOUT
: Normalmente, você pode ignorar esses erros e esperar a conclusão da operação com
êxito. Use o comando a seguir para verificar o estado de todos os snapshots de seu
domínio:
curl -XGET '
elasticsearch-domain-endpoint
/_snapshot/repository
/_all?pretty'
Restauração de snapshots
Se você usar aliases de índice, interrompa as solicitações de gravação para um alias (ou mude o alias para outro índice) antes de excluir seu índice. Parar as solicitações de gravação ajuda a evitar o seguinte cenário:
-
Você exclui um índice, que também exclui seu alias.
-
Uma solicitação de gravação com erro para o alias recém-excluído cria um novo índice com o mesmo nome do alias.
-
Você não pode mais usar o alias devido a um conflito de nomes com o novo índice.
Se você alternou o alias para outro índice, especifique "include_aliases": false
ao restaurar a partir de um snapshot.
Para restaurar um snapshot
-
Identifique o snapshot que você deseja restaurar. Para ver todos os repositórios de snapshots, execute o comando a seguir:
curl -XGET '
elasticsearch-domain-endpoint
/_snapshot?pretty'Após identificar o repositório, execute o comando a seguir para ver todos os snapshots:
curl -XGET '
elasticsearch-domain-endpoint
/_snapshot/repository
/_all?pretty'nota A maioria dos snapshots automatizados é armazenada no repositório
cs-automated
. Se o seu domínio criptografa dados em repouso, eles são armazenados no repositóriocs-automated-enc
. Se não encontrar o repositório de snapshots manuais que estava buscando, confirme se você o registrou no domínio. -
(Opcional) Exclua ou renomeie um ou mais índices no domínio do Amazon ES. Você não precisa executar esta etapa se você não tiver conflitos de nomenclatura de índices no cluster e de índices no snapshot. Você não pode restaurar um snapshot de seus índices para um cluster do Elasticsearch que já contenha índices com os mesmos nomes.
-
Exclua os índices no mesmo domínio do Amazon ES e restaure o snapshot.
-
Renomeie os índices à medida que você os restaura a partir do snapshot e, mais tarde, reindexe-os.
-
Restaure o snapshot para um domínio diferente do Amazon ES (isso só é possível com snapshots manuais).
O exemplo a seguir mostra como excluir todos os índices existentes de um domínio:
curl -XDELETE '
elasticsearch-domain-endpoint
/_all'Se você não planeja restaurar todos os índices, talvez você queira excluir apenas um:
curl -XDELETE '
elasticsearch-domain-endpoint
/index-name
' -
-
Para restaurar um snapshot, execute o seguinte comando:
curl -XPOST '
elasticsearch-domain-endpoint
/_snapshot/repository
/snapshot
/_restore'Devido a permissões especiais no Kibana e índices de controle de acesso minucioso, as tentativas de restaurar todos os índices podem falhar, especialmente se você tentar restaurar a partir de um snapshot automatizado. O exemplo a seguir restaura apenas um índice
my-index
de2017-snapshot
no repositório de snapshotscs-automated
:curl -XPOST '
elasticsearch-domain-endpoint
/_snapshot/cs-automated/2017-snapshot/_restore' -d '{"indices": "my-index"}' -H 'Content-Type: application/json'Como alternativa, você pode querer restaurar todos os índices, exceto para o Kibana e os índices de controle de acesso minucioso:
curl -XPOST '
elasticsearch-domain-endpoint
/_snapshot/cs-automated/2017-snapshot/_restore' -d '{"indices": "-.kibana*,-.opendistro_security"}' -H 'Content-Type: application/json'
Se nem todos os estilhaços principais estiverem disponíveis para os índices envolvidos,
um snapshot poderá ter um state
de PARTIAL
. Esse valor indica que os dados de pelo menos um estilhaço não foram armazenados
com êxito. Ainda assim é possível restaurar por meio de um snapshot parcial, mas pode
ser necessário usar snapshots mais antigos para restaurar índices ausentes.
Excluir snapshots manuais
Para excluir um snapshot manual, envie a seguinte solicitação:
DELETE _snapshot/
repository
/snapshot
Usar o curador para snapshots
Para alguns usuários, ferramentas como o Curator são convenientes para gerenciamento
de índices e snapshots. Use o pip
pip install elasticsearch-curator
O Curator oferece funcionalidade avançada de filtragem que pode ajudar a simplificar
as tarefas de gerenciamento em clusters complexos. O Amazon ES é compatível com o
Curator em domínios que executam o Elasticsearch versão 5.1 e posterior. Você pode
usar o Curator como uma interface de linha de comando (CLI) ou API do Python. Se você
usar a CLI, exporte suas credenciais na linha de comando e configure o curator.yml
da seguinte maneira:
client: hosts: search-
my-domain
.us-west-1
.es.amazonaws.com port: 443 use_ssl: True aws_region:us-west-1
aws_sign_request: True ssl_no_validate: False timeout: 60 logging: loglevel: INFO
Para as funções de exemplo do Lambda que usam a API do Python, consulte Uso do Curator para girar dados no Amazon Elasticsearch Service.