🔖

Code for Japanの遠隔療養者モニタリングシステムをAWSにデプロイしてみた

2021/05/08に公開2

背景

Code for Japanの方々がCOVID-19の遠隔療養者向けのシステムを構築しているらしく、以下のようなツイート見かけました。

https://twitter.com/tweeting_drtaka/status/1385123001662808066

ということで、AWSの知識をつけるのも兼ねて、実際にAPIとダッシュボード・クライアントのウェブアプリをそれぞれAWSにデプロイしてみましたという体験記です。
なお、ソースコードや内部構造はちゃんと追っていないので間違っていることを書いてあるかもしれません

また、とりあえず見た目は動いたのですが、以下の点をどうするのかがまだわかっていません

  • ダッシュボードで発行されたログインURLでログインできない
  • SMSを送信するための設定がわからない

特に1つ目の点が致命的で、これができない以上、新規に患者を登録できないので、この手順に従っても保健所の人には使ってもらうようなものにはなれないです。
それでもとりあえずこの記事を書いたのは、制作者への質問という意味と、現状誰もこのモニタリングシステムをデプロイしてみたという記事を書いている人が見当たらなかったためです。

構成

この遠隔療養者モニタリングシステムは3つのレポジトリから構成されています

APIのデプロイ

まずはremote-patient-monitoring-apiのデプロイから始めます。
これは付属しているdocs/DEVELOPMENT.mdを読めばなんとかなります。

一応、自分がハマった点だけ補足しておきます。

AWSの初期設定

AWSのリソースをコマンドライン上から操作するための設定を行う必要があります。
aws configureコマンドで要求されるアクセスキーIDとシークレットアクセスキーは公式のドキュメントを参照しながらつくりましょう。
リージョン名はap-northeast-1(東京)を指定する必要があります。他のリージョンを使ったらその後のステップがうまくいきませんでした。

https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-quickstart.html#cli-configure-quickstart-creds

configについて

config/dev.json以外にもconfig/stg.jsonconfig/prd.jsonも存在しないとデプロイ時に怒られます。
内容はconfig/stg.json.sampleと同一で構わないのでとりあえずつくりましょう

Swagger UIでのテスト

筆者のLinux環境だと、npm run openSwaggerUIで使われるシェルスクリプトが動作しませんでした。
こちらについてはすでにIssueとPRを立てました

https://github.com/codeforjapan/remote-patient-monitoring-api/issues/143

ダッシュボード・患者用アプリのデプロイ

ダッシュボードはNuxt.jsを使ったアプリで患者用アプリはVue CLIを使ったアプリなので、AWS Amplifyを使ってデプロイします。

Nuxtの公式のドキュメントが参考になります。ダッシュボードアプリのデプロイには患者用アプリのURLを知る必要があるので、患者用アプリから先にデプロイするといいでしょう

https://ja.nuxtjs.org/docs/2.x/deployment/deployment-amazon-web-services/

手順としては以下の通りです。

  1. レポジトリをフォークする
  2. 必要があれば内容を変更して別ブランチにプッシュする
  3. Amplify Consoleから"Host your web app"の"Get Started"ボタンをクリック
  4. "From your existing code"より、Githubを選択して"Continue"をクリック
  5. Githubの認証を許可する
  6. 「リポジトリ」セクションで先程フォークしたレポジトリとブランチ(特に変更することがないのなら"main")を選択して次へ
  7. 「ビルドの設定」でyamlファイルを編集
    • ダッシュボードはビルドコマンドがyarn run buildではなくyarn generateなので書き換える必要がある
  8. "Advanced Setting"で環境変数を追加してAPIと患者用アプリのURLを設定する
    • 患者用アプリではVUE_APP_API_URLにAPIのURLを/api/patient/まで含めて設定する。
    • ダッシュボードアプリではAPI_URLにAPIのURLを/api/nurseまで含めて設定し、CLIENT_URLに患者用アプリのURLを設定する
  9. 「次へ」を押して「確認」のページで正しく設定されていることを確認したら「保存してデプロイ」を押す

動作確認

最初に書いたとおり、患者の登録がうまくいかなかったので、APIのレポジトリのnpm run test:e2eで出てきたテストアカウントを使って動作確認しました。
ユーザーIDとパスワードを使うログインはうまくいきましたが、ログインURLを利用したものはうまくいきませんでした。
ログインした後の動作として健康状態の記録とダッシュボードからそれが確認できることは確かめました。

また、現状アドミン用のウェブUIが実装されていないっぽいので、保健所の追加やダッシュボード用のアカウントの追加はUI経由ではできず、APIを直に触る必要がありそうです。

Discussion

Hal SekiHal Seki

ありがとうございます!確かに、

SMSを送信するための設定がわからない

というのは問題ですよね。北海道で使っているサービスが有料なのでこうなっていますが、設定していなければSMS送信をスキップする処理を入れたいと思います。

ダッシュボードで発行されたログインURLでログインできない

というのはちょっと謎です。Slackの方で詳細伺いますね。

ガラスボーガラスボー

SMSを送信する設定がない場合、UI上でSMSを送信する機能が隠れてはいないがとりあえず他の機能は動作する、という状態なので、開発目的なら大きな問題にはなりません。しかし、このプロジェクトを外部の業者に委託して運営するといった場合は問題になるかと思います。

ダッシュボードのログインURL問題は下のGithubのIssueにて解決されました
https://github.com/codeforjapan/remote-patient-monitoring-client/issues/176