Upgrade to Pro — share decks privately, control downloads, hide ads and more …

楽になりたくてECS Fargate〜Cloud NativeとECS利用の現場〜

楽になりたくてECS Fargate〜Cloud NativeとECS利用の現場〜

Cloud Native Lounge #1「サービスを支えるクラウドネイティブな基盤」
https://forkwell.connpass.com/event/215187/

yuta sakai

June 30, 2021
Tweet

More Decks by yuta sakai

Other Decks in Technology

Transcript

  1. 2 自己紹介 酒井 優太 株式会社ユーザベース SaaS Product Division SRE Team所属 2018年より株式会社FORCAS(株式会社ユーザベース完全子会社、2021

    年より株式会社ユーザベースに統合)に入社、サービスインフラの改善・ 運用・情報セキュリティ等を担当。
  2. 12 これもまたCloud Native  1. 回復性 -> ECS Fargateは自動で複数AZへ分散起動・障害時に自動復帰する 2. 管理力

    -> ECSは簡単に必要実行数を設定可能・immutableなコンテナ実行環境 3. 可観測性 -> Datadogでアプリケーションモニタリング・ログ分析を実施 4. 疎結合システム -> ALBでコンテナ間を疎結合に通信・1task1アプリ実行 5. 堅牢な自動化 -> CodePipeline/Deployを組み合わせたシンプルなデプロイ Cloud Nativeの技術で実現すること 回復性、管理力、および可観測性のある疎結合システム 堅牢な自動化 *「CNCF Cloud Native Definition v1.0」から抜粋 https://github.com/cncf/toc/blob/main/DEFINITION.md#日本語版
  3. 18 (補足)費用はどうなの?  *EC2 m5.xlarge相当オンデマンド / Tokyo Region / 4 vCPU

    / 16GB Mem / 20GB Storage ざっくり比較 単純なEC2とFargateの費用比較 EC2 < Fargate($180.48 < $209.32) Datadog(Infrastructure + APM)を含めた、EC2とFargateの費用比較 EC2 > Fargate($226.48 > $212.32) *DatadogをFargateで動かす時のイニシャル費用が安い (Fargate 1taskあたり Infrastructure $1/mo、APM $2/moとか。EC2だとそれぞれ $15/mo 、$31/mo) トータルとして大きく膨らむ事はない費用感で使えている
  4. 20 トラブル事例1 CPUパラメーターが未設定で起動エラー タスク定義のcontainerDefinitionsでcpuパラメーター(オプション扱い)が未設定だと起動エラー *1CPUより大きいリソースを期待する仕様の一部アプリで発生 *ECS タスク定義ドキュメント > Null、0、1 の CPU

    値は Docker に 2 個の CPU 配分として渡されます。 https://docs.aws.amazon.com/ja_jp/AmazonECS/latest/userguide/task_definition_parameters.html { "family": "front-api-task", "cpu": "2048", "memory": "12288", "containerDefinitions": [ { "name": "front-api", "cpu": 0, "cpu": 2048, 全体には十分なリソースがあるのに 起動エラーになるのは何故? 🤔 とハマってしまった 未設定で定義を登録すると「“cpu”: 0」として 登録される(この暗黙的な設定が敗因) 明示的に設定しないと制限に引っ張られてエラーになる (内部的に「“cpu”: 0」は「“cpu”: 2」として扱わる)
  5. 21 トラブル事例2 Fargate Platform Versionとサポートの循環にハマる Fargate PV 1.4.0 Datadogモニタリングで一部のデータ関 連付けが抜ける問題が発生 AWS

    Support PV 1.4はメトリクスの提供に問 題あり。AWS側の修正待ち。 PV 1.3を使って下さい。 PV 1.4で修正されています。 Fargate PV 1.3.0 ECS基盤が不安定な時にコンテナが停止す ると検知しない問題が発生 Datadog Support *AWSの修正がされた後、Datadog側にも修正があり現在は解決 
 https://github.com/DataDog/dd-trace-java/pull/2432 

  6. 22 トラブル事例3 サイドカーが巻き込み事故を起こす 一定の負荷が掛かると「failed container health checks」エラーが頻発 サイドカーのDatadog Agentコンテナのヘルスチェックコマンドが失敗して停止 起動必須にしているためメインのアプリコンテナを巻き込んで再起動が発生 *以下の変更前後で発生

    Fargate PV 1.3.0 + Datadog Agent 7.24.0 から Fargate PV 1.4.0 + Datadog Agent 7.26.0 へ サイドカーのリソースきちんと見るの重要 *DatadogドキュメントのECS Fargate定義例 "name": "datadog-agent", "cpu": 10, "memoryReservation": 256, "essential": true, "healthCheck": { "command": [ "CMD-SHELL", "agent health" ], "interval": 30, "retries": 3, "startPeriod": 15, "timeout": 5 }, Datadog Agentコンテナのリソース不足により ヘルスチェックが時々失敗する状況が発生
  7. 25 まとめ  ・ECS Fargateで楽になったの? 楽になった!(状況にマッチしているから) 次に行けばいい!(状況にマッチしなくなったら) 常に最適な環境を追い求める(王道) ・Cloud Nativeの取り組みって? Cloud

    Nativeの定義に沿って課題を整理・検討してみる 「インパクトのある変更を最小限の労力で頻繁かつ予測どおりに行 う」方法を考える(王道)