Questa pagina descrive come utilizzare il recupero point-in-time (PITR) per recuperare le risorse FHIR in un archivio FHIR in uno stato degli ultimi 21 giorni. Puoi utilizzare la PITR per recuperare da modifiche indesiderate, ad esempio l'eliminazione accidentale di risorse FHIR.
Prima di iniziare
Le richieste PITR sono classificate come richieste di operazioni avanzate e vengono fatturate di conseguenza. Prima di utilizzare il PITR, controlla i prezzi delle richieste di operazioni avanzate.
Cronologia delle versioni delle risorse FHIR e PITR
Il PITR non dipende dalla cronologia delle versioni delle risorse FHIR.
Puoi comunque utilizzare la PITR se il campo disableResourceVersioning
in un archivio FHIR è true
o se le versioni storiche di una risorsa FHIR sono state eliminate.
Flusso di lavoro di recupero
Per assicurarti che un recupero in produzione venga eseguito come previsto, esegui prima una prova. La simulazione di esecuzione genera uno o più file contenenti gli ID e i tipi di risorse FHIR da recuperare. Verifica la correttezza dei file di output prima di eseguire nuovamente il recupero in produzione.
Per recuperare risorse specifiche o risorse in base a criteri di filtraggine, specifica un filtro.
Esegui una prova
Prima di recuperare le risorse FHIR in produzione, esegui una prova.
Gli esempi riportati di seguito mostrano come eseguire un dry run utilizzando il metodo fhirStores.rollback
.
REST
Recupera le risorse FHIR.
Per eseguire una prova, assicurati che il campo
force
siafalse
.Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
PROJECT_ID
: l'ID del tuo progetto Google CloudLOCATION
: la posizione del set di datiDATASET_ID
: il set di dati principale dell'archivio FHIRFHIR_STORE_ID
: l'ID del datastore FHIRRECOVERY_TIMESTAMP
: un punto di ripristino negli ultimi 21 giorni. Utilizza il formato RFC 3339. Specifica l'ora fino al secondo e includi un fuso orario, ad esempio2015-02-07T13:28:17.239+02:00
o2017-01-01T00:00:00Z
.CLOUD_STORAGE_BUCKET
: l'URI completo di una cartella o di un bucket Cloud Storage in cui vengono scritti i file di output
Corpo JSON della richiesta:
{ "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "false" }
Per inviare la richiesta, scegli una delle seguenti opzioni:
curl
Salva il corpo della richiesta in un file denominato
request.json
. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory corrente:cat > request.json << 'EOF' { "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "false" } EOF
Quindi, esegui il seguente comando per inviare la richiesta 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
Salva il corpo della richiesta in un file denominato
request.json
. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory corrente:@' { "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "false" } '@ | Out-File -FilePath request.json -Encoding utf8
Quindi, esegui il seguente comando per inviare la richiesta 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 ContentExplorer API
Copia il corpo della richiesta e apri la pagina di riferimento del metodo. Il riquadro Esplora API si apre sul lato destro della pagina. Puoi interagire con questo strumento per inviare richieste. Incolla il corpo della richiesta in questo strumento, compila gli altri campi obbligatori e fai clic su Esegui.
OPERATION_ID
. Questo valore ti servirà nel passaggio successivo.Utilizza il metodo
projects.locations.datasets.operations.get
per ottenere lo stato dell'operazione a lunga esecuzione.Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
PROJECT_ID
: l'ID del tuo progetto Google CloudDATASET_ID
: l'ID set di datiLOCATION
: la posizione del set di datiOPERATION_ID
: l'ID restituito dall'operazione a lunga esecuzione
Per inviare la richiesta, scegli una delle seguenti opzioni:
curl
Esegui questo 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
Esegui questo 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 ContentExplorer API
Apri la pagina di riferimento del metodo. Il riquadro Esplora API si apre sul lato destro della pagina. Puoi interagire con questo strumento per inviare richieste. Compila i campi obbligatori e fai clic su Esegui.
"done": true
, l'operazione a lunga esecuzione è terminata.
Visualizzare i file di output del dry run
Ogni prova simulata genera uno o più file contenenti gli ID e i tipi di risorse FHIR da recuperare. I file vengono creati in una sottocartella della cartella rollback_resources
nel
bucket Cloud Storage di destinazione. Il nome della sottocartella è l'ID LRO restituito nella risposta
fhirStores.rollback
. Per visualizzare i file e assicurarti che il recupero funzioni come previsto, consulta Visualizzare i metadati degli oggetti.
Il numero di file è proporzionale al numero di risorse FHIR recuperate.
I nomi dei file utilizzano il formato trial-NUMBER-of-TOTAL_NUMBER.txt
,
dove NUMBER
è il numero del file e TOTAL_NUMBER
è il numero totale di file.
Schema del file di output del dry run
I file di output di un recupero di prova utilizzano lo schema mostrato nella tabella seguente:
RESOURCE_TYPE |
RESOURCE_ID |
TIMESTAMP |
---|---|---|
Il tipo di risorsa FHIR. | L'ID risorsa FHIR. | L'ora in cui la risorsa FHIR è stata creata o aggiornata nell'archivio FHIR. |
Ripristino in produzione
Prima di eseguire il recupero in produzione, esegui una simulazione e controlla i file di output della simulazione per assicurarti che il recupero in produzione venga eseguito come previsto.
Gli esempi riportati di seguito mostrano come ripristinare le risorse FHIR in produzione utilizzando il metodo fhirStores.rollback
.
REST
Recupera le risorse FHIR.
Assicurati che il campo
force
siatrue
.Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
PROJECT_ID
: l'ID del tuo progetto Google CloudLOCATION
: la posizione del set di datiDATASET_ID
: il set di dati principale dell'archivio FHIRFHIR_STORE_ID
: l'ID del datastore FHIRRECOVERY_TIMESTAMP
: un punto di ripristino negli ultimi 21 giorni. Utilizza il formato RFC 3339. Specifica l'ora fino al secondo e includi un fuso orario, ad esempio2015-02-07T13:28:17.239+02:00
o2017-01-01T00:00:00Z
.CLOUD_STORAGE_BUCKET
: l'URI completo di una cartella o di un bucket Cloud Storage in cui vengono scritti i file di output
Corpo JSON della richiesta:
{ "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "true" }
Per inviare la richiesta, scegli una delle seguenti opzioni:
curl
Salva il corpo della richiesta in un file denominato
request.json
. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory corrente:cat > request.json << 'EOF' { "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "true" } EOF
Quindi, esegui il seguente comando per inviare la richiesta 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
Salva il corpo della richiesta in un file denominato
request.json
. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory corrente:@' { "rollbackTime": "RECOVERY_TIMESTAMP", "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET", "force": "true" } '@ | Out-File -FilePath request.json -Encoding utf8
Quindi, esegui il seguente comando per inviare la richiesta 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 ContentExplorer API
Copia il corpo della richiesta e apri la pagina di riferimento del metodo. Il riquadro Esplora API si apre sul lato destro della pagina. Puoi interagire con questo strumento per inviare richieste. Incolla il corpo della richiesta in questo strumento, compila gli altri campi obbligatori e fai clic su Esegui.
OPERATION_ID
. Questo valore ti servirà nel passaggio successivo.Utilizza il metodo
projects.locations.datasets.operations.get
per ottenere lo stato dell'operazione a lunga esecuzione.Prima di utilizzare i dati della richiesta, apporta le seguenti sostituzioni:
PROJECT_ID
: l'ID del tuo progetto Google CloudDATASET_ID
: l'ID set di datiLOCATION
: la posizione del set di datiOPERATION_ID
: l'ID restituito dall'operazione a lunga esecuzione
Per inviare la richiesta, scegli una delle seguenti opzioni:
curl
Esegui questo 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
Esegui questo 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 ContentExplorer API
Apri la pagina di riferimento del metodo. Il riquadro Esplora API si apre sul lato destro della pagina. Puoi interagire con questo strumento per inviare richieste. Compila i campi obbligatori e fai clic su Esegui.
"done": true
, l'operazione a lunga esecuzione è terminata.
Visualizzare i file di output del recupero della produzione
Un recupero della produzione genera i seguenti file. I file vengono creati in una sottocartella della cartella rollback_resources
nel bucket Cloud Storage di destinazione. Il nome della sottocartella è l'ID LRO restituito nella risposta
fhirStores.rollback
. Per visualizzare i file, consulta
Visualizzare i metadati degli oggetti.
success-NUMBER-of-TOTAL_NUMBER.txt
: contiene le risorse FHIR recuperate correttamente.fail-NUMBER-of-TOTAL_NUMBER.txt
: contiene le risorse FHIR che non è stato possibile recuperare. Viene generato un file vuoto anche se non si verificano errori.
Nei nomi dei file, NUMBER
è il numero del file e TOTAL_NUMBER
è il numero totale di file.
Schema del file di output della produzione
I file di successo e di errore di un recupero della produzione utilizzano lo schema seguente. I file di errore contengono un'ulteriore colonna ERROR_MESSAGE
.
RESOURCE_TYPE |
RESOURCE_ID |
ROLLBACK_VERSION_ID |
NEW_VERSION_ID |
ERROR_MESSAGE (solo file di errore) |
---|---|---|---|---|
Il tipo di risorsa FHIR. | L'ID risorsa FHIR. | L'ID versione corrente della risorsa al momento dell'avvio del recupero. | L'ID versione corrente della risorsa dopo il recupero. Se disableResourceVersioning è true o se il recupero di una risorsa ne comporta l'eliminazione, ROLLBACK_VERSION_ID e NEW_VERSION_ID sono vuoti. |
Solo file di errore. Descrive il motivo per cui la risorsa FHIR è stata richiesta per il recupero. |
Utilizzare i filtri per recuperare risorse FHIR specifiche
Le sezioni seguenti descrivono come utilizzare i filtri per recuperare le risorse FHIR in base a criteri di filtro.
Specifica i filtri nell'oggetto RollbackFhirResourceFilteringFields
quando invii una richiesta fhirStores.rollback
.
Puoi combinare i filtri o utilizzarli singolarmente per più casi d'uso, tra cui:
- Recuperare risorse FHIR specifiche dopo l'eliminazione accidentale lasciando invariate le altre.
- Ripristino di un datastore FHIR a uno stato precedente a un'operazione di importazione specifica che ha importato determinate risorse FHIR.
Utilizzare un file filtro
Per impostazione predefinita, il PITR recupera tutte le risorse FHIR in un archivio FHIR. Per recuperare risorse FHIR specifiche, specifica i tipi di risorse e i relativi ID in un file, quindi carica il file su Cloud Storage. Specifica la posizione del file nel
inputGcsObject
.
Per leggere un file di filtro da Cloud Storage, devi concedere le autorizzazioni all'account di servizio Agente di servizio Cloud Healthcare. Per ulteriori informazioni, consulta Leggere i file di filtro da Cloud Storage.
Il file del filtro può avere qualsiasi estensione. Deve utilizzare lo schema seguente, con una risorsa FHIR per riga:
FHIR_RESOURCE_TYPE/FHIR_RESOURCE_ID
Ad esempio, per recuperare una risorsa Patient con l'ID 8f25b0ac
e due risorse Observation con gli ID d507417e90e
e e9950d90e
, specifica quanto segue nel file del filtro:
Patient/8f25b0ac
Observation/d507417e90e
Observation/e9950d90e
Utilizzare funzioni personalizzate
L'API Cloud Healthcare fornisce le seguenti funzioni di filtro personalizzato.
Puoi combinare le funzioni personalizzate con il
campo rollbackTime
per applicare un filtro aggiuntivo.
tag
Dettagli Sintassi della funzione tag("system") = "code"
Descrizione Filtra le risorse FHIR in base all'elemento della risorsaMeta.tag
.Argomenti system
string
Un URL che fa riferimento a un sistema di codici. Per ulteriori informazioni, consulta Utilizzare i codici nelle risorse.code
string
Un valore che identifica un concetto come definito dal sistema di codici. Per ulteriori informazioni, consulta Utilizzare i codici nelle risorse.
extension_value_ts
Dettagli Sintassi della funzione extension_value_ts("url")
Descrizione Filtra le risorse FHIR in base al valoreurl
in un elementoextension
, doveurl
è un timestamp Unix. Supporta i seguenti operatori di confronto:=
!=
<
>
<=
>=
Argomenti url
string
L'URL canonico di una risorsa StructureDefinition che definisce un'estensione. Ad esempio, nel seguente elementoextension
, ilurl
èhttp://hl7.org/fhir/StructureDefinition/timezone
:"extension" : [{ "url" : "http://hl7.org/fhir/StructureDefinition/timezone", "valueCode" : "America/New_York" }]
Per ulteriori informazioni, consulta Definire le estensioni.
Filtra per tipo di risorsa FHIR
Per filtrare le risorse FHIR
in modo più ampio in base solo al tipo di risorsa, specifica i tipi di risorse nell'array
types[]
.
Filtra per tipo di operazione
Per filtrare le risorse FHIR modificate da una transazione CREATE
, UPDATE
o
DELETE
,
specifica un valore nell'enum ChangeType
.
Ad esempio, per recuperare solo le risorse FHIR eliminate, specifica il valore DELETE
.
Se specifichi CHANGE_TYPE_UNSPECIFIED
,
ALL
o se non specifichi un valore, tutte le risorse FHIR vengono recuperate.
Escludere i recuperi precedenti
Per escludere i recuperi precedenti durante il recupero delle risorse FHIR, imposta il campo
excludeRollbacks
su true
. Puoi escludere i ripristini precedenti se hanno funzionato correttamente e non vuoi sovrascrivere le relative modifiche.
Puoi anche eseguire più ripristini con timestamp sovrapposti.
Considera il seguente scenario:
- Alle
1:00
, avvii un ripristino con il timestamp del ripristino impostato su0:01
. In2:00
, l'operazione di recupero elimina le risorse PatientPatient/1
ePatient/2
nell'archivio FHIR. L'operazione di recupero termina alle ore3:00
. Alcuni giorni dopo, esegui un'operazione di recupero con il timestamp del recupero impostato su
1:00
. Per impostazione predefinita, l'esecuzione dell'operazione ha il seguente risultato:- Ricostruzione errata delle risorse paziente
Patient/1
ePatient/2
. - Recuperare correttamente le risorse FHIR create o aggiornate dopo il giorno
3:00
.
- Ricostruzione errata delle risorse paziente
Per escludere l'operazione di recupero iniziale che ha eliminato le risorse paziente Patient/1
e Patient/2
ed evitare di ricrearle, imposta excludeRollbacks
su true
.
Filtrare utilizzando gli ID operazione a lunga esecuzione (LRO)
Se le risorse FHIR sono state modificate da una o più operazioni a lunga esecuzione (LRO),
puoi specificare gli ID LRO nel campo operationIds
per recuperare le risorse modificate.
Consulta la sezione Elenco delle richieste di organizzazione per informazioni su come elencare e visualizzare gli ID RLO in un set di dati dell'API Cloud Healthcare.
Riprova le risorse FHIR di cui non è stato possibile eseguire il recupero in produzione
Se il ripristino in produzione di alcune risorse FHIR non è riuscito, puoi riprovare. Utilizza il file di output di produzione generato per trovare le risorse FHIR che non sono riuscite. Specifica i tipi di queste risorse FHIR e i relativi ID in un file di filtro ed esegui di nuovo il recupero.
Ogni volta che esegui un recupero, questo è idempotente se utilizzi la stessa configurazione in ogni richiesta e il timestamp rientra negli ultimi 21 giorni.
Limitazioni
La PITR non applica l'integrità referenziale, indipendentemente dall'impostazione
disableReferentialIntegrity
nell'archivio FHIR. Il ripristino di alcune risorse FHIR potrebbe lasciare il datastore FHIR in uno stato che viola l'integrità referenziale.La PITR salta la convalida del profilo FHIR perché le risorse FHIR ripristinate sono state convalidate al momento della loro creazione o aggiornamento. Se la configurazione del profilo del datastore FHIR è cambiata, il PITR potrebbe lasciare il datastore FHIR in uno stato che viola la convalida del profilo.
Se il valore di
rollbackTime
precede il momento in cui una risorsa FHIR è stata eliminata nel datastore FHIR, in quest'ultimo deve essere attivatoenableUpdateCreate
, altrimenti la risorsa non verrà recuperata.Puoi aggiornare un archivio FHIR o leggere e scrivere dati durante un recupero, ma potresti visualizzare risultati imprevisti a seconda della fase di recupero. Ad esempio, una richiesta di lettura potrebbe restituire una combinazione di risorse FHIR recuperate e non recuperate. Se aggiorni una risorsa, il recupero potrebbe sovrascrivere l'aggiornamento.
Il PITR conserva la cronologia delle risorse FHIR. Ogni risorsa ripristinata viene aggiornata con una nuova versione e la relativa cronologia viene conservata.