血と汗となみだを流す

クラウドエンジニアになるための修業の場

AWS ECS + Fargateを触ってみる

概要

やってみる

Amazon ECSについて

クラスターについて

  • クラスターのイメージ図 f:id:Anorlondo448:20180310070133p:plain
  • 勉強会で出たイメージの説明
    • Cluster: サッカーチーム
    • Service: 監督
    • Task: ポジション
    • Container: 選手
  • 選手をどこかのポジションに割り当てて、監督が指示を出すサッカーチーム

タスク定義を作る

  • タスク定義の作成 f:id:Anorlondo448:20180310071305p:plain
  • Fargate選択 f:id:Anorlondo448:20180310071327p:plain

タスクとコンテナの定義の設定

  • タスク定義名を入力
  • タスクロールはデフォルトの: ecsTaskExecutionRoleを指定
  • ネットワークモードはawsvpc固定っぽい f:id:Anorlondo448:20180310071524p:plain

Fargateタスクの設定

  • タスク実行ロール: ecstaskExecutionRole
  • タスクサイズは最小を選択
    • タスクメモリ: 0.5GB
    • タスクCPU: 0.25vCPU f:id:Anorlondo448:20180310071914p:plain

コンテナを追加

クラスターを作る

サービスの作成

サービスの設定

  • 起動タイプ: Fargate
  • タスク定義: 上記で作成したやつ
  • クラスター: 上記で作成したやつ
  • サービス名を入力
  • タスクの数: 1
    • タスクをいくつ実行するか。今回は特に並列とかしないので1
  • 最小ヘルス率/最大率
    • タスクを複数起動する時、サービスとしてどれくらい維持するか
    • タスク2台で、最小ヘルス率50だと、タスクが最低1つ起動している状態となる。
    • 50/100で設定 f:id:Anorlondo448:20180310074653p:plain

タスクの配置

ネットワーク構成

  • Fargateはawsvpcモード必須なので、VPC/サブネット/セキュリティグループの設定が必要らしい
  • 今回ネットワークに関してはデフォルトのやつをそのまま使う
  • クラスタVPC: デフォルトのやつ
  • サブネット: デフォルトのやつ
  • セキュリティグループ
    • HTTP:80のみ f:id:Anorlondo448:20180310074120p:plain
  • パブリックIPの自動割当: ENABLED

ヘルスチェック

  • ELBを使ってヘルスチェックをする場合の設定
  • 今回はコンテナインスタンスに直アクセスするためにELBは設定しない f:id:Anorlondo448:20180310075250p:plain

Auto Scale

  • サービスのAuto Scalingの設定
  • AutoScalingGroupのように、タスクの最小数/必要数/最大数を指定する f:id:Anorlondo448:20180310075403p:plain
  • サービスのAuto Scaleをするためのロール(ecsAutoscaleRole)が必要っぽい

自動タスクスケーリングポリシー

  • スケーリングポリシータイプ: ターゲットの追跡
    • ターゲットの追跡: ターゲット値を設定し、その値に近づくようにタスクが調整されるっぽい
    • ステップスケーリング: トリガーによってスケールアウト/インを設定するっぽい f:id:Anorlondo448:20180310080056p:plain

確認

  • 確認画面 f:id:Anorlondo448:20180310080129p:plain
  • サービス起動確認 f:id:Anorlondo448:20180310080513p:plain
  • タスク実行確認 f:id:Anorlondo448:20180310080542p:plain
  • コンテナインスタンス--となる
  • EC2インスタンス一覧を確認 f:id:Anorlondo448:20180310080658p:plain
  • 起動していない!マネージド!!!

画面確認

  • 起動したタスクから、Public IPを確認
  • ブラウザでアクセスしてみる f:id:Anorlondo448:20180310080821p:plain
  • My hostname で表示されるIDはコンテナIDらしい

備考

  • コンテナインスタンスがマネージドになるので、SSHログインができない
    • SSHで入ってコンテナ落とす→自動起動がやりたかったけどできず・・・

Fargateを使ったときの所感

  • EC2の管理がなくなった!
  • (サーバはあるんだけどユーザからは)サーバレス!サーバレス!サーバレス!(に見える)
  • コンテナインスタンスインスタンスタイプを指定しなくて良い
  • AMIの指定もないので、常に最新のAMIであがってくれる?
  • コンテナインスタンスのタスク配置も、テンプレート選べば楽
  • あとはEFSでボリュームの共通化もできれば完璧では・・・?

注意

  • Fargateを使ったほうがチョットネダンタカイ
    • 管理工数との見合いかと思う

最後

  • クラスター削除しておしまい f:id:Anorlondo448:20180310081139p:plain
  • タスク定義を削除するときは、タスクグループでなくタスクを消す(タスクを選択して、revisionごとに消す) f:id:Anorlondo448:20180310081319p:plain