内定者バイトが1ヶ月ちょいでDSPをAmazonECSに乗っけた話

E963d168a75fd70bd69f1060d5635248?s=47 Hiromu Masuda
September 28, 2018

 内定者バイトが1ヶ月ちょいでDSPをAmazonECSに乗っけた話

DSPサーバーをAmazonECSとFargateを用いて動かした際のアーキテクチャ・デプロイフローについてまとめました。

E963d168a75fd70bd69f1060d5635248?s=128

Hiromu Masuda

September 28, 2018
Tweet

Transcript

  1. 内定者バイトが1ヶ月ちょいで DSPをAmazonECSに乗っけた話 増田 大夢|Hiromu Masuda

  2. 自己紹介 増田 大夢|HiromuMasuda 東京大学工学部システム創成学科4年 静岡県浜松市出身 趣味:ボディビル・海外旅行 休日の過ごし方:ボディビル・海外旅行

  3. アジェンダ 1. Amazon ECS / Fargate 導入の背景 2. Amazon ECS

    / Fargate とは 3. アーキテクチャ 4. デプロイ 5. 苦労話 6. 最後に
  4. Amazon ECS / Fargate 導入背景

  5. Amazon ECS / Fargate 導入の背景 • 挙動・設定がブラックボックスすぎる • ELB/SGの名前が自動生成で探しづらい •

    Blue-Greenデプロイがroute53経由なため、DNSキャッシュがきいてしまい上手く切 り変わらない Elastic Beanstalkの苦労
  6. Amazon ECS / Fargate 導入の背景 • コンテナ化してモダンにしたい • Fargateが東京リージョンでも使えるようになった •

    今後EKSが東京リージョンに来た時に移行しやすそう Amazon ECS / Fargate を選んだ理由
  7. Amazon ECS / Fargate とは

  8. Amazon ECS / Fargate とは Amazon Elastic Container Service (Amazon

    ECS) は、Docker コンテナをサポートする 拡張性とパフォーマンスに優れたコンテナオーケストレーションサービスです。これによ り、コンテナ化されたアプリケーションをAWSで簡単に実行およびスケールできます。
  9. Amazon ECS / Fargate とは task / service / cluster

    というレイヤー
  10. Amazon ECS / Fargate とは task definition / task とは

    docker-composeのようなもの。 task definitionにどのようなイメージを使ってどのようなコンテナを立てるのか、 CPU/メモリの割り当てをどうするか、環境変数・ポートの設定などをしておくと、 taskという形で定義されたコンテ ナの集合体を生成できる。
  11. Amazon ECS / Fargate とは service とは 「指定したtask definitionからtaskを生成する」 という作業をいい感じにやってくれる。taskの希望台数・最大数・

    最低数、オートスケールの ルールを設定することで、CPU/メモリの使用量やタスクのステータスを監視しながら 自動でタスクの台数を調節 してくれる。
  12. Amazon ECS / Fargate とは cluster とは taskとserviceをグルーピングする概念

  13. Amazon ECS / Fargate とは Fargate とは サーバレスでコンテナが実行できる技術 であり、タスク(コンテナの実行単位)に割り当てたvCPUとメモリの量に 応じて秒単位での課金でコンテナを実行できる。Fargateを用いれば

    EC2インスタンスの管理が不要 になり、オー トスケールに柔軟に対応 できる。
  14. アーキテクチャ

  15. アーキテクチャ ECR cluster: service Fargate task task task DSP task

    definition ELB images SSP DSP DSP
  16. アーキテクチャ ECR cluster: service Fargate task task task DSP task

    definition ELB images SSP DSP DSP AWS版DockerHub Docker image用レポジトリ
  17. アーキテクチャ ECR cluster: service Fargate task task task DSP task

    definition ELB images SSP DSP DSP ECRのimageから task definitionを作成
  18. アーキテクチャ ECR cluster: service Fargate task task task DSP task

    definition ELB images SSP DSP DSP serviceは task definitionを用いて taskを生成する
  19. アーキテクチャ ECR cluster: service Fargate task task task DSP task

    definition ELB images SSP DSP DSP task内では、 DSP/datadog/flumeの 3つのプロセスが コンテナとして動く
  20. アーキテクチャ ECR cluster: service Fargate task task task DSP task

    definition ELB images SSP DSP DSP コンテナは Fargate上で 動いている
  21. アーキテクチャ ECR cluster: service Fargate task task task DSP task

    definition ELB images SSP DSP DSP serviceはロードバランサを管理。ELBがリ クエストを 複数のtaskに振り分ける
  22. デプロイ

  23. - ECSにはblue-greenデプロイを実現する機能は存在するが、それ以外はない - デプロイ用ライブラリも「これだ!」というものがない - カナリアデプロイがしたい - そのため、1からデプロイを実装した デプロイ

  24. デプロイ ECR cluster: service Fargate task task DSP task definition

    ELB SSP DSP Jenkins カナリアデプロイ
  25. デプロイ ECR cluster: service Fargate task task DSP task definition

    ELB SSP DSP Jenkins カナリアデプロイ images 1. push
  26. デプロイ ECR cluster: service Fargate task task DSP task definition

    ELB SSP DSP Jenkins カナリアデプロイ images 1. push task definition 2. create
  27. デプロイ ECR cluster: service Fargate task task DSP task definition

    ELB SSP DSP Jenkins カナリアデプロイ images 1. push task definition 2. create 3. run task DSP
  28. デプロイ ECR cluster: service Fargate task task DSP task definition

    ELB SSP DSP Jenkins カナリアデプロイ images 1. push task definition 2. create task DSP 3. run 4. connect
  29. デプロイ ECR cluster: service Fargate task task DSP task definition

    ELB SSP DSP Jenkins 全デプロイ images task definition task DSP
  30. デプロイ ECR cluster: service Fargate task task DSP task definition

    ELB SSP DSP Jenkins 全デプロイ images task definition task DSP 1. update
  31. デプロイ ECR cluster: service Fargate task task DSP task definition

    ELB SSP DSP Jenkins 全デプロイ images task definition 1. update 2. remove
  32. デプロイ ECR cluster: service Fargate task task DSP task definition

    ELB SSP DSP Jenkins ロールバック images task definition
  33. デプロイ ECR cluster: service Fargate task task DSP task definition

    ELB SSP DSP Jenkins ロールバック images task definition 1. update
  34. 苦労話

  35. 苦労話 Fargateに関する周辺ツールのバグが多い 「datadogにDSPのメトリクスが送れない」という問題があった。Fargateを使うとホストに紐づくタグがメトリクスに 引き継がれないという バグが原因。

  36. 苦労話 ライブラリ・ツールがFargateに追いついていない 2つくらいしかデプロイ用のライブラリが見つからない上に、それがまだ Fargateに対応できていない 状況。issue もできたばっかり。結局デプロイ用のスクリプトは1から構築した。

  37. 苦労話 Fargateで動くコンテナにdocker execできない 「コンテナに入ってみてデバックする」というのが当たり前すぎて、それができず辛かった。

  38. 最後に

  39. 最後に 現在DSPはECS上で 正常に動いています。 苦労して作り上げてよかったです。