LoginSignup
1

More than 3 years have passed since last update.

EC2と関連付けてざっくり理解するFargate

Posted at

弁護士ドットコムという会社で税理士ドットコムというサービスの開発をしています @ug23 です。

この記事は弁護士ドットコム Advent Calendar 2020 の23日目の記事です。祝日じゃないイブイブに違和感ありまくりですね。

PHPのテスティングフレームワークを比較してみたい という意気込みを書いていましたが最近PHPを書くよりもDockerやAWSに関係する業務が多かったので、最近やったことを中心に整理しつつまとめました。

EC2しか触ったことがないけどFargateを触る必要が出てきた方や、ECSは使っていないけどFargateを使ったことのない方の理解の一助となれば幸いです。

Fargateのベストプラクティスや構築方法については触れません。

Fargateと私

先日税理士ドットコムはEC2をベースにした構成からFargateを使った構成に移行しました。

インスタンスの管理から解放され、コンテナの管理に集中できるようになったり、動作環境のアップデートやスケールイン/スケールアウトも素早くできたりするなど移行して間もないながらメリットを多く感じています。

しかし、私個人としては本番環境がコンテナベースになるというのが初めての経験だったのでFargateに触れたばかりのころはEC2と概念の違いに戸惑う事がよくありました。開発環境はDockerなので日常的にコンテナに触れてはいたのですが、SpinnakerやKubernetesなど本番でコンテナをいい感じに動かすツールに縁がありませんでした。Fargateに慣れるためにも概念を整理しながら進めていました。

勉強しながら気づいたのはFargateになってもAWSの既存と結びつけて考えられるという点でした。

ECSとFargateの関係

FargateはECS(Elastic Container Service)のサービスの中で使うことができるものです。そのため、Fargateを理解するにはECSを理解する必要があります。

ECSはその名の通り、コンテナに関連するサービスでオーケストレーションを担います。
その中で、コンテナの起動タイプを以下から選択することになります。

  • EC2起動タイプ: EC2を起動しその上でコンテナを動かす
  • Fargate起動タイプ: Fargateでコンテナを動かす

EC2起動タイプはEC2を管理しながらほかの自動化ソリューションを使ってEC2上でDockerコンテナを実行するのに近い形で運用できるようです。一方でEC2の管理はしないといけない課題が残ります。

Fargate起動タイプにすることでFargateを利用してEC2の管理をユーザ側で意識することなくサービスを運営できるようです。1

もし、現在ECSでEC2起動タイプを利用して運営しているサービスがあるなら起動タイプをFargateに変更すれば移行はできます。(もちろんネットワーク構成などが変わるため検証は必要ですが)

EC2と同じではないが似たような機能は用意されている

Fargateはコンテナで扱うという特徴からEC2と全く異なる概念を扱うと思いがちですが、結構似たような概念のものが用意されています。

EC2では Fargateでは 説明
インスタンスタイプ CPU/メモリ設定 Fargateではインスタンスタイプよりも柔軟にvCPUとメモリ容量の組み合わせをタスクごとに設定できる
インスタンスストア タスクストレージ タスクごとに20GBのエフェメラルストレージを利用できる。タスクを終了するとデータはロストする
EBS EFS EBSは利用できないのでEFSを利用する
スポットインスタンス Fargate Spot キャパシティプロバイダーの設定でFARGATE_SPOTを設定すると通常のタスクの最大7割引で利用できる。中断リスクは変わらない
インスタンスごとのIAMロール タスクごとのIAMロール IAMロールの範囲がタスク単位になる

似ていると言っても完全に同じではないので利用したい場合は実際にメリット/デメリット、制約条件や課金体系を確認してから使いましょう。

awsvpcネットワークモード

EC2を扱っているところから一気に変わる部分としてはタスクネットワーキングがawsvpcに固定されるところでしょうか。

  • タスクごとにENI(Elastic Network Interface)を持つため、private IPが割り振られる
  • タスク内で複数コンテナを起動できるが、内部ではlocalhostインターフェイスを共有しているので同じタスクの別のコンテナへlocalhostでアクセスできる
    • Webサーバを提供するコンテナと各種モニタリング系サービスのエージェントを同タスクに配置してlocalhostでアクセスし合うことができる
  • 同VPC内であればインスタンスと同じようにprivate IPでアクセス可能
  • ALBに接続するために、ターゲットグループへ登録する際はターゲットタイプをIPとしてタスクを登録する

タスク内でlocalhostを共有する部分は面食らうと思いますが実際に構築してみると身体で感じられるかと思います。

さいごに

EC2しか扱ったことのない私でも、Fargate内で扱っている概念やネットワーキングのしくみがわかると基本的なところはそこまで変わらないことがわかり、業務を通して慣れていくことができました。Fargateを使うことになった、転職したら環境がFargateだった、という方はぜひ怖がらずにFargateに触ってみてほしいです。

また、AWSに関してはこれに限らず、blackbelt online seminarのスライドを読むことでサービス概要やほかのサービスとの関連性を学べるので、サービスをはじめて触る場合は確認してみましょう。(ここに書いてあることはこれらのスライドに書いてあります)

明日は @poemn さんがなにか書いてくれるらしいです。


  1. こちらのスライドの9ページを見る限り、ユーザが管理していないだけで動いているのはAWS基盤側が管理しているEC2環境のようです。 

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1