[レポート] オープンソースを使用してモノリシックアプリケーションを再構築する #OPN210 #reinvent

2019.12.27

本記事は、AWS re:Invent 2019 の「OPN210 - Using open source to re-architect monolithic applications」についてレポートします。

セッション情報

スピーカー

  • Vadzim Dabravolski - Sr Customer Solutions Manager, Amazon Web Services
  • Alan Prestwich - Senior Software Developer, Verizon

セッション概要

Learn how the Verizon Operations Automation team was able to take a monolithic .NET, SSRS, and SQL Server application and re-deploy it in AWS utilizing only open source solutions. To comply with data governance and SOX compliance requirements, the application was re-architected to include only the reporting modules, optimized for AWS, and moved to CentOS EC2 and Amazon RDS MySQL. Required .NET code was kept in-tact, stored procedures updated, schemas converted with AWS Schema Conversion Tool, data was migrated, and 19 on-premise servers were migrated to single EC2 and RDS instances with Auto-scaling Groups.

Verizon Operations Automationチームがどのようにモノリシックな.NET、SSRS、およびSQL Serverアプリケーションを取得し、オープンソースソリューションのみを利用してAWSに再デプロイできたかをご覧ください。 データガバナンスとSOXコンプライアンス要件に準拠するために、アプリケーションは、AWS用に最適化されたレポートモジュールのみを含むように再設計され、CentOS EC2およびAmazon RDS MySQLに移行されました。 必要な.NETコードはそのまま保持され、ストアドプロシージャが更新され、AWS Schema Conversion Toolでスキーマが変換され、データが移行され、19台のオンプレミスサーバーが自動スケーリンググループを使用して単一のEC2およびRDSインスタンスに移行されました。

レポート

アジェンダ

  • AWSがオープンソースへの顧客の移行を容易にする方法
  • モノリシックな専用アプリケーションを分解するためのベライゾンのアプローチ
  • verizonがオープンソースとAWSクラウドに移行する方法
  • 質疑応答

鍵となるマイルストーン

AWSがオープンソースへの移行をどのようにサポートするか

by proving open source as a service

AWSが提供しているマネージドサービスで置き換えることができる。

オープンソースプロジェクトへの貢献

変換と移行を簡素化するツールを提供

  • オープンソースに移行するツールを提供
  • Linuxを使用してライセンスを節約

Verizonでのユースケース

課題

  • 高価でレガシーな商用およびモノリシックアプリケーションから、より柔軟で費用対効果の高いソリューションに移行する必要

ユースケース

  • ワークロードをマイクロサービスアーキテクチャにリファクタリング
  • オープンソースソフトウェアを活用
  • AWSクラウドへの移行

分解するか迂回するか

  • モノリシックを分解する
    • どこでモノリシックを分解できるか?
    • アプリケーションの一部のみをリエンジニアリングするか?
    • 既存のコードを使用してマイクロサービスまたはREST APIを作成し、作業を削減する
  • モノリシックを迂回する
    • モノリシックアーキテクチャを分解するためのアプリケーションのリエンジニアリング
    • Mode-View-Controller (MVC)
    • Microservices, REST API
    • 部品を再利用できるか?

アプリケーションの将来を決定する

  • アクティブな開発サイクルを使用したアプリケーション
    • 時間の経過とともに大きなリターンを伴う高い労力
  • 静的長期アプリケーション
    • 変更の数を減らしたい
  • アプリケーションの廃止
    • より大きな変更、しかし労力は少ない

課題を特定する

  • 互換性の問題
    • ASP.NET on Linux
    • データベースの違い
    • 独自ソフトウェア x != オープンソース y
  • 密結合アプリケーション
  • サポートされていないプラットフォーム
  • 専門家がいない
  • 長年の修正による非構造化コード
  • 未知のこと

Verisonでの移行経験

アプリケーションのオープンソースへの移行

  • Verison Change Online Product (VCOP)
    • 分解および再構築(モノリスを解体)
    • 7年間のデータおよびアプリケーションの機能強化
    • 廃止。履歴データにアクセスする必要がある
  • 可用性メトリックとレポートアプリケーション(Amara)
    • ビューを再設計し、バックエンド処理を維持(モノリスを迂回)
    • エンタープライズメトリックとレポート

移行

データベース

オンプレミスからRDS MySQLへ移行

コンピュート

EC2(CentOS)をオートスケーリングで構築し移行

アプリケーション

  • ASP.NET と C#はApacheとMonoモジュールに移行
  • AmaraはWildFly、ReactとJava Restfulサービスに移行

データベースマイグレーション

スキーマコンバージョン

AWS Schema Conversion Tool

  • ソースデータベースをターゲットデータベースに自動的に変換
    • スキーマ、ビュー、ストアド・プロシージャ、ファンクション
    • オンプレミスデータベースは Amazon RDS
  • AWS SCTは、アプリケーションコードのSQLも変換
  • AWS Workload Qualification Framework (AWS WQF)
    • データベースの移行を計画

AWS MDS migration playbooks

Microsoft SQL Server to Amazon Aurora with MySQL Compatibility 456-page guide

  • 移行に関しての巨大なガイド
  • 自動化のレベルや必要な手作業がわかる

直面したスキーマ変換の課題

  • 155テーブル、37ビュー
  • クエリのテーブル名の大文字と小文字 (Windows to Linux)
    • "SELECT * FROM USERS" vs "SELECT * FROM users"
    • MySQLを使用する場合のWindowsからLinux

VCOP ストアドプロシージャの課題

  • 必要な手順を特定する
  • フォーマットの問題
    • たとえば、プロシージャの途中にある「DECLARE」ステートメント
  • 多くは1000行、いくつかは10000行以上
  • 数百のプロシージャを22のストアドプロシージャと50の関数に削減
  • パフォーマンスを向上させるために書き直し
    • 1分以上から1秒未満まで

アプリケーションの移行

VCOP

  • ほとんどのコードは使用されていなかった
    • 検索コードと完全なレコード表示を維持する分割と征服
    • 単一の検索ページを書く
  • 19台のオンプレミスサーバーから4つのAmazon EC2インスタンス
  • Apacheウェブサーバ
    • ASP.NETを提供するApache用のMonoモジュール
    • サービスまたはスケジュールされたタスクを実行するMono
  • Amazon Linux 2 AMI with .NET Core
    • The Amazon Linux 2 AMI with .NET Core includes Mono
    • Mono 5.18, .NET Framework 4.7.2 (.NET Core 2.2)

Amara

  • ビューの再構築
    • React と Java JAX-RS (Java API for RESTful Web Services)
  • バックエンドのデータ収集をオンプレミスLinuxに移動
  • WildFly アプリケーションサーバ
  • 15のオンプレミスサーバーから4つのAmazon EC2および2つの共有オンプレミスサーバ

発生した問題

  • コード内のパス (Windows "\" vs Linux "/" )
    • System.IO.Path.DirectorySeparatorChar(C#)
    • java.io.File.pathSeparator (Java)
  • ファイルと大文字と小文字の区別
    • コードの大文字と小文字を修正

さいごに

WindowsからLinuxへの移行、データベースの移行について実体験に基づく内容のセッションでした。ライセンス費用の削減、オープンソースへの移行をお考えの方には参考になるのではないでしょうか。