Amazon ECS Deep Dive

# Amazon ECS Deep Dive

https://d1.awsstatic.com/webinars/jp/pdf/services/20190731_AWS-BlackBelt_AmazonECS_DeepDive_Rev.pdf

## Amazon ECSとは

コントロールプレーンとしての基盤

 

# Q&A

Q1. アプリケーションの設定値・秘密情報の配布方法

A.

  • 設定値 -> 環境変数
  • 秘密情報 -> AWS Secret Manager
    • valueForm Secrets ARNを入れられる(Task Secrets Manager を見るのではなく、ECSから渡す)

 

Q2. サービスディスカバリの方法はALBを利用するのか?

A.

サービスディスカバリには以下の2つがある。

  • LBベース
    • ServiceA -> ALB -> ServiceB
    • ECSがタスクを起動した上で、ターゲットグループに登録(停止時は登録を解除)
    • LBの機能(Connection Draining , L4/L7, ELB healthcheck)が利用できる
    • インターネットアクセスを利用可能
    • LBドメイン名で宛先を解決
  • DNSベース
    • ServiceA -> ServiceB
    • ECSがサービスを起動し、DNSレコードを追加(停止時は削除)
    • コンテナレベルでのヘルスチェックのみ有効
    • セキュリティグループ設計などの設計がシンプルになる

 

負荷分散/ヘルスチェック目的だけであれば、低コストでシンプルな設計になるDNSベースのECS Service Discoveryがよい.

 

 

Q3. サイドカーコンテナのような依存関係のあるコンテナをどのように制御すれば良いか

A.

dependsOn パラメータで起動順・停止順を制御できる(複数種タイミングの制御ができる)

startTimeout, stopTimeout パラメータでタイムアウト制御ができる

 

Q4. Scheduled Task のエラーハンドリングの方法

A.

  • 他のサービスとの連携でフロー管理したいのであれば AWS StepFunctions を利用
  • 単純なエラー検知であれば、CloudWatch Events でコンテナの状態変更イベントを取得する方法もある
    • 失敗時にCloudWatch Events で検知し、Lambdaから再実行
    • CloudWatch Events で検知し、Amazon SNSで通知

 

Q5. もっとカスタマイズしたデプロイやロールバックを実現したい

A.

 

  • ローリングアップデート
  • Blue/Green デプロイメント
  • External Deployment Controller(より柔軟なデプロイ)
    • 上記より柔軟にカスタマイズできる
    • 外のツールからAPI経由でコントロール
    • 1つのServiceの中に複数のTaskSetを維持しトラフィック分散可能
    • Scale-In/Out は自身で管理する必要がある
    • APIまたはCLIでしか設定できない

 

Q6. EC2起動タイプでawsvpcネットワークモードを使っているとEC2リソースは余っているのにタスクが立ち上がらない

A.

  • デフォルトのままだとインスタンスサイズによってTaskに制限がある
  • Awsvpc ネットワークモードをEC2起動タイプで利用している場合はENI Trunking 機能を利用することでENI上限値を高めて多くのタスクを配置できるようになる(だいたい10倍くらいになる)

 

Q7. アプリの立ち上がりが遅いので初回のヘルスチェックを遅らせたい

A.

  • healthCheckGracePeriodSecondsを変更する
    • ECSからのヘルスチェック時間は変わらない
    • ALBからのヘルスチェックのタイミングを遅らせられる

 

Q8. スペック選定の方法

A.

  • Cloudwatch Container Insights を利用する
    • CPU
    • メモリ
    • Network
    • Running/Pending のタスク数
    • サービスで実行されているタスク数 など
  • ECSタスクメタデータエンドポイントを利用

 

## 雑感

ユースケースに合わせて適切な解決策を聞いていくのは面白いです。