AWS Fargateの素晴らしさをチュートリアルで体験する

Pocket

はじめに

こんにちは。千葉です。皆さん、AWS Fargateってご存知ですか?

AWS Fargateとは、一言でいえば「ホストの管理なしにコンテナを動かすためのサービス」です。AWSにはAmazon ECSという、EC2インスタンスの上でコンテナを動かすためのサービスがあるのですが、これはAmazon ECSの利用者がEC2インスタンスのことを考える必要がありました。「これ以上コンテナを増やしたらメモリが不足しそうだから、EC2のインスタンスタイプを変えようかな」とかです。

しかし!AWS Fargateを使えばEC2インスタンスのことなんか考えなくてよくなります。コンテナに割り当てるCPUとメモリ、あと少しの情報を入力すれば、コンテナが起動します。なんて楽なんでしょう!なんて素晴らしいんでしょう!

というわけで、是非皆様にもAWS Fargateの素晴らしさを知っていただきたく、AWSで用意されているチュートリアルでコンテナを起動して、削除するまでをご紹介します。

AWS Fargateのチュートリアルを開始

まずはAWSコンソールにログインします。ログインしたらAWS Fargateのチュートリアル開始画面にアクセスしてください。

AWS Fargateのチュートリアルを行う際は、バージニア北部のリージョンであることに注意してください。いまのところAWS Fargateは、バージニア北部やオハイオ、オレゴン、アイルランドリージョンでのみサービス提供しています。東京リージョンではまだAWS Fargateは提供されていませんが、そのうち対応されるでしょう。期待して待つことにします。

リンク先に飛ぶと、「Fargate を使用して Amazon Elastic Container Service (Amazon ECS) の使用を開始」という画面が表示されます。この記述からもわかる通り、AWS FargateはAmazon ECSを使ったサービスです。そのため、AWS Fargateで何かしたい場合はAmazon ECSのメニューから行います。「Fargate」でメニューを検索しても、そんなサービスありません的なメッセージしか出てこないので注意してください。

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

「Container definition」(コンテナ定義)設定をします。図の一番内側にあたる部分ですね。ここでは以下の設定をします。

  • どのコンテナイメージを使うのか
  • コンテナにどの程度のCPUとメモリを割り当てるのか

とはいえ、ここはチュートリアル。3つのうちから選べばいいようにできています。(1つはカスタムです。)ここでは「nginx」を選びましょう。

  • nginx:latest というコンテナイメージを利用
  • メモリは0.5GB
  • CPUは0.25 vCPU

ちなみに、AWS Fargateではコンテナに割り当てるメモリとCPUの組み合わせが限られています。そのため、要件に合うメモリとCPUの組み合わせがないよ~、とか、GPU使いたいよ~、という時はAWS FargateではなくAmazon ECSを使わざるを得ません。AWS Fargateは便利ですがその分柔軟性は低いようです。

その次の「Task definition」(タスク定義)はコンテナ定義をどう管理するかを設定します。どのコンテナを同時に起動するか、どのネットワークモードで動かすか、どう起動するか等を設定するのですが、このチュートリアルでは設定が固定されており、変更することはできません。そのため、このまま進みます。

「次のステップ」ボタンを押します。

サービスの設定

サービスでは、先程設定したタスク定義を何個実行して維持するかを設定します。ここでは以下の設定をします。

  • 必要なタスクの数(タスクを何個起動するか)
  • セキュリティグループ
  • ロードバランサの種類
    • ロードバランサを使うか使わないか
      • ロードバランサリスナーポート(使う場合)
      • ロードバランサリスナープロトコル(使う場合)

チュートリアルではロードバランサの種類しか指定できません。後でタスク数を増やして負荷分散させてみたいので、ロードバランサの種類の中から「Application Load Balancer」を選ぶことにします。選んだら「次」ボタンを押します。

クラスターの設定

クラスターの設定では、以下の設定をします。

  • コンテナで使用するVPC
  • コンテナで使用するサブネット

チュートリアルではクラスター名を指定できるようになっていまが、すでに「default」と入力されているのでこのままにしておきましょう。「次」ボタンを押します。

設定の確認

いままで設定してきた内容が表示されるので、問題がないか確認して「作成」ボタンを押しましょう。

作成ステータスの確認

作成のステータスを確認することができます。(ここでブラウザの再読み込みするとステータスが見れなくなってしまうので注意!)正常に終わればこのような画面になります。

すべてが完了したことを確認したら「サービスの表示」を押しましょう。

クラスターの確認

作成したクラスターの確認をします。先程作成された「default」というクラスターの概要が表示されています。「アクティブなサービス」が1、「実行中のタスク」が1となっていることを確認しましょう。

nginxへの接続確認

nginxに接続できるか確認してみましょう。今回はロードバランサーの後ろにコンテナを配置したので、ロードバランサのホスト名にアクセスすればnginxにリクエストが転送されるはずです。作成したロードバランサのDNS名を確認しましょう。クラスター名のリンクをクリックします。

「サービス」タブの中の「サービス名」をクリックします。

「詳細」タブの「ロードバランシング」の「ターゲットグループ名」をクリックします。

ターゲットグループの画面になったら、「説明」タブのロードバランサ名をクリックします。

「説明」タブのDNS名をブラウザのアドレスバーにコピペします。

ブラウザでEnterを押して、以下の画面が表示されればOKです。

ここまででコンテナを動作させるためのEC2の設定はありませんでした。そうです。設定する必要はないのです!

動作するタスクを2つにしてみる

せっかくなので、タスクの数を2個に増やしてみましょう。負荷分散したいですもんね!サービスの画面の右上にある「更新」ボタンを押します。

サービスの設定で、タスクの数を2に変更します。あとは変更する箇所はないので、「次のステップ」を2回、「サービスの更新」を1回クリックします。作業自体はたったこれだけ。

「サービスが正常に更新されました」が表示されればOKです。

サービスの表示ボタンを押しましょう。起動直後はサービスが「保留中の数1、実行中の数1」ですが、しばらくすると「保留中の数0、実行中の数2」になります。これでサービスが2つ起動しました。

ブラウザで何回かロードバランサのURL(先ほどnginxのページを表示させましたね)にアクセスした後、ログタブを見てみましょう。2つのタスクにアクセスが割り振られているのがわかります。

作ったものを削除

さて、AWS Fargateでお手軽簡単にコンテナを動かすことができることが分かりました。遊んだ後は片付けをしましょう。(AWS Fargateを利用すると秒単位(最低1分)で課金されます。)消し方はとっても簡単で、クラスターを削除すればその下のものが全部消えます。クラスター名(default)をクリックし、「クラスターの削除」を押しましょう。「クラスターとその内部のすべてのECSリソースを削除してもよろしいですか?」と聞かれるので「削除」を押します。

しばらく時間がかかりますが、これでキレイさっぱり、全部消えます。

…と言いたいところなのですが、実はいままでの操作でCloudWatch Logsのログストリームが作成されています。残っていても金額的には大したことありませんが、気持ち悪いので消しましょう。消し方は、CloudWatchのメニューから「ログ」→「ロググループ」→「/ecs/first-run-task-definition」のロググループをクリックし、表示されたログストリームを全部選択して「ログストリームの削除」を押して「はい、削除します」を押します。

これで後片付け完了!

おわりに

いかがでしたでしょうか。AWS Fargateでコンテナを動かす場合は、全然EC2のことを意識せずに済むことがお分かりいただけたかと思います。Amazon ECS以上にお気楽にコンテナを動かせるAWS Fargate、是非使ってみてくださいね!

お問い合わせ先

執筆者プロフィール

Chiba Kumiko
Chiba Kumikotdi デジタルイノベーション技術部
開発プロジェクトの技術支援や技術の検証に従事しているインフラエンジニアです。Unix/Linuxを扱う機会が多く、構築から運用保守まで一通り携わった経験があります。好きな言葉は「試験運用」。
Pocket

関連記事