AWS Fargate 入門

AWS Fargateって何?

AWSによれば、AWS FargateとはAmazon ECSでサーバーやAmazon EC2インスタンスのクラスターを管理することなくコンテナを実行できる技術のことです。Fargateを使えば、仮想マシンのクラスターをプロビジョニングしたり、設定したり、スケーリングする必要がなくなります。

つまり、アプリケーションの開発やビジネス価値にもっと集中できるし、インフラの管理やメンテナンスに時間をかけずに済むんですね。

コンポーネント

クラスター
AWS ECSでは、タスクやサービスをまとめてグルーピングしたり、アプリケーションを隔離するためにクラスターを使います。

タスク定義
タスク定義は、アプリケーションを形成するコンテナについて記述したテキストファイルです。これはJSONファイルで、最大10個のコンテナを記述することができます。
ファイルには、アプリケーションのために開けておくべきポート情報などが含まれています。

タスク
タスクはタスク定義にあるコンテナを実行するときに作られます。

サービス
サービスはタスクを作る役割があります。仮にタスクのコンテナがエラーや何かの原因で失敗したり、EC2インスタンスがダウンしたりしても、ECSサービスがタスク定義に基づいて別のインスタンスを立ち上げてそれを置き換えます。

コンテナレベルでアプリとサービスを管理するってどういうこと?
これをもっと分かりやすく説明するために、AWS ECSスタックの中でFargateのシンプルなアーキテクチャを見てみましょう。

ここに示されているように、ECSとFargateでは、「タスク定義」から始まります。お客さんはタスク定義を使って、コンテナ、CPU、メモリ、イメージなどを定義し、コンテナがどう動作すべきかを指示します。
その後「タスク」はアプリケーションを構成する一つ以上のコンテナを表します。
タスクを実行するためには、start task APIを使って、自分で管理するEC2インスタンスか、Fargateによる管理環境のどちらかを起動タイプとして選びます。

AWS FargateはAWSコンソール、AWS CLI、アマゾンECS CLIから使用することができます。

Fargateでのネットワーキング
AWS FargateはあなたのVPC内で動作し、コンテナ化されたアプリケーションを実行するインスタンスに必要なVPC、サブネット、セキュリティグループを選択します。

Fargateはアプリケーションロードバランサー"ALB"、ネットワークロードバランサー"NLP"をサポートしています。

Fargateのセキュリティ
SSHアクセスなし。インフラの管理をAWSに任せているため、SSHアクセスの必要がなくなりセキュアです。
さらにコンテナのクラスターレベルでの隔離が可能です。

Fargateのユースケース

  • 長期実行サービス
  • 高可用性ワークロード
  • モノリシックアプリケーション
  • マイクロサービスアプリケーション

いつFargateを使わない方がいい?
アプリケーションを実行しているリザーブドインスタンスがある場合は、EC2モードを選ぶべきです。
Fargateは使用したCPUとメモリの秒数に基づいて料金を請求するため、リザーブドインスタンス割引プランには適用されません。

注意: 2019年より前はスポットインスタンスプランがサポートされていませんでしたが、AWS re:Invent 2019でAWSはAWS Fargate Spotを発表しました。Fargate SpotはAWS Fargate上で中断に対応できるAmazon ECSタスクをFargate価格から最大70%オフで実行できる新機能です。

AWS上のコンテナサービス
コンテナやFargateの使用が初めてであれば、そのコンテナサービスについてもっと理解した方がいいでしょう。AWSのドキュメントでそれについて読むのがベストです。読むべきドキュメントは以下の通りです。

Amazon ECS
Amazon EKS
Amazon ECR

チュートリアル「AWS Fargateの使い方」
基本が理解できたら実際に手を動かしてみたくなりますよね。さあ、AWS Fargateを使ってサンプルコンテナをデプロイする方法を学ぶチュートリアルを始めましょう。

1- コンソールにサインインして、「AWS ECS」を検索して、「開始する」をクリックします。最初に作るコンポーネントはタスクをまとめるクラスターです。
2- 「クラスターの作成」をクリックします。クラスター名を入力し、クラスターを作成するVPCとサブネットを選択します。

インフラセクションでは、あなたのためにAWS Fargateが選択されているのが分かります。

「作成」をクリックします。

3- クラスター名をクリックしてそのページを開き、サービスタブから新しいサービスを作成するために「作成」をクリックします。

4- 「起動タイプ」でFargateを選択します。

5- 「デプロイメント構成」セクションまでスクロールダウンし、「タスク定義」をクリックします。

これで新しいブラウザタブが開き、「タスク定義」を作成することができます。

6- 「新しいタスク定義の作成」をクリックします。「タスク定義ファミリー」の名前を入力してください。コンテナの詳細セクションではコンテナ名とイメージURIを入力します。AWS ECRにイメージがない場合は、先に取得してください。

7- 「ポートマッピング」を確認し、「次へ」をクリックします。

8- 「環境」セクションで、AWS Fargateが選択されていることを確認し、あなたに合ったCPUとメモリを選択します。

9- すべてのデフォルト設定を受け入れて、下にスクロールダウンし、「次へ」をクリックします。

10- 「レビューと作成」ページで、すべてを確認して「作成」をクリックします。

11- 「サービスの作成」ページに戻り、ページをリフレッシュして作成したばかりのタスク定義を読み込んで選択し、「サービス名」を入力します。

12- 必要に応じてネットワーキングとロードバランスのセクションを確認し、最後に「作成」をクリックします。

13- サービスの健康状態を見るためにそのページをクリックします。

14- 「構成とタスク」をクリックします。

15- 下までスクロールして、タスクが実行されていることを確認し、名前をクリックします。

16- 「アドレスを開く」をクリックし、サービスが実行されていることを確認します。

ステップ16で接続できるようにするには、セキュリティグループにポート80へのトラフィックを許可するルールを追加する必要があります。

これで全部です。
コンテナを削除して、請求に予期せぬ費用が発生しないようにすべてのリソースをクリーンアップすることを忘れないでください。

この記事があなたのお役に立てば幸いです。読んでくれてありがとうございます。

サーバーレスの記事やチュートリアルをもっと読みたい方は、ぜひフォローしてください。

こちらの記事はdev.toの良い記事を日本人向けに翻訳しています。
https://dev.to/aws-builders/introduction-to-aws-fargate-4iaf