Nesta página, descrevemos como usar a recuperação pontual (PITR, na sigla em inglês) recuperar recursos em um repositório de FHIR para um estado em nos últimos 21 dias. Você pode usar a PITR para recuperar mudanças indesejadas, como excluindo recursos FHIR.
Antes de começar
As solicitações PITR são categorizadas como solicitações de operação avançada e são cobradas de acordo. Antes de usar a PITR, revise o preço de solicitações de operação avançada.
Histórico de versões de recursos PITR e FHIR
A PITR não depende do histórico de versões do recurso FHIR.
Ainda será possível usar a PITR se o campo disableResourceVersioning
em um repositório FHIR for true
ou se o histórico de um recurso FHIR
versões foram limpas.
Fluxo de trabalho de recuperação
Para garantir que uma recuperação de produção seja executada conforme o esperado, primeiro faça uma simulação. A simulação gera um ou mais arquivos contendo os IDs e os tipos da Recursos FHIR a serem recuperados. Verifique se os arquivos de saída estão corretos antes de executando a recuperação novamente em produção.
Recuperar recursos específicos ou de acordo com uma filtragem critérios, especifique um filtro.
Fazer uma simulação
Antes de recuperar recursos FHIR na produção, faça uma simulação.
Os exemplos a seguir mostram como fazer uma simulação
usando o fhirStores.rollback
.
REST
Recupere os recursos FHIR.
Para fazer uma simulação, verifique se o
force
éfalse
.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do seu projeto do Google Cloud;LOCATION
: o local do conjunto de dados;DATASET_ID
: o conjunto de dados pai do armazenamento de FHIRFHIR_STORE_ID
: o ID de armazenamento de FHIRRECOVERY_TIMESTAMP
: um ponto de recuperação nos últimos 21 dias. Use o formato RFC 3339. Especifique o horário do segundo e inclua um fuso horário, por exemplo,2015-02-07T13:28:17.239+02:00
ou2017-01-01T00:00:00Z
.CLOUD_STORAGE_BUCKET
: o URI totalmente qualificado para uma pasta ou bucket do Cloud Storage em que os arquivos de saída são gravados
Corpo JSON da solicitação:
{ "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "false" }
Para enviar a solicitação, escolha uma destas opções:
curl
Salve o corpo da solicitação em um arquivo chamado
request.json
. Execute o comando a seguir no terminal para criar ou substituir esse arquivo no diretório atual:cat > request.json << 'EOF' { "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "false" } EOF
Depois execute o comando a seguir para enviar a solicitação REST:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:rollback"PowerShell
Salve o corpo da solicitação em um arquivo chamado
request.json
. Execute o comando a seguir no terminal para criar ou substituir esse arquivo no diretório atual:@' { "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "false" } '@ | Out-File -FilePath request.json -Encoding utf8
Depois execute o comando a seguir para enviar a solicitação REST:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:rollback" | Select-Object -Expand ContentAPIs Explorer
Copie o corpo da solicitação e abra o página de referência do método. O painel "APIs Explorer" é aberto no lado direito da página. Interaja com essa ferramenta para enviar solicitações. Cole o corpo da solicitação nessa ferramenta, preencha todos os outros campos obrigatórios e clique em Executar.
OPERATION_ID
. Você vai precisar desse valor na próxima etapa.Use o método
projects.locations.datasets.operations.get
para ver o status da operação de longa duração.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do seu projeto do Google Cloud;DATASET_ID
: o ID do conjunto de dados;LOCATION
: o local do conjunto de dados;OPERATION_ID
: o ID retornado da operação de longa duração.
Para enviar a solicitação, escolha uma destas opções:
curl
execute o seguinte comando:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"PowerShell
execute o seguinte comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentAPIs Explorer
Abra o página de referência do método. O painel "APIs Explorer" é aberto no lado direito da página. Interaja com essa ferramenta para enviar solicitações. Preencha todos os campos obrigatórios e clique em Executar.
"done": true
, o operação de longa duração foi concluída.
Conferir arquivos de saída de simulação
Cada simulação gera um ou mais arquivos contendo os IDs e os tipos de FHIR
recursos a serem recuperados. Os arquivos são criados em uma subpasta na pasta rollback_resources
no destino.
do bucket do Cloud Storage. O nome da subpasta é o ID da LRO retornado
fhirStores.rollback
. Para acessar os arquivos e garantir que a recuperação funcione
conforme esperado, consulte
Exibir metadados do objeto.
O número de arquivos é proporcional ao número de recursos FHIR recuperados.
Os nomes de arquivo usam o formato trial-NUMBER-of-TOTAL_NUMBER.txt
,
em que NUMBER
é o número do arquivo e TOTAL_NUMBER
é o número total de arquivos.
Esquema do arquivo de saída de simulação
Os arquivos de saída de uma recuperação de simulação usam o esquema mostrado tabela a seguir:
RESOURCE_TYPE |
RESOURCE_ID |
TIMESTAMP |
---|---|---|
O tipo de recurso FHIR. | O ID do recurso FHIR. | A hora em que o recurso FHIR foi criado ou atualizado no repositório FHIR. |
Recuperar na produção
Antes da recuperação na produção, faça uma simulação e inspecione o os arquivos de saída de simulação para garantir que a recuperação de produção seja executada conforme o esperado.
Os exemplos a seguir mostram como restaurar recursos FHIR na produção
usando o fhirStores.rollback
.
REST
Recupere os recursos FHIR.
Verifique se o
force
étrue
.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do seu projeto do Google Cloud;LOCATION
: o local do conjunto de dados;DATASET_ID
: o conjunto de dados pai do armazenamento de FHIRFHIR_STORE_ID
: o ID de armazenamento de FHIRRECOVERY_TIMESTAMP
: um ponto de recuperação nos últimos 21 dias. Use o formato RFC 3339. Especifique o horário do segundo e inclua um fuso horário, por exemplo,2015-02-07T13:28:17.239+02:00
ou2017-01-01T00:00:00Z
.CLOUD_STORAGE_BUCKET
: o URI totalmente qualificado para uma pasta ou bucket do Cloud Storage em que os arquivos de saída são gravados
Corpo JSON da solicitação:
{ "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "true" }
Para enviar a solicitação, escolha uma destas opções:
curl
Salve o corpo da solicitação em um arquivo chamado
request.json
. Execute o comando a seguir no terminal para criar ou substituir esse arquivo no diretório atual:cat > request.json << 'EOF' { "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "true" } EOF
Depois execute o comando a seguir para enviar a solicitação REST:
curl -X POST \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Content-Type: application/json; charset=utf-8" \
-d @request.json \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:rollback"PowerShell
Salve o corpo da solicitação em um arquivo chamado
request.json
. Execute o comando a seguir no terminal para criar ou substituir esse arquivo no diretório atual:@' { "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "true" } '@ | Out-File -FilePath request.json -Encoding utf8
Depois execute o comando a seguir para enviar a solicitação REST:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method POST `
-Headers $headers `
-ContentType: "application/json; charset=utf-8" `
-InFile request.json `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/fhirStores/FHIR_STORE_ID:rollback" | Select-Object -Expand ContentAPIs Explorer
Copie o corpo da solicitação e abra o página de referência do método. O painel "APIs Explorer" é aberto no lado direito da página. Interaja com essa ferramenta para enviar solicitações. Cole o corpo da solicitação nessa ferramenta, preencha todos os outros campos obrigatórios e clique em Executar.
OPERATION_ID
. Você vai precisar desse valor na próxima etapa.Use o método
projects.locations.datasets.operations.get
para ver o status da operação de longa duração.Antes de usar os dados da solicitação abaixo, faça as substituições a seguir:
PROJECT_ID
: o ID do seu projeto do Google Cloud;DATASET_ID
: o ID do conjunto de dados;LOCATION
: o local do conjunto de dados;OPERATION_ID
: o ID retornado da operação de longa duração.
Para enviar a solicitação, escolha uma destas opções:
curl
execute o seguinte comando:
curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"PowerShell
execute o seguinte comando:
$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred" }
Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand ContentAPIs Explorer
Abra o página de referência do método. O painel "APIs Explorer" é aberto no lado direito da página. Interaja com essa ferramenta para enviar solicitações. Preencha todos os campos obrigatórios e clique em Executar.
"done": true
, o operação de longa duração foi concluída.
Ver arquivos de saída de recuperação de produção
Uma recuperação de produção gera os arquivos a seguir. Os arquivos são criados
na pasta rollback_resources
do bucket de destino
do bucket do Cloud Storage. O nome da subpasta é o ID da LRO retornado
fhirStores.rollback
. Para acessar os arquivos, consulte
Exibir metadados do objeto.
success-NUMBER-of-TOTAL_NUMBER.txt
: contém recursos FHIR recuperados com sucesso.fail-NUMBER-of-TOTAL_NUMBER.txt
: contém Recursos FHIR que não foram recuperados. Um arquivo vazio será gerado mesmo se que não haja falhas.
Nos nomes dos arquivos, NUMBER
é o número, e TOTAL_NUMBER
é o número total de arquivos.
Esquema do arquivo de saída de Production
Os arquivos de sucesso e falha de uma recuperação de produção usam os seguintes
esquema. Os arquivos de erro contêm
ERROR_MESSAGE
.
RESOURCE_TYPE |
RESOURCE_ID |
ROLLBACK_VERSION_ID |
NEW_VERSION_ID |
ERROR_MESSAGE (somente arquivos de erro) |
---|---|---|---|---|
O tipo de recurso FHIR. | O ID do recurso FHIR. | O ID da versão atual do recurso no momento em que a recuperação foi iniciada. | O ID da versão atual do recurso após a recuperação. Se disableResourceVersioning for true ou se a recuperação de um recurso excluir o recurso, ROLLBACK_VERSION_ID e NEW_VERSION_ID vão estar vazios. |
Somente arquivos de erro. Descreve o motivo pelo qual o recurso FHIR foi registrado para ser recuperado. |
Usar filtros para recuperar recursos FHIR específicos
As seções a seguir descrevem como usar filtros para a recuperação
Recursos FHIR com base em um critério de filtro.
Você especifica os filtros no objeto RollbackFhirResourceFilteringFields
ao enviar
uma solicitação fhirStores.rollback
.
É possível combinar filtros ou usá-los individualmente em vários casos de uso. incluindo o seguinte:
- Como recuperar recursos específicos do FHIR após exclusão acidental deixando os demais inalterados.
- Como restaurar um armazenamento FHIR para um estado antes de uma operação de importação específica importou determinados recursos FHIR.
Usar um arquivo de filtro
Por padrão, a PITR recupera todos os recursos FHIR em um repositório FHIR. Para recuperar
recursos FHIR específicos, especificar os tipos de recursos e os respectivos IDs em um arquivo,
e, em seguida, fazer upload do arquivo para
Cloud Storage. Especifique o local do arquivo no
inputGcsObject
.
Para ler um arquivo de filtro do Cloud Storage, você precisa conceder permissões ao Agente de serviço do Cloud Healthcare conta de serviço. Para mais informações, consulte Ler arquivos de filtro do Cloud Storage.
O arquivo de filtro pode ter qualquer extensão. Ele precisa usar o esquema a seguir, com um recurso FHIR por linha:
FHIR_RESOURCE_TYPE/FHIR_RESOURCE_ID
Por exemplo, para recuperar um recurso "Paciente" com o ID 8f25b0ac
e dois
Recursos de observação com os IDs d507417e90e
e e9950d90e
, especifique
o seguinte no arquivo de filtro:
Patient/8f25b0ac
Observation/d507417e90e
Observation/e9950d90e
Usar funções personalizadas
A API Cloud Healthcare oferece as funções de filtragem personalizadas a seguir.
É possível combinar as funções personalizadas com o
rollbackTime
para aplicar um filtro adicional.
tag
Detalhes Sintaxe da função tag("system") = "code"
Descrição Filtra recursos FHIR com base no elementoMeta.tag
do recurso.Argumentos system
string
Um URL que faz referência a um sistema de código. Para mais informações, consulte Como usar códigos nos recursos.code
string
Um valor que identifica um conceito conforme definido pelo sistema de código. Para mais informações, consulte Como usar códigos nos recursos.
extension_value_ts
Detalhes Sintaxe da função extension_value_ts("url")
Descrição Filtra recursos FHIR com base no valorurl
em um elementoextension
, em queurl
é um carimbo de data/hora Unix. Oferece suporte aos seguintes operadores de comparação:=
!=
<
>
<=
>=
Argumentos url
string
O URL canônico de um recurso StructureDefinition que define uma extensão. Por exemplo, no elementoextension
a seguir, ourl
éhttp://hl7.org/fhir/StructureDefinition/timezone
:"extension" : [{ "url" : "http://hl7.org/fhir/StructureDefinition/timezone", "valueCode" : "America/New_York" }]
Para mais informações, consulte Como definir extensões.
Filtrar por tipo de recurso FHIR
Para filtrar recursos FHIR
de forma mais ampla com base apenas no tipo do recurso, especifique os tipos de recurso na
types[]
matriz.
Filtrar por tipo de operação
Para filtrar recursos FHIR que foram modificados por CREATE
, UPDATE
ou
DELETE
transação,
especifique um valor no elemento ChangeType
tipo enumerado.
Por exemplo:
para recuperar apenas recursos FHIR que foram excluídos, especifique o
DELETE
.
Se você especificar CHANGE_TYPE_UNSPECIFIED
,
ALL
,
ou você não especificar um valor, todos os recursos FHIR serão recuperados.
Excluir recuperações anteriores
Para excluir recuperações anteriores ao recuperar recursos FHIR, defina o
excludeRollbacks
como true
. Você poderá excluir recuperações anteriores se o
recuperações funcionaram corretamente e você não deseja substituir suas alterações.
Também é possível executar várias recuperações com carimbos de data/hora sobrepostos.
Pense no seguinte cenário:
- Em
1:00
, você inicia uma recuperação com o carimbo de data/hora definido como0:01
. Em2:00
, a operação de recuperação exclui os recursosPatient/1
ePatient/2
do paciente no repositório FHIR. A operação de recuperação termina às3:00
. Vários dias depois, você executa uma operação de recuperação com o carimbo de data/hora Defina como
1:00
. Por padrão, executar a operação resultaria no seguinte:- A recriação incorreta dos recursos
Patient/1
ePatient/2
do paciente. - Recuperação correta dos recursos FHIR criados ou atualizados após
3:00
.
- A recriação incorreta dos recursos
Para excluir a operação de recuperação inicial que excluiu
os recursos Patient/1
e Patient/2
do paciente e evite recriá-los.
Defina excludeRollbacks
como true
.
Filtrar usando IDs de operação de longa duração (LRO, na sigla em inglês)
Se os recursos FHIR foram modificados por uma ou mais operações de longa duração (LROs, na sigla em inglês),
Especifique os IDs de LRO no campo operationIds
para recuperar os recursos modificados.
Consulte Como listar LROs para informações sobre como listar e visualizar IDs da LRO em um conjunto de dados da API Cloud Healthcare.
Tentar novamente os recursos FHIR que não foram recuperados na produção
Se alguns recursos FHIR falharem em uma recuperação de produção, tente novamente recuperação de desastres. Use o arquivo de saída de produção gerado, para encontrar os recursos FHIR com falha. Especifique os tipos desses recursos FHIR e os IDs deles em um arquivo de filtro e execute a recuperação novamente.
Sempre que você executa uma recuperação, ela é idempotente, se você usar a a mesma configuração em cada solicitação e o carimbo de data/hora é dos últimos 21 dias.
Limitações
A PITR não impõe a integridade referencial, independentemente Configuração
disableReferentialIntegrity
no armazenamento FHIR. Como restaurar apenas alguns FHIR podem deixar o repositório de FHIR em um estado que viola os parâmetros integridade dos dados.A PITR ignora a validação do perfil FHIR porque os recursos FHIR restaurados validados quando foram criados ou atualizados. Se o perfil do repositório FHIR mudar, a PITR pode deixar o repositório FHIR em um estado que viola a validação do perfil.
Se o valor de
rollbackTime
preceder o horário em que um recurso FHIR foi excluído no repositório FHIR, ele precisa terenableUpdateCreate
ativado ou o recurso não será recuperada.É possível atualizar um repositório de FHIR ou ler e gravar dados durante uma recuperação. mas você pode ter resultados inesperados, dependendo da etapa de recuperação. Por exemplo: uma solicitação de leitura pode retornar uma combinação de dados recuperados e não recuperados recursos FHIR. Se você atualizar um recurso, a recuperação poderá substituir o atualizar.
A PITR mantém o histórico de recursos do FHIR. Cada recurso restaurado recebe uma nova versão atual e seu histórico é mantido.