HONDAのAndroid アプリ, Web アプリ開発備忘録

このブログはHONDAがAndroidアプリの開発開始と同時に作成したもので備忘録として記しています。最近Web系に就職が決まったのでwebアプリも勉強していきます。

AWSマイグレーション事例祭りのレポート

はじめに

4/9(火)にAWSマイグレーション事例祭りに参加したので、そのレポートです(雑メモです

セッション

オープニング

  • この4月に四本のセミナーを企画
    • 今日のこれ
    • 11日にデータベースに関するもの
    • Amazon ConnectというサービスやSAP, VMwareセミナーを19日
    • 21日にWindowsに関するもの
  • 新機能の紹介
    • AWS Amazon Personalize:レコメンデーションをAPI化して提供
    • AWS Ground Station : 小型衛星や、企業の独自衛生からの信号処理を実現するサービス
    • Amazon Connect : コールセンターに関するもので、電話番号の取得からコールフローまでの作成が可能になり、顧客対応を容易にした
  • ドコモ・ヘルスケアの事例
    • 500万人以上のバイタルデータをもっており、予防したりしてた
    • センシティブな情報に関して、クラウドに預けるといった意思決定をしていただいた。
    • WebのコンソールからAPIを提供するだけでなく、どれくらいの経済的効果があるか見積もりを出したり、実際に価値を事前に理解していただいた上で導入を決めていただいた。
  • AWSの特徴:テクノロジーリソースがUtility化した
  • トライ・アンド・エラーを多く繰り返せることから、イノベーションの加速できたなどフィードバックをもらっている

グリー株式会社

  • 事業
    • スマホ向けのアプリ
    • ライブエンターテイメント事業(VTuberに特化したもの)
    • メディア事業
    • 広告事業など

→オンプレミス環境がその多くをしめている。

  • AWSをどうやっていこうした、ではなく背景・メリット・デメリット・失敗談等の話
  • 背景
    • 経営的背景
      • オンプレミスサーバーの老朽化・メンテナンスコスト(新しくサーバーをかい移行しないといけない等)が上昇するので削減したい
      • パブリッククラウドサービスの値下げ傾向がでてきた
      • オンプレだとサーバ増設や減らすことが容易にはできないが、パブリッククラウドだとそれが容易→サーバーリソースの効率的な利用に向けた柔軟性の訴求に対応
    • AWSと比較
      • サービス品質レベル
      • セキュリティ
      • システム柔軟性・負荷対策
      • 費用

この四点からAWSが優位だったため、この度導入を決めた。

  • 反対意見
    • オンプレを見越してコードを書いていたのに、AWSを導入したら書き直しが発生する
    • 社内ツール等の移行もある
  • AWS移行後の恩恵
    • 10以上のプロダクトを移行し、約40%のサーバー費用を削減(3000万/月の削減)
  • メリット
    • サーバーリソース管理と調達リードタイムの改善した。明日イベントあるからサーバー調達してみたいなこともオートスケール等で容易に対応できるようになった。
    • OSミドルウェアのバージョンアップやレガシーシステムの脱却できた(AWS移行時に求められるバージョン縛り等があるため)
    • オンプレミスだとスペックが足りないときはすぐ足せないが、AWSだとEC2のスケールアップを簡単にできたり、セキュリティも細かく設定できるといった点で拡張性が向上した
  • デメリット
    • 同一ホストに利用インスタンス乗ってる場合は、複数障害が起きてしまう可能性がある
    • クラウドサービスの性質上、インスタンス確保が難しい場合がある(事前にAWS担当に相談すれば大丈夫
    • プロダクトごとにAWSアカウントを分けると、ツールの設定等が一元管理できないなど
    • 予定されたイベントに伴う作業コストが発生

トレードオフの関係があるのが、今回はメリットのほうが良かった

  • 運用面での変化
    • GUIでの操作が増えたので、インフラ作業の敷居が低下
    • サーバー料金が月額従量制となったので、さらなるコスト削減が可能になった
    • 柔軟にサーバの増減ができるのでイベント前後のインフラ作業は増加した
    • RDB, ElasticCacheなどOSレイヤーレベルで運用しないサービスが増加したので良かった。
  • 良かった点
    • 計画をしてレビューをした。
    • 移行後の運用を見据えた事前準備ができた
      • 数年オンプレで使ってたし、内製ツールやモニタリングツールも使っていたが、AWS移行で使えなくなってしまうのを防ぐため準備期間を取れたのが良かった
    • プロジェクトのマネジメントや技術課題にたいして組織をくめたのがよかった
  • 反省点

    • テストパターン不足による不具合発生
    • 移行メンテナンス中にテストが実行できなかった(メンテ中でも機種によってはゲームできるようにしていたが、用意していなかったので、テストできなかった)
    • オンプレミス環境でさまざまなメーカのサーバを使っていたが、AWSインスタンスタイプにあてがってたが想定以上のものが来たときに対応できなかった
  • まとめ

  • 移行は成功だった
  • マニュアルやサポートもあってAWSがBESTだった
  • 経営と組織マネージメントとエンジニアの相互理解と協力が必須だった
  • 事前に考慮しておく
    • 負荷測定やトランザクションレイテンシーなどシステム特性を把握する必要がある
    • 一気に移行するのは難しかったので中長期的に移行するのが大事かと

CyberZ

  • 分析環境をAWSのAthenaにした振り返り
  • プロダクト概要
    • スマートフォン広告におけるマーケティング統合プラットフォームで、広告の効果を計測するツールでBtoBのもの
    • 具体的に、メディアやSNSの広告をクリックするとアプリに飛んでインストールして起動して課金するところまでをトラッキングするツール
  • ビックデータ環境の利用形態
    • データ収集→処理→分析/可視化のフローが一般的だと
データの収集(計測サーバーの通信をログに出力) →Hadoopでデータ集計→ウェブアプリケーション(自社開発)で可視化
  • 固定の集計軸システムはできる(ユーザ単位でどれだけ違うのかなど)が、軸を決めていないこと(任意軸システム)もしている(Prestoというオンプレ上に立っているものを使っている)。

  • 発表では任意軸システムの話におけるものを話す

    • 分析エンジニアがクエリを書いて結果をとって、顧客側にレポートを提供
    • クエリはtableau, redash(BI)を経由して、裏でprestoをが動いて返している。
    • prestoはビックデータを解析するクエリエンジン(Mysqlとは違うような形式)
    • 定期的に送付するシステムもある
  • この環境を動かす選択肢 
    1. S3上のデータを使えるか:Amazon Athena, EMRは可能
    2. クラスタの管理(とてもしんどい)が不要かどうか:AthenaとBigQueryは可能
    3. prestoのクエリは移行後でも同じような構文がつかると嬉しい: Amazon Athena, EMRは可能

この3つを満たしているAthena

  • Athenaの説明
    • クラスタレスでスキャンしたデータの従量課金制(どれだけS3のデータを撮ってきたか)、JDBC/ODCがある
    • GUI上で開くとクエリエディタがあり、いきなり使える、その下画面にクエリ結果もある
  • 移行後の課題と解決
    • ビックデータの分配が低頻度ETLが追加でできるようになった
      • よく要望で顧客先のS3にエクスポートしてくれ、更に、エクスポート形式はCSVじゃなくて、JSONとか
      • Athenaで1クエリでクロスアカウント経由でデータをかけるようになった。
  • 良かった点
    • 金額安い:AthenaのほうがEMRと比べると体感10倍安い
    • クエリがはやい:
      • Amazon AthenaのほうがEMRと比べると、SELECTクエリが約2~3倍早い
      • インサートする側はEMR + Hiveと比べると、CTASクエリが10倍早い
    • 運用が楽:EMRはチューニングやエコシステム化などを考えないといけないがAthenaは全く気にする必要がない
  • 悪かったところ
    • キャパシティエラー:Athenaに一万から数万のクエリをなげるとたまに帰ってくるもので、一時的な内部リソースエラーが出てクエリが送付できない
      • 再実行 or 自動リトライで解決
    • APIロットリング問題:同時実行数があり、それ以上はできない。APIを使ってるとクエリ結果取得ができない場合がある。
      • 上限緩和を行って解決した。
    • Athenaの制約:データフォーマットがtimestamp型カラムを使うとUTCに自動でなってしまう。
      • サーバ側の操作ができないためSELECTクエリ発行時にAT TIMEZONE指定

マッチングエージェント

  • 運用開始から5年
  • 稼動システムの刷新の難易度
    • リスクを最小化して、それを示すのが大変
    • 複雑な変更は大変
      • 計画を作るのが大変:工数が増えれば不確実性も増える
      • 影響確認するのも大変:単純に確認する項目が増える、
      • 切り戻すのが大変:どっかしらでどかっと変更したときに中途半端なところでエラーが出ると出戻りも発生
  • どうするべきか
    • 一つの目的に絞っていること(PRも同様)
    • 4つくらいにシステムの変更はある
      • add (機能追加
      • upadate (機能の動作変更
      • delete (機能の削除
      • refactor (機能の振る舞いを変更せずに更新

その4つの変化に対して対応する

漸進的というのは「順を追って小さな変化を起こしていくこと」という意味 どういう影響が起きるか正しく理解できればリスク軽減にもなるし、経営者に説明しやすくもなる

  • システムの課題点
    • 構成の管理コストが高い(インフラの方にお願いしたり)
    • デプロイに一時間かかる
    • パフォーマンスが不安定

どういう優先度で解消するべきかを見直すのが大事 コンテナ化はやろう、DBに関しては最適なインスタンスタイプでクラスタ構成にしようなどある

AWSにおDirect Connectがそれを解決した。

  • Direct Connect

    • AWSとユーザ設備感を専用回線で接続するネットワークサービス
    • インターネット経由で接続するよりハイパフォーマンスで安定した環境を実現
    • 負荷試験をやるとスループットが大幅に改善で拠点間の通信のオーバヘッドが無視できるレベル
  • EC2への移設

    • パフォーマンス向上とオートスケーリング対応を優先事項
    • まずは急なスパイクに耐えれることは最優先
      • コンテナ化で得られる運用コスト軽減は次のフェーズ
    • プロビジョニングはansbleがそのまま活用できる
    • Route53が大活躍
      • 複雑なルーティングシステムをわかりやすくビジュアライズ設定できる
      • フェイルオーバーなど便利なルールも設定できる
      • 加重ルール(どっちのサーバーにどれだけの重みで送るかを設定できる)を使用した
        • 少しずつAWS側の加重ルールを増やしていくことで、実運用しながら試験ができたし、ちょっとずつ負荷をあげれる心理的安全があった
  • ECSの構成

  • EC2からECSへ移行

    • Trafic flowを利用 : LB同士の振り分けにも対応できる
    • ECCSのメリットとして、イミュータブルなので、開発言語などのバージョンアップが以前より気軽になった。
    • オートスケーリングが簡単、EC2と比べてアプリの最新版のデプロイをどうするかとか気にしなくてよかった

ニフティ

  • レガシーなシステム脱却しよう!
  • 2017年の夏からベンダー選定契約を行い、現在は移行中
  • 社内セキュリティルールをどう適用するか
    • そのAWS版をつくったり、社内の認証系をどうするか、支払いコスト配布に関してどうするかなど
    • ニフティはサービスごとにAWSアカウントを作成、そのアカウントと損益計算の単位とのヒモ付アカウントと作成時でやる
    • 比較が大変で、Gartnerの比較表をつくたがあまり良くなかった(カタログスペック比較になってしまうから)
    • 選定基準を先に決め、どのくらい満たせるか図るのが良い
      • ニフティの場合はインシデント時のログ配置などがある。
    • AWSにどうやって移行するか
      • 計画段階で検証している。
      • 内製に決め打ちしていた:移行後に開発運用できる人材がいなければ目的の一つである生産性向上につながらない。属人化しちゃうから。
      • CloudEndureをつかって動かした(PtoV)
  • 準備フェイズ
    • 各担当が移行しやすいように、ルールを作成した
      • AWSさんがオンサイトでハンズ・オンしてくれて非常に助かった
      • AWSレーニングを2018年度から初めて今頑張ってる
      • レーニングで基礎を身に着けた上で、移行作業を通してAWSを学ぶ
  • ニフティニュースの移行プロジェクト
    • 事業
      • 月間3000万人以上のアグリデーション(媒体社からフィードをもらう)サービス
      • ユーザデバイスに合わせて注目記事を紹介している
      • 9ヶ月かけて移行中

          ・4~6月 要件調査・AWSの調査/設計   ・7~9月 構築   ・10月 受け入れテスト   ・1月に切り替えして、経過観察中

  • 移行パターン調査:システム動作言語や環境、AWSのノウハウ蓄積状況を考えてrehost(リフトアンドシフト)を実行した
  • システムズマネージャーをつかってnon-sshでメンテしたり、クラウドフロントでキャッシュを扱ったり、athenaを使ってランキングデータを生成したり、Lambdaをつかってslackに障害アラートを送るようにしたり設計した。
  • CloudEndure:ライフマイグレーションツール
    • エージェントをインストールしてぽちるだけなので、専門知識が不要
    • 複数サーバーの同期の状況管理ができる。
  • 移行でハマったポイント
    • CLoudEndureではNFSサーバーが起動不能
      • 技術マニュアルに乗ってない仕様があった:初回のデータ同期完了しないとサーバーが起動すらできない。1日あたり50Gもあり、いつまで立っても起動してくれなかった。 →S3をつかってNFSのデータを移行した。tarとか適切な形式で前処理は必要
      • パフォーマンスが出ない
        • 当初は可用性を高めるためにマルチAZ化する設計だった。
        • それをすると、パフォーマンスが出なくて困った。
        • 推定すると、細やかなレイテンシ差 * ワークロードあたりのタスク数 * タスクあたりのIO数がかけあわさって遅くなってしまった→マルチAZをあきらめ、シングルエイジにした。(アプリケーション側がレガシー過ぎていじれないのが原因の一つでもある
      • HTTPS周り
        • バッチやルーツでHTTPS通信する際に2つのエラーに遭遇
        • 原因はレガシーである(TLSバージョン問題やSNI問題)があった
        • 解決方法としては、使用言語のアップデートをおこなったり、泣く泣くELBセキュリティポリシーの緩和を行った
  • AWS移行後
    • 運用のしやすさが向上した。
    • 技術負債をAWSサービスの力を借りて解消中

最後にレガシーなシステムほど慎重に。