カピバラ好きなエンジニアブログ

興味ある技術とか検証した内容を赴くままに書いていきます。カピバラの可愛さこそ至高。

ECS+Fargateでサンプルアプリを動かしてみる

最近10年ぶりぐらいにモンハンにハマっているハンダです。

これまでコンテナという言葉はよく聞くことがあっても、ローカルPCでDocker使うぐらいでAWSのコンテナサービスを自分で動かすことはありませんでした。

昨年12月にLambdaでコンテナがサポートされたときに少し触りましたが、それでもECSの触りぐらいです。
qiita.com

上の記事を書いたときからまたしばらく触ることがなかったのですが、最近ECS・EKS・Fargate といった用語を聞くことが増え、そろそろ理解していないとダメだなと思ったのでまず今回はFargateでサンプルアプリを動かすところまでやってみようと思います。

実施作業

AWS Fargateとは?

動かす前にまずはどのようなサービスか公式で確認します。
aws.amazon.com

公式には以下のようにありました。

AWS Fargate は、Amazon Elastic Container Service (ECS) と Amazon Elastic Kubernetes Service (EKS) の両方で動作する、コンテナ向けサーバーレスコンピューティングエンジンです。Fargate を使用すると、アプリケーションの構築に簡単に集中することができます。Fargate ではサーバーのプロビジョンと管理が不要となり、アプリケーションごとにリソースを指定してその分のみ料金を支払うことができ、設計段階からのアプリケーション分離によりセキュリティを強化します。


ECSでサービスを運用したことない自分ですが、要するにコンテナをマネージドに動かすためのサービスなんだなと理解しました。

今回は動かすことが目標なので、ざっくりとした理解で進めていきます。

ECSクラスタの作成

まずはAWSマネジメントコンソールにログインしてECSコンソールを開きます。
(最初勘違いして検索窓でAWS Fargateを探してました;;)
f:id:live-your-life-dd18:20210409191837p:plain


左の方にECS、EKS、ECR、Marketplaceの4つのメニューが表示されているので、今回は一番上のAmazon ECSのクラスターを選択します。
f:id:live-your-life-dd18:20210409192041p:plain


ECSクラスターの管理画面が表示されます。
今回はサンプルアプリを動かしたいだけなので「今すぐ始める」を押下します。
f:id:live-your-life-dd18:20210409193136p:plain


「今すぐ始める」を実行するとAWS側で準備されているテンプレートを選択できるようになってます。
コンテナイメージを自分で準備する必要がなく、ネットワークやCPUなども既に設定されているため、試しに動かしてみるには最適です。
今回はsample-appを選択して「次へ」を押下します。
f:id:live-your-life-dd18:20210409193355p:plain


ちなみにここの編集を押下すると
f:id:live-your-life-dd18:20210409193819p:plain


こんな感じに追加で編集することも可能です。
試しにポートマッピングを80から20080に変更しています。
f:id:live-your-life-dd18:20210409193934p:plain


次はサービス定義を設定していきます。
ここではセキュリティグループやロードバランサーの設定が可能です。

今回はセキュリティグループを若干変更したいので編集を押下します。
f:id:live-your-life-dd18:20210409194139p:plain


デフォルトのセキュリティグループ設定では0.0.0./0をインバウンドで許可するような設定となっているので、自分のPCのアクセスIPからのみ許可するように変更しておきます。
変更できたら保存して次の設定にいきます。
f:id:live-your-life-dd18:20210409194422p:plain


次の設定ではECSクラスターの名前を入力します。入力できたら次にいきます。
VPCとサブネットは自動で作成されます。
f:id:live-your-life-dd18:20210409194645p:plain


最後にこれまでの設定した内容を確認して、問題なければ「作成」ボタンを押下します。
f:id:live-your-life-dd18:20210409194837p:plain


ECSクラスターと必要なリソースが作成されていきます。
作成には最大で10分かかる場合があるようです。
f:id:live-your-life-dd18:20210409195036p:plain


今回作成されたECSリソースとAWSサービスは以下の通りです。

AWSサービス 作成対象
ECS クラスター、タスク定義、サービス
ECS以外 ロググループ、Cloudformationスタック、VPC、サブネット1、サブネット2、セキュリティグループ



実際に作成されたECSリソースはこちらです。
タスク定義だけリビジョン番号がついているので、履歴管理ができるようになっているようです。
f:id:live-your-life-dd18:20210409195609p:plain
f:id:live-your-life-dd18:20210409195704p:plain
f:id:live-your-life-dd18:20210409195521p:plain

起動したサンプルアプリにアクセス

ECSクラスターを作成する際にsample-appを指定したので、ブラウザからサンプルアプリにアクセスができるようになっているはずです。


実際にアクセスできるか試してみます。
作成したECSクラスターに紐づいているタスク定義の詳細を開いてネットワークのパブリックIPを確認します。
f:id:live-your-life-dd18:20210409200141p:plain


「[パブリックIP].[ポート]」をブラウザに入力しアクセスできるか確認します。
何故か失敗しました。。
f:id:live-your-life-dd18:20210409200749p:plain


少し勘違いしてました。途中修正したポートマッピングはコンテナ←→ホストのマッピングなので、そこを変えてもアクセスするポートは変わりませんでした。。
docs.aws.amazon.com


なので、デフォルトで設定されるはずだった80ポートをセキュリティグループで許可してあげます。
f:id:live-your-life-dd18:20210409201850p:plain


もう一度アクセスすると想定通りサンプルアプリが表示されました。
f:id:live-your-life-dd18:20210409201942p:plain

作成されたリソース確認

再掲しますが、今回自動で作成されたリソースは以下になります。

AWSサービス 作成対象
ECS クラスター、タスク定義、サービス
ECS以外 ロググループ、Cloudformationスタック、VPC、サブネット1、サブネット2、セキュリティグループ



この中でCloudformationがあるので、恐らく大体のリソースはこれで作られているような気がします。
実際に作成されたスタックを確認してみます。


以下を見る限りCloudformationで作成されたのは、VPC・パブリックサブネット・IGW・SG・ルートテーブルとあとそれに付随するアタッチ設定でした。

どうやらECSリソース以外がCloudformationで作成されているようです。
※ロググループは別で作成されているようです
f:id:live-your-life-dd18:20210409202453p:plain


サンプルアプリではなく自分で作成したアプリを動かしたい場合、最低限上記のリソースは作成済みor作成されることを認識しておいたほうが良いと思いました。

お片付け

最後に作成したリソースをお片付けします。
ECSのクラスター画面からクラスターの削除を実行します。
f:id:live-your-life-dd18:20210409210651p:plain
f:id:live-your-life-dd18:20210409204633p:plain


少し時間はかかりますが、ECSクラスターと関連するECSリソースの削除ができました。
どうやらECSのタスク定義は削除対象外のようです。
Cloudformationで構築されたリソース群も一緒に削除されているようです。
f:id:live-your-life-dd18:20210409204948p:plain


ただ、唯一CloudWatchのロググループだけは削除されずに残ってました。
f:id:live-your-life-dd18:20210409210508p:plain

感想及び所感

思ったよりも簡単に動かすことができました。
まずはざっくりサービスの動きをつかむという目的は達成できたのではないかと思います。
今度はFargateを使わないでECSを使ってみたいと思います。