Slide 1

Slide 1 text

ヘルスケアサービスにおける EC2⇒ECSへの転換とDevOpsの推進 Takahiro Kida

Slide 2

Slide 2 text

自己紹介 ● 木田 貴大 (Takahiro Kida) ● DeNA ヘルスケア事業本部 ● サーバーサイドエンジニア ○ 主にヘルスケアサービス kencom の機能開発〜運用・保守

Slide 3

Slide 3 text

本日お話しすること 1. ヘルスケアサービス kencom のご紹介 2. クラウド移行とその後の課題 3. 改善に向けた取り組み 4. まとめ

Slide 4

Slide 4 text

1. ヘルスケアサービス kencom のご紹介

Slide 5

Slide 5 text

ヘルスケアエンターテイメントアプリ kencom ● 健康意識レベルに関わらず幅広い層を対象とするヘルスケアエンターテイメントアプリ ● 健康保険組合・地方自治体など、合計約130団体、約400万人以上に提供 ● 自動連携された健康診断結果や処方された薬の履歴を kencom で閲覧することができる

Slide 6

Slide 6 text

サービス紹介:ヘルスケア機能 健康状態に応じた 最新健康情報の レコメンデーション 薬の処方履歴 健康診断結果の閲覧 ライフログ

Slide 7

Slide 7 text

サービス紹介:エンターテインメント機能 みんなで歩活 チームや個人で歩数を競うイベント エアモ ペット育成ゲーム

Slide 8

Slide 8 text

2. クラウド移行とその後の取り組み

Slide 9

Slide 9 text

● 2020年春にオンプレからクラウドに移行 ● オンプレでの構成のまま AWS に移行した、所謂クラウドリフト kencom のクラウド移行 ⇨ 旧環境(オンプレミス) ● 物理ネットワーク / ファイアウォール ● 物理サーバー + 仮想マシン ● 内製ツールによる構成管理 ● DBやメールサーバー等も自前で構築・運用 新環境(AWS) ● VPC / SG ● EC2 ● 内製ツールによる構成管理 ● DBやメールサーバー等も自前で構築・運用

Slide 10

Slide 10 text

インフラ環境の変更に対してスピーディな対応ができない ● 環境変数の追加に数日 ● イベントでのリソース変更に数週間 クラウド移行後の課題

Slide 11

Slide 11 text

● 運用負荷が高く、改善活動に工数を割くことができていない ○ DB / メールサーバーなど自前でコンポーネントを運用 ○ 障害時の復旧対応 ● クラウドのメリットをほとんど享受できていない ○ マネージドサービスによる運用の委譲 ○ 柔軟なスケーラビリティ ○ アジリティの向上 クラウド移行後の課題

Slide 12

Slide 12 text

3. 改善に向けた取り組み

Slide 13

Slide 13 text

開発チームの方針を転換 ● 開発チームもインフラの運用をする ○ インフラチームに全てお任せにしない ○ 開発で出来ることは開発でやることでスピード感を上げる ● 一気にリプレイスせずに徐々に改善していく ○ スモールスタートしてチームにノウハウを蓄える ○ 失敗しても元に戻せば良いという精神 ● マネージドサービスを積極的に使う ○ マネージドサービスファーストで考える。 ○ 自分たちで頑張らない ○ 運用負荷を減らして改善活動に当てる

Slide 14

Slide 14 text

そんな中で kencom で新たなサービスが作られることに ● 各サービスから横断的にデータを持ってきてレポート集計するサービス ○ 比較的軽めのバッチ機能 ○ 運用で対応していたレポート作成を自動化 ○ 個人情報を扱うためセキュリティ要件は高い ● 既存のバッチサーバー上で稼働することを検討

Slide 15

Slide 15 text

既存の EC2 からの移行も見据えたリアーキテクチャによる新基盤の構築を決意 スモールスタートする良い機会では...?

Slide 16

Slide 16 text

● スケーラブルでアジリティの高いシステム ● 開発チームでも運用可能にする ● ヘルスケアならではの高いセキュリティの担保 目指すべき姿

Slide 17

Slide 17 text

● アプリケーション実行基盤 ○ ECS on Fargate ● ジョブ管理 ○ ECS Scheduled Task ● CI/CD ○ GitHub + CircleCI ● ログ基盤 ○ FireLens ○ CloudWatch Logs ○ S3 ● 監視・通知 ○ Subscription Filter ○ EventBridge ○ SNS / Lambda アーキテクチャ概要

Slide 18

Slide 18 text

スケーラブルでアジリティの高いシステム EC2 ではなく ECS on Fargate を採用 ● アプリケーションはコンテナ化 ○ 開発でアプリケーション実行環境を管理 ○ 環境構築が不要 ● コンテナオーケストレーションの活用 ○ スケーラビリティの確保 ○ デプロイの容易性 ● データプレーンに Fargate を採用 ○ サーバーインスタンス管理から解放 ○ 必要な時に必要なリソースを確保するのため、バッチ処理との相性も◎ ● ECS Scheduled Task によるタスクの定期実行が可能

Slide 19

Slide 19 text

スケーラブルでアジリティの高いシステム ECS Scheduled Task の活用 ● cron ライクな記述で管理 ○ 設定ファイルが json でやや扱いにくい ● 管理ツール ecschedule ○ ECS Scheduled Task を管理する OSS ツール ○ yaml による記述で設定をコード化 ■ 開発者でも分かりやすい記述が可能に ■ cron ライクな実行時間 ■ タスク定義でのコンテナ設定を上書き ● 実行コマンド ● 環境変数

Slide 20

Slide 20 text

スケーラブルでアジリティの高いシステム アプリケーションリポジトリで インフラコードを管理・変更 ● インフラコードの管理 ○ Dockerfile ■ OSミドルウェア管理 ○ ECS タスク定義 ■ Secrets 管理 ■ CPU/メモリのリソース管理 ○ Scheduled Task 定義(ecschedule yaml) ■ cron 設定 ■ 環境変数 ● 変更作業 ○ CI/CD を通じて変更 ○ コード修正 & PRレビュー ○ 特定のブランチに Push でデプロイ

Slide 21

Slide 21 text

スケーラブルでアジリティの高いシステム スピーディな対応が可能に ● 数十分でインフラリソースの変更が可能

Slide 22

Slide 22 text

開発チームでも運用可能に 新しい仕組みを試しながら、いつでも戻れる状態に ● FireLens ○ ECS で利用可能なログルーター ○ 柔軟なログ転送が可能 ○ 複数の転送先を設定可能 ● ログの転送先 ○ CloudWatch Logs ■ フルマネージドなログサービス ■ ログの蓄積・検索・閲覧 ● S3 ○ ストレージサービス ○ 暗号化 ○ ログの長期保管 ○ ライフサイクル管理

Slide 23

Slide 23 text

開発チームでも運用可能に マネージドサービスを活用して実装 開発だけで設定可能に ● タスクの異常終了の検知 ○ EventBridge ■ ECS タスクの異常終了イベントを検知 ○ SNS ■ イベント内容をメール送信 ● ログ監視 ○ CloudWatch Logs Subscription Filter ■ 特定のパターンのログを検知 ■ 検知したログを lambda に転送 ○ lambda ■ Slack 通知

Slide 24

Slide 24 text

開発チームでも運用可能に 運用コストの低い基盤の構築して、小さく運用を始めることができた ● マネージドサービスを活用して、極力運用の少ない基盤を構築した ● 運用を極力無くすことで、改善に時間を割くことができる状態へ ● 小さく運用を始めることで、無理なく運用ノウハウを溜めていく ● 徐々に旧基盤から新基盤へ移行して、運用を巻き取っていく

Slide 25

Slide 25 text

高いセキュリティの担保 ヘルスケアで求められるセキュリティ要件はさまざま ● アプリケーション実行環境 ○ サーバーへのアクセス管理 ○ OS / ミドルウェアバージョンの最新化 ○ ユーザーアカウントの管理 ● ネットワーク ○ 本番ネットワークへのアクセス制限 ○ インターネットからのアクセス制限 ● 権限管理 ○ 最低限の権限のみを付与 ○ アクセスキーの管理 ● データ保護 ○ 暗号化 ○ 鍵管理 ○ Secretsの管理 ● 監査 ○ 操作ログの取得 ○ ネットワーク関連ログの取得

Slide 26

Slide 26 text

Amazon ECS on Fargate 責任共有モデルを理解 守るべき場所を把握して、しっかりと守る ● クラスタやサーバーインスタンスのセキュリティ ○ AWS が担保 ● コンテナ、IAM、ネットワーク、データ保護 ○ 自身で管理 ■ AWS サービスをフル活用して対応 引用元:https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/bestpracticesguide/security-shared.html 高いセキュリティの担保

Slide 27

Slide 27 text

高いセキュリティの担保 うまく AWS サービスを活用して適切にセキュリティを担保 ● アプリケーション実行環境 ○ サーバーへのアクセス管理 ○ OS / ミドルウェアバージョンの最新化 ○ ユーザーアカウントの管理 ● ネットワーク ○ 本番ネットワークへのアクセス制限 ○ インターネットからのアクセス制限 ● 権限管理 ○ 最低限の権限のみを付与 ○ アクセスキーの管理 ● データ保護 ○ 暗号化 ○ 鍵管理 ○ Secretsの管理 ● 監査 ○ 操作ログの取得 ○ ネットワーク関連ログの取得

Slide 28

Slide 28 text

● データ保護 ○ データの暗号化 ■ S3 SSE-KMS ○ 鍵管理 ■ KMS ○ Secrets 管理 ■ AWS Secrets Manager ● 監査 ○ 操作ログの取得 ■ CloudTrail ○ ネットワーク関連ログの取得 ■ VPC flow logs うまく AWS サービスを活用して適切にセキュリティを担保 ● アプリケーション実行環境 ○ コンテナの保護 ■ ECR イメージスキャン ■ ライフサイクルポリシー(古いイメージの削除) ● ネットワーク ○ VPC ネットワークの制限 ■ AWS Private Link ■ Security Group ● 権限管理 ○ IAM ポリシー / ロールの適切な設定 ■ ECS Task の権限 / 実行権限 ■ 各 AWS リソースへのアクセス権限 ■ ソース IP による制限 高いセキュリティの担保

Slide 29

Slide 29 text

4. まとめ

Slide 30

Slide 30 text

開発チームの方針転換 (再掲) ● 開発チームもインフラの運用をする ○ インフラチームに全てお任せにしない ○ 開発で出来ることは開発でやることでスピード感を上げる ● 一気にリプレイスせずに徐々に改善していく ○ スモールスタートしてチームにノウハウを蓄える ○ 失敗しても元に戻せば良いという精神 ● マネージドサービスを積極的に使う ○ マネージドサービスファーストで考える。 ○ 自分たちで頑張らない ○ 運用負荷を減らして改善活動に当てる

Slide 31

Slide 31 text

目指すべき姿 (再掲) ● スケーラブルでアジリティの高いシステム ○ ECS on Fargate を活用してスケーラビリティを確保した ○ 開発チームも運用することでアジリティを向上できた ● 開発チームでも運用可能にする ○ マネージドサービスを活用することで、運用コストを最小にする ○ スモールスタートして徐々に開発チームでも運用可能にする ● ヘルスケアならではの高いセキュリティの担保 ○ AWS との責任共有モデルを理解して、出来るだけ AWS に任せる ○ AWS サービスをうまく活用してセキュリティを担保する

Slide 32

Slide 32 text

● 開発チームも運用をしてみると、アジリティは向上する ○ 全てをインフラチーム任せにしない、インフラチームと協力した運用 ○ インフラチームには専門性の高いところに集中してもらう ○ 理解が深まり、改善について考えるようになる ● チーム内にクラウドシフトへの期待感が高まる ○ スモールスタートして成功体験することで、チーム内に期待感が生まれる ○ 新しい提案や導入がしやすくなる 最後に

Slide 33

Slide 33 text

ご清聴ありがとうございました。 Cloud Journey will be continued…