Memulihkan resource FHIR dengan pemulihan point-in-time (PITR)

Halaman ini menjelaskan cara menggunakan pemulihan point-in-time (PITR) untuk memulihkan resource FHIR di penyimpanan FHIR menjadi kondisi dalam 21 hari terakhir. Anda dapat menggunakan PITR untuk memulihkan dari perubahan yang tidak diinginkan, seperti menghapus resource FHIR secara tidak sengaja.

Sebelum memulai

Permintaan PITR dikategorikan sebagai permintaan operasi lanjutan dan akan ditagih sesuai permintaan. Sebelum menggunakan PITR, tinjau harga untuk permintaan operasi lanjutan.

Histori versi resource PITR dan FHIR

PITR tidak bergantung pada histori versi resource FHIR. Anda masih dapat menggunakan PITR jika kolom disableResourceVersioning di penyimpanan FHIR adalah true, atau jika versi historis resource FHIR telah dihapus.

Alur kerja pemulihan

Untuk memastikan pemulihan produksi berjalan seperti yang diharapkan, lakukan uji coba terlebih dahulu. Uji coba ini menghasilkan satu atau beberapa file yang berisi ID dan jenis resource FHIR yang akan dipulihkan. Verifikasi kebenaran file output sebelum menjalankan pemulihan lagi dalam produksi.

Untuk memulihkan resource tertentu, atau memulihkan resource sesuai dengan kriteria pemfilteran, tentukan filter.

Lakukan uji coba

Sebelum memulihkan resource FHIR dalam produksi, lakukan uji coba.

Contoh berikut menunjukkan cara melakukan uji coba menggunakan metode fhirStores.rollback.

REST

  1. Memulihkan resource FHIR.

    Untuk melakukan uji coba, pastikan kolom force adalah false.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: ID project Google Cloud Anda
    • LOCATION: lokasi set data
    • DATASET_ID: set data induk penyimpanan FHIR
    • FHIR_STORE_ID: ID toko FHIR
    • RECOVERY_TIMESTAMP: titik pemulihan dalam 21 hari terakhir. Gunakan format RFC 3339. Tentukan waktu ke detik dan sertakan zona waktu, misalnya 2015-02-07T13:28:17.239+02:00 atau 2017-01-01T00:00:00Z.
    • CLOUD_STORAGE_BUCKET: URI yang sepenuhnya memenuhi syarat ke folder atau bucket Cloud Storage tempat file output ditulis

    Meminta isi JSON:

    {
      "rollbackTime": "RECOVERY_TIMESTAMP",
      "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET",
      "force": "false"
    }
    

    Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

    curl

    Simpan isi permintaan dalam file bernama request.json. Jalankan perintah berikut di terminal untuk membuat atau menimpa file ini di direktori saat ini:

    cat > request.json << 'EOF'
    {
      "rollbackTime": "RECOVERY_TIMESTAMP",
      "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET",
      "force": "false"
    }
    EOF

    Kemudian, jalankan perintah berikut untuk mengirim permintaan REST Anda:

    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

    Simpan isi permintaan dalam file bernama request.json. Jalankan perintah berikut di terminal untuk membuat atau menimpa file ini di direktori saat ini:

    @'
    {
      "rollbackTime": "RECOVERY_TIMESTAMP",
      "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET",
      "force": "false"
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    Kemudian jalankan perintah berikut untuk mengirim permintaan REST Anda:

    $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 Content

    APIs Explorer

    Salin isi permintaan dan buka halaman referensi metode. Panel APIs Explorer akan terbuka di sisi kanan halaman. Anda bisa berinteraksi dengan alat ini untuk mengirim permintaan. Tempelkan isi permintaan di alat ini, lengkapi kolom wajib lainnya, lalu klik Jalankan.

    Outputnya adalah sebagai berikut. Respons berisi ID untuk operasi yang berjalan lama (LRO). Operasi yang berjalan lama ditampilkan ketika panggilan metode mungkin memerlukan waktu tambahan untuk diselesaikan. Catat nilai OPERATION_ID. Anda memerlukan nilai ini di langkah berikutnya.

  2. Gunakan metode projects.locations.datasets.operations.get untuk mendapatkan status operasi yang berjalan lama.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: ID project Google Cloud Anda
    • DATASET_ID: ID set data
    • LOCATION: lokasi set data
    • OPERATION_ID: ID yang ditampilkan dari operasi yang berjalan lama

    Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

    curl

    Jalankan perintah berikut:

    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

    Jalankan perintah berikut:

    $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 Content

    APIs Explorer

    Buka halaman referensi metode. Panel APIs Explorer akan terbuka di sisi kanan halaman. Anda bisa berinteraksi dengan alat ini untuk mengirim permintaan. Lengkapi kolom yang wajib diisi, lalu klik Jalankan.

    Outputnya adalah sebagai berikut. Jika respons berisi "done": true, berarti operasi yang berjalan lama telah selesai.

Melihat file output uji coba

Setiap uji coba menghasilkan satu atau beberapa file yang berisi ID dan jenis resource FHIR yang akan dipulihkan. File akan dibuat dalam subfolder dalam folder rollback_resources di bucket Cloud Storage tujuan. Nama subfolder adalah ID LRO yang ditampilkan dalam respons fhirStores.rollback. Untuk melihat file dan memastikan pemulihan berfungsi seperti yang diharapkan, baca Melihat metadata objek.

Jumlah file sebanding dengan jumlah resource FHIR yang dipulihkan.

Nama file menggunakan format trial-NUMBER-of-TOTAL_NUMBER.txt, dengan NUMBER sebagai nomor file dan TOTAL_NUMBER adalah jumlah total file.

Skema file output uji coba

File output dari pemulihan uji coba menggunakan skema yang ditunjukkan dalam tabel berikut:

RESOURCE_TYPE RESOURCE_ID TIMESTAMP
Jenis resource FHIR. ID resource FHIR. Waktu saat resource FHIR dibuat atau diupdate di penyimpanan FHIR.

Pulihkan dalam produksi

Sebelum melakukan pemulihan dalam produksi, lakukan uji coba dan periksa file output uji coba untuk memastikan pemulihan produksi berjalan seperti yang diharapkan.

Contoh berikut menunjukkan cara memulihkan resource FHIR dalam produksi menggunakan metode fhirStores.rollback.

REST

  1. Memulihkan resource FHIR.

    Pastikan kolom force adalah true.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: ID project Google Cloud Anda
    • LOCATION: lokasi set data
    • DATASET_ID: set data induk penyimpanan FHIR
    • FHIR_STORE_ID: ID toko FHIR
    • RECOVERY_TIMESTAMP: titik pemulihan dalam 21 hari terakhir. Gunakan format RFC 3339. Tentukan waktu ke detik dan sertakan zona waktu, misalnya 2015-02-07T13:28:17.239+02:00 atau 2017-01-01T00:00:00Z.
    • CLOUD_STORAGE_BUCKET: URI yang sepenuhnya memenuhi syarat ke folder atau bucket Cloud Storage tempat file output ditulis

    Meminta isi JSON:

    {
      "rollbackTime": "RECOVERY_TIMESTAMP",
      "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET",
      "force": "true"
    }
    

    Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

    curl

    Simpan isi permintaan dalam file bernama request.json. Jalankan perintah berikut di terminal untuk membuat atau menimpa file ini di direktori saat ini:

    cat > request.json << 'EOF'
    {
      "rollbackTime": "RECOVERY_TIMESTAMP",
      "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET",
      "force": "true"
    }
    EOF

    Kemudian, jalankan perintah berikut untuk mengirim permintaan REST Anda:

    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

    Simpan isi permintaan dalam file bernama request.json. Jalankan perintah berikut di terminal untuk membuat atau menimpa file ini di direktori saat ini:

    @'
    {
      "rollbackTime": "RECOVERY_TIMESTAMP",
      "resultGcsBucket": "gs://CLOUD_STORAGE_BUCKET",
      "force": "true"
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    Kemudian jalankan perintah berikut untuk mengirim permintaan REST Anda:

    $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 Content

    APIs Explorer

    Salin isi permintaan dan buka halaman referensi metode. Panel APIs Explorer akan terbuka di sisi kanan halaman. Anda bisa berinteraksi dengan alat ini untuk mengirim permintaan. Tempelkan isi permintaan di alat ini, lengkapi kolom wajib lainnya, lalu klik Jalankan.

    Outputnya adalah sebagai berikut. Respons berisi ID untuk operasi yang berjalan lama (LRO). Operasi yang berjalan lama ditampilkan ketika panggilan metode mungkin memerlukan waktu tambahan untuk diselesaikan. Catat nilai OPERATION_ID. Anda memerlukan nilai ini di langkah berikutnya.

  2. Gunakan metode projects.locations.datasets.operations.get untuk mendapatkan status operasi yang berjalan lama.

    Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

    • PROJECT_ID: ID project Google Cloud Anda
    • DATASET_ID: ID set data
    • LOCATION: lokasi set data
    • OPERATION_ID: ID yang ditampilkan dari operasi yang berjalan lama

    Untuk mengirim permintaan Anda, pilih salah satu opsi berikut:

    curl

    Jalankan perintah berikut:

    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

    Jalankan perintah berikut:

    $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 Content

    APIs Explorer

    Buka halaman referensi metode. Panel APIs Explorer akan terbuka di sisi kanan halaman. Anda bisa berinteraksi dengan alat ini untuk mengirim permintaan. Lengkapi kolom yang wajib diisi, lalu klik Jalankan.

    Outputnya adalah sebagai berikut. Jika respons berisi "done": true, berarti operasi yang berjalan lama telah selesai.

Melihat file output pemulihan produksi

Pemulihan produksi menghasilkan file berikut. File akan dibuat di subfolder dalam folder rollback_resources di bucket Cloud Storage tujuan. Nama subfolder adalah ID LRO yang ditampilkan dalam respons fhirStores.rollback. Untuk melihat file, baca bagian Melihat metadata objek.

  • success-NUMBER-of-TOTAL_NUMBER.txt: Berisi resource FHIR yang berhasil dipulihkan.
  • fail-NUMBER-of-TOTAL_NUMBER.txt: Berisi resource FHIR yang gagal dipulihkan. File kosong akan dibuat meskipun tidak ada kegagalan.

Dalam nama file, NUMBER adalah nomor file, dan TOTAL_NUMBER adalah jumlah total file.

Skema file output produksi

File berhasil dan gagal dari pemulihan produksi menggunakan skema berikut. File error berisi kolom ERROR_MESSAGE tambahan.

RESOURCE_TYPE RESOURCE_ID ROLLBACK_VERSION_ID NEW_VERSION_ID ERROR_MESSAGE (Hanya file error)
Jenis resource FHIR. ID resource FHIR. ID versi resource saat ini pada saat pemulihan dimulai. ID versi resource saat ini setelah pemulihan. Jika disableResourceVersioning adalah true, atau jika memulihkan resource akan menghapus resource, ROLLBACK_VERSION_ID dan NEW_VERSION_ID akan kosong. Hanya file error. Menjelaskan alasan resource FHIR diajukan agar dapat dipulihkan.

Menggunakan filter untuk memulihkan resource FHIR tertentu

Bagian berikut menjelaskan cara menggunakan filter untuk memulihkan resource FHIR berdasarkan kriteria filter. Anda menentukan filter dalam objek RollbackFhirResourceFilteringFields saat mengirim permintaan fhirStores.rollback.

Anda dapat menggabungkan filter atau menggunakannya satu per satu untuk beberapa kasus penggunaan, termasuk yang berikut:

  • Memulihkan resource FHIR tertentu setelah penghapusan yang tidak disengaja sekaligus tidak mengubah resource lainnya.
  • Memulihkan penyimpanan FHIR ke status sebelum operasi impor tertentu mengimpor resource FHIR tertentu.

Menggunakan file filter

Secara default, PITR memulihkan semua resource FHIR di penyimpanan FHIR. Untuk memulihkan resource FHIR tertentu, tentukan jenis resource dan ID resource-nya dalam file, lalu upload file tersebut ke Cloud Storage. Tentukan lokasi file di kolom inputGcsObject.

Untuk membaca file filter dari Cloud Storage, Anda harus memberikan izin ke akun layanan Cloud Healthcare Service Agent. Untuk mengetahui informasi selengkapnya, lihat Membaca file filter dari Cloud Storage.

File filter dapat memiliki ekstensi apa pun. Aplikasi harus menggunakan skema berikut, dengan satu resource FHIR per baris:

FHIR_RESOURCE_TYPE/FHIR_RESOURCE_ID

Misalnya, untuk memulihkan resource Pasien dengan ID 8f25b0ac dan dua resource Pengamatan dengan ID d507417e90e dan e9950d90e, tentukan hal berikut dalam file filter:

Patient/8f25b0ac
Observation/d507417e90e
Observation/e9950d90e

Menggunakan fungsi kustom

Cloud Healthcare API menyediakan fungsi pemfilteran kustom berikut. Anda dapat menggabungkan fungsi kustom dengan kolom rollbackTime untuk menerapkan filter tambahan.

tag
Detail
Sintaksis fungsi
tag("system") = "code"
Deskripsi
Memfilter resource FHIR berdasarkan elemen Meta.tag resource.
Arguments
system
string
URL yang merujuk ke sistem kode. Untuk informasi selengkapnya, lihat Menggunakan Kode di Referensi.
code
string
Nilai yang mengidentifikasi konsep sebagaimana didefinisikan oleh sistem kode. Untuk informasi selengkapnya, lihat Menggunakan Kode di Referensi.
extension_value_ts
Detail
Sintaksis fungsi
extension_value_ts("url")
Deskripsi
Memfilter resource FHIR berdasarkan nilai url dalam elemen extension dengan url sebagai stempel waktu Unix. Mendukung operator perbandingan berikut:
  • =
  • !=
  • <
  • >
  • <=
  • >=
Arguments
url
string
URL kanonis resource StructureDefinition yang menentukan ekstensi. Misalnya, dalam elemen extension berikut, url adalah http://hl7.org/fhir/StructureDefinition/timezone:

"extension" : [{
  "url" : "http://hl7.org/fhir/StructureDefinition/timezone",
  "valueCode" : "America/New_York"
}]
Untuk mengetahui informasi selengkapnya, lihat Menentukan Ekstensi.

Filter menurut jenis resource FHIR

Untuk memfilter resource FHIR secara lebih luas berdasarkan jenis resource saja, tentukan jenis resource dalam array types[].

Memfilter menurut jenis operasi

Untuk memfilter resource FHIR yang diubah oleh transaksi CREATE, UPDATE, atau DELETE, tentukan nilai dalam enum ChangeType.

Misalnya, untuk hanya memulihkan resource FHIR yang telah dihapus, tentukan nilai DELETE.

Jika Anda menentukan CHANGE_TYPE_UNSPECIFIED, ALL, atau tidak menentukan nilai, semua resource FHIR akan dipulihkan.

Kecualikan pemulihan sebelumnya

Untuk mengecualikan pemulihan sebelumnya saat memulihkan resource FHIR, tetapkan kolom excludeRollbacks ke true. Anda dapat mengecualikan pemulihan sebelumnya jika pemulihan berfungsi dengan benar dan Anda tidak ingin menimpa perubahannya. Anda juga dapat menjalankan beberapa pemulihan dengan stempel waktu yang tumpang-tindih.

Pertimbangkan skenario berikut:

  1. Pada 1:00, Anda memulai pemulihan dengan stempel waktu pemulihan disetel ke 0:01. Di 2:00, operasi pemulihan akan menghapus resource Pasien Patient/1 dan Patient/2 di penyimpanan FHIR. Operasi pemulihan berakhir pukul 3:00.
  2. Beberapa hari kemudian, Anda menjalankan operasi pemulihan dengan stempel waktu pemulihan ditetapkan ke 1:00. Secara default, menjalankan operasi akan menghasilkan hal berikut:

    • Salah membuat ulang resource Pasien Patient/1 dan Patient/2.
    • Memulihkan resource FHIR yang dibuat atau diperbarui dengan benar setelah 3:00.

Untuk mengecualikan operasi pemulihan awal yang menghapus resource Patient/1 dan Patient/2, serta menghindari pembuatan ulang resource tersebut, tetapkan excludeRollbacks ke true.

Memfilter menggunakan ID operasi yang berjalan lama (LRO)

Jika resource FHIR diubah oleh satu atau beberapa operasi yang berjalan lama (LRO), Anda dapat menentukan ID LRO di kolom operationIds untuk memulihkan resource yang diubah.

Lihat Mencantumkan LRO untuk mengetahui informasi tentang cara mencantumkan dan melihat ID LRO dalam set data Cloud Healthcare API.

Mencoba lagi resource FHIR yang gagal dipulihkan dalam produksi

Jika beberapa resource FHIR gagal dalam pemulihan produksi, Anda dapat mencoba lagi pemulihan. Gunakan file output produksi yang dihasilkan untuk menemukan resource FHIR yang gagal. Tentukan jenis resource FHIR ini beserta ID-nya dalam file filter, lalu jalankan pemulihan lagi.

Setiap kali Anda menjalankan pemulihan, pemulihan tersebut bersifat idempoten jika Anda menggunakan konfigurasi yang sama di setiap permintaan dan stempel waktu berada dalam 21 hari terakhir.

Batasan

  • PITR tidak menerapkan integritas referensial, terlepas dari setelan disableReferentialIntegrity di penyimpanan FHIR. Dengan memulihkan beberapa resource FHIR, penyimpanan FHIR dapat mengalami status yang melanggar integritas referensial.

  • PITR melewati validasi profil FHIR karena resource FHIR yang dipulihkan telah divalidasi saat dibuat atau diperbarui. Jika konfigurasi profil penyimpanan FHIR berubah, PITR dapat membiarkan penyimpanan FHIR dalam status yang melanggar validasi profil.

  • Jika nilai rollbackTime mendahului waktu saat resource FHIR dihapus di penyimpanan FHIR, penyimpanan FHIR harus telah mengaktifkan enableUpdateCreate atau resource tidak akan dipulihkan.

  • Anda dapat memperbarui penyimpanan FHIR atau membaca dan menulis data selama pemulihan, tetapi Anda mungkin melihat hasil yang tidak terduga, bergantung pada tahap pemulihan. Misalnya, permintaan baca dapat menampilkan kombinasi resource FHIR yang dipulihkan dan yang tidak dipulihkan. Jika Anda mengupdate resource, pemulihan mungkin menimpa update.

  • PITR menyimpan histori resource FHIR. Setiap resource yang dipulihkan akan mendapatkan versi baru saat ini dan historinya akan dipertahankan.