AKB48のモバイルサイトを 他社DCからAWSにECSを用いて移管した話 株式会社シーエー モバイル 庭木 勝也 坂本 佳久

Similar documents
FUJITSU Cloud Service for OSS 「コンテナサービス」 ご紹介資料

AWS Deck Template

ナビタイムサービスにおける、Amazon ECS を活用したシステム移行 ~『乗換NAVITIME』での移行事例 ~

CLUSTERPRO MC ProcessSaver 2.3 for Windows 導入ガイド 第 5 版 2018 年 6 月 日本電気株式会社

PowerPoint Presentation

PHP 開発ツール Zend Studio PHP アフ リケーションサーハ ー Zend Server OSC Tokyo/Spring /02/28 株式会社イグアスソリューション事業部

CLUSTERPRO MC ProcessSaver 1.2 for Windows 導入ガイド 第 4 版 2014 年 3 月 日本電気株式会社

Docker/Kubernetes実践コンテナ開発入門

10年オンプレで運用したmixiをAWSに移行した10の理由

PowerPoint Presentation

PowerPoint_template_v1.3.pptx / パワーポイントテンプレート

スライド 1

よくある問題を解決する~ 5 分でそのままつかえるソリューション by AWS ソリューションズビルダチーム

Enterprise Cloud + 紹介資料

Startup_on_AWS_usecases_StartupDay

Microsoft Word - PCOMM V6.0_FAQ.doc

Zabbix でミドルウェア毎に効率的に データを収集するために作った仕組みの話 株式会社サイバーエージェント Conference Japan

SIOS Protection Suite for Linux v9.3.2 AWS Direct Connect 接続クイックスタートガイド 2019 年 4 月

OpenStack 環境における Container as a Service の提供と課題 株式会社サイバーエージェント アドテク本部 技術戦略室 Central Infrastructure Agency 青山 真也

そこが知りたい!AWSクラウドのセキュリティ

AWS のコンテナ管理入門(Amazon EC2 Conatainer Service)

Agenda 1. 今回のバージョンアップについて a. バージョンアップ概要 b. バージョンアップ目的 c. 新バージョンのシステム要件に関する注意事項 d. 現行バージョンのサポート期間 2. 対応プラットフォームの追加 3. 新機能の追加および機能強化 2

MS SQL の Point-in-Time リストア A - - v6.5 Update4 以降サポート Active Directory 詳細レベルリストア A A A v5 Update2 以降サポート 小さいパーティションへのBMR A A A v5 Update2 以降サポート リモートレ

2. Docker の基本的な操作 1 docker hub の参照 2 DockerHub の Explorer リンクからアプリケーションを参照 3 アプリケーション検索 4 tag について 3. docker 基本コマンド 1 docker の

Oracle Un お問合せ : Oracle Data Integrator 11g: データ統合設定と管理 期間 ( 標準日数 ):5 コースの概要 Oracle Data Integratorは すべてのデータ統合要件 ( 大量の高パフォーマンス バッチ ローブンの統合プロセスおよ

スライド 1

McAfee ENS 移行プロセス概要

利用約款別紙 SkyCDP for AWS 基本サービス仕様書 この仕様書は SkyCDP for AWS の基本サービスに関する内容 方法について記述したものです 尚 SkyCDP for AWS オプションサービスをご利用のお客様は各 SkyCDP for AWS オプションサービスのご契約内容

DataKeeper for Windows リリースノート

Arcserve UDP バージョン比較 (Rev: 4.0) 2019 年 5 月作成 凡例 ( A : Advanced 以上 P : Premium 以上 PP : Premium Plus SS : 専用サブスクリプション -: 機能なし ) Release Version 機能 7.0 v

Automation for Everyone <デモ で実感できる、組織全体で活用できるAnsible Tower>

Dockerの商用サービスでの利用事例紹介

【Cosminexus V9】クラウドサービスプラットフォーム Cosminexus

CLUSTERPRO X 4.0 新機能

製品概要

PowerPoint プレゼンテーション

Docker Haruka Iwao Storage Solution Architect, Red Hat K.K. February 12, 2015

クックパッドのテスト自動化

Kubernetesの基礎

PowerPoint プレゼンテーション

WebSAM MCOperations Amazon Web Services 向け構築ガイド 2015 年 5 月 日本電気株式会社

aws_summit_abematv_fresh

平成22年度「技報」原稿の執筆について

自己紹介 指崎則夫 ( さしざきのりお ) SCUGJ 運営スタッフ Microsoft MVP

スライド 1

新製品 Arcserve Backup r17.5 のご紹介 (SP1 対応版 ) Arcserve Japan Rev. 1.4

Nagios XI - SNMPでのLinux監視

FUJITSU Cloud Service for OSS 「ログ監査サービス」 ご紹介資料

Nintendo Switch(TM)向け プッシュ通知システム 「NPNS」

Congress Deep Dive

内容環境... 3 対応 OS の変更... 3 関連アプリケーションの追加... 4 機能追加... 5 グラフ機能... 5 稼働率... 8 サービス一括削除 自動復旧エスカレーションコマンド AWS カスタムメトリックス監視 NRPE 任意監視... 11

データベースの近代化:シンプルなクロスプラットフォーム、最小のダウンタイムで実現するクラウド移行

IBM Internet Security Systems NTFS ファイルシステム必須 一覧の 以後にリリースされた Service Pack (Release 2 等は除く ) は特に記載の無い限りサポートいたします メモリ 最小要件 512MB 推奨要件 1GB 最小要件 9GB 推奨要件

Red Hat OpenShift上でのInterstage Application Serverの動作手順(Java EE 7編)

KiwiSyslogServer/KiwiLogViewer製品ガイド

ロードバランサー配下のシボレス IdP 環境設定に関する検証実験 2009 年 12 月 22 日国立情報学研究所学術ネットワーク研究開発センター山地一禎, 中村素典

Yahoo! JAPANにおけるOpenStack on Kubernetes導入までの道のり

久原本家グループ本社

iNFUSE インフューズ

Red Hat OpenShift上でのInterstage Application Serverの動作手順(Java EE 6編)

HDC-EDI Manager Ver レベルアップ詳細情報 < 製品一覧 > 製品名バージョン HDC-EDI Manager < 対応 JavaVM> Java 2 Software Development Kit, Standard Edition 1.4 Java 2

スライド 1

OSSTechプレゼンテーション

一緒に使おう Windows Server 2019 & Microsoft Azure 日本マイクロソフト株式会社クラウド & ソリューション事業本部テクノロジーソリューションプロフェッショナル 瀧本文男 CI16

PowerPoint プレゼンテーション

データセンターの効率的な資源活用のためのデータ収集・照会システムの設計

Microsoft Word - AWSBlueprint final.docx

本セミナーのポイント 戦略的なマルチクラウド活用の 3 つの勘所 クラウド導入検討における最適なプラットフォームの選定 事前準備としての運用 セキュリティガイドラインの作成 クラウド運用保守におけるデジタル化に向けたリソースシフト

アジェンダ はクラウド上でも十分使えます 1. の概要 とは の導入事例 で利用される構成 2. をクラウドで使う クラウドサービスの分類 Amazon Web Services による構成例 2

SAMBA Stunnel(Windows) 編 1. インストール 1 セキュア SAMBA の URL にアクセスし ログインを行います xxx 部分は会社様によって異なります xxxxx 2 Windows 版ダウンロード ボ

Transcription:

AKB48のモバイルサイトを 他社DCからAWSにECSを用いて移管した話 株式会社シーエー モバイル 庭木 勝也 坂本 佳久

セッションの紹介 AWS移管やECSの利用を検討する方向け 庭木 移管にあたっての技術の紹介とその選定理由 DBの移管方法 エンジニアの意識の変化 坂本 ECSの概念とその活用 コンテナ使用時のログ管理 弊社での具体的な設定例

目次 3ヶ月でECSを用いてAWS移管した方法をまるっと紹介 1 2 3 会社紹介 AKB48 モバイルサイトの移管 利用技術の選定 4 5 6 DBの移管 Webサービスの ECS利用 まとめ

INTRODUCTION 自己紹介 Software Engineer Manager Corporate Development Manager 庭木 勝也 @にわっち 2012年 新卒入社 DC運用サービスのインフラ担当として OpenStack導入や DC間のサービスの 移管にも従事 2017年7月以降は 社内システムも合わせ てエクセルからAWSまで管理 現在は AWS移管に注力

1 2 3 会社紹介 AKB48 モバイルサイトの移管 利用技術の選定 4 5 6 DBの移管 Webサービスの ECS利用 まとめ

会社紹介 シーエー モバイルが展開する事業 インターネット広告 動画広告事業 占い エンタメ ライフスタイル DSPではなくてSRPの広告事業を展開 分野のWebサービスを提供

会社紹介 技術に明るい取締役とCTOが技術を引っ張る 取締役 エンジニアの母 (VP of Engineering) CTO 齋藤 匠 船ヶ山 慶

会社紹介 エンジニアブログと採用サイトの紹介 エンジニアブログ 採用サイト http://tech.camobile.com/ https://hr.camobile.com/

会社紹介 シーエー モバイルの大型OSS Viron 統一した操作性 ダッシュボードを備えた 管理ツールプロダクト 参考資料 GitHub : https://github.com/cam-inc/viron エンジニアブログ http://tech.camobile.com/entry/viron_20180201

会社紹介 シーエー モバイルの開発スタイルのコンセプト いつでもどこでも 同じ環境でサービスの開発ができる

会社紹介 シーエー モバイルの開発スタイルのコンセプトを実現するために 自社DCからパブリッククラウドへ移行中

会社紹介 現在シーエー モバイルで利用している技術

1 2 3 会社紹介 AKB48 モバイルサイトの移管 利用技術の選定 4 5 6 DBの移管 Webサービスの ECS利用 まとめ

AKB48モバイルサイトの移管 AKB48のモバイルサイトの移管について 期間 3ヶ月 メンテナンス時間 8時間 (24:00-8:00)を2回 ステークホルダー AKS様 ドメインSSL管理会社 他社システム会社 付属サービス FP SP ネイティブアプリ メールサービス 検閲 CAMOBILE インフラ2名 サーバー6名 アプリ2名

1 2 3 会社紹介 AKB48 モバイルサイトの移管 利用技術の選定 4 5 6 DBの移管 Webサービスの ECS利用 まとめ

利用技術の選定 AKB48のモバイルサイト移管後の利用技術 独自フレームワーク アプリケーション 開発環境 コード管理 環境構築 構成管理 メール送受信 配信 ログの管理 CI バッチ 監視 外形監視 bot 通知 コミュニケーション AWS上のサービス Amazon RDS Amazon S3 Amazon ECS Memcached

利用技術の選定 アプリケーション 独自フレームワーク 3ヶ月という時間の制約のため ミドルウェア自体は変更せず バー ジョンアップのみ実施 apache 2.4系 php 5.4系

利用技術の選定 開発環境 コード管理 Docker 本番と同一の構成でローカル環境を 作れる コンテナなので起動がはやい DockerComposeでグループ化してコ ンテナを起動可能 外部サービスとの連携可能 Github Enterprise のようにサーバー の管理 運用コストがない

利用技術の選定 環境構築と構成管理 社内で利用実績があった コードドリブンで構成管理可能 手動構築を最小限に YAML形式の設定を作成するだけで構成管理が可能 githubで管理可能

利用技術の選定 CI バッジ Jenkins 社内で利用実績が豊富 デプロイの内容をgithubで管理可能 botからの実行も可能 オペレーションの統一化が可能 デプロイ バッチの一元管理が可能

利用技術の選定 ログの管理 Google Big Query コンテナの利用が可能 ログの保存に利用 ログの集約が可能 BIツールと連携し可視化可能 ログのフォーマットやタグの指定が可能 SQLをキャッシュしてくれる S3やBigQueryなど出力先を柔軟に指 定可能 低コスト google analyticsと連携可能

利用技術の選定 メール送受信 配信 会員登録などの空メール送信に利用 オンプレ環境での利用実績あり WEB API を利用したメール送信 国内でのキャリアへの到達率がよい メール受信をフックしてメールの内容を POST する機能 メルマガの大量配信に利用 Freeプランでもメール受信可能

利用技術の選定 外形監視 https://www.statuscake.com/

利用技術の選定 Statuscakeを利用した理由 タグをベースで監視設定を一括変更可能 東京リージョンもある プロトコルごとに監視可能(HTTP,HTTPS,TCP,UDP等) 死活監視やパフォーマンス監視が可能 1アカウントで複数のサイトを監視可能 モニタリングするサーバーを構築 運用するコストが不要 slack インテグレーションでslackにアラート リクエストページのString Matchが可能 費用が安い(Business plan $80)

利用技術の選定 監視 https://www.datadoghq.com

利用技術の選定 DataDogを利用した理由 モニタリングするサーバーを構築 運用するコストが不要 タグで管理が可能 AWS インテグレーションで CloudWatch のメトリクスでアラート設定が可能 Datadog のエージェント (dd-agent) がコンテナで提供されている AutoDiscovery で動的ポートで起動しているコンテナも監視可能 グラフのみやすさ dogpushでmonitor dogshell で dashboard を生成 slack インテグレーションでslackにアラート EC2 コンテナインスタンスにエージェントを入れていると10コンテナまでの監視が無料 (https://docs.datadoghq.com/ja/guides/billing/)

利用技術の選定 bot 通知 コミュニケーション 容易に導入が可能 様々なチャットツールに対応 インテグレーションが豊富 datadog statuscake hubot jenkins

1 2 3 会社紹介 AKB48 モバイルサイトの移管 利用技術の選定 4 5 6 DBの移管 Webサービスの ECS利用 まとめ

DB移管 全体構成図 ②WEB ①DB ECS Instance Service container Application LoadBalancer Fluentd collector container DatadogAgent container RDS Aurora 1系

DB移管 3つのフェーズに分けて移管を実施 1. DB先行移管の準備 2. DBのみ先行で移管 3. WEB DBすべて移管

DB移管 1.DB先行移管の準備 他社DC write MySQL5.1系 Master webサーバー ダイレクトコネクト VPC public subnet VPC private subnet read MySQL5.1系 Slave ダイレクトコネクト Router Virtual private gateway EC2 MySQL5.5系 RDS mysql 5.6 RDS aurora 1系

DB移管 ダイレクトコネクトを利用した理由 mysqlの5.1系からaurora 1系まで多段でレプリケーションを組むことで メ ンテナンス時間を短縮したい DBのみを先行で移管したい よかったこと オンプレミスの環境よりも構築とバックアップが容易 インスタンスタイプを一時的に大きくすることで データの転送 レプリケーションの作成時間 を短縮 EC2 EC2 c4.large 2000iops (10GB を7mでimport) EC2 aurora r4.large 10GBを45分でimport

DB移管 ダイレクトコネクト以外の移管方法と検証 ケース1 他社DCにmysql proxy サーバーの構築と利用 privateサブネットにauroraを立てるため nginx等をパブリックサブネットに 立てる必要あり 暗号化する必要あり phpのバージョンが非対応 ) ケース2 他社DCインスタンスと EC2インスタンス間で SSH トンネルを用いたレプリケーション インターネット経由は不安定で再レプリケーション設定の作業が発生する場合がある ケース3 AWS DMS の検証 auto incrementがなくなる等の制約あり 参考資料 https://docs.aws.amazon.com/ja_jp/dms/latest/userguide/chap_source.mysql.html

DB移管 EC2上のmysqlとAuroraの設定 EC2 mysql max_allow_packetを大きく128mb old_passwordsを無効 レプリケーション用のユーザー作成に影響 replicate-ignore-db = mysql, replicate-wild-ignore-table = mysql.% レプリケーションが停止する可能性があるため ユーザーデータのレプリケーションは実施 しない Aurora max_allow_packetを大きく128mb 文字コードを変更 EC2と同様utf8に設定 log_output =File 拡張モニタリングを有効

DB移管 2. DBのみ先行で移管 他社DC ダイレクトコネクト VPC private subnet write read webサーバー ダイレクトコネクト Router Virtual private gateway RDS aurora 1系 RDS aurora 1系

DB移管 DBの先行移管の際に実施したこと 旧マスターDB(MySQL 5.1系)とAuroraの間で差分が発生しないように iptablesで webサーバーから旧マスターdbに対して3306 portを利用し たTCP接続を拒否 テーブルの文字コード テーブル数 テーブルの行数を 確認するスクリプトを作成し 差分確認を実施

DB移管 他社DCからAuroraへのアクセス Auroraのcluster(writer)とreaderのエンドポイントに対して 他社DCのwebサーバーから引けるように R53のpublic dns側にttlを短めに設定 接続の切り分けとセキュリティを考慮し ユーザーも3つ新規に作成 reader (selectのみの権限) user (insert,alter等の権限) admin (すべての権限 ) 事前に 他社DC側のwebサーバーから接続テストを実施 DBの先行移管時は 他社DC内のwebサーバーに登録されて いるDBの接続情報(akb48db)をR53に登録したAuroraの接 続情報 aws-akb48db へ変更

DB移管 Auroraへの接続サーバーの特定方法 VPCのサブネットの設定でフローログを出力 対象のネットワークインターフェースのログをCloudWatchで確認 他社DCのネットワークサブネットでフィルター よかったこと 移管対象外と思われていた他社DC内共通サーバーの発見と 必 要可否の精査ができた

DB移管 3. WEB DBすべて移管 他社DC ダイレクトコネクト VPC private subnet write read ECS (web)コンテナ ダイレクトコネクト Router Virtual private gateway RDS aurora 1系 RDS aurora 1系

DB移管 Aurora の問題発生時の対処方法 問題のあるインスタンスを削除し 再作成すると即時復旧が可能 問題の解決に必要な情報を バッチでS3に定期的に保存する SHOW PROCESSLIST エラーログ もしあればスロークエリログ 正常時と事象発生時の SHOW ENGINE INNODB STATUS\G の結果 information_schema の innodb_trx, innodb_locks, innodb_lock_waits 等の情報 オプション 拡張モニタリングの有効化 再起動 インスタンスタイプ変更をするとエラーログ等は消失する

INTRODUCTION 自己紹介 Site Reliability Engineer 坂本 佳久 2015年 中途入社 ネットワークやサーバーの知識を活かした環境 設計や構築 トラブルシューティングが強み 現在はサーバーサイドエンジニアとして他の サービス開発に従事

セッションの紹介 AWS移管やECSの利用を検討する方向け 庭木 移管にあたっての技術の紹介とその選定理由 DBの移管方法 エンジニアの意識の変化 坂本 ECSの概念とその活用 コンテナ使用時のログ管理 弊社での具体的な設定例

1 2 3 会社紹介 AKB48 モバイルサイトの移管 利用技術の選定 4 5 6 DBの移管 Webサービスの ECS利用 まとめ

目次 1 システム構成 6 ECSでFluentdを起動 2 ローカル環境 7 ECSのAutoScaling 3 コンテナイメージ 8 コンテナからNFSを利用 4 アプリケーションデプロイ 9 CIサーバーの移行 5 ログ管理 10 環境セットアップツールの移行

1 システム構成

1 システム構成 Application LoadBalancer ECS Instance ECS Instance Service container Fluentd aggregator Fluentd collector container Amazon S3 Google Big Query Network LoadBalancer DatadogAgent container Dashboard ECR ローカル環境

2 ローカル環境

2 ローカル環境 DockerとDockerComposeを使用 機能ごとに15個のコンテナを用意 FP SP メールサービス 検閲 MySQL etc...

2 ローカル環境 ローカル環境構成 AWS NFS Server EC2 VPN Docker Host OSX ssl api api web fp web sp MySQL./nfs mount./mysql Dockerfile data files./web./api Dockerfile files mac OS 上に各コンテナを起動させて 開発中のソースコードを ボリュームマウントして 変更したソースコードを即時反映させる Docker composeを利用して 開発に必要なコンテナを複数起動する NFSで開発に必要なデータを VPN越しにマウントして利用

3 コンテナイメージ

3 コンテナイメージ ソースコードを実行する際の OS は AmazonLinux AWS で管理しているパッケージを使用できるなど AWS の恩恵を受けることができる Alpine や Debian は慣れていない人が多い コンパイルのみを実施する場合やgolang製のアプリな ど 用途に合わせてalpineやscratchなどを使用

3 コンテナイメージ AmazonLinux のイメージ DockerHub / OFFICIAL REPOSITORY amazonlinux https://hub.docker.com/_/amazonlinux/ Alpine linux https://alpinelinux.org/ scratch docker docs / Create a base image https://docs.docker.com/develop/develop-images/baseimages/

4 アプリケーションデプロイ

4 アプリケーションデプロイ 各環境へリリース 準本番 開発 ローカル Docker Compose ECS ECS 本番 ECS ECR コンテナ化することで ローカル環境をそのままリリース

4 アプリケーションデプロイ ECSの構成 サービス ECS Agent コンテナ task コンテナ task コンテナ task コンテナ task コンテナ ECS Agent コンテナ docker docker ECS コンテナインスタンス ECS コンテナインスタンス ECS クラスタ

4 アプリケーションデプロイ デプロイ時の動作 3. ECSのAPIをコールし タスク定義を更新 ECS コンテナインスタンス 4. ECSのAPIをコールし サービスを更新 ECS API ECS Agent コンテナ ECS 2. ビルドした docker コンテナをpush 1. CIサーバー上で docker コンテナをビルド 5. ECS AgentがECRから コンテナを取得 配置 ECR

4 アプリケーションデプロイ slackを使用してdeploy slack 実行例 hubot jenkins ECS

4 アプリケーションデプロイ タスクの配置とデプロイオプション 戦略 spread ecs.availability-zone instanceid デプロイオプション 最大率 130% 最小率 60% サービス task コンテナ task コンテナ ECS Agent コンテナ docker ECS コンテナインスタンス ECS クラスタ

4 アプリケーションデプロイ アプリケーションデプロイ時の事象 ローリングアップデートに時間がかかる アプリケーションロードバランサーのターゲットグルー プの登録解除の遅延時間が長い 登録解除の遅延時間を10秒へ変更 デフォルト300秒 参考資料 https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/load-balancer -target-groups.html#target-group-attributes

5 ログ管理

5 ログ管理 Fluentdの構成 Collector Aggregator Destination Instance Docker コンテナ Amazon S3 Docker コンテナ Fluentd Collector ネットワーク ロードバランサー Fluentd Aggregator Google Big Query

5 ログ管理 Fluentd collectorがログを転送する流れ web コンテナ api コンテナ tag: web stdout/stderr tag: api stdout/stderr Fluentd Collector コンテナ Port: 24224 Forward docker ロギングドライバ / fluentd ECS コンテナインスタンス Port: 24225 Forward Fluentd Aggregator tagにより ログを出し分け

5 ログ管理 コンテナインスタンスの中にFluentd collectorを立てている理由 Aggregatorとの通信時に問題があった場合 ログを確認できる Fluentd Collectorが使用しているCPU メモリのリソース ログ転送状況 が監視できる ログフォーマットやタグなどの設定を変更したいことがあった場合 対応可 能 参考資料 The Patterns of Distributed Logging and Containers / SATOSHI TAGOMORI https://www.slideshare.net/tagomoris/the-patterns-of-distributed-logging-and-containers

6 ECSでFluentdを起動

6 ECSでFluentdを起動 Fluentd collectorの要件 コンテナインスタンス1台につき fluentdのコンテナ を一つだけ起動する必要がある Fluentd Aggregator にログ転送をさせる

6 ECSでFluentdを起動 解決方法 AutoScalingグループの起動設定のuser-dataを使 用 user-data 内でコンテナインスタンスの/etc/rc.local にコンテナ起動コマンドを記載するよう設定 コンテナインスタンス起動時に 必ず1つの Fluentdコンテナが起動する

6 ECSでFluentdを起動 起動設定抜粋 / CloudFormation UserData: Fn::Base64:!Sub #!/bin/bash echo ECS_CLUSTER=${EcsCluster} >> /etc/ecs/ecs.config echo 'ECS_AVAILABLE_LOGGING_DRIVERS=["json-file","awslogs","fluentd"]' >> /etc/ecs/ecs.config export PATH=/usr/local/bin:$PATH cluster=${ecscluster} td_agent_task_def=${collectorname} start ecs yum install -y aws-cli jq curl aws configure set default.region ap-northeast-1 function get_instance_arn { curl -s http://localhost:51678/v1/metadata jq -r '..ContainerInstanceArn' awk -F/ '{print $NF}' } function get_az { curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone } instance_arn=$(get_instance_arn) az=$(get_az) region=${!az:0:${!#az} - 1} ログドライバに fluentd を指定 user-dataからインスタンス ARNな どの必要な情報を取得 rc.localにコンテナ起動コマンドを 書き込み echo " cluster=${!cluster} az=${!az} region=${!region} aws ecs start-task --cluster ${!cluster} --task-definition ${!td_agent_task_def} --container-instances ${!instance_arn} --region ${!region}" >> /etc/rc.local

6 ECSでFluentdを起動 参考資料 Datadog / AWS ECS Integration https://docs.datadoghq.com/integrations/amazon_ecs/

6 ECSでFluentdを起動 タスク定義抜粋 アプリケーションコンテナのlogDriver設定 "logconfiguration": { "logdriver": "fluentd", "options": { "fluentd-address": "localhost:24224", "tag": "xxxx" } },

6 ECSでFluentdを起動 Fluentd Aggregator の要件 S3などへ転送するだけでなく ローカルディスクにも ログを書き込む 負荷によってスケールイン スケールアウトさせたい Fluentd Collectorの設定はなるべく変更せず Fluentd Aggregatorの設定で吸収したい

6 ECSでFluentdを起動 解決方法 ECSインスタンスをボリュームマウントし ローカル ディスクに書き込めるようにする ECSのサービスとしてFluentd Aggregatorを設定し ロードバランサーで分散 ローカルディスクに書き込むため タスクの配置制約 とデプロイオプションを 1コンテナインスタンスに 1 コンテナが起動するように設定

6 ECSでFluentdを起動 タスクの配置とデプロイオプション 制約 distinctinstance デプロイオプション 最大率 100% 最小率 50% サービス task コンテナ task コンテナ ECS Agent コンテナ docker ECS コンテナインスタンス ECS クラスタ

6 ECSでFluentdを起動 モニタリング Fluentd Monitoring Agent Input Plugin Datadog Autodiscovery 参考資料 Datadog / Fluentd https://docs.datadoghq.com/integrations/fluentd/

7 ECSのAutoScaling

7 ECSのAutoScaling コンテナのAutoScaling コンテナサービスのCPUの使用率を使用 サービス ECS Agent コンテナ task コンテナ task コンテナ task コンテナ task コンテナ ECS Agent コンテナ docker docker ECS コンテナインスタンス ECS コンテナインスタンス ECS クラスタ 参考資料 https://docs.aws.amazon.com/ja_jp/amazonecs/latest/developerguide/service-auto-sc aling.html

7 ECSのAutoScaling コンテナインスタンスのAutoScaling ECSクラスターのメモリとCPUの予約率を使用 サービス ECS Agent コンテナ task コンテナ task コンテナ task コンテナ task コンテナ ECS Agent コンテナ docker docker ECS コンテナインスタンス ECS コンテナインスタンス ECS クラスタ 参考資料 https://docs.aws.amazon.com/ja_jp/amazonecs/latest/developerguide/cloudwatch_alar m_autoscaling.html

8 コンテナからNFSを利用

8 コンテナからNFSを利用 NFSを利用した理由 移行前の構成ですでにNFSを利用 限られた時間で S3などに移行することが難しい

8 コンテナからNFSを利用 タスク定義の抜粋 ボリュームセクション { タスクコンテナ volume mount "host": { "sourcepath": "/path/to/nfsvolume" }, ECS コンテナインスタンス NFS mount "name": "nfs-data" } nfs volume コンテナ定義セクション "mountpoints": [ { "containerpath": "/path/to/nfsvolume", "sourcevolume": "nfs-data" } ], rsyncで バックアップ User-Data設定の抜粋 # bootcmd: cat << EOT >> $USER_DATA_OUTPUT_FILE_PATH bootcmd: EC2 NFS用 instance - yum install -y nfs-utils - mkdir -p /nfs - mount -t nfs -o rw,exec,dev,suid,intr,vers=4,retrans=3,timeo=10,soft ${_NFS_SERVER}:/data/nfs EC2 NFS用 instance

9 CIサーバーの移行

9 CIサーバーの移行 jenkinsからwerckerへ移行

9 CIサーバーの移行 当時werckerにした理由 コンテナベースで CI が可能だった 他の CI サービスにはない ECS / ECR(aws が用意している docker リポジトリ) のインテグレーションがあった steps と言われる特定の動作を自動化したタスクが数多く存在し ており それを使用することが可能だった 欲しいstepsを自身で作成し共有することも可能だった 環境変数を利用でき 環境別のデプロイが容易だった githubのプライベートリポジトリのciも無料で始めることができた

10 環境セットアップツールの移行

10 環境セットアップツールの移行 terraformからcloudformationへ移行

10 環境セットアップツールの移行 terraform使用時の苦労 ステートファイルの管理 クラスターのローリングアップデートなど 対応していない機能がある 失敗時にきれいに戻らない場合がある バージョンアップが頻繁

10 環境セットアップツールの移行 cloudformationにした理由 設定ファイルなので複雑にならない GUIからも作成 実行できる 失敗時はきれいに切り戻しされる cloudformation使用時の苦労 プログラマブルではないので 記述量が多くなってしまう場合がある terraformとcloudformationは それぞれいいところがある

1 2 3 会社紹介 AKB48 モバイルサイトの移管 利用技術の選定 4 5 6 DBの移管 Webサービスの ECS利用 まとめ

まとめ エンジニアの意識の変化 プラットフォーム 物理サーバー VMware OpenStack Vagrant エンジニアの意識 コンテナは難しそう インフラエンジニアがある程度 準備してくれることを期待 パブリッククラウドの新しい 技術も利用したい プラットフォーム ECS,ECR コンテナ管理用CIツール docker エンジニアの意識 ローカル環境と開発環境が同一に なって開発がやりやすくなった 容易にデプロイが可能になった よりクラウドを活用していきたい

まとめ シーエー モバイルの開発スタイルのコンセプト いつでもどこでも同じ環境でサービスの開発ができる ローカル環境は起動が軽いdockerを採用 ローカル環境で使用しているdocker コンテナをサー ビスでも利用するために ECSを採用

まとめ ECSを利用することで要件が満たされた ローカル環境と開発環境が同一になった 容易にデプロイとデプロイの実行が可能になった

今後の展望と採用紹介 すべてのサービスを パブリッククラウドで開発 運用 AWSやGCP ECSやKubernetesの知見 開発経験のある方 クラウドを活用したいフロントやサーバーサイドエンジニアの方 どんどん新しい技術も取り入れてますので ぜひご応募ください 採用サイト https://hr.camobile.com/

CAグループの担当のお二方 辻本さん 成田さん 毎週定例の実施 AWS移設に関する技術情報のサポート 引き続き 柔軟かつ迅速なサポートをよろしくお願い致します