Tutorial ini memberikan petunjuk untuk mentransmisikan pesan HL7v2 melalui koneksi TCP/IP menggunakan protokol lapisan bawah (MLLP) minimal. Untuk mewajibkan image MLLP ditandatangani oleh attestor, ikuti langkah-langkah dalam Mengirimkan pesan HL7v2 melalui koneksi TCP/IP menggunakan image MLLP yang ditandatangani.
Tutorial ini berisi petunjuk untuk menjalankan adaptor MLLP open source yang dihosting di GitHub di lingkungan berikut:
- Secara lokal/lokal.
- Dalam container di GKE dengan Cloud VPN.
- Dalam container di GKE tanpa Cloud VPN.
Tujuan
Setelah menyelesaikan tutorial ini, Anda akan mengetahui cara:
- Buat dan konfigurasi adaptor MLLP secara lokal dengan Cloud Healthcare API, lalu uji pengiriman pesan HL7v2 ke penyimpanan HL7v2.
- Deploy adaptor MLLP ke GKE dan kirim pesan HL7v2 dari instance VM Compute Engine.
- Konfigurasikan VPN yang mengamankan koneksi antara instance "lokal" dan adaptor MLLP serta mengirim pesan HL7v2 dari instance "lokal".
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
- Cloud Healthcare API
- Google Kubernetes Engine
- Compute Engine
- Cloud VPN
- Pub/Sub
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
Sebelum memulai tutorial ini, pahami dokumentasi konseptual tentang protokol lapisan bawah (MLLP) minimal dengan meninjau MLLP dan adaptor MLLP Google Cloud. Dokumentasi konseptual memberikan ringkasan tentang MLLP, cara sistem perawatan dapat mengirim dan menerima pesan ke dan dari Cloud Healthcare API melalui koneksi MLLP, dan dasar-dasar keamanan MLLP.
Sebelum dapat menyiapkan adaptor MLLP, Anda harus memilih atau membuat project Google Cloud dan mengaktifkan API yang diperlukan dengan melakukan langkah-langkah berikut:
- 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.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Cloud Healthcare API, Google Kubernetes Engine, Container Registry, and Pub/Sub.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Make sure that billing is enabled for your Google Cloud project.
-
Aktifkan API Cloud Healthcare API, Google Kubernetes Engine, Container Registry, and Pub/Sub.
- Tunggu sampai Kubernetes Engine API dan layanan terkait diaktifkan. Proses ini dapat memerlukan waktu beberapa menit.
Memilih shell
Untuk menyelesaikan tutorial ini, Anda dapat menggunakan Cloud Shell atau shell lokal Anda.
Cloud Shell adalah lingkungan shell untuk mengelola resource yang dihosting di Google Cloud. Cloud Shell telah diinstal dengan gcloud CLI dan alat kubectl
. Gcloud CLI menyediakan antarmuka command line utama untuk Google Cloud. kubectl
menyediakan antarmuka command line untuk
menjalankan perintah terhadap cluster GKE.
Jika lebih suka menggunakan shell lokal, Anda harus menginstal gcloud CLI.
Untuk membuka Cloud Shell atau mengonfigurasi shell lokal Anda, selesaikan langkah-langkah berikut:
Cloud Shell
Untuk meluncurkan Cloud Shell, selesaikan langkah-langkah berikut:
Buka Konsol Google Cloud.
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:
- Instal dan lakukan inisialisasi Google Cloud CLI.
Jika hanya menguji adaptor secara lokal, Anda tidak perlu menyelesaikan langkah lainnya dan dapat melanjutkan ke Membuat set data. Jika Anda men-deploy adaptor ke GKE, instal alat command line
kubectl
dengan menjalankan perintah berikut:gcloud components install kubectl
Membuat set data
Jika Anda belum membuat set data Cloud Healthcare API, buat set data dengan menyelesaikan langkah-langkah berikut:
Konsol
- Di Konsol Google Cloud, buka halaman Datasets.
- Klik Buat set data.
-
Di kolom Name, masukkan ID untuk set data. ID set data harus memiliki hal berikut:
- ID unik pada lokasinya
- String Unicode yang terdiri dari 1-256 karakter dan terdiri dari hal berikut:
- Numbers
- Surat
- Garis bawah
- Tanda hubung garis
- Menstruasi
-
Di bagian Jenis lokasi, pilih salah satu jenis lokasi berikut:
- Region: set data berada secara permanen dalam satu region Google Cloud. Setelah memilih, ketik atau pilih lokasi di kolom Region.
- Multi-region: set data berada secara permanen di dalam satu lokasi yang mencakup beberapa region Google Cloud. Setelah memilih, ketik atau pilih lokasi multi-region di kolom Multi-region.
- Klik Create.
Set data baru akan muncul dalam daftar set data.
gcloud
Untuk membuat set data, jalankan
perintah
gcloud healthcare datasets create
:
gcloud healthcare datasets create DATASET_ID \ --location=LOCATION
Jika permintaan berhasil, perintah akan menampilkan output berikut:
Create request issued for: [DATASET_ID] Waiting for operation [OPERATION_ID] to complete...done. Created dataset [DATASET_ID].
Membuat topik dan langganan Pub/Sub
Untuk menerima notifikasi saat pesan dibuat atau diserap, Anda harus mengonfigurasi topik Pub/Sub dengan penyimpanan HL7v2. Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi notifikasi Pub/Sub.
Untuk membuat topik, selesaikan langkah-langkah berikut:
Konsol
Buka halaman Topics Pub/Sub di Konsol Google Cloud.
Klik Buat Topik.
Masukkan nama topik dengan URI:
projects/PROJECT_ID/topics/TOPIC_NAME
dengan PROJECT_ID sebagai ID project Google Cloud Anda.
Klik Create.
gcloud
Untuk membuat topik, jalankan
perintah
gcloud pubsub topics create
:
gcloud pubsub topics create projects/PROJECT_ID/topics/TOPIC_NAME
Jika permintaan berhasil, perintah akan menampilkan output berikut:
Created topic [projects/PROJECT_ID/topics/TOPIC_NAME].
Untuk membuat langganan, selesaikan langkah-langkah berikut:
Konsol
Buka halaman Topics Pub/Sub di Konsol Google Cloud.
Klik topik project Anda.
Klik Buat Langganan.
Masukkan nama langganan:
projects/PROJECT_ID/subscriptions/SUBSCRIPTION_NAME
Biarkan Jenis Pengiriman ditetapkan ke Pull, lalu klik Buat.
gcloud
Untuk membuat langganan, jalankan
perintah
gcloud pubsub subscriptions create
:
gcloud pubsub subscriptions create SUBSCRIPTION_NAME \ --topic=projects/PROJECT_ID/topics/TOPIC_NAME
Jika permintaan berhasil, perintah akan menampilkan output berikut:
Created subscription [projects/PROJECT_ID/subscriptions/SUBSCRIPTION_NAME].
Membuat penyimpanan HL7v2 yang dikonfigurasi dengan topik Pub/Sub
Membuat penyimpanan HL7v2 dan mengonfigurasinya dengan topik Pub/Sub. Untuk membuat penyimpanan HL7v2, Anda harus sudah membuat set data. Untuk keperluan tutorial ini, gunakan project yang sama untuk penyimpanan HL7v2 dan untuk topik Pub/Sub.
Untuk membuat penyimpanan HL7v2 yang dikonfigurasi dengan topik Pub/Sub, selesaikan langkah-langkah berikut:
curl
curl -X POST \ --data "{ 'notificationConfigs': [ { 'pubsubTopic': 'projects/PROJECT_ID/topics/PUBSUB_TOPIC', 'filter': '' } ] }" \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores?hl7V2StoreId=HL7V2_STORE_ID"
Jika permintaan berhasil, server akan menampilkan respons dalam format JSON:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID", "notificationConfigs": [ { "pubsubTopic": "projects/PROJECT_ID/topics/PUBSUB_TOPIC" } ] }
PowerShell
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body "{ 'notificationConfigs': [ { 'pubsubTopic': 'projects/PROJECT_ID/topics/PUBSUB_TOPIC', 'filter': '' } ] }" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores?hl7V2StoreId=HL7V2_STORE_ID" | Select-Object -Expand Content
Jika permintaan berhasil, server akan menampilkan respons dalam format JSON:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID", "notificationConfigs": [ { "pubsubTopic": "projects/PROJECT_ID/topics/PUBSUB_TOPIC" } ] }
Mengonfigurasi izin Pub/Sub
Untuk mengirim notifikasi ke Pub/Sub saat pesan HL7v2 dibuat atau diserap, Anda harus mengonfigurasi izin Pub/Sub di Cloud Healthcare API. Langkah ini perlu dilakukan sekali per project.
Untuk menambahkan peran pubsub.publisher
yang diperlukan ke akun layanan project Anda, selesaikan langkah-langkah berikut:
Konsol
Pada halaman IAM di Google Cloud Console, pastikan peran Healthcare Service Agent muncul di kolom Role untuk akun layanan project yang relevan. Nama akunnya adalah service-PROJECT_NUMBER@gcp-sa-healthcare.iam.gserviceaccount.com. Untuk informasi tentang cara menemukan PROJECT_NUMBER, lihat Mengidentifikasi project.
Di kolom Warisan yang cocok dengan peran, klik ikon pensil. Panel Edit izin akan terbuka.
Klik Add another role, lalu cari peran Pub/Sub Publisher.
Pilih peran, lalu klik Simpan. Peran
pubsub.publisher
ditambahkan ke akun layanan.
gcloud
Untuk menambahkan izin akun layanan, jalankan perintah gcloud projects add-iam-policy-binding
. Untuk informasi tentang cara menemukan PROJECT_ID dan
PROJECT_NUMBER, lihat
Mengidentifikasi project.
gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:service-PROJECT_NUMBER@gcp-sa-healthcare.iam.gserviceaccount.com \ --role=roles/pubsub.publisher
Menarik image Docker yang telah dibangun sebelumnya
Adaptor MLLP adalah aplikasi dalam container yang di-stage dalam image Docker yang telah dibangun sebelumnya di Container Registry.
Untuk mengambil image versi terbaru, jalankan perintah berikut:
docker pull gcr.io/cloud-healthcare-containers/mllp-adapter:latest
Menguji adaptor MLLP secara lokal
Saat menguji adaptor secara lokal, Anda dapat mengonfigurasinya agar berjalan sebagai penerima, penayang, atau keduanya. Konfigurasi penerima dan penayang memiliki perbedaan utama berikut:
- Saat berjalan sebagai penerima, adaptor akan menerima pesan HL7v2 dari
sumber eksternal dan memanggil
messages.ingest
untuk menyerap pesan tersebut ke penyimpanan HL7v2, sehingga membuat notifikasi Pub/Sub. Notifikasi dikirim ke aplikasi yang berlangganan topik Pub/Sub toko HL7v2. - Saat dijalankan sebagai penayang, adaptor akan memproses pesan HL7v2 yang
dibuat atau diserap di penyimpanan HL7v2 menggunakan
messages.create
ataumessages.ingest
. Setelah pesan dibuat, notifikasi Pub/Sub akan dikirimkan ke adaptor dan adaptor memublikasikan pesan ke penerima eksternal.
Bagian berikut menunjukkan cara menjalankan adaptor agar berfungsi sebagai penerima atau penayang.
Setelah memverifikasi bahwa Anda dapat menjalankan adaptor MLLP di mesin lokal, lanjutkan ke bagian berikutnya tentang Men-deploy adaptor MLLP ke Google Kubernetes Engine.
Menguji adaptor MLLP secara lokal sebagai penerima
Saat adaptor menerima pesan HL7v2 dari sumber eksternal, seperti
pusat perawatan, adaptor akan memanggil
messages.ingest
dan menyerap pesan HL7v2 ke penyimpanan HL7v2 yang dikonfigurasi. Anda dapat mengamatinya dalam kode sumber untuk adaptor.
Untuk menguji adaptor secara lokal sebagai penerima, selesaikan langkah-langkah berikut:
Di komputer tempat Anda mengambil image Docker yang telah dibangun sebelumnya, jalankan perintah berikut:
docker run \ --network=host \ -v ~/.config:/root/.config \ gcr.io/cloud-healthcare-containers/mllp-adapter \ /usr/mllp_adapter/mllp_adapter \ --hl7_v2_project_id=PROJECT_ID \ --hl7_v2_location_id=LOCATION \ --hl7_v2_dataset_id=DATASET_ID \ --hl7_v2_store_id=HL7V2_STORE_ID \ --export_stats=false \ --receiver_ip=0.0.0.0 \ --port=2575 \ --api_addr_prefix=https://healthcare.googleapis.com:443/v1 \ --logtostderr
dengan:
- PROJECT_ID adalah ID untuk project Google Cloud yang berisi penyimpanan HL7v2 Anda.
- LOCATION adalah wilayah tempat toko HL7v2 Anda berada.
- DATASET_ID adalah ID untuk set data induk penyimpanan HL7v2 Anda.
- HL7V2_STORE_ID adalah ID untuk penyimpanan HL7v2 tempat Anda mengirim pesan HL7v2.
Setelah menjalankan perintah sebelumnya, adaptor akan mencetak pesan yang mirip dengan berikut ini dan mulai berjalan di mesin lokal Anda pada alamat IP 127.0.0.1 pada port 2575:
I0000 00:00:00.000000 1 healthapiclient.go:171] Dialing connection to https://healthcare.googleapis.com:443/v1 I0000 00:00:00.000000 1 mllp_adapter.go:89] Either --pubsub_project_id or --pubsub_subscription is not provided, notifications of the new messages are not read and no outgoing messages will be sent to the target MLLP address.
Jika Anda mengalami error, ikuti langkah-langkah pemecahan masalah berikut:
Jika Anda menggunakan Mac OS dan perintah sebelumnya gagal dengan error
Connection refused
, lihat Error koneksi ditolak saat dijalankan secara lokal.Jika perintah sebelumnya gagal dengan error
healthapiclient.NewHL7V2Client: oauth2google.DefaultTokenSource: google: could not find default credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.
, lihat errorcould not find default credentials
saat berjalan secara lokal.Jika Anda mengalami error autentikasi lainnya, lihat Error autentikasi.
Untuk melanjutkan pengujian saat adaptor berjalan sebagai proses latar depan, buka terminal yang berbeda di komputer lokal Anda.
Di terminal baru, untuk menginstal Netcat, jalankan perintah berikut:
sudo apt install netcat
Download file
hl7v2-mllp-sample.txt
dan simpan ke komputer lokal Anda.Untuk mengirim pesan HL7v2 ke adaptor, jalankan perintah berikut di direktori tempat Anda mendownload file. Adaptor MLLP mendengarkan di host lokal Anda pada porta 2575. Perintah tersebut mengirimkan pesan melalui adaptor MLLP ke penyimpanan HL7v2 Anda.
Linux
echo -n -e "\x0b$(cat hl7v2-mllp-sample.txt)\x1c\x0d" | nc -q1 localhost 2575 | less
Jika pesan berhasil diserap ke penyimpanan HL7v2, perintah tersebut akan menampilkan output berikut:
^KMSH|^~\&|TO_APP|TO_FACILITY|FROM_APP|FROM_FACILITY|19700101010000||ACK|c507a97e-438d-44b0-b236-ea95e5ecbbfb|P|2.5^MMSA|AA|20150503223000^\
Output ini menunjukkan bahwa penyimpanan HL7v2 merespons dengan jenis respons
AA
(Application Accept
), yang berarti bahwa pesan telah divalidasi dan berhasil diserap.Anda juga dapat memverifikasi bahwa pesan berhasil dikirim dengan membuka terminal tempat Anda menjalankan adaptor. Output-nya akan terlihat seperti contoh berikut:
I0000 00:00:00.000000 1 healthapiclient.go:171] Dialing connection to https://healthcare.googleapis.com:443/v1 I0000 00:00:00.000000 1 mllp_adapter.go:89] Either --pubsub_project_id or --pubsub_subscription is not provided, notifications of the new messages are not read and no outgoing messages will be sent to the target MLLP address. I0213 00:00:00.000000 1 healthapiclient.go:190] Sending message of size 319. I0213 00:00:00.000000 1 healthapiclient.go:223] Message was successfully sent.
Pesan ini disimpan di penyimpanan HL7v2, sehingga Anda dapat memanggil
messages.list
untuk melihat pesan:curl
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages"
Jika permintaan berhasil, server akan menampilkan ID pesan di jalur resource:
{ "hl7V2Messages": [ { "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID" } ] }
PowerShell
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Get ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages" | Select-Object -Expand Content
Jika permintaan berhasil, server akan menampilkan ID pesan di jalur resource:
{ "hl7V2Messages": [ { "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID" } ] }
Menguji adaptor MLLP secara lokal sebagai penayang
Saat menguji adaptor sebagai penayang, Anda membuat pesan dengan memanggil
messages.create
atau messages.ingest
dan memberikan file pesan sebagai data biner.
Adaptor secara otomatis mengonfirmasi pesan Pub/Sub yang dikirim
melalui messages.create
dan messages.ingest
.
Adaptor akan memberi tahu Anda saat berhasil mengambil dan mengirim pesan Pub/Sub. Adaptor ini adalah pelanggan Pub/Sub, sehingga otomatis mengonfirmasi pesan-pesan ini. Akibatnya, pesan tersebut dihapus dari antrean pesan di langganan Pub/Sub yang Anda konfigurasi dengan adaptor.
Untuk mengambil dari langganan Pub/Sub dan memverifikasi secara terpisah bahwa pesan dipublikasikan, Anda perlu membuat langganan Pub/Sub kedua yang ditetapkan ke topik yang Anda buat sebelumnya. Pesan yang dikirim ke langganan kedua tidak otomatis dikonfirmasi oleh adaptor dan tetap ada sehingga Anda dapat menariknya.
Untuk membuat langganan Pub/Sub kedua yang ditetapkan ke topik yang Anda buat sebelumnya, selesaikan langkah-langkah berikut:
Konsol
Buka halaman Topics Pub/Sub di Konsol Google Cloud.
Klik topik project Anda. Ini adalah topik yang Anda gunakan untuk membuat langganan awal.
Klik Buat Langganan.
Masukkan nama langganan:
projects/PROJECT_ID/subscriptions/SECOND_SUBSCRIPTION_NAME
Biarkan Jenis Pengiriman ditetapkan ke Pull.
Klik Create.
gcloud
Untuk membuat langganan Pub/Sub kedua yang ditetapkan ke
topik yang Anda buat sebelumnya, jalankan perintah
gcloud pubsub subscriptions create
:
gcloud pubsub subscriptions create SECOND_SUBSCRIPTION_NAME --topic=projects/PROJECT_ID/topics/TOPIC_NAME
Jika permintaan berhasil, perintah akan menampilkan output berikut:
Created subscription [projects/PROJECT_ID/subscriptions/SECOND_SUBSCRIPTION_NAME].
Untuk menguji adaptor secara lokal sebagai penayang, selesaikan langkah-langkah berikut di komputer tempat Anda menarik image Docker yang telah dibangun sebelumnya:
Instal Netcat:
sudo apt install netcat
Download file
hl7v2-mllp-ack-sample.txt
dan simpan ke komputer lokal Anda. File ini berisi pesan ACK yang diperlukan adaptor sebagai respons saat mencoba memublikasikan pesan.Untuk mengizinkan Netcat memproses koneksi masuk pada port 2525, jalankan perintah berikut di direktori tempat Anda mendownload file.
Linux
echo -n -e "\x0b$(cat hl7v2-mllp-ack-sample.txt)\x1c\x0d" | nc -q1 -lv -p 2525 | less
Setelah memulai Netcat, pesan output yang mirip dengan contoh berikut akan ditampilkan:
listening on [any] 2525 ...
Netcat berjalan sebagai proses latar depan. Jadi, untuk melanjutkan pengujian, buka terminal yang berbeda di komputer lokal Anda.
Untuk memulai adaptor, di terminal baru, jalankan perintah berikut:
docker run \ --network=host \ gcr.io/cloud-healthcare-containers/mllp-adapter \ /usr/mllp_adapter/mllp_adapter \ --hl7_v2_project_id=PROJECT_ID \ --hl7_v2_location_id=LOCATION \ --hl7_v2_dataset_id=DATASET_ID \ --hl7_v2_store_id=HL7V2_STORE_ID \ --export_stats=false \ --receiver_ip=127.0.0.1 --port 2575 \ --mllp_addr=127.0.0.1:2525 \ --pubsub_project_id=PROJECT_ID \ --pubsub_subscription=PUBSUB_SUBSCRIPTION \ --api_addr_prefix=https://healthcare.googleapis.com:443/v1 \ --logtostderr
dengan:
- PROJECT_ID adalah ID untuk project Google Cloud yang berisi penyimpanan HL7v2 Anda.
- LOCATION adalah wilayah tempat toko HL7v2 Anda berada.
- DATASET_ID adalah ID untuk set data induk penyimpanan HL7v2 Anda.
- HL7V2_STORE_ID adalah ID untuk penyimpanan HL7v2 tempat Anda mengirim pesan HL7v2.
- PROJECT_ID adalah ID untuk project Google Cloud yang berisi topik Pub/Sub.
- PUBSUB_SUBSCRIPTION adalah nama langganan pertama yang Anda buat yang terkait dengan topik Pub/Sub. Adaptor menggunakan pesan dari langganan ini dan otomatis mengonfirmasinya. Jadi, untuk melihat pesan yang dipublikasikan ke topik, Anda harus menarik pesan dari langganan kedua yang dibuat sebelumnya.
Setelah menjalankan perintah sebelumnya, adaptor akan mulai berjalan di mesin lokal pada alamat IP 127.0.0.1 pada port 2575.
Jika Anda mengalami error, ikuti langkah-langkah pemecahan masalah berikut:
Jika Anda menggunakan Mac OS dan perintah sebelumnya gagal dengan error
Connection refused
, lihat Error koneksi ditolak saat dijalankan secara lokal.Jika perintah sebelumnya gagal dengan error
healthapiclient.NewHL7V2Client: oauth2google.DefaultTokenSource: google: could not find default credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.
, lihat errorcould not find default credentials
saat berjalan secara lokal.Jika Anda mengalami error autentikasi lainnya, lihat Error autentikasi.
Adaptor berjalan sebagai proses latar depan. Jadi, untuk melanjutkan pengujian, buka terminal yang berbeda di mesin lokal Anda.
Download file
hl7v2-sample.json
dan simpan ke komputer lokal Anda. Dalam direktori tempat Anda mendownload file, panggil metodemessages.create
untuk membuat pesan di penyimpanan HL7v2:curl
Untuk membuat pesan HL7v2, buat permintaan
POST
dan tentukan informasi berikut:- Nama set data induk
- Nama toko HL7v2
- Pesan
- Token akses
Contoh berikut menunjukkan permintaan
POST
menggunakancurl
dan contoh file JSON yang disebuthl7v2-sample.json
.curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data-binary @hl7v2-sample.json \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages"
Jika permintaan berhasil, server akan menampilkan respons dalam format JSON:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID", "data": "TVNIfF5+XCZ8QXxTRU5EX0ZBQ0lMSVRZfEF8QXwyMDE4MDEwMTAwMDAwMHx8VFlQRV5BfDIwMTgwMTAxMDAwMDAwfFR8MC4wfHx8QUF8fDAwfEFTQ0lJDUVWTnxBMDB8MjAxODAxMDEwNDAwMDANUElEfHwxNAExMTFeXl5eTVJOfDExMTExMTExXl5eXk1STn4xMTExMTExMTExXl5eXk9SR05NQlI=", "sendFacility": "SEND_FACILITY", "sendTime": "2018-01-01T00:00:00Z", "messageType": "TYPE", "createTime": "1970-01-01T00:00:00Z", "patientIds": [ { "value": "14\u0001111", "type": "MRN" }, { "value": "11111111", "type": "MRN" }, { "value": "1111111111", "type": "ORGNMBR" } ] }
PowerShell
Untuk membuat pesan HL7v2, buat permintaan
POST
dan tentukan informasi berikut:- Nama set data induk
- Nama toko HL7v2
- Pesan
- Token akses
Contoh berikut menunjukkan permintaan
POST
yang menggunakan Windows PowerShell dan contoh file JSON yang disebuthl7v2-sample.json
.$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile hl7v2-sample.json ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages" | Select-Object -Expand Content
Jika permintaan berhasil, server akan menampilkan respons dalam format JSON:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID", "data": "TVNIfF5+XCZ8QXxTRU5EX0ZBQ0lMSVRZfEF8QXwyMDE4MDEwMTAwMDAwMHx8VFlQRV5BfDIwMTgwMTAxMDAwMDAwfFR8MC4wfHx8QUF8fDAwfEFTQ0lJDUVWTnxBMDB8MjAxODAxMDEwNDAwMDANUElEfHwxNAExMTFeXl5eTVJOfDExMTExMTExXl5eXk1STn4xMTExMTExMTExXl5eXk9SR05NQlI=", "sendFacility": "SEND_FACILITY", "sendTime": "2018-01-01T00:00:00Z", "messageType": "TYPE", "createTime": "1970-01-01T00:00:00Z", "patientIds": [ { "value": "14\u0001111", "type": "MRN" }, { "value": "11111111", "type": "MRN" }, { "value": "1111111111", "type": "ORGNMBR" } ] }
Setelah membuat pesan, adaptor MLLP akan menampilkan respons berikut:
I0214 00:00:00.000000 1 healthapiclient.go:266] Started to fetch message. I0214 00:00:00.000000 1 healthapiclient.go:283] Message was successfully fetched.
Di terminal tempat Anda menjalankan Netcat, output yang mirip dengan contoh berikut akan ditampilkan. Output ini menunjukkan bahwa pesan telah dipublikasikan:
connect to [127.0.0.1] from localhost [127.0.0.1] 39522 ^KMSH|^~\&|A|SEND_FACILITY|A|A|20180101000000||TYPE^A|20180101000000|T|0.0|||AA||00|ASCII^MEVN|A00|20180101040000^MPID||14^A111^^^^MRN|11111111^^^^MRN~1111111111^^^^ORGNMBR^\
Ini sama dengan nilai di kolom
data
dari respons yang Anda terima saat membuat pesan. Ini sama dengan nilaidata
dalam filehl7v2-sample.json
.Untuk melihat pesan yang dipublikasikan adaptor ke topik Pub/Sub, jalankan perintah
gcloud pubsub subscriptions pull
pada langganan Pub/Sub kedua yang Anda buat:gcloud pubsub subscriptions pull --auto-ack SECOND_SUBSCRIPTION
Perintah ini akan menampilkan output berikut tentang pesan HL7v2 yang dibuat. Perhatikan nilai
publish=true
di kolomATTRIBUTES
, yang menunjukkan bahwa pesan dipublikasikan ke Pub/Sub:┌-----------------------------------------------------------------------------------------------------------------|-----------------|---------------┐ | DATA | MESSAGE_ID | ATTRIBUTES | ├-----------------------------------------------------------------------------------------------------------------|-----------------|---------------| | projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/HL7V2_MESSAGE_ID | 123456789012345 | msgType=ADT | | | | publish=true | └-----------------------------------------------------------------------------------------------------------------|-----------------|---------------┘
Memublikasikan pesan ke penerima eksternal yang berbeda
Anda dapat mengonfigurasi penyimpanan HL7v2 dengan beberapa topik Pub/Sub dan menggunakan filter untuk mengirim notifikasi ke berbagai topik Pub/Sub. Selanjutnya, Anda dapat menjalankan adaptor MLLP untuk setiap topik Pub/Sub untuk memublikasikan pesan ke penerima eksternal yang berbeda.
Untuk mengonfigurasi penyimpanan HL7v2 dengan beberapa topik Pub/Sub dan filter untuk setiap topik, selesaikan langkah-langkah berikut:
Buat dua topik Pub/Sub dan satu langganan untuk setiap topik. Untuk mengetahui informasi selengkapnya, lihat Membuat topik dan langganan Pub/Sub.
Jalankan perintah berikut:
curl
curl -X PATCH \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data "{ 'notificationConfigs': [ { 'pubsubTopic': 'projects/PROJECT_ID/topics/PUBSUB_TOPIC', 'filter' : 'sendFacility=\"SEND_FACILITY_1\"' }, { 'pubsubTopic': 'projects/PROJECT_ID/topics/SECOND_PUBSUB_TOPIC', 'filter': 'sendFacility=\"SEND_FACILITY_2\"' } ] }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID?updateMask=notificationConfigs"
Jika permintaan berhasil, server akan menampilkan respons dalam format JSON:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID", "notificationConfigs": [ { "pubsubTopic": "projects/PROJECT_ID/topics/PUBSUB_TOPIC", "filter": "sendFacility=\"SEND_FACILITY_1\"" }, { "pubsubTopic": "projects/PROJECT_ID/topics/SECOND_PUBSUB_TOPIC", "filter": "sendFacility=\"SEND_FACILITY_2\"" } ] }
PowerShell
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Patch ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Body "{ 'notificationConfigs': [ { 'pubsubTopic' : 'projects/PROJECT_ID/topics/PUBSUB_TOPIC', 'filter': 'sendFacility=\"SEND_FACILITY_1\"' }, { 'pubsubTopic' : 'projects/PROJECT_ID/topics/SECOND_PUBSUB_TOPIC', 'filter' : 'sendFacility=\"SEND_FACILITY_2\"' } ] }" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores?hl7V2StoreId=HL7V2_STORE_ID?updateMask=notificationConfigs" | Select-Object -Expand Content
Jika permintaan berhasil, server akan menampilkan respons dalam format JSON:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID", "notificationConfigs": [ { "pubsubTopic": "projects/PROJECT_ID/topics/PUBSUB_TOPIC", "filter": "sendFacility=\"SEND_FACILITY_1\"" }, { "pubsubTopic": "projects/PROJECT_ID/topics/SECOND_PUBSUB_TOPIC", "filter": "sendFacility=\"SEND_FACILITY_2\"" } ] }
Menguji pemilihan rute pesan
Untuk menguji pemilihan rute pesan, selesaikan langkah-langkah di bagian berikut ini.
Mengonfigurasi dan memulai penerima dan adaptor pertama
Untuk mengonfigurasi dan memulai penerima dan adaptor pertama, selesaikan langkah-langkah berikut:
Di komputer tempat Anda mengambil image Docker yang telah dibangun sebelumnya, jalankan perintah berikut untuk menginstal Netcat:
sudo apt install netcat
Download
hl7v2-mllp-ack-sample.txt
, jika Anda belum melakukannya. File berisi pesanACK
yang digunakan sebagai respons oleh adaptor saat mencoba memublikasikan pesan.Untuk menetapkan port 2525 bagi penerima pertama, jalankan perintah berikut:
Linux
echo -n -e "\x0b$(cat hl7v2-mllp-ack-sample.txt)\x1c\x0d" | nc -q1 -lv -p 2525 | less
Saat proses Netcat dimulai, output berikut akan menampilkan:
listening on [any] 2525 ...
Untuk memulai adaptor pertama, di terminal baru, jalankan perintah berikut:
docker run \ --network=host \ gcr.io/cloud-healthcare-containers/mllp-adapter \ /usr/mllp_adapter/mllp_adapter \ --hl7_v2_project_id=PROJECT_ID \ --hl7_v2_location_id=LOCATION \ --hl7_v2_dataset_id=DATASET_ID \ --hl7_v2_store_id=HL7V2_STORE_ID \ --export_stats=false \ --receiver_ip=127.0.0.1 --port 2575 \ --mllp_addr=127.0.0.1:2525 \ --pubsub_project_id=PROJECT_ID \ --pubsub_subscription=PUBSUB_SUBSCRIPTION \ --api_addr_prefix=https://healthcare.googleapis.com:443/v1 \ --logtostderr
dengan:
- PROJECT_ID adalah ID untuk project Google Cloud yang berisi penyimpanan HL7v2 Anda.
- LOCATION adalah wilayah tempat toko HL7v2 Anda berada.
- DATASET_ID adalah ID untuk set data induk penyimpanan HL7v2 Anda.
- HL7V2_STORE_ID adalah ID untuk penyimpanan HL7v2 tempat Anda mengirim pesan HL7v2.
- PROJECT_ID adalah ID untuk project Google Cloud yang berisi topik Pub/Sub.
- PUBSUB_SUBSCRIPTION adalah nama langganan pertama yang Anda buat yang terkait dengan topik Pub/Sub pertama Anda. Adaptor menggunakan pesan dari langganan ini dan otomatis mengonfirmasinya.
Setelah menjalankan perintah ini, adaptor akan mulai berjalan di mesin lokal Anda di 127.0.0.1:2575. Kebijakan ini memublikasikan pesan baru ke penerima eksternal pertama di port 2525.
Mengonfigurasi dan memulai penerima dan adaptor kedua
Untuk mengonfigurasi dan memulai penerima dan adaptor kedua, selesaikan langkah-langkah berikut:
Di komputer tempat Anda mengambil image Docker yang telah dibangun sebelumnya, jalankan perintah berikut untuk menginstal Netcat:
sudo apt install netcat
Download
hl7v2-mllp-ack-sample.txt
, jika Anda belum melakukannya. File berisi pesanACK
yang digunakan sebagai respons oleh adaptor saat mencoba memublikasikan pesan.Untuk menetapkan port 2526 bagi penerima kedua, jalankan perintah berikut.
Linux
echo -n -e "\x0b$(cat hl7v2-mllp-ack-sample.txt)\x1c\x0d" | nc -q1 -lv -p 2526 | less
Saat proses Netcat dimulai, output berikut akan menampilkan:
listening on [any] 2526 ...
Untuk memulai adaptor kedua, di terminal baru, jalankan perintah berikut:
docker run \ --network=host \ gcr.io/cloud-healthcare-containers/mllp-adapter \ /usr/mllp_adapter/mllp_adapter \ --hl7_v2_project_id=PROJECT_ID \ --hl7_v2_location_id=LOCATION \ --hl7_v2_dataset_id=DATASET_ID \ --hl7_v2_store_id=HL7V2_STORE_ID \ --export_stats=false \ --receiver_ip=127.0.0.1 --port 2576 \ --mllp_addr=127.0.0.1:2526 \ --pubsub_project_id=PROJECT_ID \ --pubsub_subscription=SECOND_PUBSUB_SUBSCRIPTION \ --api_addr_prefix=https://healthcare.googleapis.com:443/v1 \ --logtostderr
dengan:
- PROJECT_ID adalah ID untuk project Google Cloud yang berisi penyimpanan HL7v2 Anda.
- LOCATION adalah wilayah tempat toko HL7v2 Anda berada.
- DATASET_ID adalah ID untuk set data induk penyimpanan HL7v2 Anda.
- HL7V2_STORE_ID adalah ID untuk penyimpanan HL7v2 tempat Anda mengirim pesan HL7v2.
- PROJECT_ID adalah ID untuk project Google Cloud yang berisi topik Pub/Sub.
- SECOND_PUBSUB_SUBSCRIPTION adalah nama langganan kedua yang Anda buat yang terkait dengan topik Pub/Sub kedua Anda. Adaptor menggunakan pesan dari langganan ini dan otomatis mengonfirmasinya.
Setelah menjalankan perintah ini, adaptor akan mulai berjalan di mesin lokal Anda pada alamat IP port 127.0.0.1:2576. Rilis ini memublikasikan pesan baru ke penerima eksternal kedua pada port 2526.
Memublikasikan pesan ke penerima pertama
Untuk membuat pesan yang hanya akan dipublikasikan ke penerima eksternal pertama, selesaikan langkah-langkah berikut:
Download
hl7v2-sample1.json
.Dalam direktori tempat Anda mendownload
hl7v2-sample1.json
, panggil metodemessages.create
untuk membuat pesan di penyimpanan HL7v2:curl
Untuk membuat pesan HL7v2, buat permintaan
POST
dan tentukan informasi berikut:- Nama set data induk
- Nama toko HL7v2
- Pesan
- Token akses
Contoh berikut menunjukkan permintaan
POST
menggunakancurl
dan contoh file JSON,hl7v2-sample1.json
.curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data-binary @hl7v2-sample1.json \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages"
Jika permintaan berhasil, server akan menampilkan respons dalam format JSON:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID", "data": "TVNIfF5+XCZ8QXxTRU5EX0ZBQ0lMSVRZXzF8QXxBfDIwMTgwMTAxMDAwMDAwfHxUWVBFXkF8MjAxODAxMDEwMDAwMDB8VHwwLjB8fHxBQXx8MDB8QVNDSUkNRVZOfEEwMHwyMDE4MDEwMTA0MDAwMA1QSUR8fDE0ATExMV5eXl5NUk58MTExMTExMTFeXl5eTVJOfjExMTExMTExMTFeXl5eT1JHTk1CUg==", "sendFacility": "SEND_FACILITY_1", "sendTime": "2018-01-01T00:00:00Z", "messageType": "TYPE", "createTime": "1970-01-01T00:00:00Z", "patientIds": [ { "value": "14\u0001111", "type": "MRN" }, { "value": "11111111", "type": "MRN" }, { "value": "1111111111", "type": "ORGNMBR" } ] }
PowerShell
Untuk membuat pesan HL7v2, buat permintaan
POST
dan tentukan informasi berikut:- Nama set data induk
- Nama toko HL7v2
- Pesan
- Token akses
Contoh berikut menunjukkan permintaan
POST
yang menggunakan Windows PowerShell dan contoh file JSON yang disebuthl7v2-sample1.json
.$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile hl7v2-sample1.json ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages" | Select-Object -Expand Content
Jika permintaan berhasil, server akan menampilkan respons dalam format JSON:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID", "data": "TVNIfF5+XCZ8QXxTRU5EX0ZBQ0lMSVRZXzF8QXxBfDIwMTgwMTAxMDAwMDAwfHxUWVBFXkF8MjAxODAxMDEwMDAwMDB8VHwwLjB8fHxBQXx8MDB8QVNDSUkNRVZOfEEwMHwyMDE4MDEwMTA0MDAwMA1QSUR8fDE0ATExMV5eXl5NUk58MTExMTExMTFeXl5eTVJOfjExMTExMTExMTFeXl5eT1JHTk1CUg==", "sendFacility": "SEND_FACILITY_1", "sendTime": "2018-01-01T00:00:00Z", "messageType": "TYPE", "createTime": "1970-01-01T00:00:00Z", "patientIds": [ { "value": "14\u0001111", "type": "MRN" }, { "value": "11111111", "type": "MRN" }, { "value": "1111111111", "type": "ORGNMBR" } ] }
Dalam respons ini,
sendFacility
disetel keSEND_FACILITY_1
, sehingga notifikasi Pub/Sub hanya dikirim ke topik Pub/Sub pertama. Setelah membuat pesan, adaptor MLLP pertama akan menampilkan respons berikut:I0214 00:00:00.000000 1 healthapiclient.go:266] Started to fetch message. I0214 00:00:00.000000 1 healthapiclient.go:283] Message was successfully fetched.
Adaptor MLLP kedua tidak menampilkan respons apa pun karena tidak ada notifikasi yang dikirim ke topik Pub/Sub kedua.
Di terminal tempat Anda menjalankan proses Netcat pertama, output berikut akan ditampilkan. Output ini menunjukkan bahwa pesan telah dipublikasikan.
connect to [127.0.0.1] from localhost [127.0.0.1] 39522 ^KMSH|^~\&|A|SEND_FACILITY_1|A|A|20180101000000||TYPE^A|20180101000000|T|0.0|||AA||00|ASCII^MEVN|A00|20180101040000^MPID||14^A111^^^^MRN|11111111^^^^MRN~1111111111^^^^ORGNMBR^\
Output ini sesuai dengan nilai di kolom
data
dari respons yang diterima saat membuat pesan. Ini sama dengan nilaidata
dalam filehl7v2-sample1.json
.
Memublikasikan pesan ke penerima kedua
Untuk membuat pesan yang hanya akan dipublikasikan ke penerima eksternal kedua, selesaikan langkah-langkah berikut:
Buka terminal baru di komputer lokal Anda.
Untuk membuat pesan yang hanya akan dipublikasikan ke penerima eksternal kedua, download
hl7v2-sample2.json
.Dalam direktori tempat Anda mendownload
hl7v2-sample2.json
, panggil metodemessages.create
untuk membuat pesan di penyimpanan HL7v2:curl
Untuk membuat pesan HL7v2, buat permintaan
POST
dan tentukan informasi berikut:- Nama set data induk
- Nama toko HL7v2
- Pesan
- Token akses
Contoh berikut menunjukkan permintaan
POST
menggunakancurl
dan contoh file JSON,hl7v2-sample2.json
.curl -X POST \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ --data-binary @hl7v2-sample2.json \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages"
Jika permintaan berhasil, server akan menampilkan respons dalam format JSON:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID", "data": "TVNIfF5+XCZ8QXxTRU5EX0ZBQ0lMSVRZXzJ8QXxBfDIwMTgwMTAxMDAwMDAwfHxUWVBFXkF8MjAxODAxMDEwMDAwMDB8VHwwLjB8fHxBQXx8MDB8QVNDSUkNRVZOfEEwMHwyMDE4MDEwMTA0MDAwMA1QSUR8fDE0ATExMV5eXl5NUk58MTExMTExMTFeXl5eTVJOfjExMTExMTExMTFeXl5eT1JHTk1CUg==", "sendFacility": "SEND_FACILITY_2", "sendTime": "2018-01-01T00:00:00Z", "messageType": "TYPE", "createTime": "1970-01-01T00:00:00Z", "patientIds": [ { "value": "14\u0001111", "type": "MRN" }, { "value": "11111111", "type": "MRN" }, { "value": "1111111111", "type": "ORGNMBR" } ] }
PowerShell
Untuk membuat pesan HL7v2, buat permintaan
POST
dan tentukan informasi berikut:- Nama set data induk
- Nama toko HL7v2
- Pesan
- Token akses
Contoh berikut menunjukkan permintaan
POST
yang menggunakan Windows PowerShell dan contoh file JSON,hl7v2-sample2.json
.$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Post ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -InFile hl7v2-sample2.json ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages" | Select-Object -Expand Content
Jika permintaan berhasil, server akan menampilkan respons dalam format JSON:
{ "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID", "data": "TVNIfF5+XCZ8QXxTRU5EX0ZBQ0lMSVRZXzJ8QXxBfDIwMTgwMTAxMDAwMDAwfHxUWVBFXkF8MjAxODAxMDEwMDAwMDB8VHwwLjB8fHxBQXx8MDB8QVNDSUkNRVZOfEEwMHwyMDE4MDEwMTA0MDAwMA1QSUR8fDE0ATExMV5eXl5NUk58MTExMTExMTFeXl5eTVJOfjExMTExMTExMTFeXl5eT1JHTk1CUg==", "sendFacility": "SEND_FACILITY_2", "sendTime": "2018-01-01T00:00:00Z", "messageType": "TYPE", "createTime": "1970-01-01T00:00:00Z", "patientIds": [ { "value": "14\u0001111", "type": "MRN" }, { "value": "11111111", "type": "MRN" }, { "value": "1111111111", "type": "ORGNMBR" } ] }
Perlu diperhatikan bahwa sendFacility adalah
SEND_FACILITY_2
, sehingga notifikasi Pub/Sub hanya dikirim ke topik Pub/Sub kedua. Setelah membuat pesan, adaptor MLLP pertama tidak menampilkan respons apa pun, sedangkan adaptor MLLP kedua menampilkan respons berikut:I0214 00:00:00.000000 1 healthapiclient.go:266] Started to fetch message. I0214 00:00:00.000000 1 healthapiclient.go:283] Message was successfully fetched.
Di terminal tempat Anda menjalankan proses Netcat kedua, output berikut akan ditampilkan. Output ini menunjukkan bahwa pesan telah dipublikasikan.
connect to [127.0.0.1] from localhost [127.0.0.1] 39522 ^KMSH|^~\&|A|SEND_FACILITY_2|A|A|20180101000000||TYPE^A|20180101000000|T|0.0|||AA||00|ASCII^MEVN|A00|20180101040000^MPID||14^A111^^^^MRN|11111111^^^^MRN~1111111111^^^^ORGNMBR^\
Output ini sesuai dengan nilai di kolom
data
dari respons yang diterima saat membuat pesan. Ini sama dengan nilaidata
dalam filehl7v2-sample2.json
.
Men-deploy adaptor MLLP ke Google Kubernetes Engine
Saat mengirim pesan HL7v2 melalui MLLP dari pusat perawatan Anda, salah satu kemungkinan konfigurasi adalah mengirim pesan ke adaptor yang di-deploy di Google Cloud dan dapat meneruskannya ke Cloud Healthcare API.
Adaptor MLLP berjalan sebagai aplikasi stateless di cluster GKE. Cluster GKE adalah grup instance VM terkelola untuk menjalankan aplikasi dalam container. Aplikasi stateless adalah aplikasi yang tidak menyimpan data atau status aplikasi ke cluster atau ke penyimpanan persisten. Sebaliknya, data dan status aplikasi tetap ada di klien, yang membuat aplikasi stateless lebih skalabel.
GKE menggunakan pengontrol Deployment untuk men-deploy aplikasi stateless sebagai Pod yang seragam dan tidak unik. Deployment mengelola status yang diinginkan aplikasi Anda: berapa banyak Pod yang harus menjalankan aplikasi, versi image container apa yang harus dijalankan, apa yang harus diberi label oleh Pod, dan sebagainya. Status yang diinginkan dapat diubah secara dinamis melalui update pada spesifikasi Pod deployment.
Pada saat yang sama dengan men-deploy adaptor, Anda membuat pengontrol Service yang memungkinkan Anda menghubungkan adaptor ke Cloud Healthcare API menggunakan load balancing internal.
Jika baru menggunakan GKE, sebaiknya Anda menyelesaikan panduan memulai GKE untuk mempelajari cara kerja produk.
Menambahkan izin Pub/Sub API ke akun layanan GKE
Seperti yang dinyatakan dalam dokumentasi GKE tentang Mengautentikasi ke Cloud Platform dengan akun layanan, setiap node dalam cluster container adalah instance Compute Engine. Oleh karena itu, saat dijalankan di cluster container, adaptor MLLP akan otomatis mewarisi cakupan instance Compute Engine tempat adaptor tersebut di-deploy.
Google Cloud secara otomatis membuat akun layanan bernama "akun layanan default Compute Engine" dan GKE mengaitkan akun layanan ini dengan node yang dibuat GKE. Bergantung pada cara project Anda dikonfigurasi, akun layanan default mungkin memiliki izin untuk menggunakan Cloud Platform API lainnya atau tidak. GKE juga menetapkan beberapa cakupan akses terbatas ke instance Compute Engine.
Untuk mendapatkan hasil terbaik, jangan melakukan autentikasi ke layanan Google Cloud lainnya (seperti Pub/Sub) dari Pod yang berjalan di GKE dengan mengupdate izin akun layanan default atau menetapkan lebih banyak cakupan akses ke instance Compute Engine. Sebagai gantinya, buat akun layanan Anda sendiri.
Anda harus memberikan izin Pub/Sub yang diperlukan ke cluster container, tetapi Anda juga memiliki opsi untuk memberikan izin guna menulis metrik ke Cloud Monitoring.
Untuk membuat akun layanan baru yang hanya berisi cakupan yang diperlukan cluster container, selesaikan langkah-langkah berikut:
Konsol
Buat akun layanan:
Di konsol Google Cloud, buka halaman Buat akun layanan.
Pilih project.
Di kolom Nama akun layanan, masukkan nama. Konsol Google Cloud akan mengisi kolom ID akun layanan berdasarkan nama ini.
Opsional: Di kolom Deskripsi akun layanan, masukkan deskripsi.
Klik Create.
Klik kolom Pilih peran.
Di bagian All roles, klik Pub/Sub > Pub/Sub Subscriber.
Klik Tambahkan peran lain, lalu klik kolom Pilih peran.
Pada bagian All roles, klik Cloud Healthcare > Healthcare HL7v2 Message Ingest.
Opsional: Jika Anda ingin mengaktifkan pemantauan, klik Tambahkan peran lain, lalu klik kolom Pilih peran.
Pada bagian All roles, klik Monitoring > Monitoring Metric Writer.
Klik Lanjutkan.
Klik Selesai untuk menyelesaikan pembuatan akun layanan.
Jangan tutup jendela browser Anda. Anda akan menggunakan jendela tersebut dalam prosedur berikutnya.
Membuat kunci akun layanan:
Di konsol Google Cloud, klik alamat email untuk akun layanan yang telah dibuat.
Klik Kunci.
Klik Tambahkan kunci, lalu klik Buat kunci baru.
Klik Create. File kunci JSON akan didownload ke komputer Anda.
Klik Close.
gcloud
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.
Untuk memberikan setiap peran ke akun layanan, jalankan perintah
gcloud projects add-iam-policy-binding
.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/pubsub.subscriber gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/healthcare.hl7V2Ingest gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/monitoring.metricWriter
Outputnya mencakup kebijakan yang diperbarui:
bindings: - members: - user:SERVICE_ACCOUNT_NAME role: roles/pubsub.publisher - members: - user:SERVICE_ACCOUNT_NAME roles/healthcare.hl7V2Ingest - members: - user:SERVICE_ACCOUNT_NAME roles/monitoring.metricWriter etag: ETAG version: 1
Untuk membuat kunci akun layanan, jalankan perintah
gcloud iam service-accounts keys create
.gcloud iam service-accounts keys create ~/FILENAME.json \ --iam-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Setelah akun layanan dibuat, file kunci JSON yang berisi kredensial akun layanan akan didownload ke komputer Anda. Anda akan menggunakan file kunci ini untuk mengonfigurasi adaptor MLLP guna melakukan autentikasi ke Cloud Healthcare API, Pub/Sub API, dan Cloud Monitoring API menggunakan flag
--service-account
selama pembuatan cluster.created key [e44da1202f82f8f4bdd9d92bc412d1d8a837fa83] of type [json] as [/usr/home/USERNAME/FILENAME.json] for [SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com]
Membuat cluster
Untuk membuat cluster di GKE, jalankan perintah gcloud container clusters create
:
gcloud container clusters create mllp-adapter \ --zone=COMPUTE_ZONE \ --service-account CLIENT_EMAIL
dengan:
- COMPUTE_ZONE adalah zona
tempat cluster Anda di-deploy. Zona adalah perkiraan lokasi regional
tempat cluster Anda dan resource-nya berada. Misalnya,
us-west1-a
adalah zona di regionus-west
. Jika Anda telah menetapkan zona default menggunakangcloud config set compute/zone
, nilai flag ini akan menggantikan default. - CLIENT_EMAIL adalah ID untuk akun layanan. Anda dapat menemukan alamat email ini di file kunci akun layanan di kolom
"client_email":
. ID ini memiliki format SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.
Perintah menampilkan output yang mirip dengan contoh berikut:
Creating cluster mllp-adapter in COMPUTE_ZONE... Cluster is being configured... Cluster is being deployed... Cluster is being health-checked... Cluster is being health-checked (master is healthy)...done. Created [https://container.googleapis.com/v1/projects/PROJECT_ID/zones/COMPUTE_ZONE/clusters/mllp-adapter]. To inspect the contents of your cluster, go to: https://console.cloud.google.com/kubernetes/workload_/gcloud/COMPUTE_ZONE/mllp-adapter?project=PROJECT_ID kubeconfig entry generated for mllp-adapter. NAME LOCATION MASTER_VERSION MASTER_IP MACHINE_TYPE NODE_VERSION NUM_NODES STATUS mllp-adapter COMPUTE_ZONE 1.11.7-gke.4 203.0.113.1 n1-standard-1 1.11.7-gke.4 3 RUNNING
Setelah cluster dibuat, GKE membuat tiga instance VM Compute Engine. Anda dapat memverifikasi hal ini dengan mencantumkan instance menggunakan perintah berikut:
gcloud compute instances list
Mengonfigurasi deployment
Saat men-deploy aplikasi ke GKE, Anda menentukan properti deployment menggunakan file manifes deployment, yang biasanya berupa file YAML. Untuk mengetahui contohnya, lihat Membuat deployment.
Buka terminal terpisah.
Dengan menggunakan editor teks, buat file manifes deployment bernama
mllp_adapter.yaml
dengan konten berikut:
apiVersion: apps/v1 kind: Deployment metadata: name: mllp-adapter-deployment spec: replicas: 1 selector: matchLabels: app: mllp-adapter template: metadata: labels: app: mllp-adapter spec: containers: - name: mllp-adapter imagePullPolicy: Always image: gcr.io/cloud-healthcare-containers/mllp-adapter ports: - containerPort: 2575 protocol: TCP name: "port" command: - "/usr/mllp_adapter/mllp_adapter" - "--port=2575" - "--hl7_v2_project_id=PROJECT_ID" - "--hl7_v2_location_id=LOCATION" - "--hl7_v2_dataset_id=DATASET_ID" - "--hl7_v2_store_id=HL7V2_STORE_ID" - "--api_addr_prefix=https://healthcare.googleapis.com:443/v1" - "--logtostderr" - "--receiver_ip=0.0.0.0"
dengan:
- PROJECT_ID adalah ID untuk project Google Cloud yang berisi penyimpanan HL7v2 Anda.
- LOCATION adalah wilayah tempat toko HL7v2 Anda berada.
- DATASET_ID adalah ID untuk set data induk penyimpanan HL7v2 Anda.
- HL7V2_STORE_ID adalah ID untuk penyimpanan HL7v2 tempat Anda mengirim pesan HL7v2.
Deployment ini memiliki properti berikut:
spec: replicas:
adalah jumlah pod replika yang dikelola deployment.spec: template: metadata: labels:
adalah label yang diberikan ke setiap Pod, yang digunakan oleh deployment untuk mengelola pod.spec: template: spec:
adalah spesifikasi Pod, yang menentukan cara setiap Pod dijalankan.spec: containers
menyertakan nama container yang akan dijalankan di setiap Pod dan image container yang harus dijalankan.
Untuk mengetahui informasi selengkapnya tentang spesifikasi deployment, lihat referensi Deployment API.
Mengonfigurasi Layanan
Agar adaptor MLLP dapat diakses oleh aplikasi di luar cluster (seperti pusat perawatan), Anda harus mengonfigurasi load balancer internal.
Jika Anda belum mengonfigurasi VPN, aplikasi dapat mengakses adaptor MLLP melalui load balancer internal selama aplikasi tersebut menggunakan jaringan VPC yang sama dan berada di region Google Cloud yang sama. Misalnya, agar adaptor dapat diakses oleh instance VM Compute Engine di region yang sama dan di jaringan VPC yang sama, Anda dapat menambahkan load balancer internal ke resource Service cluster.
Dalam direktori tempat Anda membuat file manifes deployment, gunakan editor teks untuk membuat file manifes Service bernama mllp_adapter_service.yaml
dengan konten berikut. File ini bertanggung jawab untuk mengonfigurasi load balancing internal:
apiVersion: v1
kind: Service
metadata:
name: mllp-adapter-service
annotations:
cloud.google.com/load-balancer-type: "Internal"
spec:
type: LoadBalancer
ports:
- name: port
port: 2575
targetPort: 2575
protocol: TCP
selector:
app: mllp-adapter
Layanan memiliki properti berikut:
metadata: name:
adalah nama yang Anda pilih untuk Layanan. Dalam hal ini, parameternya adalahmllp-adapter-service
.metadata: annotations:
adalah anotasi yang menentukan bahwa load balancing internal akan dikonfigurasi.spec: type:
adalah jenis load balancer.ports: port:
digunakan untuk menentukan port tempat layanan dapat menerima traffic dari layanan lain dalam cluster yang sama. Port MLLP default2575
digunakan.ports: targetPort:
digunakan untuk menentukan port di setiap Pod tempat layanan berjalan.spec: selector: app:
menentukan Pod yang ditargetkan Layanan.
Meskipun alamat IP untuk load balancer dapat ditentukan (menggunakan kolom clusterIP
), load balancer dapat menghasilkan alamat IP-nya sendiri yang menjadi tujuan pengiriman pesan. Untuk saat ini, biarkan cluster menghasilkan alamat IP, yang akan Anda
gunakan nanti dalam tutorial ini.
Untuk mengetahui informasi selengkapnya tentang load balancing internal, lihat dokumentasi GKE.
Untuk mengetahui informasi selengkapnya tentang spesifikasi Layanan, silakan melihat Referensi Service API.
Men-deploy deployment
Untuk men-deploy adaptor ke cluster GKE, di direktori yang berisi file manifes deployment mllp_adapter.yaml
, jalankan perintah berikut:
kubectl apply -f mllp_adapter.yaml
Perintah akan menampilkan output berikut:
deployment.extensions "mllp-adapter-deployment" created
Memeriksa deployment
Setelah membuat deployment, Anda dapat menggunakan alat kubectl
untuk memeriksanya.
Untuk mendapatkan informasi terperinci tentang deployment, jalankan perintah berikut:
kubectl describe deployment mllp-adapter
Untuk menampilkan daftar Pod yang dibuat oleh deployment, jalankan perintah berikut:
kubectl get pods -l app=mllp-adapter
Untuk mendapatkan informasi tentang Pod yang dibuat:
kubectl describe pod POD_NAME
Jika deployment berhasil, bagian terakhir dari output dari perintah sebelumnya akan berisi informasi berikut:
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal Scheduled 1m default-scheduler Successfully assigned default/mllp-adapter-deployment-85b46f8-zxw68 to gke-mllp-adapter-default-pool-9c42852d-95sn
Normal Pulling 1m kubelet, gke-mllp-adapter-default-pool-9c42852d-95sn pulling image "gcr.io/cloud-healthcare-containers/mllp-adapter"
Normal Pulled 1m kubelet, gke-mllp-adapter-default-pool-9c42852d-95sn Successfully pulled image "gcr.io/cloud-healthcare-containers/mllp-adapter"
Normal Created 1m kubelet, gke-mllp-adapter-default-pool-9c42852d-95sn Created container
Normal Started 1m kubelet, gke-mllp-adapter-default-pool-9c42852d-95sn Started container
Men-deploy Layanan dan membuat load balancer internal
Untuk membuat load balancer internal, di direktori yang berisi
file manifes Layanan mllp_adapter_service.yaml
, jalankan perintah berikut:
kubectl apply -f mllp_adapter_service.yaml
Perintah akan menampilkan output berikut:
service "mllp-adapter-service" created
Memeriksa Layanan
Setelah membuat Layanan, periksa untuk memastikan bahwa layanan telah berhasil dikonfigurasi.
Untuk memeriksa load balancer internal, jalankan perintah berikut:
kubectl describe service mllp-adapter-service
Output perintah mirip dengan contoh berikut:
Name: mllp-adapter-service
Namespace: default
Labels: <none>
Annotations: cloud.google.com/load-balancer-type=Internal
kubectl.kubernetes.io/last-applied-configuration={"apiVersion":"v1","kind":"Service","metadata":{"annotations":{"cloud.google.com/load-balancer-type":"Internal"},"name":"mllp-adapter-service","namespa...
Selector: app=mllp-adapter
Type: LoadBalancer
IP: 203.0.113.1
LoadBalancer Ingress: 203.0.113.1
Port: port 2575/TCP
TargetPort: 2575/TCP
NodePort: port 30660/TCP
Endpoints: <none>
Session Affinity: None
External Traffic Policy: Cluster
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Normal EnsuringLoadBalancer 1m service-controller Ensuring load balancer
Normal EnsuredLoadBalancer 1m service-controller Ensured load balancer
Mungkin perlu waktu hingga satu menit untuk mengisi alamat IP LoadBalancer Ingress
. Anda akan menggunakan alamat IP ini dan port 2575
untuk mengakses Layanan dari luar cluster pada langkah berikutnya.
Membuat VM Compute Engine dan mengirim pesan
Seperti sebelumnya dalam tutorial ini, Anda menguji adaptor MLLP secara lokal dan mengirim pesan HL7v2 ke penyimpanan HL7v2, kini Anda akan mengirim pesan dari VM Compute Engine ke adaptor MLLP yang berjalan di GKE. Pesan tersebut kemudian diteruskan ke penyimpanan HL7v2.
Untuk mengirim permintaan dari instance baru ke cluster GKE, instance dan instance yang ada harus berada di region yang sama dan menggunakan jaringan VPC yang sama.
Di akhir bagian ini, Anda akan mencantumkan notifikasi yang dipublikasikan ke topik Pub/Sub dan pesan HL7v2 di toko HL7v2 Anda. Instance VM Compute Engine harus diberi izin untuk melakukan tugas ini. Sebelum membuat instance, buat akun layanan baru dengan izin yang diperlukan dengan menyelesaikan langkah-langkah berikut:
Konsol
Buat akun layanan:
Di konsol Google Cloud, buka halaman Buat akun layanan.
Pilih project.
Di kolom Nama akun layanan, masukkan nama. Konsol Google Cloud akan mengisi kolom ID akun layanan berdasarkan nama ini.
Opsional: Di kolom Deskripsi akun layanan, masukkan deskripsi.
Klik Create.
Klik kolom Pilih peran.
Di bagian All roles, klik Pub/Sub > Pub/Sub Subscriber.
Klik Tambahkan peran lain, lalu klik kolom Pilih peran.
Pada bagian All roles, klik Cloud Healthcare > Healthcare HL7v2 Message Consumer.
Klik Lanjutkan.
Klik Selesai untuk menyelesaikan pembuatan akun layanan.
Jangan tutup jendela browser Anda. Anda akan menggunakan jendela tersebut dalam prosedur berikutnya.
Membuat kunci akun layanan:
Di konsol Google Cloud, klik alamat email untuk akun layanan yang telah dibuat.
Klik Kunci.
Klik Tambahkan kunci, lalu klik Buat kunci baru.
Klik Create. File kunci JSON akan didownload ke komputer Anda.
Klik Close.
gcloud
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.
Untuk memberikan setiap peran ke akun layanan, jalankan perintah
gcloud projects add-iam-policy-binding
.gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/pubsub.publisher gcloud projects add-iam-policy-binding PROJECT_ID \ --member=serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com \ --role=roles/healthcare.hl7V2Consumer
Outputnya mencakup kebijakan yang diperbarui:
bindings: - members: - user:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com role: roles/pubsub.publisher - members: - user:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com roles/healthcare.hl7V2Consumer etag: ETAG version: 1
Untuk membuat kunci akun layanan, jalankan perintah
gcloud iam service-accounts keys create
.gcloud iam service-accounts keys create ~/FILENAME.json \ --iam-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com
Setelah akun layanan dibuat, file kunci JSON yang berisi kredensial akun layanan akan didownload ke komputer Anda.
Langkah-langkah berikut menunjukkan cara membuat instance virtual machine Linux di Compute Engine:
Konsol
Di Konsol Google Cloud, buka halaman VM Instances.
Klik Create instance.
Pilih Region dan Zona untuk instance yang cocok dengan zona yang Anda pilih saat membuat cluster. Misalnya, jika Anda menggunakan
us-central1-a
untuk COMPUTE_ZONE saat membuat cluster, maka pada layar pembuatan instance, pilihus-central1 (Iowa)
untuk Region danus-central1-a
untuk Zone.Di bagian Boot disk, klik Change untuk mulai mengonfigurasi boot disk Anda.
Pada tab Public images, pilih versi 9 sistem operasi Debian.
Klik Pilih.
Di bagian Identity and API access, pilih akun layanan yang Anda buat.
Di bagian Firewall, pilih Allow HTTP traffic.
Klik Create untuk membuat instance.
gcloud
Untuk membuat instance komputasi, jalankan metode gcloud compute instances create
dengan opsi berikut:
- ZONE yang Anda pilih saat membuat cluster
- Tag
http-server
untuk mengizinkan traffic HTTP - SERVICE_ACCOUNT yang Anda buat
gcloud compute instances create COMPUTE_NAME \ --project=PROJECT_ID \ --zone=ZONE \ --image-family=debian-9 \ --image-project=debian-cloud \ --tags=http-server \ --service-account=SERVICE_ACCOUNT
Output-nya mirip dengan contoh berikut:
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/COMPUTE_NAME]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS COMPUTE_NAME ZONE n1-standard-1 INTERNAL_IP EXTERNAL_IP RUNNING
Tunggu hingga instance memulai. Setelah dimulai, instance akan tercantum pada halaman Instance VM dengan ikon status hijau.
Secara default, instance menggunakan jaringan VPC default yang sama dengan yang digunakan cluster, yang berarti traffic dapat dikirim dari instance ke cluster.
Untuk terhubung ke instance, selesaikan langkah-langkah berikut:
Konsol
Di Konsol Google Cloud, buka halaman VM Instances.
Dalam daftar instance virtual machine, klik SSH di baris instance yang dibuat.
gcloud
Untuk terhubung ke instance, jalankan
perintah gcloud compute ssh
:
gcloud compute ssh INSTANCE_NAME \ --project PROJECT_ID \ --zone ZONE
Anda sekarang memiliki jendela terminal untuk berinteraksi dengan instance Linux.
Di jendela terminal, instal Netcat:
sudo apt install netcat
Download file
hl7v2-mllp-sample.txt
dan simpan ke instance. Untuk informasi tentang encoding dan terminal segmen yang digunakan dalam file, lihat Pemisah dan encoding segmen pesan HL7v2.Untuk mulai mengirim pesan HL7v2 melalui adaptor MLLP ke penyimpanan HL7v2, di direktori tempat Anda mendownload file, jalankan perintah berikut. Gunakan nilai
LoadBalancer Ingress
yang ditampilkan saat Anda memeriksa Layanan.echo -n -e "\x0b$(cat hl7v2-mllp-sample.txt)\x1c\x0d" | nc LOAD_BALANCER_INGRESS_IP_ADDRESS 2575
Setelah menjalankan perintah, pesan akan dikirim melalui adaptor MLLP ke penyimpanan HL7v2 Anda. Jika pesan berhasil diserap ke penyimpanan HL7v2, perintah akan menampilkan output berikut:
MSA|AA|20150503223000|ILITY|FROM_APP|FROM_FACILITY|20190312162410||ACK|f4c59243-19c2-4373-bea0-39c1b2ba616b|P|2.5
Output ini menunjukkan bahwa penyimpanan HL7v2 merespons dengan jenis respons
AA
(Application Accept
), yang berarti pesan telah divalidasi dan berhasil diserap.Untuk melihat pesan yang dipublikasikan ke topik Pub/Sub, jalankan perintah
gcloud pubsub subscriptions pull
:gcloud pubsub subscriptions pull --auto-ack PUBSUB_SUBSCRIPTION
Perintah ini menampilkan output berikut tentang pesan HL7v2 yang diserap:
┌-----------------------------------------------------------------------------------------------------------------|-----------------|---------------┐ | DATA | MESSAGE_ID | ATTRIBUTES | ├-----------------------------------------------------------------------------------------------------------------|-----------------|---------------| | projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/HL7V2_MESSAGE_ID | 123456789012345 | msgType=ADT | └-----------------------------------------------------------------------------------------------------------------|-----------------|---------------┘
Anda juga dapat mencantumkan pesan di penyimpanan HL7v2 untuk melihat apakah pesan telah ditambahkan:
curl
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages"
Jika permintaan berhasil, server akan menampilkan ID pesan di jalur resource:
{ "hl7V2Messages": [ { "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID" } ] }
PowerShell
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Get ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages" | Select-Object -Expand Content
Jika permintaan berhasil, server akan menampilkan ID pesan di jalur resource:
{ "hl7V2Messages": [ { "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID" } ] }
Setelah menyelesaikan bagian ini, Anda telah berhasil men-deploy adaptor MLLP ke GKE dan mengirim pesan HL7v2 dari instance jarak jauh melalui adaptor dan ke Cloud Healthcare API.
Pada sisa tutorial ini, Anda akan mempelajari cara mengenkripsi pesan HL7v2 yang dikirim dengan aman dengan mengonfigurasi VPN antara instance Compute Engine, yang bertindak sebagai instance "lokal" dan adaptor.
Mengonfigurasi VPN
Penggunaan VPN memungkinkan Anda memperluas jaringan pribadi tempat Anda mengirim pesan HL7v2 melalui jaringan publik, seperti internet. Dengan menggunakan VPN, Anda dapat mengirim pesan dari pusat layanan melalui adaptor MLLP dan ke Google Cloud. Sistem dalam alur ini bertindak seolah-olah berada di satu jaringan pribadi.
Ada dua metode untuk mengamankan koneksi MLLP Anda menggunakan VPN:
- Menggunakan Cloud VPN
- Menggunakan solusi VPN menyeluruh Strongswan di Docker
Mengonfigurasi Cloud VPN
Cloud VPN menghubungkan jaringan lokal Anda dengan aman ke jaringan Virtual Private Cloud (VPC) Google Cloud melalui koneksi VPN IPsec. Traffic yang melintasi dua jaringan tersebut dienkripsi oleh satu gateway VPN, lalu didekripsi oleh gateway VPN lainnya. Ini melindungi data Anda saat berpindah melalui internet atau melalui jaringan pusat perawatan.
Dalam tutorial ini, setiap gateway VPN yang Anda konfigurasi berada di jaringan dan subnet kustom yang berbeda di region Google Cloud yang berbeda.
Gateway VPN yang dikonfigurasi di us-central1
bertindak sebagai gateway VPN Cloud di sisi Google Cloud, sedangkan gateway Cloud VPN di europe-west1
menyimulasikan gateway "lokal" Anda.
Referensi penamaan dan pengalamatan
Sebagai referensi, tutorial ini menggunakan penamaan dan pengalamatan IP berikut:
Sisi Google Cloud
- Nama jaringan:
cloud-vpn-network
- Nama subnet:
subnet-us-central-10-0-1
- Region:
us-central1
- Rentang subnet:
10.0.1.0/24
- Nama alamat IP eksternal:
cloud-vpn-ip
- Nama gateway VPN:
vpn-us-central
- Nama tunnel VPN:
vpn-us-central-tunnel-1
Sisi "Lokal"
- Nama jaringan:
on-prem-vpn-network
- Nama subnet:
subnet-europe-west-10-0-2
- Region:
europe-west1
- Rentang subnet:
10.0.2.0/24
- Nama alamat IP eksternal:
on-prem-vpn-ip
- Nama gateway VPN:
vpn-europe-west
- Nama tunnel VPN:
vpn-europe-west-tunnel-1
Membuat subnet dan jaringan VPC kustom
Langkah pertama dalam mengonfigurasi Cloud VPN adalah membuat dua jaringan VPC. Satu jaringan, bernama on-prem-vpn-network
, dikonfigurasi di lingkungan "lokal" dan berjalan pada instance VM Compute Engine yang disebut on-prem-instance
. Jaringan lainnya, yang disebut cloud-vpn-network
, adalah jaringan yang digunakan oleh cluster GKE yang menjalankan adaptor MLLP. Anda akan terhubung ke VM on-prem-instance
dan mengirim pesan
HL7v2 ke adaptor MLLP yang berjalan di jaringan cloud-vpn-network
melalui load balancer internal adaptor MLLP.
Buat dua jaringan VPC kustom dan subnetnya dengan menyelesaikan langkah-langkah berikut:
Untuk membuat jaringan VPC pertama,
cloud-vpn-network
, jalankan perintah berikut:gcloud compute networks create cloud-vpn-network \ --project=PROJECT_ID \ --subnet-mode=custom
Untuk membuat subnet
subnet-us-central-10-0-1
bagi jaringancloud-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
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
Untuk membuat subnet
subnet-europe-west-10-0-2
bagi jaringan VPCon-prem-vpn-network
, jalankan perintah berikut:gcloud compute networks subnets create subnet-europe-west-10-0-2 \ --project=PROJECT_ID \ --region=europe-west1 \ --network=on-prem-vpn-network \ --range=10.0.2.0/24
Membuat alamat IP eksternal
Sebelum membuat gateway VPN, pesan alamat IP eksternal untuk setiap gateway dengan menyelesaikan langkah-langkah berikut:
Untuk mencadangkan alamat IP eksternal (statis) regional untuk alamat
cloud-vpn-ip
, jalankan perintah berikut:gcloud compute addresses create cloud-vpn-ip \ --project=PROJECT_ID \ --region=us-central1
Untuk mencadangkan alamat IP eksternal (statis) regional untuk alamat
on-prem-vpn-ip
, jalankan perintah berikut:gcloud compute addresses create on-prem-vpn-ip \ --project=PROJECT_ID \ --region=europe-west1
Catat alamat IP eksternal tersebut agar Anda dapat menggunakannya untuk mengonfigurasi gateway VPN di bagian berikutnya. Untuk mengambil alamat IP eksternal, jalankan perintah berikut:
Alamat IP Cloud VPN:
gcloud compute addresses describe cloud-vpn-ip \ --project PROJECT_ID \ --region us-central1 \ --format='flattened(address)'
Alamat IP VPN"Lokal":
gcloud compute addresses describe on-prem-vpn-ip \ --project PROJECT_ID \ --region europe-west1 \ --format='flattened(address)'
Perintah menampilkan output yang mirip dengan berikut ini:
address: 203.0.113.1
Membuat gateway, tunnel, dan rute VPN
Selesaikan langkah-langkah berikut guna membuat gateway, tunnel, dan rute VPN untuk Cloud VPN:
Buat pre-shared key (rahasia bersama) yang kuat secara kriptografis dengan mengikuti petunjuk dalam Membuat kunci pre-shared yang kuat. Kunci ini direferensikan sebagai SHARED_SECRET di bagian ini.
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
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
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
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":
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"
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
Untuk membuat tunnel ke gateway "lokal", jalankan perintah berikut:
gcloud compute vpn-tunnels create vpn-europe-west-tunnel-1 \ --project PROJECT_ID \ --region europe-west1 \ --peer-address CLOUD_VPN_IP \ --shared-secret SHARED_SECRET \ --ike-version 2 \ --local-traffic-selector 0.0.0.0/0 \ --target-vpn-gateway vpn-europe-west
Untuk membuat rute statis ke
10.0.1.0/24
, jalankan perintah berikut:gcloud compute routes create "vpn-europe-west-tunnel-1-route-1" \ --project PROJECT_ID \ --network "on-prem-vpn-network" \ --next-hop-vpn-tunnel "vpn-europe-west-tunnel-1" \ --next-hop-vpn-tunnel-region "europe-west1" \ --destination-range "10.0.1.0/24"
Anda telah membuat Cloud VPN dan gateway "lokal" serta memulai terowongannya. Gateway VPN tidak akan terhubung sampai Anda membuat aturan firewall untuk mengizinkan traffic melalui tunnel di antara gateway tersebut.
Membuat aturan firewall
Anda harus membuat aturan firewall untuk kedua sisi tunnel VPN. Aturan ini memungkinkan semua traffic TCP, UDP, dan ICMP untuk masuk dari subnet di satu sisi tunnel VPN ke sisi lainnya.
Guna membuat aturan firewall untuk subnet Cloud VPN, jalankan perintah berikut:
gcloud compute firewall-rules create allow-tcp-udp-icmp-cloud-vpn \ --project=PROJECT_ID \ --direction=INGRESS \ --priority=1000 \ --network=cloud-vpn-network \ --action=ALLOW \ --rules=tcp,udp,icmp \ --source-ranges=10.0.2.0/24
Guna membuat aturan firewall untuk subnet "lokal", jalankan perintah berikut:
gcloud compute firewall-rules create allow-tcp-udp-icmp-on-prem-vpn \ --project=PROJECT_ID \ --direction=INGRESS \ --priority=1000 \ --network=on-prem-vpn-network \ --action=ALLOW \ --rules=tcp,udp,icmp \ --source-ranges=10.0.1.0/24
Buat aturan firewall yang memungkinkan Anda menerapkan SSH ke instance VM di port 22 dengan menjalankan perintah berikut:
gcloud compute firewall-rules create on-prem-vpn-allow-ssh \ --project=PROJECT_ID \ --direction=INGRESS \ --priority=1000 \ --network=on-prem-vpn-network \ --action=ALLOW \ --rules=tcp:22 \ --source-ranges=0.0.0.0/0
Memeriksa status tunnel VPN
Untuk memverifikasi bahwa tunnel Anda sudah aktif, selesaikan langkah-langkah berikut:
Buka halaman VPN di konsol Google Cloud.
Klik tab Google VPN Tunnels.
Di kolom Status untuk setiap terowongan, cari tanda centang hijau dan kata "Tetapkan". Jika item-item ini ada, {i>gateway<i} Anda telah menegosiasikan terowongan. Jika tidak ada tanda yang muncul setelah beberapa menit, lihat Pemecahan masalah.
Untuk informasi logging tambahan yang terkait dengan tunnel VPN, lihat Memeriksa Log VPN di halaman Pemecahan masalah. Misalnya, Anda dapat melihat metrik tentang paket yang dilepas, status tunnel, byte yang diterima, dan byte yang dikirim.
Setelah berhasil mengonfigurasi Cloud VPN dengan gateway, tunnel, dan aturan firewall yang diperlukan, Anda dapat membuat koneksi yang aman antara instance VM "lokal" dan adaptor MLLP yang berjalan di GKE.
Menggabungkan deployment ke GKE dan Cloud VPN
Sebelumnya dalam tutorial ini, Anda menguji adaptor MLLP secara lokal dan mengirim pesan HL7v2 melalui koneksi non-VPN ke adaptor MLLP. Kini Anda dapat mengirim pesan dari VM Compute Engine melalui koneksi aman menggunakan Cloud VPN ke adaptor MLLP yang berjalan di GKE. Pesan tersebut kemudian diteruskan ke penyimpanan HL7v2.
Membuat ulang deployment
Pertama, buat ulang deployment di GKE agar cluster menggunakan setelan yang Anda konfigurasikan di Mengonfigurasi Cloud VPN:
Untuk menghapus cluster
mllp-adapter
yang Anda buat, jalankan perintahgcloud container clusters delete
. Masukkan nilai COMPUTE_ZONE yang Anda gunakan saat membuat cluster.gcloud container clusters delete mllp-adapter --zone=COMPUTE_ZONE
Ikuti langkah-langkah dalam artikel Men-deploy adaptor MLLP ke Kubernetes Engine, tetapi saat Anda membuat cluster di GKE, tambahkan jaringan
cloud-vpn-network
dan subnetsubnet-us-central-10-0-1
yang Anda buat saat Membuat jaringan dan subnet VPN kustom.Pastikan perintah pembuatan cluster terlihat seperti berikut:
gcloud container clusters create mllp-adapter \ --zone=COMPUTE_ZONE \ --service-account=CLIENT_EMAIL \ --network=cloud-vpn-network \ --subnetwork=subnet-us-central-10-0-1
dengan:
COMPUTE_ZONE adalah zona tempat cluster Anda di-deploy. Saat mengonfigurasi Cloud VPN di bagian sebelumnya, Anda menyetel jaringan "sisi Google Cloud" untuk menggunakan
us-central1
. Jaringan "sisi Google Cloud" ini adalah tempat cluster GKE berjalan. Gunakan salah satu zona berikut dius-central1
:us-central1-c
,us-central1-a
,us-central1-f
,us-central1-b
.CLIENT_EMAIL adalah ID untuk akun layanan. Anda dapat menemukannya di file kunci akun layanan di kolom
"client_email":
. Menggunakan format SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com.
Membuat VM Compute Engine baru dengan setelan jaringan
Langkah-langkah berikut menunjukkan cara membuat instance virtual machine Linux di Compute Engine menggunakan Konsol Google Cloud. Tidak seperti VM Compute Engine yang Anda buat, VM ini menggunakan setelan jaringan "sisi "lokal" untuk berkomunikasi dengan cluster GKE melalui VPN.
Konsol
Di Konsol Google Cloud, buka halaman VM Instances.
Klik Create instance.
Pilih Region dan Zone untuk instance yang cocok dengan setelan jaringan "'on- mengirimkannya':
europe-west1 (Belgium)
untuk Region daneurope-west1-b
untuk Zone.Di bagian Boot disk, klik Change untuk mulai mengonfigurasi boot disk Anda.
Pada tab Public images, pilih versi 9 dari sistem operasi Debian.
Klik Pilih.
Di bagian Identity and API access, pilih akun layanan yang Anda buat.
Di bagian Firewall, pilih Allow HTTP traffic.
Luaskan bagian Management, security, disks, networking, sole tenancy.
Di bagian Network interfaces di tab Networking, tentukan detail jaringan untuk setelan jaringan "sisi lokal":
- Di kolom Network, pilih on-prem-vpn-network.
- Di kolom Subnetwork, pilih subnet-europe-west-10-0-2 (10.0.2.0/24).
Klik Create untuk membuat instance.
Tunggu hingga instance memulai. Jika sudah siap, instance tersebut akan tercantum di halaman VM Instances dengan ikon status hijau.
gcloud
Untuk membuat instance komputasi, jalankan metode gcloud compute instances create
dengan opsi berikut:
- ZONE yang cocok dengan setelan jaringan
"sisi lokal'":
europe-west1-b
untuk Zona. - Izinkan traffic HTTP dengan menentukan tag
http-server
- SERVICE_ACCOUNT yang Anda buat
gcloud compute instances create COMPUTE_NAME \ --project=PROJECT_ID --zone=ZONE --image-family=debian-9 \ --tags=http-server,https-server --service-account=SERVICE_ACCOUNT
Output-nya mirip dengan contoh berikut:
Created [https://www.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/COMPUTE_NAME]. NAME ZONE MACHINE_TYPE PREEMPTIBLE INTERNAL_IP EXTERNAL_IP STATUS COMPUTE_NAME ZONE n1-standard-1 INTERNAL_IP EXTERNAL_IP RUNNING
Untuk terhubung ke instance, selesaikan langkah-langkah berikut:
Konsol
Di Konsol Google Cloud, buka halaman VM Instances.
Dalam daftar instance virtual machine, klik SSH di baris instance yang dibuat.
gcloud
Untuk terhubung ke instance, jalankan
perintah gcloud compute ssh
:
gcloud compute ssh INSTANCE_NAME \ --project PROJECT_ID \ --zone ZONE
Anda sekarang memiliki jendela terminal untuk berinteraksi dengan instance Linux.
Di jendela terminal, instal Netcat:
sudo apt install netcat
Download file
hl7v2-mllp-sample.txt
dan simpan ke instance.Untuk mulai mengirim pesan HL7v2 melalui adaptor MLLP ke penyimpanan HL7v2, di direktori tempat Anda mendownload file, jalankan perintah berikut. Gunakan nilai
LoadBalancer Ingress
yang ditampilkan saat Anda memeriksa Layanan.echo -n -e "\x0b$(cat hl7v2-mllp-sample.txt)\x1c\x0d" | nc LOAD_BALANCER_INGRESS_IP_ADDRESS 2575
Setelah menjalankan perintah, pesan akan dikirim melalui adaptor MLLP ke penyimpanan HL7v2 Anda. Jika pesan berhasil diserap ke penyimpanan HL7v2, perintah akan menampilkan output berikut:
MSA|AA|20150503223000|ILITY|FROM_APP|FROM_FACILITY|20190312162410||ACK|f4c59243-19c2-4373-bea0-39c1b2ba616b|P|2.5
Output ini menunjukkan bahwa penyimpanan HL7v2 merespons dengan jenis respons
AA
(Application Accept
), yang berarti pesan telah divalidasi dan berhasil diserap.Untuk melihat pesan yang dipublikasikan ke topik Pub/Sub, jalankan perintah
gcloud pubsub subscriptions pull
:gcloud pubsub subscriptions pull --auto-ack PUBSUB_SUBSCRIPTION
Perintah ini menampilkan output berikut tentang pesan HL7v2 yang diserap:
┌-----------------------------------------------------------------------------------------------------------------|-----------------|---------------┐ | DATA | MESSAGE_ID | ATTRIBUTES | ├-----------------------------------------------------------------------------------------------------------------|-----------------|---------------| | projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/HL7V2_MESSAGE_ID | 123456789012345 | msgType=ADT | └-----------------------------------------------------------------------------------------------------------------|-----------------|---------------┘
Anda juga dapat mencantumkan pesan di penyimpanan HL7v2 untuk melihat apakah pesan telah ditambahkan:
curl
curl -X GET \ -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \ -H "Content-Type: application/json; charset=utf-8" \ "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages"
Jika permintaan berhasil, server akan menampilkan ID pesan di jalur resource:
{ "hl7V2Messages": [ { "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID" } ] }
PowerShell
$cred = gcloud auth application-default print-access-token $headers = @{ Authorization = "Bearer $cred" } Invoke-WebRequest ` -Method Get ` -Headers $headers ` -ContentType: "application/json; charset=utf-8" ` -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages" | Select-Object -Expand Content
Jika permintaan berhasil, server akan menampilkan ID pesan di jalur resource:
{ "hl7V2Messages": [ { "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/hl7V2Stores/HL7V2_STORE_ID/messages/MESSAGE_ID" } ] }
Setelah menyelesaikan bagian ini, Anda telah berhasil men-deploy adaptor MLLP ke GKE dan, melalui VPN, dengan aman mengirim pesan HL7v2 dari instance "lokal" melalui adaptor dan ke Cloud Healthcare API.
Pembersihan
Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, Anda dapat membersihkan resource yang dibuat di Google Cloud.
Menghapus project
Ikuti langkah-langkah di bawah ini untuk menghapus project yang Anda buat dalam tutorial ini:
- Di konsol Google Cloud, buka halaman Manage resource.
- Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Pemecahan masalah
Kegagalan adaptor
Setelah men-deploy adaptor MLLP ke GKE, adaptor akan mengalami kegagalan.
- Ikuti langkah-langkah di Memecahkan masalah terkait workload yang di-deploy.
Connection refused
error saat dijalankan secara lokal
Saat menguji adaptor MLLP secara lokal, Anda
mengalami error Connection refused
.
Kesalahan ini terjadi pada beberapa pengguna Mac OS. Gunakan
-p 2575:2575
, bukan menggunakan flag--network=host
. Selain itu, tetapkan--receiver_ip=0.0.0.0
, bukan menyetel--receiver_ip=127.0.0.0
. Perintahnya akan terlihat seperti ini:docker run \ -p 2575:2575 \ gcr.io/cloud-healthcare-containers/mllp-adapter \ /usr/mllp_adapter/mllp_adapter \ --hl7_v2_project_id=PROJECT_ID \ --hl7_v2_location_id=LOCATION \ --hl7_v2_dataset_id=DATASET_ID \ --hl7_v2_store_id=HL7V2_STORE_ID \ --export_stats=false \ --receiver_ip=0.0.0.0 \ --pubsub_project_id=PROJECT_ID \ --pubsub_subscription=PUBSUB_SUBSCRIPTION \ --api_addr_prefix=https://healthcare.googleapis.com:443/v1 \ --logtostderr
could not find default credentials
error saat dijalankan secara lokal
Saat menguji adaptor MLLP secara lokal, Anda
mengalami error healthapiclient.NewHL7V2Client: oauth2google.DefaultTokenSource: google: could not find default credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.
.
Error ini terjadi ketika adaptor tidak dapat menemukan kredensial Google Cloud Anda. Untuk memperbaiki error ini, coba salah satu metode berikut sebelum menjalankan kembali perintah:
- Ikuti petunjuk di bagian Menyiapkan autentikasi untuk aplikasi produksi server ke server untuk mengonfirmasi bahwa adaptor dapat menemukan kredensial Google Cloud Anda.
- Instal dan inisialisasi Google Cloud CLI untuk mengakses gcloud CLI. Pastikan Anda memberi otorisasi gcloud CLI di mesin tempat Anda menguji adaptor secara lokal.
Error autentikasi
Jika Anda mengalami error autentikasi saat menguji adaptor MLLP secara lokal yang tidak dibahas di bagian selanjutnya, jalankan kembali perintah docker run
lalu tambahkan flag -v ~/.config:/root/.config
ke akhir perintah, seperti ini:
docker run \
-v ~/.config:/root/.config \
...