最近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を探してました;;)
左の方にECS、EKS、ECR、Marketplaceの4つのメニューが表示されているので、今回は一番上のAmazon ECSのクラスターを選択します。
ECSクラスターの管理画面が表示されます。
今回はサンプルアプリを動かしたいだけなので「今すぐ始める」を押下します。
「今すぐ始める」を実行するとAWS側で準備されているテンプレートを選択できるようになってます。
コンテナイメージを自分で準備する必要がなく、ネットワークやCPUなども既に設定されているため、試しに動かしてみるには最適です。
今回はsample-appを選択して「次へ」を押下します。
ちなみにここの編集を押下すると
こんな感じに追加で編集することも可能です。
試しにポートマッピングを80から20080に変更しています。
次はサービス定義を設定していきます。
ここではセキュリティグループやロードバランサーの設定が可能です。
今回はセキュリティグループを若干変更したいので編集を押下します。
デフォルトのセキュリティグループ設定では0.0.0./0をインバウンドで許可するような設定となっているので、自分のPCのアクセスIPからのみ許可するように変更しておきます。
変更できたら保存して次の設定にいきます。
次の設定ではECSクラスターの名前を入力します。入力できたら次にいきます。
※VPCとサブネットは自動で作成されます。
最後にこれまでの設定した内容を確認して、問題なければ「作成」ボタンを押下します。
ECSクラスターと必要なリソースが作成されていきます。
作成には最大で10分かかる場合があるようです。
今回作成されたECSリソースとAWSサービスは以下の通りです。
AWSサービス | 作成対象 |
ECS | クラスター、タスク定義、サービス |
ECS以外 | ロググループ、Cloudformationスタック、VPC、サブネット1、サブネット2、セキュリティグループ |
実際に作成されたECSリソースはこちらです。
タスク定義だけリビジョン番号がついているので、履歴管理ができるようになっているようです。
起動したサンプルアプリにアクセス
ECSクラスターを作成する際にsample-appを指定したので、ブラウザからサンプルアプリにアクセスができるようになっているはずです。
実際にアクセスできるか試してみます。
作成したECSクラスターに紐づいているタスク定義の詳細を開いてネットワークのパブリックIPを確認します。
「[パブリックIP].[ポート]」をブラウザに入力しアクセスできるか確認します。
何故か失敗しました。。
少し勘違いしてました。途中修正したポートマッピングはコンテナ←→ホストのマッピングなので、そこを変えてもアクセスするポートは変わりませんでした。。
docs.aws.amazon.com
なので、デフォルトで設定されるはずだった80ポートをセキュリティグループで許可してあげます。
もう一度アクセスすると想定通りサンプルアプリが表示されました。
作成されたリソース確認
再掲しますが、今回自動で作成されたリソースは以下になります。
AWSサービス | 作成対象 |
ECS | クラスター、タスク定義、サービス |
ECS以外 | ロググループ、Cloudformationスタック、VPC、サブネット1、サブネット2、セキュリティグループ |
この中でCloudformationがあるので、恐らく大体のリソースはこれで作られているような気がします。
実際に作成されたスタックを確認してみます。
以下を見る限りCloudformationで作成されたのは、VPC・パブリックサブネット・IGW・SG・ルートテーブルとあとそれに付随するアタッチ設定でした。
どうやらECSリソース以外がCloudformationで作成されているようです。
※ロググループは別で作成されているようです
サンプルアプリではなく自分で作成したアプリを動かしたい場合、最低限上記のリソースは作成済みor作成されることを認識しておいたほうが良いと思いました。
感想及び所感
思ったよりも簡単に動かすことができました。
まずはざっくりサービスの動きをつかむという目的は達成できたのではないかと思います。
今度はFargateを使わないでECSを使ってみたいと思います。