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 ke status dalam 21 hari terakhir. Anda dapat menggunakan PITR untuk memulihkan dari perubahan yang tidak diinginkan, seperti tidak sengaja menghapus resource FHIR.

Sebelum memulai

Permintaan PITR dikategorikan sebagai permintaan operasi lanjutan dan ditagih sesuai dengan ketentuan. 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 menghasilkan satu atau beberapa file yang berisi ID dan jenis resource FHIR yang akan dipulihkan. Verifikasi kebenaran file output sebelum menjalankan pemulihan lagi di produksi.

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

Melakukan uji coba

Sebelum memulihkan resource FHIR dalam produksi, lakukan uji coba.

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

REST

  1. Pulihkan 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 FHIR store
    • RECOVERY_TIMESTAMP: titik pemulihan dalam 21 hari terakhir. Gunakan format RFC 3339. Tentukan waktu hingga 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 API Explorer terbuka di sisi kanan halaman. Anda bisa berinteraksi dengan alat ini untuk mengirim permintaan. Tempelkan isi permintaan di alat ini, lengkapi kolom lainnya yang wajib diisi, lalu klik Jalankan.

    Output-nya adalah sebagai berikut. Respons berisi ID untuk operasi yang berjalan lama (LRO). Operasi yang berjalan lama ditampilkan saat panggilan metode mungkin memerlukan waktu tambahan untuk diselesaikan. Perhatikan 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 API Explorer terbuka di sisi kanan halaman. Anda bisa berinteraksi dengan alat ini untuk mengirim permintaan. Lengkapi kolom yang wajib diisi, lalu klik Jalankan.

    Output-nya adalah sebagai berikut. Jika respons berisi "done": true, 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 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 dan memastikan pemulihan berfungsi seperti yang diharapkan, lihat Melihat metadata objek.

Jumlah file sebanding dengan jumlah resource FHIR yang dipulihkan.

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

Skema file output uji coba

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

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

Memulihkan 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 FHIR store
    • RECOVERY_TIMESTAMP: titik pemulihan dalam 21 hari terakhir. Gunakan format RFC 3339. Tentukan waktu hingga 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 API Explorer terbuka di sisi kanan halaman. Anda bisa berinteraksi dengan alat ini untuk mengirim permintaan. Tempelkan isi permintaan di alat ini, lengkapi kolom lainnya yang wajib diisi, lalu klik Jalankan.

    Output-nya adalah sebagai berikut. Respons berisi ID untuk operasi yang berjalan lama (LRO). Operasi yang berjalan lama ditampilkan saat panggilan metode mungkin memerlukan waktu tambahan untuk diselesaikan. Perhatikan 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 API Explorer terbuka di sisi kanan halaman. Anda bisa berinteraksi dengan alat ini untuk mengirim permintaan. Lengkapi kolom yang wajib diisi, lalu klik Jalankan.

    Output-nya adalah sebagai berikut. Jika respons berisi "done": true, operasi yang berjalan lama telah selesai.

Melihat file output pemulihan produksi

Pemulihan produksi menghasilkan file berikut. File 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, lihat 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 sukses 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 (Khusus 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. Khusus file error. Menjelaskan alasan resource FHIR diajukan untuk dipulihkan.

Menggunakan filter untuk memulihkan resource FHIR tertentu

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

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

  • Memulihkan resource FHIR tertentu setelah penghapusan yang tidak disengaja tanpa 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 informasi selengkapnya, lihat Membaca file filter dari Cloud Storage.

File filter dapat memiliki ekstensi apa pun. File ini 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.
Argumen
system
string
URL yang mereferensikan sistem kode. Untuk mengetahui informasi selengkapnya, lihat Menggunakan Kode dalam Resource.
code
string
Nilai yang mengidentifikasi konsep seperti yang ditentukan oleh sistem kode. Untuk mengetahui informasi selengkapnya, lihat Menggunakan Kode dalam Resource.
extension_value_ts
Detail
Sintaksis fungsi
extension_value_ts("url")
Deskripsi
Memfilter resource FHIR berdasarkan nilai url dalam elemen extension dengan url adalah stempel waktu Unix. Mendukung operator perbandingan berikut:
  • =
  • !=
  • <
  • >
  • <=
  • >=
Argumen
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 informasi selengkapnya, lihat Menentukan Ekstensi.

Memfilter menurut jenis resource FHIR

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

Filter 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 dihapus, tentukan nilai DELETE.

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

Mengecualikan 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 yang ditetapkan ke 0:01. Di 2:00, operasi pemulihan menghapus resource Patient Patient/1 dan Patient/2 di penyimpanan FHIR. Operasi pemulihan berakhir pada 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:

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

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

Memfilter menggunakan ID operasi yang berjalan lama (LRO)

Jika resource FHIR diubah oleh satu atau beberapa operasi yang berjalan lama (LROs), 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 di 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 dan ID-nya dalam file filter, lalu jalankan pemulihan lagi.

Setiap kali Anda menjalankan pemulihan, pemulihan 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. Hanya memulihkan beberapa resource FHIR mungkin akan membuat penyimpanan FHIR dalam status yang melanggar integritas referensi.

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

  • Jika nilai rollbackTime mendahului waktu saat resource FHIR dihapus di penyimpanan FHIR, penyimpanan FHIR harus 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 tidak dipulihkan. Jika Anda mengupdate resource, pemulihan mungkin menimpa update.

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