Mengirimkan pesan HL7v2 melalui koneksi TCP/IP

Tutorial ini memberikan petunjuk untuk mentransmisikan pesan HL7v2 melalui koneksi TCP/IP menggunakan protokol lapisan bawah (MLLP) minimal. Untuk mewajibkan image MLLP ditandatangani oleh attestor, ikuti langkah-langkah dalam Mengirimkan pesan HL7v2 melalui koneksi TCP/IP menggunakan image MLLP yang ditandatangani.

Tutorial ini berisi petunjuk untuk menjalankan adaptor MLLP open source yang dihosting di GitHub di lingkungan berikut:

Tujuan

Setelah menyelesaikan tutorial ini, Anda akan mengetahui cara:

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

  • Cloud Healthcare API
  • Google Kubernetes Engine
  • Compute Engine
  • Cloud VPN
  • Pub/Sub

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

Sebelum memulai tutorial ini, pahami dokumentasi konseptual tentang protokol lapisan bawah (MLLP) minimal dengan meninjau MLLP dan adaptor MLLP Google Cloud. Dokumentasi konseptual memberikan ringkasan tentang MLLP, cara sistem perawatan dapat mengirim dan menerima pesan ke dan dari Cloud Healthcare API melalui koneksi MLLP, dan dasar-dasar keamanan MLLP.

Sebelum dapat menyiapkan adaptor MLLP, Anda harus memilih atau membuat project Google Cloud dan mengaktifkan API yang diperlukan dengan melakukan langkah-langkah berikut:

  1. Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
  2. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  3. Make sure that billing is enabled for your Google Cloud project.

  4. Aktifkan API Cloud Healthcare API, Google Kubernetes Engine, Container Registry, and Pub/Sub.

    Mengaktifkan API

  5. Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.

    Buka pemilih project

  6. Make sure that billing is enabled for your Google Cloud project.

  7. Aktifkan API Cloud Healthcare API, Google Kubernetes Engine, Container Registry, and Pub/Sub.

    Mengaktifkan API

  8. Tunggu sampai Kubernetes Engine API dan layanan terkait diaktifkan. Proses ini dapat memerlukan waktu beberapa menit.

Memilih shell

Untuk menyelesaikan tutorial ini, Anda dapat menggunakan Cloud Shell atau shell lokal Anda.

Cloud Shell adalah lingkungan shell untuk mengelola resource yang dihosting di Google Cloud. Cloud Shell telah diinstal dengan gcloud CLI dan alat kubectl. Gcloud CLI menyediakan antarmuka command line utama untuk Google Cloud. kubectl menyediakan antarmuka command line untuk menjalankan perintah terhadap cluster GKE.

Jika lebih suka menggunakan shell lokal, Anda harus menginstal gcloud CLI.

Untuk membuka Cloud Shell atau mengonfigurasi shell lokal Anda, selesaikan langkah-langkah berikut:

Cloud Shell

Untuk meluncurkan Cloud Shell, selesaikan langkah-langkah berikut:

  1. Buka Konsol Google Cloud.

    Google Cloud console

  2. Dari pojok kanan atas konsol, klik tombol Activate Google Cloud Shell:

Sesi Cloud Shell akan terbuka di dalam frame di bagian bawah konsol. Anda menggunakan shell ini untuk menjalankan perintah gcloud dan kubectl.

Shell Lokal

Untuk menginstal gcloud CLI dan alat kubectl, selesaikan langkah-langkah berikut:

  1. Instal dan lakukan inisialisasi Google Cloud CLI.
  2. Jika hanya menguji adaptor secara lokal, Anda tidak perlu menyelesaikan langkah lainnya dan dapat melanjutkan ke Membuat set data. Jika Anda men-deploy adaptor ke GKE, instal alat command line kubectl dengan menjalankan perintah berikut:

    gcloud components install kubectl

Membuat set data

Jika Anda belum membuat set data Cloud Healthcare API, buat set data dengan menyelesaikan langkah-langkah berikut:

Konsol

  1. Di Konsol Google Cloud, buka halaman Datasets.

    Buka Set Data

  2. Klik Buat set data.
  3. Di kolom Name, masukkan ID untuk set data. ID set data harus memiliki hal berikut:
    • ID unik pada lokasinya
    • String Unicode yang terdiri dari 1-256 karakter dan terdiri dari hal berikut:
      • Numbers
      • Surat
      • Garis bawah
      • Tanda hubung garis
      • Menstruasi
  4. Di bagian Jenis lokasi, pilih salah satu jenis lokasi berikut:
    • Region: set data berada secara permanen dalam satu region Google Cloud. Setelah memilih, ketik atau pilih lokasi di kolom Region.
    • Multi-region: set data berada secara permanen di dalam satu lokasi yang mencakup beberapa region Google Cloud. Setelah memilih, ketik atau pilih lokasi multi-region di kolom Multi-region.
  5. Klik Create.

Set data baru akan muncul dalam daftar set data.

gcloud

Untuk membuat set data, jalankan perintah gcloud healthcare datasets create:

gcloud healthcare datasets create DATASET_ID \
    --location=LOCATION

Jika permintaan berhasil, perintah akan menampilkan output berikut:

Create request issued for: [DATASET_ID]
Waiting for operation [OPERATION_ID] to complete...done.
Created dataset [DATASET_ID].

Membuat topik dan langganan Pub/Sub

Untuk menerima notifikasi saat pesan dibuat atau diserap, Anda harus mengonfigurasi topik Pub/Sub dengan penyimpanan HL7v2. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi notifikasi Pub/Sub.

Untuk membuat topik, selesaikan langkah-langkah berikut:

Konsol

  1. Buka halaman Topics Pub/Sub di Konsol Google Cloud.

    Buka halaman topik Pub/Sub

  2. Klik Buat Topik.

  3. Masukkan nama topik dengan URI:

    projects/PROJECT_ID/topics/TOPIC_NAME

    dengan PROJECT_ID sebagai ID project Google Cloud Anda.

  4. Klik Create.

gcloud

Untuk membuat topik, jalankan perintah gcloud pubsub topics create:

gcloud pubsub topics create projects/PROJECT_ID/topics/TOPIC_NAME

Jika permintaan berhasil, perintah akan menampilkan output berikut:

Created topic [projects/PROJECT_ID/topics/TOPIC_NAME].

Untuk membuat langganan, selesaikan langkah-langkah berikut:

Konsol

  1. Buka halaman Topics Pub/Sub di Konsol Google Cloud.

    Buka halaman topik Pub/Sub

  2. Klik topik project Anda.

  3. Klik Buat Langganan.

  4. Masukkan nama langganan:

    projects/PROJECT_ID/subscriptions/SUBSCRIPTION_NAME

  5. Biarkan Jenis Pengiriman ditetapkan ke Pull, lalu klik Buat.

gcloud

Untuk membuat langganan, jalankan perintah gcloud pubsub subscriptions create:

gcloud pubsub subscriptions create SUBSCRIPTION_NAME \
    --topic=projects/PROJECT_ID/topics/TOPIC_NAME

Jika permintaan berhasil, perintah akan menampilkan output berikut:

Created subscription [projects/PROJECT_ID/subscriptions/SUBSCRIPTION_NAME].

Membuat penyimpanan HL7v2 yang dikonfigurasi dengan topik Pub/Sub

Membuat penyimpanan HL7v2 dan mengonfigurasinya dengan topik Pub/Sub. Untuk membuat penyimpanan HL7v2, Anda harus sudah membuat set data. Untuk keperluan tutorial ini, gunakan project yang sama untuk penyimpanan HL7v2 dan untuk topik Pub/Sub.

Untuk membuat penyimpanan HL7v2 yang dikonfigurasi dengan topik Pub/Sub, selesaikan langkah-langkah berikut:

curl

curl -X POST \
    --data "{
      'notificationConfigs': [
        {
          'pubsubTopic': 'projects/PROJECT_ID/topics/PUBSUB_TOPIC',
          'filter': ''
        }
      ]
    }" \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores?hl7V2StoreId=HL7V2_STORE_ID"

Jika permintaan berhasil, server akan menampilkan respons dalam format JSON:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID",
  "notificationConfigs": [
    {
      "pubsubTopic": "projects/PROJECT_ID/topics/PUBSUB_TOPIC"
    }
  ]
}

PowerShell

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
      'notificationConfigs': [
        {
          'pubsubTopic': 'projects/PROJECT_ID/topics/PUBSUB_TOPIC',
          'filter': ''
        }
      ]
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores?hl7V2StoreId=HL7V2_STORE_ID" | Select-Object -Expand Content

Jika permintaan berhasil, server akan menampilkan respons dalam format JSON:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID",
  "notificationConfigs": [
    {
      "pubsubTopic": "projects/PROJECT_ID/topics/PUBSUB_TOPIC"
    }
  ]
}

Mengonfigurasi izin Pub/Sub

Untuk mengirim notifikasi ke Pub/Sub saat pesan HL7v2 dibuat atau diserap, Anda harus mengonfigurasi izin Pub/Sub di Cloud Healthcare API. Langkah ini perlu dilakukan sekali per project.

Untuk menambahkan peran pubsub.publisher yang diperlukan ke akun layanan project Anda, selesaikan langkah-langkah berikut:

Konsol

  1. Pada halaman IAM di Google Cloud Console, pastikan peran Healthcare Service Agent muncul di kolom Role untuk akun layanan project yang relevan. Nama akunnya adalah service-PROJECT_NUMBER@gcp-sa-healthcare.iam.gserviceaccount.com. Untuk informasi tentang cara menemukan PROJECT_NUMBER, lihat Mengidentifikasi project.

  2. Di kolom Warisan yang cocok dengan peran, klik ikon pensil. Panel Edit izin akan terbuka.

  3. Klik Add another role, lalu cari peran Pub/Sub Publisher.

  4. Pilih peran, lalu klik Simpan. Peran pubsub.publisher ditambahkan ke akun layanan.

gcloud

Untuk menambahkan izin akun layanan, jalankan perintah gcloud projects add-iam-policy-binding. Untuk informasi tentang cara menemukan PROJECT_ID dan PROJECT_NUMBER, lihat Mengidentifikasi project.

gcloud projects add-iam-policy-binding PROJECT_ID \
    --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-healthcare.iam.gserviceaccount.com \
    --role=roles/pubsub.publisher

Menarik image Docker yang telah dibangun sebelumnya

Adaptor MLLP adalah aplikasi dalam container yang di-stage dalam image Docker yang telah dibangun sebelumnya di Container Registry.

Untuk mengambil image versi terbaru, jalankan perintah berikut:

docker pull gcr.io/cloud-healthcare-containers/mllp-adapter:latest

Menguji adaptor MLLP secara lokal

Saat menguji adaptor secara lokal, Anda dapat mengonfigurasinya agar berjalan sebagai penerima, penayang, atau keduanya. Konfigurasi penerima dan penayang memiliki perbedaan utama berikut:

  • Saat berjalan sebagai penerima, adaptor akan menerima pesan HL7v2 dari sumber eksternal dan memanggil messages.ingest untuk menyerap pesan tersebut ke penyimpanan HL7v2, sehingga membuat notifikasi Pub/Sub. Notifikasi dikirim ke aplikasi yang berlangganan topik Pub/Sub toko HL7v2.
  • Saat dijalankan sebagai penayang, adaptor akan memproses pesan HL7v2 yang dibuat atau diserap di penyimpanan HL7v2 menggunakan messages.create atau messages.ingest. Setelah pesan dibuat, notifikasi Pub/Sub akan dikirimkan ke adaptor dan adaptor memublikasikan pesan ke penerima eksternal.

Bagian berikut menunjukkan cara menjalankan adaptor agar berfungsi sebagai penerima atau penayang.

Setelah memverifikasi bahwa Anda dapat menjalankan adaptor MLLP di mesin lokal, lanjutkan ke bagian berikutnya tentang Men-deploy adaptor MLLP ke Google Kubernetes Engine.

Menguji adaptor MLLP secara lokal sebagai penerima

Saat adaptor menerima pesan HL7v2 dari sumber eksternal, seperti pusat perawatan, adaptor akan memanggil messages.ingest dan menyerap pesan HL7v2 ke penyimpanan HL7v2 yang dikonfigurasi. Anda dapat mengamatinya dalam kode sumber untuk adaptor.

Untuk menguji adaptor secara lokal sebagai penerima, selesaikan langkah-langkah berikut:

  1. Di komputer tempat Anda mengambil image Docker yang telah dibangun sebelumnya, jalankan perintah berikut:

    docker run \
        --network=host \
        -v ~/.config:/root/.config \
        gcr.io/cloud-healthcare-containers/mllp-adapter \
        /usr/mllp_adapter/mllp_adapter \
        --hl7_v2_project_id=PROJECT_ID \
        --hl7_v2_location_id=LOCATION \
        --hl7_v2_dataset_id=DATASET_ID \
        --hl7_v2_store_id=HL7V2_STORE_ID \
        --export_stats=false \
        --receiver_ip=0.0.0.0 \
        --port=2575 \
        --api_addr_prefix=https://healthcare.googleapis.com:443/v1 \
        --logtostderr

    dengan:

    • PROJECT_ID adalah ID untuk project Google Cloud yang berisi penyimpanan HL7v2 Anda.
    • LOCATION adalah wilayah tempat toko HL7v2 Anda berada.
    • DATASET_ID adalah ID untuk set data induk penyimpanan HL7v2 Anda.
    • HL7V2_STORE_ID adalah ID untuk penyimpanan HL7v2 tempat Anda mengirim pesan HL7v2.

    Setelah menjalankan perintah sebelumnya, adaptor akan mencetak pesan yang mirip dengan berikut ini dan mulai berjalan di mesin lokal Anda pada alamat IP 127.0.0.1 pada port 2575:

    I0000 00:00:00.000000      1 healthapiclient.go:171] Dialing connection to https://healthcare.googleapis.com:443/v1
    I0000 00:00:00.000000      1 mllp_adapter.go:89] Either --pubsub_project_id or --pubsub_subscription is not provided, notifications of the new messages are not read and no outgoing messages will be sent to the target MLLP address.
    

    Jika Anda mengalami error, ikuti langkah-langkah pemecahan masalah berikut:

  2. Untuk melanjutkan pengujian saat adaptor berjalan sebagai proses latar depan, buka terminal yang berbeda di komputer lokal Anda.

  3. Di terminal baru, untuk menginstal Netcat, jalankan perintah berikut:

    sudo apt install netcat
    
  4. Download file hl7v2-mllp-sample.txt dan simpan ke komputer lokal Anda.

  5. Untuk mengirim pesan HL7v2 ke adaptor, jalankan perintah berikut di direktori tempat Anda mendownload file. Adaptor MLLP mendengarkan di host lokal Anda pada porta 2575. Perintah tersebut mengirimkan pesan melalui adaptor MLLP ke penyimpanan HL7v2 Anda.

    Linux

    echo -n -e "\x0b$(cat hl7v2-mllp-sample.txt)\x1c\x0d" | nc -q1 localhost 2575 | less
    

    Jika pesan berhasil diserap ke penyimpanan HL7v2, perintah tersebut akan menampilkan output berikut:

    ^KMSH|^~\&|TO_APP|TO_FACILITY|FROM_APP|FROM_FACILITY|19700101010000||ACK|c507a97e-438d-44b0-b236-ea95e5ecbbfb|P|2.5^MMSA|AA|20150503223000^\
    

    Output ini menunjukkan bahwa penyimpanan HL7v2 merespons dengan jenis respons AA (Application Accept), yang berarti bahwa pesan telah divalidasi dan berhasil diserap.

  6. Anda juga dapat memverifikasi bahwa pesan berhasil dikirim dengan membuka terminal tempat Anda menjalankan adaptor. Output-nya akan terlihat seperti contoh berikut:

     I0000 00:00:00.000000       1 healthapiclient.go:171] Dialing connection to https://healthcare.googleapis.com:443/v1
     I0000 00:00:00.000000       1 mllp_adapter.go:89] Either --pubsub_project_id or --pubsub_subscription is not provided, notifications of the new messages are not read and no outgoing messages will be sent to the target MLLP address.
     I0213 00:00:00.000000       1 healthapiclient.go:190] Sending message of size 319.
     I0213 00:00:00.000000       1 healthapiclient.go:223] Message was successfully sent.
    
  7. Pesan ini disimpan di penyimpanan HL7v2, sehingga Anda dapat memanggil messages.list untuk melihat pesan:

    curl

    curl -X GET \
         -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
         -H "Content-Type: application/json; charset=utf-8" \
         "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages"

    Jika permintaan berhasil, server akan menampilkan ID pesan di jalur resource:

    {
      "hl7V2Messages": [
        {
          "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID"
        }
      ]
    }
    

    PowerShell

    $cred = gcloud auth application-default print-access-token
    $headers = @{ Authorization = "Bearer $cred" }
    
    Invoke-WebRequest `
      -Method Get `
      -Headers $headers `
      -ContentType: "application/json; charset=utf-8" `
      -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages" | Select-Object -Expand Content

    Jika permintaan berhasil, server akan menampilkan ID pesan di jalur resource:

    {
      "hl7V2Messages": [
        {
          "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID"
        }
      ]
    }
    

Menguji adaptor MLLP secara lokal sebagai penayang

Saat menguji adaptor sebagai penayang, Anda membuat pesan dengan memanggil messages.create atau messages.ingest dan memberikan file pesan sebagai data biner.

Adaptor secara otomatis mengonfirmasi pesan Pub/Sub yang dikirim melalui messages.create dan messages.ingest.

Adaptor akan memberi tahu Anda saat berhasil mengambil dan mengirim pesan Pub/Sub. Adaptor ini adalah pelanggan Pub/Sub, sehingga otomatis mengonfirmasi pesan-pesan ini. Akibatnya, pesan tersebut dihapus dari antrean pesan di langganan Pub/Sub yang Anda konfigurasi dengan adaptor.

Untuk mengambil dari langganan Pub/Sub dan memverifikasi secara terpisah bahwa pesan dipublikasikan, Anda perlu membuat langganan Pub/Sub kedua yang ditetapkan ke topik yang Anda buat sebelumnya. Pesan yang dikirim ke langganan kedua tidak otomatis dikonfirmasi oleh adaptor dan tetap ada sehingga Anda dapat menariknya.

Untuk membuat langganan Pub/Sub kedua yang ditetapkan ke topik yang Anda buat sebelumnya, selesaikan langkah-langkah berikut:

Konsol

  1. Buka halaman Topics Pub/Sub di Konsol Google Cloud.

    Buka halaman topik Pub/Sub

  2. Klik topik project Anda. Ini adalah topik yang Anda gunakan untuk membuat langganan awal.

  3. Klik Buat Langganan.

  4. Masukkan nama langganan:

    projects/PROJECT_ID/subscriptions/SECOND_SUBSCRIPTION_NAME

    Biarkan Jenis Pengiriman ditetapkan ke Pull.

  5. Klik Create.

gcloud

Untuk membuat langganan Pub/Sub kedua yang ditetapkan ke topik yang Anda buat sebelumnya, jalankan perintah gcloud pubsub subscriptions create:

gcloud pubsub subscriptions create SECOND_SUBSCRIPTION_NAME --topic=projects/PROJECT_ID/topics/TOPIC_NAME

Jika permintaan berhasil, perintah akan menampilkan output berikut:

Created subscription [projects/PROJECT_ID/subscriptions/SECOND_SUBSCRIPTION_NAME].

Untuk menguji adaptor secara lokal sebagai penayang, selesaikan langkah-langkah berikut di komputer tempat Anda menarik image Docker yang telah dibangun sebelumnya:

  1. Instal Netcat:

    sudo apt install netcat
    
  2. Download file hl7v2-mllp-ack-sample.txt dan simpan ke komputer lokal Anda. File ini berisi pesan ACK yang diperlukan adaptor sebagai respons saat mencoba memublikasikan pesan.

  3. Untuk mengizinkan Netcat memproses koneksi masuk pada port 2525, jalankan perintah berikut di direktori tempat Anda mendownload file.

    Linux

    echo -n -e "\x0b$(cat hl7v2-mllp-ack-sample.txt)\x1c\x0d" | nc -q1 -lv -p 2525 | less
    

    Setelah memulai Netcat, pesan output yang mirip dengan contoh berikut akan ditampilkan:

    listening on [any] 2525 ...
    
  4. Netcat berjalan sebagai proses latar depan. Jadi, untuk melanjutkan pengujian, buka terminal yang berbeda di komputer lokal Anda.

  5. Untuk memulai adaptor, di terminal baru, jalankan perintah berikut:

    docker run \
        --network=host \
        gcr.io/cloud-healthcare-containers/mllp-adapter \
        /usr/mllp_adapter/mllp_adapter \
        --hl7_v2_project_id=PROJECT_ID \
        --hl7_v2_location_id=LOCATION \
        --hl7_v2_dataset_id=DATASET_ID \
        --hl7_v2_store_id=HL7V2_STORE_ID \
        --export_stats=false \
        --receiver_ip=127.0.0.1 --port 2575 \
        --mllp_addr=127.0.0.1:2525 \
        --pubsub_project_id=PROJECT_ID \
        --pubsub_subscription=PUBSUB_SUBSCRIPTION \
        --api_addr_prefix=https://healthcare.googleapis.com:443/v1 \
        --logtostderr

    dengan:

    • PROJECT_ID adalah ID untuk project Google Cloud yang berisi penyimpanan HL7v2 Anda.
    • LOCATION adalah wilayah tempat toko HL7v2 Anda berada.
    • DATASET_ID adalah ID untuk set data induk penyimpanan HL7v2 Anda.
    • HL7V2_STORE_ID adalah ID untuk penyimpanan HL7v2 tempat Anda mengirim pesan HL7v2.
    • PROJECT_ID adalah ID untuk project Google Cloud yang berisi topik Pub/Sub.
    • PUBSUB_SUBSCRIPTION adalah nama langganan pertama yang Anda buat yang terkait dengan topik Pub/Sub. Adaptor menggunakan pesan dari langganan ini dan otomatis mengonfirmasinya. Jadi, untuk melihat pesan yang dipublikasikan ke topik, Anda harus menarik pesan dari langganan kedua yang dibuat sebelumnya.

    Setelah menjalankan perintah sebelumnya, adaptor akan mulai berjalan di mesin lokal pada alamat IP 127.0.0.1 pada port 2575.

    Jika Anda mengalami error, ikuti langkah-langkah pemecahan masalah berikut:

    Adaptor berjalan sebagai proses latar depan. Jadi, untuk melanjutkan pengujian, buka terminal yang berbeda di mesin lokal Anda.

  6. Download file hl7v2-sample.json dan simpan ke komputer lokal Anda. Dalam direktori tempat Anda mendownload file, panggil metode messages.create untuk membuat pesan di penyimpanan HL7v2:

    curl

    Untuk membuat pesan HL7v2, buat permintaan POST dan tentukan informasi berikut:

    • Nama set data induk
    • Nama toko HL7v2
    • Pesan
    • Token akses

    Contoh berikut menunjukkan permintaan POST menggunakan curl dan contoh file JSON yang disebut hl7v2-sample.json.

    curl -X POST \
         -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
         -H "Content-Type: application/json; charset=utf-8" \
         --data-binary @hl7v2-sample.json \
         "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages"

    Jika permintaan berhasil, server akan menampilkan respons dalam format JSON:

    {
      "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID",
      "data": "TVNIfF5+XCZ8QXxTRU5EX0ZBQ0lMSVRZfEF8QXwyMDE4MDEwMTAwMDAwMHx8VFlQRV5BfDIwMTgwMTAxMDAwMDAwfFR8MC4wfHx8QUF8fDAwfEFTQ0lJDUVWTnxBMDB8MjAxODAxMDEwNDAwMDANUElEfHwxNAExMTFeXl5eTVJOfDExMTExMTExXl5eXk1STn4xMTExMTExMTExXl5eXk9SR05NQlI=",
      "sendFacility": "SEND_FACILITY",
      "sendTime": "2018-01-01T00:00:00Z",
      "messageType": "TYPE",
      "createTime": "1970-01-01T00:00:00Z",
      "patientIds": [
        {
          "value": "14\u0001111",
          "type": "MRN"
        },
        {
          "value": "11111111",
          "type": "MRN"
        },
        {
          "value": "1111111111",
          "type": "ORGNMBR"
        }
      ]
    }
    

    PowerShell

    Untuk membuat pesan HL7v2, buat permintaan POST dan tentukan informasi berikut:

    • Nama set data induk
    • Nama toko HL7v2
    • Pesan
    • Token akses

    Contoh berikut menunjukkan permintaan POST yang menggunakan Windows PowerShell dan contoh file JSON yang disebut hl7v2-sample.json.

    $cred = gcloud auth application-default print-access-token
    $headers = @{ Authorization = "Bearer $cred" }
    
    Invoke-WebRequest `
      -Method Post `
      -Headers $headers `
      -ContentType: "application/json; charset=utf-8" `
      -InFile hl7v2-sample.json `
      -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages" | Select-Object -Expand Content

    Jika permintaan berhasil, server akan menampilkan respons dalam format JSON:

    {
      "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID",
      "data": "TVNIfF5+XCZ8QXxTRU5EX0ZBQ0lMSVRZfEF8QXwyMDE4MDEwMTAwMDAwMHx8VFlQRV5BfDIwMTgwMTAxMDAwMDAwfFR8MC4wfHx8QUF8fDAwfEFTQ0lJDUVWTnxBMDB8MjAxODAxMDEwNDAwMDANUElEfHwxNAExMTFeXl5eTVJOfDExMTExMTExXl5eXk1STn4xMTExMTExMTExXl5eXk9SR05NQlI=",
      "sendFacility": "SEND_FACILITY",
      "sendTime": "2018-01-01T00:00:00Z",
      "messageType": "TYPE",
      "createTime": "1970-01-01T00:00:00Z",
      "patientIds": [
        {
          "value": "14\u0001111",
          "type": "MRN"
        },
        {
          "value": "11111111",
          "type": "MRN"
        },
        {
          "value": "1111111111",
          "type": "ORGNMBR"
        }
      ]
    }
    

    Setelah membuat pesan, adaptor MLLP akan menampilkan respons berikut:

    I0214 00:00:00.000000       1 healthapiclient.go:266] Started to fetch message.
    I0214 00:00:00.000000       1 healthapiclient.go:283] Message was successfully fetched.
    
  7. Di terminal tempat Anda menjalankan Netcat, output yang mirip dengan contoh berikut akan ditampilkan. Output ini menunjukkan bahwa pesan telah dipublikasikan:

    connect to [127.0.0.1] from localhost [127.0.0.1] 39522
    ^KMSH|^~\&|A|SEND_FACILITY|A|A|20180101000000||TYPE^A|20180101000000|T|0.0|||AA||00|ASCII^MEVN|A00|20180101040000^MPID||14^A111^^^^MRN|11111111^^^^MRN~1111111111^^^^ORGNMBR^\
    

    Ini sama dengan nilai di kolom data dari respons yang Anda terima saat membuat pesan. Ini sama dengan nilai data dalam file hl7v2-sample.json.

  8. Untuk melihat pesan yang dipublikasikan adaptor ke topik Pub/Sub, jalankan perintah gcloud pubsub subscriptions pull pada langganan Pub/Sub kedua yang Anda buat:

    gcloud pubsub subscriptions pull --auto-ack SECOND_SUBSCRIPTION

    Perintah ini akan menampilkan output berikut tentang pesan HL7v2 yang dibuat. Perhatikan nilai publish=true di kolom ATTRIBUTES, yang menunjukkan bahwa pesan dipublikasikan ke Pub/Sub:

    ┌-----------------------------------------------------------------------------------------------------------------|-----------------|---------------┐
    |                                                               DATA                                              |    MESSAGE_ID   |   ATTRIBUTES  |
    ├-----------------------------------------------------------------------------------------------------------------|-----------------|---------------|
    | projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/HL7V2_MESSAGE_ID | 123456789012345 | msgType=ADT   |
    |                                                                                                                 |                 | publish=true  |
    └-----------------------------------------------------------------------------------------------------------------|-----------------|---------------┘

Memublikasikan pesan ke penerima eksternal yang berbeda

Anda dapat mengonfigurasi penyimpanan HL7v2 dengan beberapa topik Pub/Sub dan menggunakan filter untuk mengirim notifikasi ke berbagai topik Pub/Sub. Selanjutnya, Anda dapat menjalankan adaptor MLLP untuk setiap topik Pub/Sub untuk memublikasikan pesan ke penerima eksternal yang berbeda.

Untuk mengonfigurasi penyimpanan HL7v2 dengan beberapa topik Pub/Sub dan filter untuk setiap topik, selesaikan langkah-langkah berikut:

  1. Buat dua topik Pub/Sub dan satu langganan untuk setiap topik. Untuk mengetahui informasi selengkapnya, lihat Membuat topik dan langganan Pub/Sub.

  2. Jalankan perintah berikut:

    curl

    curl -X PATCH \
        -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
        -H "Content-Type: application/json; charset=utf-8" \
        --data "{
          'notificationConfigs': [
              {
                  'pubsubTopic': 'projects/PROJECT_ID/topics/PUBSUB_TOPIC',
                  'filter' : 'sendFacility=\"SEND_FACILITY_1\"'
              },
              {
                  'pubsubTopic': 'projects/PROJECT_ID/topics/SECOND_PUBSUB_TOPIC',
                  'filter': 'sendFacility=\"SEND_FACILITY_2\"'
              }
          ]
        }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID?updateMask=notificationConfigs"

    Jika permintaan berhasil, server akan menampilkan respons dalam format JSON:

    {
      "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID",
      "notificationConfigs": [
        {
          "pubsubTopic": "projects/PROJECT_ID/topics/PUBSUB_TOPIC",
          "filter": "sendFacility=\"SEND_FACILITY_1\""
        },
        {
          "pubsubTopic": "projects/PROJECT_ID/topics/SECOND_PUBSUB_TOPIC",
          "filter": "sendFacility=\"SEND_FACILITY_2\""
        }
      ]
    }
    

    PowerShell

    $cred = gcloud auth application-default print-access-token
    $headers = @{ Authorization = "Bearer $cred" }
    
    Invoke-WebRequest `
      -Method Patch `
      -Headers $headers `
      -ContentType: "application/json; charset=utf-8" `
      -Body "{
          'notificationConfigs': [
            {
              'pubsubTopic' : 'projects/PROJECT_ID/topics/PUBSUB_TOPIC',
              'filter': 'sendFacility=\"SEND_FACILITY_1\"'
            },
            {
              'pubsubTopic' : 'projects/PROJECT_ID/topics/SECOND_PUBSUB_TOPIC',
              'filter' : 'sendFacility=\"SEND_FACILITY_2\"'
            }
          ]
      }" `
      -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores?hl7V2StoreId=HL7V2_STORE_ID?updateMask=notificationConfigs" | Select-Object -Expand Content

    Jika permintaan berhasil, server akan menampilkan respons dalam format JSON:

    {
      "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID",
      "notificationConfigs": [
        {
          "pubsubTopic": "projects/PROJECT_ID/topics/PUBSUB_TOPIC",
          "filter": "sendFacility=\"SEND_FACILITY_1\""
        },
        {
          "pubsubTopic": "projects/PROJECT_ID/topics/SECOND_PUBSUB_TOPIC",
          "filter": "sendFacility=\"SEND_FACILITY_2\""
        }
      ]
    }
    

Menguji pemilihan rute pesan

Untuk menguji pemilihan rute pesan, selesaikan langkah-langkah di bagian berikut ini.

Mengonfigurasi dan memulai penerima dan adaptor pertama

Untuk mengonfigurasi dan memulai penerima dan adaptor pertama, selesaikan langkah-langkah berikut:

  1. Di komputer tempat Anda mengambil image Docker yang telah dibangun sebelumnya, jalankan perintah berikut untuk menginstal Netcat:

    sudo apt install netcat
    
  2. Download hl7v2-mllp-ack-sample.txt, jika Anda belum melakukannya. File berisi pesan ACK yang digunakan sebagai respons oleh adaptor saat mencoba memublikasikan pesan.

  3. Untuk menetapkan port 2525 bagi penerima pertama, jalankan perintah berikut:

    Linux

    echo -n -e "\x0b$(cat hl7v2-mllp-ack-sample.txt)\x1c\x0d" | nc -q1 -lv -p 2525 | less
    

    Saat proses Netcat dimulai, output berikut akan menampilkan:

    listening on [any] 2525 ...
    
  4. Untuk memulai adaptor pertama, di terminal baru, jalankan perintah berikut:

    docker run \
        --network=host \
        gcr.io/cloud-healthcare-containers/mllp-adapter \
        /usr/mllp_adapter/mllp_adapter \
        --hl7_v2_project_id=PROJECT_ID \
        --hl7_v2_location_id=LOCATION \
        --hl7_v2_dataset_id=DATASET_ID \
        --hl7_v2_store_id=HL7V2_STORE_ID \
        --export_stats=false \
        --receiver_ip=127.0.0.1 --port 2575 \
        --mllp_addr=127.0.0.1:2525 \
        --pubsub_project_id=PROJECT_ID \
        --pubsub_subscription=PUBSUB_SUBSCRIPTION \
        --api_addr_prefix=https://healthcare.googleapis.com:443/v1 \
        --logtostderr

    dengan:

    • PROJECT_ID adalah ID untuk project Google Cloud yang berisi penyimpanan HL7v2 Anda.
    • LOCATION adalah wilayah tempat toko HL7v2 Anda berada.
    • DATASET_ID adalah ID untuk set data induk penyimpanan HL7v2 Anda.
    • HL7V2_STORE_ID adalah ID untuk penyimpanan HL7v2 tempat Anda mengirim pesan HL7v2.
    • PROJECT_ID adalah ID untuk project Google Cloud yang berisi topik Pub/Sub.
    • PUBSUB_SUBSCRIPTION adalah nama langganan pertama yang Anda buat yang terkait dengan topik Pub/Sub pertama Anda. Adaptor menggunakan pesan dari langganan ini dan otomatis mengonfirmasinya.

    Setelah menjalankan perintah ini, adaptor akan mulai berjalan di mesin lokal Anda di 127.0.0.1:2575. Kebijakan ini memublikasikan pesan baru ke penerima eksternal pertama di port 2525.

Mengonfigurasi dan memulai penerima dan adaptor kedua

Untuk mengonfigurasi dan memulai penerima dan adaptor kedua, selesaikan langkah-langkah berikut:

  1. Di komputer tempat Anda mengambil image Docker yang telah dibangun sebelumnya, jalankan perintah berikut untuk menginstal Netcat:

    sudo apt install netcat
    
  2. Download hl7v2-mllp-ack-sample.txt, jika Anda belum melakukannya. File berisi pesan ACK yang digunakan sebagai respons oleh adaptor saat mencoba memublikasikan pesan.

  3. Untuk menetapkan port 2526 bagi penerima kedua, jalankan perintah berikut.

    Linux

    echo -n -e "\x0b$(cat hl7v2-mllp-ack-sample.txt)\x1c\x0d" | nc -q1 -lv -p 2526 | less
    

    Saat proses Netcat dimulai, output berikut akan menampilkan:

    listening on [any] 2526 ...
    
  4. Untuk memulai adaptor kedua, di terminal baru, jalankan perintah berikut:

    docker run \
        --network=host \
        gcr.io/cloud-healthcare-containers/mllp-adapter \
        /usr/mllp_adapter/mllp_adapter \
        --hl7_v2_project_id=PROJECT_ID \
        --hl7_v2_location_id=LOCATION \
        --hl7_v2_dataset_id=DATASET_ID \
        --hl7_v2_store_id=HL7V2_STORE_ID \
        --export_stats=false \
        --receiver_ip=127.0.0.1 --port 2576 \
        --mllp_addr=127.0.0.1:2526 \
        --pubsub_project_id=PROJECT_ID \
        --pubsub_subscription=SECOND_PUBSUB_SUBSCRIPTION \
        --api_addr_prefix=https://healthcare.googleapis.com:443/v1 \
        --logtostderr

    dengan:

    • PROJECT_ID adalah ID untuk project Google Cloud yang berisi penyimpanan HL7v2 Anda.
    • LOCATION adalah wilayah tempat toko HL7v2 Anda berada.
    • DATASET_ID adalah ID untuk set data induk penyimpanan HL7v2 Anda.
    • HL7V2_STORE_ID adalah ID untuk penyimpanan HL7v2 tempat Anda mengirim pesan HL7v2.
    • PROJECT_ID adalah ID untuk project Google Cloud yang berisi topik Pub/Sub.
    • SECOND_PUBSUB_SUBSCRIPTION adalah nama langganan kedua yang Anda buat yang terkait dengan topik Pub/Sub kedua Anda. Adaptor menggunakan pesan dari langganan ini dan otomatis mengonfirmasinya.

    Setelah menjalankan perintah ini, adaptor akan mulai berjalan di mesin lokal Anda pada alamat IP port 127.0.0.1:2576. Rilis ini memublikasikan pesan baru ke penerima eksternal kedua pada port 2526.

Memublikasikan pesan ke penerima pertama

Untuk membuat pesan yang hanya akan dipublikasikan ke penerima eksternal pertama, selesaikan langkah-langkah berikut:

  1. Download hl7v2-sample1.json.

  2. Dalam direktori tempat Anda mendownload hl7v2-sample1.json, panggil metode messages.create untuk membuat pesan di penyimpanan HL7v2:

    curl

    Untuk membuat pesan HL7v2, buat permintaan POST dan tentukan informasi berikut:

    • Nama set data induk
    • Nama toko HL7v2
    • Pesan
    • Token akses

    Contoh berikut menunjukkan permintaan POST menggunakan curl dan contoh file JSON, hl7v2-sample1.json.

    curl -X POST \
        -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
        -H "Content-Type: application/json; charset=utf-8" \
        --data-binary @hl7v2-sample1.json \
        "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages"

    Jika permintaan berhasil, server akan menampilkan respons dalam format JSON:

    {
     "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID",
     "data": "TVNIfF5+XCZ8QXxTRU5EX0ZBQ0lMSVRZXzF8QXxBfDIwMTgwMTAxMDAwMDAwfHxUWVBFXkF8MjAxODAxMDEwMDAwMDB8VHwwLjB8fHxBQXx8MDB8QVNDSUkNRVZOfEEwMHwyMDE4MDEwMTA0MDAwMA1QSUR8fDE0ATExMV5eXl5NUk58MTExMTExMTFeXl5eTVJOfjExMTExMTExMTFeXl5eT1JHTk1CUg==",
     "sendFacility": "SEND_FACILITY_1",
     "sendTime": "2018-01-01T00:00:00Z",
     "messageType": "TYPE",
     "createTime": "1970-01-01T00:00:00Z",
     "patientIds": [
       {
         "value": "14\u0001111",
         "type": "MRN"
       },
       {
         "value": "11111111",
         "type": "MRN"
       },
       {
         "value": "1111111111",
         "type": "ORGNMBR"
       }
     ]
    }
    

    PowerShell

    Untuk membuat pesan HL7v2, buat permintaan POST dan tentukan informasi berikut:

    • Nama set data induk
    • Nama toko HL7v2
    • Pesan
    • Token akses

    Contoh berikut menunjukkan permintaan POST yang menggunakan Windows PowerShell dan contoh file JSON yang disebut hl7v2-sample1.json.

    $cred = gcloud auth application-default print-access-token
    $headers = @{ Authorization = "Bearer $cred" }
    
    Invoke-WebRequest `
     -Method Post `
     -Headers $headers `
     -ContentType: "application/json; charset=utf-8" `
     -InFile hl7v2-sample1.json `
     -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages" | Select-Object -Expand Content

    Jika permintaan berhasil, server akan menampilkan respons dalam format JSON:

    {
     "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID",
     "data": "TVNIfF5+XCZ8QXxTRU5EX0ZBQ0lMSVRZXzF8QXxBfDIwMTgwMTAxMDAwMDAwfHxUWVBFXkF8MjAxODAxMDEwMDAwMDB8VHwwLjB8fHxBQXx8MDB8QVNDSUkNRVZOfEEwMHwyMDE4MDEwMTA0MDAwMA1QSUR8fDE0ATExMV5eXl5NUk58MTExMTExMTFeXl5eTVJOfjExMTExMTExMTFeXl5eT1JHTk1CUg==",
     "sendFacility": "SEND_FACILITY_1",
     "sendTime": "2018-01-01T00:00:00Z",
     "messageType": "TYPE",
     "createTime": "1970-01-01T00:00:00Z",
     "patientIds": [
       {
         "value": "14\u0001111",
         "type": "MRN"
       },
       {
         "value": "11111111",
         "type": "MRN"
       },
       {
         "value": "1111111111",
         "type": "ORGNMBR"
       }
     ]
    }
    

    Dalam respons ini, sendFacility disetel ke SEND_FACILITY_1, sehingga notifikasi Pub/Sub hanya dikirim ke topik Pub/Sub pertama. Setelah membuat pesan, adaptor MLLP pertama akan menampilkan respons berikut:

    I0214 00:00:00.000000       1 healthapiclient.go:266] Started to fetch message.
    I0214 00:00:00.000000       1 healthapiclient.go:283] Message was successfully fetched.
    

    Adaptor MLLP kedua tidak menampilkan respons apa pun karena tidak ada notifikasi yang dikirim ke topik Pub/Sub kedua.

    Di terminal tempat Anda menjalankan proses Netcat pertama, output berikut akan ditampilkan. Output ini menunjukkan bahwa pesan telah dipublikasikan.

    connect to [127.0.0.1] from localhost [127.0.0.1] 39522
    ^KMSH|^~\&|A|SEND_FACILITY_1|A|A|20180101000000||TYPE^A|20180101000000|T|0.0|||AA||00|ASCII^MEVN|A00|20180101040000^MPID||14^A111^^^^MRN|11111111^^^^MRN~1111111111^^^^ORGNMBR^\
    

    Output ini sesuai dengan nilai di kolom data dari respons yang diterima saat membuat pesan. Ini sama dengan nilai data dalam file hl7v2-sample1.json.

Memublikasikan pesan ke penerima kedua

Untuk membuat pesan yang hanya akan dipublikasikan ke penerima eksternal kedua, selesaikan langkah-langkah berikut:

  1. Buka terminal baru di komputer lokal Anda.

  2. Untuk membuat pesan yang hanya akan dipublikasikan ke penerima eksternal kedua, download hl7v2-sample2.json.

  3. Dalam direktori tempat Anda mendownload hl7v2-sample2.json, panggil metode messages.create untuk membuat pesan di penyimpanan HL7v2:

    curl

    Untuk membuat pesan HL7v2, buat permintaan POST dan tentukan informasi berikut:

    • Nama set data induk
    • Nama toko HL7v2
    • Pesan
    • Token akses

    Contoh berikut menunjukkan permintaan POST menggunakan curl dan contoh file JSON, hl7v2-sample2.json.

    curl -X POST \
        -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
        -H "Content-Type: application/json; charset=utf-8" \
        --data-binary @hl7v2-sample2.json \
        "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages"

    Jika permintaan berhasil, server akan menampilkan respons dalam format JSON:

    {
     "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID",
     "data": "TVNIfF5+XCZ8QXxTRU5EX0ZBQ0lMSVRZXzJ8QXxBfDIwMTgwMTAxMDAwMDAwfHxUWVBFXkF8MjAxODAxMDEwMDAwMDB8VHwwLjB8fHxBQXx8MDB8QVNDSUkNRVZOfEEwMHwyMDE4MDEwMTA0MDAwMA1QSUR8fDE0ATExMV5eXl5NUk58MTExMTExMTFeXl5eTVJOfjExMTExMTExMTFeXl5eT1JHTk1CUg==",
     "sendFacility": "SEND_FACILITY_2",
     "sendTime": "2018-01-01T00:00:00Z",
     "messageType": "TYPE",
     "createTime": "1970-01-01T00:00:00Z",
     "patientIds": [
       {
         "value": "14\u0001111",
         "type": "MRN"
       },
       {
         "value": "11111111",
         "type": "MRN"
       },
       {
         "value": "1111111111",
         "type": "ORGNMBR"
       }
     ]
    }
    

    PowerShell

    Untuk membuat pesan HL7v2, buat permintaan POST dan tentukan informasi berikut:

    • Nama set data induk
    • Nama toko HL7v2
    • Pesan
    • Token akses

    Contoh berikut menunjukkan permintaan POST yang menggunakan Windows PowerShell dan contoh file JSON, hl7v2-sample2.json.

    $cred = gcloud auth application-default print-access-token
    $headers = @{ Authorization = "Bearer $cred" }
    
    Invoke-WebRequest `
     -Method Post `
     -Headers $headers `
     -ContentType: "application/json; charset=utf-8" `
     -InFile hl7v2-sample2.json `
     -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages" | Select-Object -Expand Content

    Jika permintaan berhasil, server akan menampilkan respons dalam format JSON:

    {
     "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID",
     "data": "TVNIfF5+XCZ8QXxTRU5EX0ZBQ0lMSVRZXzJ8QXxBfDIwMTgwMTAxMDAwMDAwfHxUWVBFXkF8MjAxODAxMDEwMDAwMDB8VHwwLjB8fHxBQXx8MDB8QVNDSUkNRVZOfEEwMHwyMDE4MDEwMTA0MDAwMA1QSUR8fDE0ATExMV5eXl5NUk58MTExMTExMTFeXl5eTVJOfjExMTExMTExMTFeXl5eT1JHTk1CUg==",
     "sendFacility": "SEND_FACILITY_2",
     "sendTime": "2018-01-01T00:00:00Z",
     "messageType": "TYPE",
     "createTime": "1970-01-01T00:00:00Z",
     "patientIds": [
       {
         "value": "14\u0001111",
         "type": "MRN"
       },
       {
         "value": "11111111",
         "type": "MRN"
       },
       {
         "value": "1111111111",
         "type": "ORGNMBR"
       }
     ]
    }
    

    Perlu diperhatikan bahwa sendFacility adalah SEND_FACILITY_2, sehingga notifikasi Pub/Sub hanya dikirim ke topik Pub/Sub kedua. Setelah membuat pesan, adaptor MLLP pertama tidak menampilkan respons apa pun, sedangkan adaptor MLLP kedua menampilkan respons berikut:

    I0214 00:00:00.000000       1 healthapiclient.go:266] Started to fetch message.
    I0214 00:00:00.000000       1 healthapiclient.go:283] Message was successfully fetched.
    

    Di terminal tempat Anda menjalankan proses Netcat kedua, output berikut akan ditampilkan. Output ini menunjukkan bahwa pesan telah dipublikasikan.

    connect to [127.0.0.1] from localhost [127.0.0.1] 39522
    ^KMSH|^~\&|A|SEND_FACILITY_2|A|A|20180101000000||TYPE^A|20180101000000|T|0.0|||AA||00|ASCII^MEVN|A00|20180101040000^MPID||14^A111^^^^MRN|11111111^^^^MRN~1111111111^^^^ORGNMBR^\
    

    Output ini sesuai dengan nilai di kolom data dari respons yang diterima saat membuat pesan. Ini sama dengan nilai data dalam file hl7v2-sample2.json.

Men-deploy adaptor MLLP ke Google Kubernetes Engine

Saat mengirim pesan HL7v2 melalui MLLP dari pusat perawatan Anda, salah satu kemungkinan konfigurasi adalah mengirim pesan ke adaptor yang di-deploy di Google Cloud dan dapat meneruskannya ke Cloud Healthcare API.

Adaptor MLLP berjalan sebagai aplikasi stateless di cluster GKE. Cluster GKE adalah grup instance VM terkelola untuk menjalankan aplikasi dalam container. Aplikasi stateless adalah aplikasi yang tidak menyimpan data atau status aplikasi ke cluster atau ke penyimpanan persisten. Sebaliknya, data dan status aplikasi tetap ada di klien, yang membuat aplikasi stateless lebih skalabel.

GKE menggunakan pengontrol Deployment untuk men-deploy aplikasi stateless sebagai Pod yang seragam dan tidak unik. Deployment mengelola status yang diinginkan aplikasi Anda: berapa banyak Pod yang harus menjalankan aplikasi, versi image container apa yang harus dijalankan, apa yang harus diberi label oleh Pod, dan sebagainya. Status yang diinginkan dapat diubah secara dinamis melalui update pada spesifikasi Pod deployment.

Pada saat yang sama dengan men-deploy adaptor, Anda membuat pengontrol Service yang memungkinkan Anda menghubungkan adaptor ke Cloud Healthcare API menggunakan load balancing internal.

Jika baru menggunakan GKE, sebaiknya Anda menyelesaikan panduan memulai GKE untuk mempelajari cara kerja produk.

Menambahkan izin Pub/Sub API ke akun layanan GKE

Seperti yang dinyatakan dalam dokumentasi GKE tentang Mengautentikasi ke Cloud Platform dengan akun layanan, setiap node dalam cluster container adalah instance Compute Engine. Oleh karena itu, saat dijalankan di cluster container, adaptor MLLP akan otomatis mewarisi cakupan instance Compute Engine tempat adaptor tersebut di-deploy.

Google Cloud secara otomatis membuat akun layanan bernama "akun layanan default Compute Engine" dan GKE mengaitkan akun layanan ini dengan node yang dibuat GKE. Bergantung pada cara project Anda dikonfigurasi, akun layanan default mungkin memiliki izin untuk menggunakan Cloud Platform API lainnya atau tidak. GKE juga menetapkan beberapa cakupan akses terbatas ke instance Compute Engine.

Untuk mendapatkan hasil terbaik, jangan melakukan autentikasi ke layanan Google Cloud lainnya (seperti Pub/Sub) dari Pod yang berjalan di GKE dengan mengupdate izin akun layanan default atau menetapkan lebih banyak cakupan akses ke instance Compute Engine. Sebagai gantinya, buat akun layanan Anda sendiri.

Anda harus memberikan izin Pub/Sub yang diperlukan ke cluster container, tetapi Anda juga memiliki opsi untuk memberikan izin guna menulis metrik ke Cloud Monitoring.

Untuk membuat akun layanan baru yang hanya berisi cakupan yang diperlukan cluster container, selesaikan langkah-langkah berikut:

Konsol

Buat akun layanan:

  1. Di konsol Google Cloud, buka halaman Buat akun layanan.

    Buka Create service account

  2. Pilih project.

  3. Di kolom Nama akun layanan, masukkan nama. Konsol Google Cloud akan mengisi kolom ID akun layanan berdasarkan nama ini.

    Opsional: Di kolom Deskripsi akun layanan, masukkan deskripsi.

  4. Klik Create.

  5. Klik kolom Pilih peran.

    Di bagian All roles, klik Pub/Sub > Pub/Sub Subscriber.

  6. Klik Tambahkan peran lain, lalu klik kolom Pilih peran.

    Pada bagian All roles, klik Cloud Healthcare > Healthcare HL7v2 Message Ingest.

  7. Opsional: Jika Anda ingin mengaktifkan pemantauan, klik Tambahkan peran lain, lalu klik kolom Pilih peran.

    Pada bagian All roles, klik Monitoring > Monitoring Metric Writer.

  8. Klik Lanjutkan.

  9. Klik Selesai untuk menyelesaikan pembuatan akun layanan.

    Jangan tutup jendela browser Anda. Anda akan menggunakan jendela tersebut dalam prosedur berikutnya.

Membuat kunci akun layanan:

  1. Di konsol Google Cloud, klik alamat email untuk akun layanan yang telah dibuat.

  2. Klik Kunci.

  3. Klik Tambahkan kunci, lalu klik Buat kunci baru.

  4. Klik Create. File kunci JSON akan didownload ke komputer Anda.

  5. Klik Close.

gcloud

  1. Untuk membuat akun layanan, jalankan perintah gcloud iam service-accounts create.

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

    Output-nya adalah akun layanan:

    Created service account SERVICE_ACCOUNT_NAME.
  2. Untuk memberikan setiap peran ke akun layanan, jalankan perintah gcloud projects add-iam-policy-binding.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/pubsub.subscriber
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/healthcare.hl7V2Ingest
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/monitoring.metricWriter

    Outputnya mencakup kebijakan yang diperbarui:

    bindings:
        - members:
            - user:SERVICE_ACCOUNT_NAME
            role: roles/pubsub.publisher
        - members:
            - user:SERVICE_ACCOUNT_NAME
            roles/healthcare.hl7V2Ingest
        - members:
            - user:SERVICE_ACCOUNT_NAME
            roles/monitoring.metricWriter
        etag: ETAG
        version: 1
  3. Untuk membuat kunci akun layanan, jalankan perintah gcloud iam service-accounts keys create.

    gcloud iam service-accounts keys create ~/FILENAME.json \
       --iam-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

    Setelah akun layanan dibuat, file kunci JSON yang berisi kredensial akun layanan akan didownload ke komputer Anda. Anda akan menggunakan file kunci ini untuk mengonfigurasi adaptor MLLP guna melakukan autentikasi ke Cloud Healthcare API, Pub/Sub API, dan Cloud Monitoring API menggunakan flag --service-account selama pembuatan cluster.

    created key [e44da1202f82f8f4bdd9d92bc412d1d8a837fa83] of type [json] as
        [/usr/home/USERNAME/FILENAME.json] for
        [SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com]

Membuat cluster

Untuk membuat cluster di GKE, jalankan perintah gcloud container clusters create:

gcloud container clusters create mllp-adapter \
    --zone=COMPUTE_ZONE \
    --service-account CLIENT_EMAIL

dengan:

  • COMPUTE_ZONE adalah zona tempat cluster Anda di-deploy. Zona adalah perkiraan lokasi regional tempat cluster Anda dan resource-nya berada. Misalnya, us-west1-a adalah zona di region us-west. Jika Anda telah menetapkan zona default menggunakan gcloud config set compute/zone, nilai flag ini akan menggantikan default.
  • CLIENT_EMAIL adalah ID untuk akun layanan. Anda dapat menemukan alamat email ini di file kunci akun layanan di kolom "client_email":. ID ini memiliki format SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.

Perintah menampilkan output yang mirip dengan contoh berikut:

Creating cluster mllp-adapter in COMPUTE_ZONE...
Cluster is being configured...
Cluster is being deployed...
Cluster is being health-checked...
Cluster is being health-checked (master is healthy)...done.
Created [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/COMPUTE_ZONE/clusters/mllp-adapter].
To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/COMPUTE_ZONE/mllp-adapter?project=PROJECT_ID
kubeconfig entry generated for mllp-adapter.
NAME          LOCATION       MASTER_VERSION  MASTER_IP      MACHINE_TYPE   NODE_VERSION  NUM_NODES  STATUS
mllp-adapter  COMPUTE_ZONE   1.11.7-gke.4    203.0.113.1    n1-standard-1  1.11.7-gke.4  3          RUNNING

Setelah cluster dibuat, GKE membuat tiga instance VM Compute Engine. Anda dapat memverifikasi hal ini dengan mencantumkan instance menggunakan perintah berikut:

gcloud compute instances list

Mengonfigurasi deployment

Saat men-deploy aplikasi ke GKE, Anda menentukan properti deployment menggunakan file manifes deployment, yang biasanya berupa file YAML. Untuk mengetahui contohnya, lihat Membuat deployment.

  1. Buka terminal terpisah.

  2. Dengan menggunakan editor teks, buat file manifes deployment bernama mllp_adapter.yaml dengan konten berikut:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mllp-adapter-deployment
spec:
  replicas: 1
  selector:
    matchLabels:
      app: mllp-adapter
  template:
    metadata:
      labels:
        app: mllp-adapter
    spec:
      containers:
        - name: mllp-adapter
          imagePullPolicy: Always
          image: gcr.io/cloud-healthcare-containers/mllp-adapter
          ports:
            - containerPort: 2575
              protocol: TCP
              name: "port"
          command:
            - "/usr/mllp_adapter/mllp_adapter"
            - "--port=2575"
            - "--hl7_v2_project_id=PROJECT_ID"
            - "--hl7_v2_location_id=LOCATION"
            - "--hl7_v2_dataset_id=DATASET_ID"
            - "--hl7_v2_store_id=HL7V2_STORE_ID"
            - "--api_addr_prefix=https://healthcare.googleapis.com:443/v1"
            - "--logtostderr"
            - "--receiver_ip=0.0.0.0"

dengan:

  • PROJECT_ID adalah ID untuk project Google Cloud yang berisi penyimpanan HL7v2 Anda.
  • LOCATION adalah wilayah tempat toko HL7v2 Anda berada.
  • DATASET_ID adalah ID untuk set data induk penyimpanan HL7v2 Anda.
  • HL7V2_STORE_ID adalah ID untuk penyimpanan HL7v2 tempat Anda mengirim pesan HL7v2.

Deployment ini memiliki properti berikut:

  • spec: replicas: adalah jumlah pod replika yang dikelola deployment.
  • spec: template: metadata: labels: adalah label yang diberikan ke setiap Pod, yang digunakan oleh deployment untuk mengelola pod.
  • spec: template: spec: adalah spesifikasi Pod, yang menentukan cara setiap Pod dijalankan.
  • spec: containers menyertakan nama container yang akan dijalankan di setiap Pod dan image container yang harus dijalankan.

Untuk mengetahui informasi selengkapnya tentang spesifikasi deployment, lihat referensi Deployment API.

Mengonfigurasi Layanan

Agar adaptor MLLP dapat diakses oleh aplikasi di luar cluster (seperti pusat perawatan), Anda harus mengonfigurasi load balancer internal.

Jika Anda belum mengonfigurasi VPN, aplikasi dapat mengakses adaptor MLLP melalui load balancer internal selama aplikasi tersebut menggunakan jaringan VPC yang sama dan berada di region Google Cloud yang sama. Misalnya, agar adaptor dapat diakses oleh instance VM Compute Engine di region yang sama dan di jaringan VPC yang sama, Anda dapat menambahkan load balancer internal ke resource Service cluster.

Dalam direktori tempat Anda membuat file manifes deployment, gunakan editor teks untuk membuat file manifes Service bernama mllp_adapter_service.yaml dengan konten berikut. File ini bertanggung jawab untuk mengonfigurasi load balancing internal:

apiVersion: v1
kind: Service
metadata:
  name: mllp-adapter-service
  annotations:
    cloud.google.com/load-balancer-type: "Internal"
spec:
  type: LoadBalancer
  ports:
  - name: port
    port: 2575
    targetPort: 2575
    protocol: TCP
  selector:
    app: mllp-adapter

Layanan memiliki properti berikut:

  • metadata: name: adalah nama yang Anda pilih untuk Layanan. Dalam hal ini, parameternya adalah mllp-adapter-service.
  • metadata: annotations: adalah anotasi yang menentukan bahwa load balancing internal akan dikonfigurasi.
  • spec: type: adalah jenis load balancer.
  • ports: port: digunakan untuk menentukan port tempat layanan dapat menerima traffic dari layanan lain dalam cluster yang sama. Port MLLP default 2575 digunakan.
  • ports: targetPort: digunakan untuk menentukan port di setiap Pod tempat layanan berjalan.
  • spec: selector: app: menentukan Pod yang ditargetkan Layanan.

Meskipun alamat IP untuk load balancer dapat ditentukan (menggunakan kolom clusterIP), load balancer dapat menghasilkan alamat IP-nya sendiri yang menjadi tujuan pengiriman pesan. Untuk saat ini, biarkan cluster menghasilkan alamat IP, yang akan Anda gunakan nanti dalam tutorial ini.

Untuk mengetahui informasi selengkapnya tentang load balancing internal, lihat dokumentasi GKE.

Untuk mengetahui informasi selengkapnya tentang spesifikasi Layanan, silakan melihat Referensi Service API.

Men-deploy deployment

Untuk men-deploy adaptor ke cluster GKE, di direktori yang berisi file manifes deployment mllp_adapter.yaml, jalankan perintah berikut:

kubectl apply -f mllp_adapter.yaml

Perintah akan menampilkan output berikut:

deployment.extensions "mllp-adapter-deployment" created

Memeriksa deployment

Setelah membuat deployment, Anda dapat menggunakan alat kubectl untuk memeriksanya.

Untuk mendapatkan informasi terperinci tentang deployment, jalankan perintah berikut:

kubectl describe deployment mllp-adapter

Untuk menampilkan daftar Pod yang dibuat oleh deployment, jalankan perintah berikut:

kubectl get pods -l app=mllp-adapter

Untuk mendapatkan informasi tentang Pod yang dibuat:

kubectl describe pod POD_NAME

Jika deployment berhasil, bagian terakhir dari output dari perintah sebelumnya akan berisi informasi berikut:

Events:
  Type    Reason     Age   From                                                  Message
  ----    ------     ----  ----                                                  -------
  Normal  Scheduled  1m    default-scheduler                                     Successfully assigned default/mllp-adapter-deployment-85b46f8-zxw68 to gke-mllp-adapter-default-pool-9c42852d-95sn
  Normal  Pulling    1m    kubelet, gke-mllp-adapter-default-pool-9c42852d-95sn  pulling image "gcr.io/cloud-healthcare-containers/mllp-adapter"
  Normal  Pulled     1m    kubelet, gke-mllp-adapter-default-pool-9c42852d-95sn  Successfully pulled image "gcr.io/cloud-healthcare-containers/mllp-adapter"
  Normal  Created    1m    kubelet, gke-mllp-adapter-default-pool-9c42852d-95sn  Created container
  Normal  Started    1m    kubelet, gke-mllp-adapter-default-pool-9c42852d-95sn  Started container

Men-deploy Layanan dan membuat load balancer internal

Untuk membuat load balancer internal, di direktori yang berisi file manifes Layanan mllp_adapter_service.yaml, jalankan perintah berikut:

kubectl apply -f mllp_adapter_service.yaml

Perintah akan menampilkan output berikut:

service "mllp-adapter-service" created

Memeriksa Layanan

Setelah membuat Layanan, periksa untuk memastikan bahwa layanan telah berhasil dikonfigurasi.

Untuk memeriksa load balancer internal, jalankan perintah berikut:

kubectl describe service mllp-adapter-service

Output perintah mirip dengan contoh berikut:

Name:                     mllp-adapter-service
Namespace:                default
Labels:                   <none>
Annotations:              cloud.google.com/load-balancer-type=Internal
                          kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{"cloud.google.com/load-balancer-type":"Internal"},"name":"mllp-adapter-service","namespa...
Selector:                 app=mllp-adapter
Type:                     LoadBalancer
IP:                       203.0.113.1
LoadBalancer Ingress:     203.0.113.1
Port:                     port  2575/TCP
TargetPort:               2575/TCP
NodePort:                 port  30660/TCP
Endpoints:                <none>
Session Affinity:         None
External Traffic Policy:  Cluster
Events:
  Type    Reason                Age   From                Message
  ----    ------                ----  ----                -------
  Normal  EnsuringLoadBalancer  1m    service-controller  Ensuring load balancer
  Normal  EnsuredLoadBalancer   1m    service-controller  Ensured load balancer

Mungkin perlu waktu hingga satu menit untuk mengisi alamat IP LoadBalancer Ingress. Anda akan menggunakan alamat IP ini dan port 2575 untuk mengakses Layanan dari luar cluster pada langkah berikutnya.

Membuat VM Compute Engine dan mengirim pesan

Seperti sebelumnya dalam tutorial ini, Anda menguji adaptor MLLP secara lokal dan mengirim pesan HL7v2 ke penyimpanan HL7v2, kini Anda akan mengirim pesan dari VM Compute Engine ke adaptor MLLP yang berjalan di GKE. Pesan tersebut kemudian diteruskan ke penyimpanan HL7v2.

Untuk mengirim permintaan dari instance baru ke cluster GKE, instance dan instance yang ada harus berada di region yang sama dan menggunakan jaringan VPC yang sama.

Di akhir bagian ini, Anda akan mencantumkan notifikasi yang dipublikasikan ke topik Pub/Sub dan pesan HL7v2 di toko HL7v2 Anda. Instance VM Compute Engine harus diberi izin untuk melakukan tugas ini. Sebelum membuat instance, buat akun layanan baru dengan izin yang diperlukan dengan menyelesaikan langkah-langkah berikut:

Konsol

Buat akun layanan:

  1. Di konsol Google Cloud, buka halaman Buat akun layanan.

    Buka Create service account

  2. Pilih project.

  3. Di kolom Nama akun layanan, masukkan nama. Konsol Google Cloud akan mengisi kolom ID akun layanan berdasarkan nama ini.

    Opsional: Di kolom Deskripsi akun layanan, masukkan deskripsi.

  4. Klik Create.

  5. Klik kolom Pilih peran.

    Di bagian All roles, klik Pub/Sub > Pub/Sub Subscriber.

  6. Klik Tambahkan peran lain, lalu klik kolom Pilih peran.

    Pada bagian All roles, klik Cloud Healthcare > Healthcare HL7v2 Message Consumer.

  7. Klik Lanjutkan.

  8. Klik Selesai untuk menyelesaikan pembuatan akun layanan.

    Jangan tutup jendela browser Anda. Anda akan menggunakan jendela tersebut dalam prosedur berikutnya.

Membuat kunci akun layanan:

  1. Di konsol Google Cloud, klik alamat email untuk akun layanan yang telah dibuat.

  2. Klik Kunci.

  3. Klik Tambahkan kunci, lalu klik Buat kunci baru.

  4. Klik Create. File kunci JSON akan didownload ke komputer Anda.

  5. Klik Close.

gcloud

  1. Untuk membuat akun layanan, jalankan perintah gcloud iam service-accounts create.

    gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

    Output-nya adalah akun layanan:

    Created service account SERVICE_ACCOUNT_NAME.
  2. Untuk memberikan setiap peran ke akun layanan, jalankan perintah gcloud projects add-iam-policy-binding.

    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/pubsub.publisher
    
    gcloud projects add-iam-policy-binding PROJECT_ID \
      --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \
      --role=roles/healthcare.hl7V2Consumer

    Outputnya mencakup kebijakan yang diperbarui:

    bindings:
        - members:
            - user:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
            role: roles/pubsub.publisher
        - members:
            - user:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
            roles/healthcare.hl7V2Consumer
        etag: ETAG
        version: 1
  3. Untuk membuat kunci akun layanan, jalankan perintah gcloud iam service-accounts keys create.

    gcloud iam service-accounts keys create ~/FILENAME.json \
       --iam-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

    Setelah akun layanan dibuat, file kunci JSON yang berisi kredensial akun layanan akan didownload ke komputer Anda.

Langkah-langkah berikut menunjukkan cara membuat instance virtual machine Linux di Compute Engine:

Konsol

  1. Di Konsol Google Cloud, buka halaman VM Instances.

    Buka halaman VM Instances

  2. Klik Create instance.

  3. Pilih Region dan Zona untuk instance yang cocok dengan zona yang Anda pilih saat membuat cluster. Misalnya, jika Anda menggunakan us-central1-a untuk COMPUTE_ZONE saat membuat cluster, maka pada layar pembuatan instance, pilih us-central1 (Iowa) untuk Region dan us-central1-a untuk Zone.

  4. Di bagian Boot disk, klik Change untuk mulai mengonfigurasi boot disk Anda.

  5. Pada tab Public images, pilih versi 9 sistem operasi Debian.

  6. Klik Pilih.

  7. Di bagian Identity and API access, pilih akun layanan yang Anda buat.

  8. Di bagian Firewall, pilih Allow HTTP traffic.

  9. Klik Create untuk membuat instance.

gcloud

Untuk membuat instance komputasi, jalankan metode gcloud compute instances create dengan opsi berikut:

  • ZONE yang Anda pilih saat membuat cluster
  • Tag http-server untuk mengizinkan traffic HTTP
  • SERVICE_ACCOUNT yang Anda buat
gcloud compute instances create COMPUTE_NAME \
   --project=PROJECT_ID \
   --zone=ZONE \
   --image-family=debian-9 \
   --image-project=debian-cloud \
   --tags=http-server \
   --service-account=SERVICE_ACCOUNT

Output-nya mirip dengan contoh berikut:

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/COMPUTE_NAME].
NAME          ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
COMPUTE_NAME  ZONE           n1-standard-1               INTERNAL_IP  EXTERNAL_IP    RUNNING

Tunggu hingga instance memulai. Setelah dimulai, instance akan tercantum pada halaman Instance VM dengan ikon status hijau.

Secara default, instance menggunakan jaringan VPC default yang sama dengan yang digunakan cluster, yang berarti traffic dapat dikirim dari instance ke cluster.

Untuk terhubung ke instance, selesaikan langkah-langkah berikut:

Konsol

  1. Di Konsol Google Cloud, buka halaman VM Instances.

    Buka halaman VM Instances

  2. Dalam daftar instance virtual machine, klik SSH di baris instance yang dibuat.

gcloud

Untuk terhubung ke instance, jalankan perintah gcloud compute ssh:

gcloud compute ssh INSTANCE_NAME \
    --project PROJECT_ID \
    --zone ZONE

Anda sekarang memiliki jendela terminal untuk berinteraksi dengan instance Linux.

  1. Di jendela terminal, instal Netcat:

    sudo apt install netcat
    
  2. Download file hl7v2-mllp-sample.txt dan simpan ke instance. Untuk informasi tentang encoding dan terminal segmen yang digunakan dalam file, lihat Pemisah dan encoding segmen pesan HL7v2.

  3. Untuk mulai mengirim pesan HL7v2 melalui adaptor MLLP ke penyimpanan HL7v2, di direktori tempat Anda mendownload file, jalankan perintah berikut. Gunakan nilai LoadBalancer Ingress yang ditampilkan saat Anda memeriksa Layanan.

    echo -n -e "\x0b$(cat hl7v2-mllp-sample.txt)\x1c\x0d" | nc LOAD_BALANCER_INGRESS_IP_ADDRESS 2575

    Setelah menjalankan perintah, pesan akan dikirim melalui adaptor MLLP ke penyimpanan HL7v2 Anda. Jika pesan berhasil diserap ke penyimpanan HL7v2, perintah akan menampilkan output berikut:

    MSA|AA|20150503223000|ILITY|FROM_APP|FROM_FACILITY|20190312162410||ACK|f4c59243-19c2-4373-bea0-39c1b2ba616b|P|2.5
    

    Output ini menunjukkan bahwa penyimpanan HL7v2 merespons dengan jenis respons AA (Application Accept), yang berarti pesan telah divalidasi dan berhasil diserap.

  4. Untuk melihat pesan yang dipublikasikan ke topik Pub/Sub, jalankan perintah gcloud pubsub subscriptions pull:

    gcloud pubsub subscriptions pull --auto-ack PUBSUB_SUBSCRIPTION

    Perintah ini menampilkan output berikut tentang pesan HL7v2 yang diserap:

    ┌-----------------------------------------------------------------------------------------------------------------|-----------------|---------------┐
    |                                                               DATA                                              |    MESSAGE_ID   |   ATTRIBUTES  |
    ├-----------------------------------------------------------------------------------------------------------------|-----------------|---------------|
    | projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/HL7V2_MESSAGE_ID | 123456789012345 | msgType=ADT   |
    └-----------------------------------------------------------------------------------------------------------------|-----------------|---------------┘
  5. Anda juga dapat mencantumkan pesan di penyimpanan HL7v2 untuk melihat apakah pesan telah ditambahkan:

    curl

    curl -X GET \
         -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
         -H "Content-Type: application/json; charset=utf-8" \
         "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages"

    Jika permintaan berhasil, server akan menampilkan ID pesan di jalur resource:

    {
      "hl7V2Messages": [
        {
          "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID"
        }
      ]
    }
    

    PowerShell

    $cred = gcloud auth application-default print-access-token
    $headers = @{ Authorization = "Bearer $cred" }
    
    Invoke-WebRequest `
      -Method Get `
      -Headers $headers `
      -ContentType: "application/json; charset=utf-8" `
      -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages" | Select-Object -Expand Content

    Jika permintaan berhasil, server akan menampilkan ID pesan di jalur resource:

    {
      "hl7V2Messages": [
        {
          "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID"
        }
      ]
    }
    

Setelah menyelesaikan bagian ini, Anda telah berhasil men-deploy adaptor MLLP ke GKE dan mengirim pesan HL7v2 dari instance jarak jauh melalui adaptor dan ke Cloud Healthcare API.

Pada sisa tutorial ini, Anda akan mempelajari cara mengenkripsi pesan HL7v2 yang dikirim dengan aman dengan mengonfigurasi VPN antara instance Compute Engine, yang bertindak sebagai instance "lokal" dan adaptor.

Mengonfigurasi VPN

Penggunaan VPN memungkinkan Anda memperluas jaringan pribadi tempat Anda mengirim pesan HL7v2 melalui jaringan publik, seperti internet. Dengan menggunakan VPN, Anda dapat mengirim pesan dari pusat layanan melalui adaptor MLLP dan ke Google Cloud. Sistem dalam alur ini bertindak seolah-olah berada di satu jaringan pribadi.

Ada dua metode untuk mengamankan koneksi MLLP Anda menggunakan VPN:

Mengonfigurasi Cloud VPN

Cloud VPN menghubungkan jaringan lokal Anda dengan aman ke jaringan Virtual Private Cloud (VPC) Google Cloud melalui koneksi VPN IPsec. Traffic yang melintasi dua jaringan tersebut dienkripsi oleh satu gateway VPN, lalu didekripsi oleh gateway VPN lainnya. Ini melindungi data Anda saat berpindah melalui internet atau melalui jaringan pusat perawatan.

Dalam tutorial ini, setiap gateway VPN yang Anda konfigurasi berada di jaringan dan subnet kustom yang berbeda di region Google Cloud yang berbeda.

Gateway VPN yang dikonfigurasi di us-central1 bertindak sebagai gateway VPN Cloud di sisi Google Cloud, sedangkan gateway Cloud VPN di europe-west1 menyimulasikan gateway "lokal" Anda.

Referensi penamaan dan pengalamatan

Sebagai referensi, tutorial ini menggunakan penamaan dan pengalamatan IP berikut:

Sisi Google Cloud

  • Nama jaringan: cloud-vpn-network
  • Nama subnet: subnet-us-central-10-0-1
  • Region: us-central1
  • Rentang subnet: 10.0.1.0/24
  • Nama alamat IP eksternal: cloud-vpn-ip
  • Nama gateway VPN: vpn-us-central
  • Nama tunnel VPN: vpn-us-central-tunnel-1

Sisi "Lokal"

  • Nama jaringan: on-prem-vpn-network
  • Nama subnet: subnet-europe-west-10-0-2
  • Region: europe-west1
  • Rentang subnet: 10.0.2.0/24
  • Nama alamat IP eksternal: on-prem-vpn-ip
  • Nama gateway VPN: vpn-europe-west
  • Nama tunnel VPN: vpn-europe-west-tunnel-1

Membuat subnet dan jaringan VPC kustom

Langkah pertama dalam mengonfigurasi Cloud VPN adalah membuat dua jaringan VPC. Satu jaringan, bernama on-prem-vpn-network, dikonfigurasi di lingkungan "lokal" dan berjalan pada instance VM Compute Engine yang disebut on-prem-instance. Jaringan lainnya, yang disebut cloud-vpn-network, adalah jaringan yang digunakan oleh cluster GKE yang menjalankan adaptor MLLP. Anda akan terhubung ke VM on-prem-instance dan mengirim pesan HL7v2 ke adaptor MLLP yang berjalan di jaringan cloud-vpn-network melalui load balancer internal adaptor MLLP.

Buat dua jaringan VPC kustom dan subnetnya dengan menyelesaikan langkah-langkah berikut:

  1. Untuk membuat jaringan VPC pertama, cloud-vpn-network, jalankan perintah berikut:

    gcloud compute networks create cloud-vpn-network \
       --project=PROJECT_ID \
       --subnet-mode=custom
  2. Untuk membuat subnet subnet-us-central-10-0-1 bagi jaringan cloud-vpn-network, jalankan perintah berikut:

    gcloud compute networks subnets create subnet-us-central-10-0-1 \
       --project=PROJECT_ID \
       --region=us-central1 \
       --network=cloud-vpn-network \
       --range=10.0.1.0/24
  3. Untuk membuat jaringan VPC on-prem-vpn-network, jalankan perintah berikut:

    gcloud compute networks create on-prem-vpn-network \
       --project=PROJECT_ID \
       --subnet-mode=custom
  4. Untuk membuat subnet subnet-europe-west-10-0-2 bagi jaringan VPC on-prem-vpn-network, jalankan perintah berikut:

    gcloud compute networks subnets create subnet-europe-west-10-0-2 \
       --project=PROJECT_ID \
       --region=europe-west1 \
       --network=on-prem-vpn-network \
       --range=10.0.2.0/24

Membuat alamat IP eksternal

Sebelum membuat gateway VPN, pesan alamat IP eksternal untuk setiap gateway dengan menyelesaikan langkah-langkah berikut:

  1. Untuk mencadangkan alamat IP eksternal (statis) regional untuk alamat cloud-vpn-ip, jalankan perintah berikut:

    gcloud compute addresses create cloud-vpn-ip \
       --project=PROJECT_ID \
       --region=us-central1
  2. Untuk mencadangkan alamat IP eksternal (statis) regional untuk alamat on-prem-vpn-ip, jalankan perintah berikut:

    gcloud compute addresses create on-prem-vpn-ip \
       --project=PROJECT_ID \
       --region=europe-west1
  3. Catat alamat IP eksternal tersebut agar Anda dapat menggunakannya untuk mengonfigurasi gateway VPN di bagian berikutnya. Untuk mengambil alamat IP eksternal, jalankan perintah berikut:

    Alamat IP Cloud VPN:

    gcloud compute addresses describe cloud-vpn-ip  \
       --project PROJECT_ID \
       --region us-central1 \
       --format='flattened(address)'

    Alamat IP VPN"Lokal":

    gcloud compute addresses describe on-prem-vpn-ip \
       --project PROJECT_ID \
       --region europe-west1 \
       --format='flattened(address)'

    Perintah menampilkan output yang mirip dengan berikut ini:

    address: 203.0.113.1
    

Membuat gateway, tunnel, dan rute VPN

Selesaikan langkah-langkah berikut guna membuat gateway, tunnel, dan rute VPN untuk Cloud VPN:

  1. Buat pre-shared key (rahasia bersama) yang kuat secara kriptografis dengan mengikuti petunjuk dalam Membuat kunci pre-shared yang kuat. Kunci ini direferensikan sebagai SHARED_SECRET di bagian ini.

  2. Untuk membuat objek gateway VPN target, jalankan perintah berikut:

    gcloud compute target-vpn-gateways create vpn-us-central \
       --project PROJECT_ID \
       --region us-central1 \
       --network cloud-vpn-network
  3. Untuk membuat tiga aturan penerusan, jalankan perintah berikut, dengan mengganti variabel CLOUD_VPN_EXTERNAL_ADDRESS dengan nilai dari alamat IP Cloud VPN di bagian sebelumnya:

    Kirim traffic ESP (IPsec) ke gateway:

    gcloud compute forwarding-rules create vpn-us-central-rule-esp \
        --project PROJECT_ID \
        --region us-central1 \
        --address CLOUD_VPN_EXTERNAL_ADDRESS \
        --ip-protocol ESP \
        --target-vpn-gateway vpn-us-central

    Kirim traffic UDP 500 ke gateway:

    gcloud compute forwarding-rules create vpn-us-central-rule-udp500 \
        --project PROJECT_ID \
        --region us-central1 \
        --address CLOUD_VPN_EXTERNAL_ADDRESS \
        --ip-protocol UDP \
        --ports 500 \
        --target-vpn-gateway vpn-us-central

    Kirim traffic UDP 4500 ke gateway:

    gcloud compute forwarding-rules create vpn-us-central-rule-udp4500 \
        --project PROJECT_ID \
        --region us-central1 \
        --address CLOUD_VPN_EXTERNAL_ADDRESS \
        --ip-protocol UDP \
        --ports 4500 \
        --target-vpn-gateway vpn-us-central
  4. Untuk membuat tunnel ke gateway Cloud VPN, jalankan perintah berikut. Ganti ON_PREM_VPN_IP dengan nilai dari alamat IP VPN"Lokal" di bagian sebelumnya.

    gcloud compute vpn-tunnels create vpn-us-central-tunnel-1 \
        --project PROJECT_ID \
        --region us-central1 \
        --peer-address ON_PREM_VPN_IP \
        --shared-secret SHARED_SECRET \
        --ike-version 2 \
        --local-traffic-selector 0.0.0.0/0 \
        --target-vpn-gateway vpn-us-central
  5. Untuk membuat rute statis ke 10.0.2.0/24, jalankan perintah berikut:

    gcloud compute routes create "vpn-us-central-tunnel-1-route-1" \
       --project PROJECT_ID \
       --network "cloud-vpn-network" \
       --next-hop-vpn-tunnel "vpn-us-central-tunnel-1" \
       --next-hop-vpn-tunnel-region "us-central1" \
       --destination-range "10.0.2.0/24"

Selesaikan langkah-langkah berikut untuk membuat gateway, tunnel, dan rute VPN untuk VPN "lokal":

  1. Untuk membuat objek gateway VPN target, jalankan perintah berikut:

    gcloud compute target-vpn-gateways create "vpn-europe-west" \
       --project PROJECT_ID \
       --region "europe-west1" \
       --network "on-prem-vpn-network"
  2. Untuk membuat tiga aturan penerusan, jalankan perintah berikut, dengan mengganti variabel ON_PREMISES_VPN_EXTERNAL_ADDRESS dengan nilai dari alamat IP VPN"Lokal" di bagian sebelumnya:

    Kirim traffic ESP (IPsec) ke gateway:

    gcloud compute forwarding-rules create vpn-europe-west-rule-esp \
        --project PROJECT_ID \
        --region europe-west1 \
        --address ON_PREMISES_VPN_EXTERNAL_ADDRESS \
        --ip-protocol ESP \
        --target-vpn-gateway vpn-europe-west

    Kirim traffic UDP 500 ke gateway:

    gcloud compute forwarding-rules create vpn-europe-west-rule-udp500 \
        --project PROJECT_ID \
        --region europe-west1 \
        --address ON_PREMISES_VPN_EXTERNAL_ADDRESS \
        --ip-protocol UDP \
        --ports 500 \
        --target-vpn-gateway vpn-europe-west

    Kirim traffic UDP 4500 ke gateway:

    gcloud compute forwarding-rules create vpn-europe-west-rule-udp4500 \
         --project PROJECT_ID \
         --region europe-west1 \
         --address ON_PREMISES_VPN_EXTERNAL_ADDRESS \
         --ip-protocol UDP \
         --ports 4500 \
         --target-vpn-gateway vpn-europe-west
  3. Untuk membuat tunnel ke gateway "lokal", jalankan perintah berikut:

    gcloud compute vpn-tunnels create vpn-europe-west-tunnel-1 \
       --project PROJECT_ID \
       --region europe-west1 \
       --peer-address CLOUD_VPN_IP \
       --shared-secret SHARED_SECRET \
       --ike-version 2 \
       --local-traffic-selector 0.0.0.0/0 \
       --target-vpn-gateway vpn-europe-west
  4. Untuk membuat rute statis ke 10.0.1.0/24, jalankan perintah berikut:

    gcloud compute routes create "vpn-europe-west-tunnel-1-route-1" \
       --project PROJECT_ID \
       --network "on-prem-vpn-network" \
       --next-hop-vpn-tunnel "vpn-europe-west-tunnel-1" \
       --next-hop-vpn-tunnel-region "europe-west1" \
       --destination-range "10.0.1.0/24"

Anda telah membuat Cloud VPN dan gateway "lokal" serta memulai terowongannya. Gateway VPN tidak akan terhubung sampai Anda membuat aturan firewall untuk mengizinkan traffic melalui tunnel di antara gateway tersebut.

Membuat aturan firewall

Anda harus membuat aturan firewall untuk kedua sisi tunnel VPN. Aturan ini memungkinkan semua traffic TCP, UDP, dan ICMP untuk masuk dari subnet di satu sisi tunnel VPN ke sisi lainnya.

  1. Guna membuat aturan firewall untuk subnet Cloud VPN, jalankan perintah berikut:

    gcloud compute firewall-rules create allow-tcp-udp-icmp-cloud-vpn \
       --project=PROJECT_ID \
       --direction=INGRESS \
       --priority=1000 \
       --network=cloud-vpn-network \
       --action=ALLOW \
       --rules=tcp,udp,icmp \
       --source-ranges=10.0.2.0/24
  2. Guna membuat aturan firewall untuk subnet "lokal", jalankan perintah berikut:

    gcloud compute firewall-rules create allow-tcp-udp-icmp-on-prem-vpn \
       --project=PROJECT_ID \
       --direction=INGRESS \
       --priority=1000 \
       --network=on-prem-vpn-network \
       --action=ALLOW \
       --rules=tcp,udp,icmp \
       --source-ranges=10.0.1.0/24
  3. Buat aturan firewall yang memungkinkan Anda menerapkan SSH ke instance VM di port 22 dengan menjalankan perintah berikut:

    gcloud compute firewall-rules create on-prem-vpn-allow-ssh \
       --project=PROJECT_ID \
       --direction=INGRESS \
       --priority=1000 \
       --network=on-prem-vpn-network \
       --action=ALLOW \
       --rules=tcp:22 \
       --source-ranges=0.0.0.0/0

Memeriksa status tunnel VPN

Untuk memverifikasi bahwa tunnel Anda sudah aktif, selesaikan langkah-langkah berikut:

  1. Buka halaman VPN di konsol Google Cloud.

    Buka halaman VPN

  2. Klik tab Google VPN Tunnels.

  3. Di kolom Status untuk setiap terowongan, cari tanda centang hijau dan kata "Tetapkan". Jika item-item ini ada, {i>gateway<i} Anda telah menegosiasikan terowongan. Jika tidak ada tanda yang muncul setelah beberapa menit, lihat Pemecahan masalah.

    Untuk informasi logging tambahan yang terkait dengan tunnel VPN, lihat Memeriksa Log VPN di halaman Pemecahan masalah. Misalnya, Anda dapat melihat metrik tentang paket yang dilepas, status tunnel, byte yang diterima, dan byte yang dikirim.

Setelah berhasil mengonfigurasi Cloud VPN dengan gateway, tunnel, dan aturan firewall yang diperlukan, Anda dapat membuat koneksi yang aman antara instance VM "lokal" dan adaptor MLLP yang berjalan di GKE.

Menggabungkan deployment ke GKE dan Cloud VPN

Sebelumnya dalam tutorial ini, Anda menguji adaptor MLLP secara lokal dan mengirim pesan HL7v2 melalui koneksi non-VPN ke adaptor MLLP. Kini Anda dapat mengirim pesan dari VM Compute Engine melalui koneksi aman menggunakan Cloud VPN ke adaptor MLLP yang berjalan di GKE. Pesan tersebut kemudian diteruskan ke penyimpanan HL7v2.

Membuat ulang deployment

Pertama, buat ulang deployment di GKE agar cluster menggunakan setelan yang Anda konfigurasikan di Mengonfigurasi Cloud VPN:

  1. Untuk menghapus cluster mllp-adapter yang Anda buat, jalankan perintah gcloud container clusters delete. Masukkan nilai COMPUTE_ZONE yang Anda gunakan saat membuat cluster.

    gcloud container clusters delete mllp-adapter --zone=COMPUTE_ZONE
  2. Ikuti langkah-langkah dalam artikel Men-deploy adaptor MLLP ke Kubernetes Engine, tetapi saat Anda membuat cluster di GKE, tambahkan jaringan cloud-vpn-network dan subnet subnet-us-central-10-0-1 yang Anda buat saat Membuat jaringan dan subnet VPN kustom.

    Pastikan perintah pembuatan cluster terlihat seperti berikut:

    gcloud container clusters create mllp-adapter \
       --zone=COMPUTE_ZONE \
       --service-account=CLIENT_EMAIL \
       --network=cloud-vpn-network \
       --subnetwork=subnet-us-central-10-0-1

    dengan:

    • COMPUTE_ZONE adalah zona tempat cluster Anda di-deploy. Saat mengonfigurasi Cloud VPN di bagian sebelumnya, Anda menyetel jaringan "sisi Google Cloud" untuk menggunakan us-central1. Jaringan "sisi Google Cloud" ini adalah tempat cluster GKE berjalan. Gunakan salah satu zona berikut di us-central1: us-central1-c, us-central1-a, us-central1-f, us-central1-b.

    • CLIENT_EMAIL adalah ID untuk akun layanan. Anda dapat menemukannya di file kunci akun layanan di kolom "client_email":. Menggunakan format SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.

Membuat VM Compute Engine baru dengan setelan jaringan

Langkah-langkah berikut menunjukkan cara membuat instance virtual machine Linux di Compute Engine menggunakan Konsol Google Cloud. Tidak seperti VM Compute Engine yang Anda buat, VM ini menggunakan setelan jaringan "sisi "lokal" untuk berkomunikasi dengan cluster GKE melalui VPN.

Konsol

  1. Di Konsol Google Cloud, buka halaman VM Instances.

    Buka halaman VM Instances

  2. Klik Create instance.

  3. Pilih Region dan Zone untuk instance yang cocok dengan setelan jaringan "'on- mengirimkannya': europe-west1 (Belgium) untuk Region dan europe-west1-b untuk Zone.

  4. Di bagian Boot disk, klik Change untuk mulai mengonfigurasi boot disk Anda.

  5. Pada tab Public images, pilih versi 9 dari sistem operasi Debian.

  6. Klik Pilih.

  7. Di bagian Identity and API access, pilih akun layanan yang Anda buat.

  8. Di bagian Firewall, pilih Allow HTTP traffic.

  9. Luaskan bagian Management, security, disks, networking, sole tenancy.

  10. Di bagian Network interfaces di tab Networking, tentukan detail jaringan untuk setelan jaringan "sisi lokal":

    1. Di kolom Network, pilih on-prem-vpn-network.
    2. Di kolom Subnetwork, pilih subnet-europe-west-10-0-2 (10.0.2.0/24).
  11. Klik Create untuk membuat instance.

Tunggu hingga instance memulai. Jika sudah siap, instance tersebut akan tercantum di halaman VM Instances dengan ikon status hijau.

gcloud

Untuk membuat instance komputasi, jalankan metode gcloud compute instances create dengan opsi berikut:

  • ZONE yang cocok dengan setelan jaringan "sisi lokal'": europe-west1-b untuk Zona.
  • Izinkan traffic HTTP dengan menentukan tag http-server
  • SERVICE_ACCOUNT yang Anda buat
gcloud compute instances create COMPUTE_NAME \
   --project=PROJECT_ID
   --zone=ZONE
   --image-family=debian-9 \
   --tags=http-server,https-server
   --service-account=SERVICE_ACCOUNT

Output-nya mirip dengan contoh berikut:

Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/COMPUTE_NAME].
NAME          ZONE           MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP    STATUS
COMPUTE_NAME  ZONE           n1-standard-1               INTERNAL_IP  EXTERNAL_IP    RUNNING

Untuk terhubung ke instance, selesaikan langkah-langkah berikut:

Konsol

  1. Di Konsol Google Cloud, buka halaman VM Instances.

    Buka halaman VM Instances

  2. Dalam daftar instance virtual machine, klik SSH di baris instance yang dibuat.

gcloud

Untuk terhubung ke instance, jalankan perintah gcloud compute ssh:

gcloud compute ssh INSTANCE_NAME \
    --project PROJECT_ID \
    --zone ZONE

Anda sekarang memiliki jendela terminal untuk berinteraksi dengan instance Linux.

  1. Di jendela terminal, instal Netcat:

    sudo apt install netcat
    
  2. Download file hl7v2-mllp-sample.txt dan simpan ke instance.

  3. Untuk mulai mengirim pesan HL7v2 melalui adaptor MLLP ke penyimpanan HL7v2, di direktori tempat Anda mendownload file, jalankan perintah berikut. Gunakan nilai LoadBalancer Ingress yang ditampilkan saat Anda memeriksa Layanan.

    echo -n -e "\x0b$(cat hl7v2-mllp-sample.txt)\x1c\x0d" | nc LOAD_BALANCER_INGRESS_IP_ADDRESS 2575

    Setelah menjalankan perintah, pesan akan dikirim melalui adaptor MLLP ke penyimpanan HL7v2 Anda. Jika pesan berhasil diserap ke penyimpanan HL7v2, perintah akan menampilkan output berikut:

    MSA|AA|20150503223000|ILITY|FROM_APP|FROM_FACILITY|20190312162410||ACK|f4c59243-19c2-4373-bea0-39c1b2ba616b|P|2.5
    

    Output ini menunjukkan bahwa penyimpanan HL7v2 merespons dengan jenis respons AA (Application Accept), yang berarti pesan telah divalidasi dan berhasil diserap.

  4. Untuk melihat pesan yang dipublikasikan ke topik Pub/Sub, jalankan perintah gcloud pubsub subscriptions pull:

    gcloud pubsub subscriptions pull --auto-ack PUBSUB_SUBSCRIPTION

    Perintah ini menampilkan output berikut tentang pesan HL7v2 yang diserap:

    ┌-----------------------------------------------------------------------------------------------------------------|-----------------|---------------┐
    |                                                               DATA                                              |    MESSAGE_ID   |   ATTRIBUTES  |
    ├-----------------------------------------------------------------------------------------------------------------|-----------------|---------------|
    | projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/HL7V2_MESSAGE_ID | 123456789012345 | msgType=ADT   |
    └-----------------------------------------------------------------------------------------------------------------|-----------------|---------------┘
  5. Anda juga dapat mencantumkan pesan di penyimpanan HL7v2 untuk melihat apakah pesan telah ditambahkan:

    curl

    curl -X GET \
         -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
         -H "Content-Type: application/json; charset=utf-8" \
         "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages"

    Jika permintaan berhasil, server akan menampilkan ID pesan di jalur resource:

    {
      "hl7V2Messages": [
        {
          "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID"
        }
      ]
    }
    

    PowerShell

    $cred = gcloud auth application-default print-access-token
    $headers = @{ Authorization = "Bearer $cred" }
    
    Invoke-WebRequest `
      -Method Get `
      -Headers $headers `
      -ContentType: "application/json; charset=utf-8" `
      -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages" | Select-Object -Expand Content

    Jika permintaan berhasil, server akan menampilkan ID pesan di jalur resource:

    {
      "hl7V2Messages": [
        {
          "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID"
        }
      ]
    }
    

Setelah menyelesaikan bagian ini, Anda telah berhasil men-deploy adaptor MLLP ke GKE dan, melalui VPN, dengan aman mengirim pesan HL7v2 dari instance "lokal" melalui adaptor dan ke Cloud Healthcare API.

Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, Anda dapat membersihkan resource yang dibuat di Google Cloud.

Menghapus project

Ikuti langkah-langkah di bawah ini untuk menghapus project yang Anda buat dalam tutorial ini:

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Pemecahan masalah

Kegagalan adaptor

Setelah men-deploy adaptor MLLP ke GKE, adaptor akan mengalami kegagalan.

Connection refused error saat dijalankan secara lokal

Saat menguji adaptor MLLP secara lokal, Anda mengalami error Connection refused.

  • Kesalahan ini terjadi pada beberapa pengguna Mac OS. Gunakan -p 2575:2575, bukan menggunakan flag --network=host. Selain itu, tetapkan --receiver_ip=0.0.0.0, bukan menyetel --receiver_ip=127.0.0.0. Perintahnya akan terlihat seperti ini:

    docker run \
      -p 2575:2575 \
      gcr.io/cloud-healthcare-containers/mllp-adapter \
      /usr/mllp_adapter/mllp_adapter \
      --hl7_v2_project_id=PROJECT_ID \
      --hl7_v2_location_id=LOCATION \
      --hl7_v2_dataset_id=DATASET_ID \
      --hl7_v2_store_id=HL7V2_STORE_ID \
      --export_stats=false \
      --receiver_ip=0.0.0.0 \
      --pubsub_project_id=PROJECT_ID \
      --pubsub_subscription=PUBSUB_SUBSCRIPTION \
      --api_addr_prefix=https://healthcare.googleapis.com:443/v1 \
      --logtostderr

could not find default credentials error saat dijalankan secara lokal

Saat menguji adaptor MLLP secara lokal, Anda mengalami error healthapiclient.NewHL7V2Client: oauth2google.DefaultTokenSource: google: could not find default credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information..

Error ini terjadi ketika adaptor tidak dapat menemukan kredensial Google Cloud Anda. Untuk memperbaiki error ini, coba salah satu metode berikut sebelum menjalankan kembali perintah:

Error autentikasi

Jika Anda mengalami error autentikasi saat menguji adaptor MLLP secara lokal yang tidak dibahas di bagian selanjutnya, jalankan kembali perintah docker run lalu tambahkan flag -v ~/.config:/root/.config ke akhir perintah, seperti ini:

docker run \
-v ~/.config:/root/.config \
...