Mengirimkan pesan HL7v2 melalui koneksi TCP/IP

Tutorial ini memberikan petunjuk untuk mengirimkan pesan HL7v2 melalui koneksi TCP/IP menggunakan protokol lapisan bawah minimal (MLLP). Untuk mewajibkan image MLLP ditandatangani oleh pengesah, ikuti langkah-langkah di Mengirimkan pesan HL7v2 melalui koneksi TCP/IP menggunakan image MLLP bertanda tangan.

Tutorial ini memberikan 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 akan menggunakan komponen Google Cloudyang 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 Google Cloud baru mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

Sebelum memulai tutorial ini, pahami dokumentasi konseptual tentang protokol lapisan bawah minimal (MLLP) dengan meninjau MLLP dan Google Cloud adaptor MLLP. 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 projectGoogle Cloud dan mengaktifkan API yang diperlukan dengan menyelesaikan 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. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  4. Enable the Cloud Healthcare API, Google Kubernetes Engine, Container Registry, and Pub/Sub APIs.

    Enable the APIs

  5. In the Google Cloud console, on the project selector page, select or create a Google Cloud project.

    Go to project selector

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

  7. Enable the Cloud Healthcare API, Google Kubernetes Engine, Container Registry, and Pub/Sub APIs.

    Enable the APIs

  8. Tunggu hingga Kubernetes Engine API dan layanan terkait diaktifkan. Proses ini dapat memerlukan waktu beberapa menit.
  9. Memilih shell

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

    Cloud Shell adalah lingkungan shell untuk mengelola resource yang dihosting di Google Cloud. Cloud Shell telah diinstal lebih dulu dengan alat gcloud CLI dan 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, selesaikan langkah-langkah berikut:

    Cloud Shell

    Untuk meluncurkan Cloud Shell, selesaikan langkah-langkah berikut:

    1. Buka Google Cloud console.

      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. If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    3. Jika Anda hanya menguji adaptor secara lokal, Anda tidak perlu menyelesaikan langkah lainnya dan dapat melanjutkan ke Membuat set data. Jika Anda men-deploy adapter 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 Create dataset.
    3. Di kolom Name, masukkan ID untuk set data. ID set data harus memiliki:
      • ID unik di lokasinya
      • String Unicode dari 1-256 karakter yang terdiri dari:
        • Numbers
        • Surat
        • Garis bawah
        • Tanda Hubung
        • Menstruasi
    4. Di bagian Jenis lokasi, pilih salah satu jenis lokasi berikut:
      • Region: set data secara permanen berada dalam satu Google Cloud region. Setelah memilih, ketik atau pilih lokasi di kolom Region.
      • Multi-region: set data secara permanen berada dalam satu lokasi yang mencakup beberapa Google Cloud region. Setelah memilih, ketik atau pilih lokasi multi-region di kolom Multi-region.
    5. Klik Buat.

    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 di-ingest, Anda perlu mengonfigurasi topik Pub/Sub dengan penyimpanan HL7v2 Anda. 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 adalah Google Cloud project ID Anda.

    4. Klik Buat.

    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 Penayangan disetel 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

    Buat penyimpanan HL7v2 dan konfigurasikan dengan topik Pub/Sub. Untuk membuat penyimpanan HL7v2, Anda harus sudah membuat set data. Untuk tujuan 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 diproses, Anda perlu 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. Di halaman IAM di konsol Google Cloud , verifikasi bahwa 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 mengetahui informasi tentang cara menemukan PROJECT_NUMBER, lihat Mengidentifikasi project.

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

    3. Klik Tambahkan peran lain, 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 mengetahui 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

    Mengambil image Docker yang telah dibuat sebelumnya

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

    Untuk menarik versi terbaru image, 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 untuk berjalan sebagai penerima, penayang, atau keduanya. Konfigurasi penerima dan penayang memiliki perbedaan utama berikut:

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

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

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

    Menguji adaptor MLLP secara lokal sebagai penerima

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

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

    1. Di mesin tempat Anda menarik image Docker yang telah dibuat 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 Google Cloud project yang berisi penyimpanan HL7v2 Anda.
      • LOCATION adalah region tempat penyimpanan 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 dan mulai berjalan di komputer lokal Anda di 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 lain di mesin 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 adapter, di direktori tempat Anda mendownload file, jalankan perintah berikut. Adaptor MLLP memproses di host lokal Anda di port 2575. Perintah ini 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 dimasukkan ke dalam HL7v2 store, perintah 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 pesan telah divalidasi dan berhasil diproses.

    6. Anda juga dapat memverifikasi bahwa pesan berhasil dikirim dengan membuka terminal tempat Anda menjalankan adaptor. Output 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 disimpan di penyimpanan HL7v2 Anda, 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 penerbit

    Saat menguji adaptor sebagai penayang, Anda membuat pesan dengan memanggil messages.create atau messages.ingest dan menyediakan 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 adalah pelanggan Pub/Sub, sehingga adaptor akan otomatis mengonfirmasi pesan ini. Akibatnya, pesan tersebut dihapus dari antrean pesan dalam langganan Pub/Sub yang Anda konfigurasi dengan adapter.

    Untuk menarik dari langganan Pub/Sub dan memverifikasi secara terpisah bahwa pesan telah 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 Buat.

    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 dibuat sebelumnya:

    1. Instal Netcat:

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

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

      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 lain di mesin lokal Anda.

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

      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 Google Cloud project yang berisi penyimpanan HL7v2 Anda.
      • LOCATION adalah region tempat penyimpanan 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 dan dikaitkan dengan topik Pub/Sub Anda. Adaptor menggunakan pesan dari langganan ini dan secara otomatis mengonfirmasi pesan tersebut, jadi untuk melihat pesan yang dipublikasikan ke topik, Anda harus menarik pesan dari langganan kedua yang Anda buat sebelumnya.

      Setelah menjalankan perintah sebelumnya, adaptor akan mulai berjalan di mesin lokal Anda di 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 lain di mesin lokal Anda.

    6. Download file hl7v2-sample.json dan simpan ke komputer lokal Anda. Di 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 penyimpanan HL7v2
      • pesan
      • Token akses

      Contoh berikut menunjukkan permintaan POST menggunakan curl dan file JSON contoh 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 penyimpanan HL7v2
      • pesan
      • Token akses

      Contoh berikut menunjukkan permintaan POST menggunakan Windows PowerShell dan file JSON contoh bernama 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 yang mirip dengan berikut ini:

      I0214 00:00:00.000000       1 healthapiclient.go:244] Started to fetch message from the Cloud Healthcare API HL7V2 Store
      I0214 00:00:00.000000       1 healthapiclient.go:283] Message was successfully fetched from the Cloud Healthcare API HL7V2 Store.
      
    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^\
      

      Nilai ini sesuai dengan nilai di kolom data dari respons yang Anda terima saat membuat pesan. Nilai 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 menampilkan output berikut tentang pesan HL7v2 yang dibuat. Perhatikan nilai publish=true di kolom ATTRIBUTES, yang menunjukkan bahwa pesan telah 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 topik Pub/Sub yang berbeda. Kemudian, Anda dapat menjalankan adaptor MLLP untuk setiap topik Pub/Sub guna 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 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 perutean pesan

    Untuk menguji perutean pesan, selesaikan langkah-langkah di bagian berikut.

    Mengonfigurasi dan memulai penerima dan adaptor pertama

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

    1. Di mesin tempat Anda menarik image Docker bawaan, jalankan perintah berikut untuk menginstal Netcat:

      sudo apt install netcat
      
    2. Download hl7v2-mllp-ack-sample.txt, jika Anda belum melakukannya. File tersebut berisi pesan ACK yang digunakan sebagai respons oleh adapter 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 ditampilkan:

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

      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 Google Cloud project yang berisi penyimpanan HL7v2 Anda.
      • LOCATION adalah region tempat penyimpanan 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 dan dikaitkan dengan topik Pub/Sub pertama Anda. Adaptor menggunakan pesan dari langganan ini dan secara otomatis mengonfirmasinya.

      Setelah menjalankan perintah ini, adaptor akan mulai berjalan di komputer lokal Anda di 127.0.0.1:2575. Layanan 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 mesin tempat Anda menarik image Docker bawaan, jalankan perintah berikut untuk menginstal Netcat:

      sudo apt install netcat
      
    2. Download hl7v2-mllp-ack-sample.txt, jika Anda belum melakukannya. File tersebut berisi pesan ACK yang digunakan sebagai respons oleh adapter 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 ditampilkan:

      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 Google Cloud project yang berisi penyimpanan HL7v2 Anda.
      • LOCATION adalah region tempat penyimpanan 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 dan terkait dengan topik Pub/Sub kedua Anda. Adaptor menggunakan pesan dari langganan ini dan mengonfirmasinya secara otomatis.

      Setelah menjalankan perintah ini, adaptor mulai berjalan di komputer lokal Anda dengan alamat IP 127.0.0.1:2576. Aplikasi ini memublikasikan pesan baru ke penerima eksternal kedua di 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. Di 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 penyimpanan 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 penyimpanan HL7v2
      • Pesan
      • Token akses

      Contoh berikut menunjukkan permintaan POST menggunakan Windows PowerShell dan file JSON contoh bernama 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 ditetapkan 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 respons yang Anda terima saat membuat pesan. Nilai 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 mesin lokal Anda.

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

    3. Di 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 penyimpanan 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 penyimpanan HL7v2
      • Pesan
      • Token akses

      Contoh berikut menunjukkan permintaan POST menggunakan Windows PowerShell dan file JSON contoh, 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"
         }
       ]
      }
      

      Perhatikan 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 respons yang Anda terima saat membuat pesan. Nilai ini sama dengan nilai data dalam file hl7v2-sample2.json.

    Men-deploy adaptor MLLP ke Google Kubernetes Engine

    Saat mengirimkan pesan HL7v2 melalui MLLP dari pusat perawatan Anda, salah satu kemungkinan konfigurasi adalah mengirimkan pesan ke adaptor yang di-deploy diGoogle 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, status data dan aplikasi tetap berada 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 Anda, versi image container apa yang harus dijalankan, label apa yang harus diberi pada Pod, dan seterusnya. Status yang diinginkan dapat diubah secara dinamis melalui update pada spesifikasi Pod deployment.

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

    Jika baru mengenal GKE, Anda harus menyelesaikan panduan memulai GKE untuk mempelajari cara kerja produk tersebut.

    Menambahkan izin Pub/Sub API ke akun layanan GKE

    Seperti yang dinyatakan dalam dokumentasi GKE tentang Melakukan autentikasi ke Cloud Platform dengan akun layanan, setiap node dalam cluster penampung adalah instance Compute Engine. Oleh karena itu, saat berjalan di cluster container, adaptor MLLP akan otomatis mewarisi cakupan instance Compute Engine tempatnya 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 konfigurasi project Anda, akun layanan default mungkin memiliki atau tidak memiliki izin untuk menggunakan Cloud Platform API lainnya. GKE juga menetapkan beberapa cakupan akses terbatas ke instance Compute Engine.

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

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

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

    Konsol

    Buat akun layanan:

    1. Di konsol Google Cloud , buka halaman Create service account.

      Buka Create service account

    2. Pilih project.

    3. Di kolom Nama akun layanan, masukkan nama. KonsolGoogle Cloud akan mengisi kolom Service account ID berdasarkan nama ini.

      Opsional: Di kolom Deskripsi akun layanan, masukkan deskripsi.

    4. Klik Buat.

    5. Klik kolom Pilih peran.

      Di bagian Semua peran, klik Pub/Sub > Pub/Sub Subscriber.

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

      Di bagian Semua peran, klik Cloud Healthcare > Healthcare HL7v2 Message Ingest.

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

      Di bagian Semua peran, 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 pada prosedur berikutnya.

    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

      Output mencakup kebijakan yang telah 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

    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 menyetel zona default menggunakan gcloud config set compute/zone, nilai flag ini akan menggantikan default.
    • CLIENT_EMAIL adalah ID untuk akun layanan yang ingin Anda gunakan. Menggunakan format SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.

    Perintah ini 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 membuat cluster, GKE akan 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 contoh, 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 Google Cloud project yang berisi penyimpanan HL7v2 Anda.
    • LOCATION adalah region tempat penyimpanan 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 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 deployment untuk mengelola Pod.
    • spec: template: spec: adalah spesifikasi Pod, yang menentukan cara menjalankan setiap Pod.
    • spec: containers berisi nama container yang akan dijalankan di setiap Pod dan image container yang akan 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 layanan), Anda harus mengonfigurasi load balancer internal.

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

    Di direktori tempat Anda membuat file manifes deployment, gunakan editor teks untuk membuat file manifes Layanan 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, nilainya adalah mllp-adapter-service.
    • metadata: annotations: adalah anotasi yang menentukan bahwa load balancer 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 oleh Service.

    Meskipun Anda dapat menentukan alamat IP untuk load balancer (menggunakan kolom clusterIP), load balancer dapat membuat alamat IP-nya sendiri yang dapat Anda gunakan untuk mengirim pesan. Untuk saat ini, biarkan cluster membuat 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 adapter ke cluster GKE, di direktori yang berisi file manifes deployment mllp_adapter.yaml, jalankan perintah berikut:

    kubectl apply -f mllp_adapter.yaml
    

    Perintah ini menampilkan output berikut:

    deployment.extensions "mllp-adapter-deployment" created
    

    Memeriksa deployment

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

    Untuk mendapatkan informasi mendetail tentang deployment, jalankan perintah berikut:

    kubectl describe deployment mllp-adapter
    

    Untuk mencantumkan 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 output dari perintah sebelumnya harus 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 Service mllp_adapter_service.yaml, jalankan perintah berikut:

    kubectl apply -f mllp_adapter_service.yaml
    

    Perintah ini menampilkan output berikut:

    service "mllp-adapter-service" created
    

    Memeriksa Layanan

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

    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
    

    Alamat IP LoadBalancer Ingress mungkin memerlukan waktu hingga satu menit untuk diisi. 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

    Jika 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. Kemudian, pesan akan 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 penyimpanan HL7v2. 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 Create service account.

      Buka Create service account

    2. Pilih project.

    3. Di kolom Nama akun layanan, masukkan nama. KonsolGoogle Cloud akan mengisi kolom Service account ID berdasarkan nama ini.

      Opsional: Di kolom Deskripsi akun layanan, masukkan deskripsi.

    4. Klik Buat.

    5. Klik kolom Pilih peran.

      Di bagian Semua peran, klik Pub/Sub > Pub/Sub Subscriber.

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

      Di bagian Semua peran, 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 pada prosedur berikutnya.

    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

      Output mencakup kebijakan yang telah 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

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

    Konsol

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

      Buka halaman VM Instances

    2. Klik Create instance.

    3. Pilih Region dan Zone 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, di 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. Di tab Public images, pilih sistem operasi Debian versi 9.

    6. Klik Pilih.

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

    8. Di bagian Firewall, pilih Izinkan traffic HTTP.

    9. Klik Buat 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-10 \
       --image-project=debian-cloud \
       --tags=http-server \
       --service-account=SERVICE_ACCOUNT

    Outputnya 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 instance dimulai, instance akan tercantum di halaman VM Instances dengan ikon status hijau.

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

    Untuk terhubung ke instance, selesaikan langkah-langkah berikut:

    Konsol

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

      Buka halaman VM Instances

    2. Di daftar instance virtual machine, klik SSH di baris instance yang Anda buat.

    gcloud

    Untuk terhubung ke instance, jalankan perintah gcloud compute ssh:

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

    Sekarang Anda 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 mengetahui informasi tentang encoding dan terminator segmen yang digunakan dalam file, lihat Pemisah segmen dan encoding pesan HL7v2.

    3. Untuk mulai mengirim pesan HL7v2 melalui adaptor MLLP ke penyimpanan HL7v2 Anda, 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 di-ingest ke dalam HL7v2 store, 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 diproses.

    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 di-ingest:

      ┌-----------------------------------------------------------------------------------------------------------------|-----------------|---------------┐
      |                                                               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.

    Di bagian tutorial ini, Anda akan mempelajari cara mengenkripsi pesan HL7v2 yang dikirim secara aman dengan mengonfigurasi VPN antara instance Compute Engine, yang berfungsi sebagai instance "on-premise", dan adapter.

    Mengonfigurasi VPN

    Dengan menggunakan VPN, Anda dapat memperluas jaringan pribadi tempat Anda mengirim pesan HL7v2 melalui jaringan publik, seperti internet. Dengan menggunakan VPN, Anda dapat mengirim pesan dari pusat perawatan 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 menggunakan VPN:

    Mengonfigurasi Cloud VPN

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

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

    Gateway VPN yang dikonfigurasi di us-central1 bertindak sebagai gateway Cloud VPN 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:

    Google Cloud sisi

    • 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 "Di tempat"

    • 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 jaringan dan subnet VPC kustom

    Langkah pertama dalam mengonfigurasi Cloud VPN adalah membuat dua jaringan VPC. Satu jaringan, yang disebut on-prem-vpn-network, dikonfigurasi di lingkungan "on-premise" dan berjalan di 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 untuk 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 untuk 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, cadangkan alamat IP eksternal untuk setiap gateway dengan menyelesaikan langkah-langkah berikut:

    1. Untuk mencadangkan alamat IP (statis) eksternal 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 (statis) eksternal 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 sehingga 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 ini akan menampilkan output yang mirip dengan berikut ini:

      address: 203.0.113.1
      

    Membuat gateway, tunnel, dan rute VPN

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

    1. Buat pre-shared key (rahasia bersama) yang kuat secara kriptografis dengan mengikuti petunjuk di Membuat pre-shared key yang kuat. Kunci ini dirujuk 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 "on-premise", 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 gateway Cloud VPN dan "lokal" serta memulai tunnelnya. Gateway VPN tidak akan terhubung hingga Anda membuat aturan firewall untuk mengizinkan traffic melalui tunnel di antara keduanya.

    Membuat aturan firewall

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

    1. Untuk 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. Untuk membuat aturan firewall untuk subnet "on-premise", 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 melakukan 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 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 tunnel, cari tanda centang hijau dan kata "Terhubung". Jika item ini ada, gateway Anda telah menegosiasikan tunnel. Jika tidak ada tanda yang muncul setelah beberapa menit, lihat Pemecahan masalah.

      Untuk mengetahui informasi logging tambahan terkait tunnel VPN, lihat Memeriksa Log VPN di halaman Pemecahan masalah. Misalnya, Anda dapat melihat metrik tentang paket yang dihapus, 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 "on-premise" dan adaptor MLLP yang berjalan di GKE.

    Menggabungkan deployment ke GKE dan Cloud VPN

    Jika sebelumnya dalam tutorial ini Anda menguji adaptor MLLP secara lokal dan mengirim pesan HL7v2 melalui koneksi non-VPN ke adaptor MLLP, sekarang Anda akan mengirim pesan dari VM Compute Engine melalui koneksi yang aman menggunakan Cloud VPN ke adaptor MLLP yang berjalan di GKE. Kemudian, pesan akan diteruskan ke penyimpanan HL7v2.

    Membuat ulang deployment

    Pertama, buat ulang deployment di GKE agar cluster menggunakan setelan yang Anda konfigurasi 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 di Men-deploy adapter 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 di 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 menetapkan jaringan "Google Cloud side" untuk menggunakan us-central1. Jaringan "Google Cloud sisi" ini adalah jaringan 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 yang ingin Anda gunakan. 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 Google Cloud konsol. 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 Google Cloud konsol, buka halaman VM Instances.

      Buka halaman VM Instances

    2. Klik Create instance.

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

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

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

    6. Klik Pilih.

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

    8. Di bagian Firewall, pilih Izinkan traffic HTTP.

    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 Buat untuk membuat instance.

    Tunggu hingga instance memulai. Setelah siap, instance akan tercantum di halaman Instance VM 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 'on-premise'": europe-west1-b untuk Zone.
    • 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-10 \
       --tags=http-server,https-server
       --service-account=SERVICE_ACCOUNT

    Outputnya 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 Google Cloud konsol, buka halaman VM Instances.

      Buka halaman VM Instances

    2. Di daftar instance virtual machine, klik SSH di baris instance yang Anda buat.

    gcloud

    Untuk terhubung ke instance, jalankan perintah gcloud compute ssh:

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

    Sekarang Anda 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 Anda, 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 di-ingest ke dalam HL7v2 store, 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 diproses.

    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 di-ingest:

      ┌-----------------------------------------------------------------------------------------------------------------|-----------------|---------------┐
      |                                                               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, mengirim pesan HL7v2 secara aman dari instance "on-premise" 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 Anda buat di Google Cloud.

    Menghapus project

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

    1. In the Google Cloud console, go to the Manage resources page.

      Go to Manage resources

    2. In the project list, select the project that you want to delete, and then click Delete.
    3. In the dialog, type the project ID, and then click Shut down to delete the project.

    Pemecahan masalah

    Kegagalan adaptor

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

    Error Connection refused saat berjalan secara lokal

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

    • Error ini terjadi pada beberapa pengguna Mac OS. Gunakan -p 2575:2575, bukan flag --network=host. Selain itu, daripada menetapkan --receiver_ip=127.0.0.0, tetapkan --receiver_ip=0.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

    Error could not find default credentials saat berjalan secara lokal

    Saat menguji adaptor MLLP secara lokal, Anda akan mengalami error healthapiclient.NewHL7V2Client: oauth2google.DefaultTokenSource: google: could not find default credentials..

    Error ini terjadi saat adaptor tidak dapat menemukan kredensial ADC lokal Anda. Pastikan Anda telah menyiapkan Kredensial Default Aplikasi di lingkungan lokal Anda.

    Error autentikasi

    Jika Anda mengalami error autentikasi saat menguji adaptor MLLP secara lokal yang tidak dibahas di bagian lainnya, jalankan kembali perintah docker run dan tambahkan tanda -v ~/.config:/root/.config di akhir perintah, seperti berikut:

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