Code for Japanの遠隔療養者モニタリングシステムをAWSにデプロイしてみた
背景
Code for Japanの方々がCOVID-19の遠隔療養者向けのシステムを構築しているらしく、以下のようなツイート見かけました。
ということで、AWSの知識をつけるのも兼ねて、実際にAPIとダッシュボード・クライアントのウェブアプリをそれぞれAWSにデプロイしてみましたという体験記です。
なお、ソースコードや内部構造はちゃんと追っていないので間違っていることを書いてあるかもしれません
また、とりあえず見た目は動いたのですが、以下の点をどうするのかがまだわかっていません
- ダッシュボードで発行されたログインURLでログインできない
- SMSを送信するための設定がわからない
特に1つ目の点が致命的で、これができない以上、新規に患者を登録できないので、この手順に従っても保健所の人には使ってもらうようなものにはなれないです。
それでもとりあえずこの記事を書いたのは、制作者への質問という意味と、現状誰もこのモニタリングシステムをデプロイしてみたという記事を書いている人が見当たらなかったためです。
構成
この遠隔療養者モニタリングシステムは3つのレポジトリから構成されています
- remote-patient-monitoring-api: システムのバックエンドAPIを提供する
- remote-patient-monitoring-client: 患者が自分の体調を記録するためのウェブアプリ
- remote-patient-monitoring-dashboard: 保健所が患者の様子をモニタリングするためのウェブアプリ
APIのデプロイ
まずはremote-patient-monitoring-api
のデプロイから始めます。
これは付属しているdocs/DEVELOPMENT.md
を読めばなんとかなります。
一応、自分がハマった点だけ補足しておきます。
AWSの初期設定
AWSのリソースをコマンドライン上から操作するための設定を行う必要があります。
aws configure
コマンドで要求されるアクセスキーIDとシークレットアクセスキーは公式のドキュメントを参照しながらつくりましょう。
リージョン名はap-northeast-1
(東京)を指定する必要があります。他のリージョンを使ったらその後のステップがうまくいきませんでした。
configについて
config/dev.json
以外にもconfig/stg.json
とconfig/prd.json
も存在しないとデプロイ時に怒られます。
内容はconfig/stg.json.sample
と同一で構わないのでとりあえずつくりましょう
Swagger UIでのテスト
筆者のLinux環境だと、npm run openSwaggerUI
で使われるシェルスクリプトが動作しませんでした。
こちらについてはすでにIssueとPRを立てました
ダッシュボード・患者用アプリのデプロイ
ダッシュボードはNuxt.jsを使ったアプリで患者用アプリはVue CLIを使ったアプリなので、AWS Amplifyを使ってデプロイします。
Nuxtの公式のドキュメントが参考になります。ダッシュボードアプリのデプロイには患者用アプリのURLを知る必要があるので、患者用アプリから先にデプロイするといいでしょう
手順としては以下の通りです。
- レポジトリをフォークする
- 必要があれば内容を変更して別ブランチにプッシュする
- Amplify Consoleから"Host your web app"の"Get Started"ボタンをクリック
- "From your existing code"より、Githubを選択して"Continue"をクリック
- Githubの認証を許可する
- 「リポジトリ」セクションで先程フォークしたレポジトリとブランチ(特に変更することがないのなら"main")を選択して次へ
- 「ビルドの設定」でyamlファイルを編集
- ダッシュボードはビルドコマンドが
yarn run build
ではなくyarn generate
なので書き換える必要がある
- ダッシュボードはビルドコマンドが
- "Advanced Setting"で環境変数を追加してAPIと患者用アプリのURLを設定する
- 患者用アプリでは
VUE_APP_API_URL
にAPIのURLを/api/patient/
まで含めて設定する。 - ダッシュボードアプリでは
API_URL
にAPIのURLを/api/nurse
まで含めて設定し、CLIENT_URL
に患者用アプリのURLを設定する
- 患者用アプリでは
- 「次へ」を押して「確認」のページで正しく設定されていることを確認したら「保存してデプロイ」を押す
動作確認
最初に書いたとおり、患者の登録がうまくいかなかったので、APIのレポジトリのnpm run test:e2e
で出てきたテストアカウントを使って動作確認しました。
ユーザーIDとパスワードを使うログインはうまくいきましたが、ログインURLを利用したものはうまくいきませんでした。
ログインした後の動作として健康状態の記録とダッシュボードからそれが確認できることは確かめました。
また、現状アドミン用のウェブUIが実装されていないっぽいので、保健所の追加やダッシュボード用のアカウントの追加はUI経由ではできず、APIを直に触る必要がありそうです。
Discussion
ありがとうございます!確かに、
というのは問題ですよね。北海道で使っているサービスが有料なのでこうなっていますが、設定していなければSMS送信をスキップする処理を入れたいと思います。
というのはちょっと謎です。Slackの方で詳細伺いますね。
SMSを送信する設定がない場合、UI上でSMSを送信する機能が隠れてはいないがとりあえず他の機能は動作する、という状態なので、開発目的なら大きな問題にはなりません。しかし、このプロジェクトを外部の業者に委託して運営するといった場合は問題になるかと思います。
ダッシュボードのログインURL問題は下のGithubのIssueにて解決されました