はじめに
今までECSを触ってこなかった私ですが、FargateのSpotFreetが安いという事実を知り、それなら使ってみようという気になり試しに使ってみました。今回はマイクラサーバのイメージ(itzg/minecraft-server)を使い、AWSのマネジメントコンソール上で設定します。
構成図
EFSのファイルシステムを作成する手順は省略します。
クラスターの作成
まずは、クラスターを作成します。クラスター名を設定する必要があるため、ここでは test-arm としておきます。
また、任意のVPCとサブネットを選択しますが、今回はNATゲートウェイなどを用意しないため、コンテナが直接外部とアクセスできるようパブリックサブネットを指定しておかないとこの後のプロセスでエラーになります。今回はデフォルトのサブネットを選択しておきます。
タスク定義の作成
次に、タスク定義を作成します。
下記の画像を参考に設定してください。今回のマイクラのコンテナの場合、EULA=TRUE
を設定しておかないと起動しません。また、Dockerイメージで使用しているJavaが使用するメモリは、デフォルト1Gで設定されているようなのですが、1Gだと足りないので追加で設定します。推奨値はコンテナ側でメモリ制約をかけた値の8割らしく、今回はコンテナ側で2GBのメモリを確保する予定であるため、MEMORY=1600M
で設定しました。
続いて動かす環境を指定します。今回は(費用節約のため)ARM64で設定しました。ARM64を設定する注意点として、Dockerイメージ側で対応していることは事前に確認が必要です。
続いてEFSの設定を実施します。外部のストレージを用意しないと、コンテナ停止時にデータが消えてしまいますので、注意が必要です。
サービスの作成
タスク定義の設定が完了したら、サービスを作成します。
ここで、キャパシティープロバイダー戦略を指定して、スポットで起動したかったのですが、エラーとなりました。SPOTはARM64では利用できないようです。そのため、通常のFargateで起動します。無念。
デプロイ設定では、任意のサービス名を入力します。必要なタスクは1です。
大事なのはネットワーキングの部分。ここでパブリックIPを割り当てておかないと、Dockerイメージのダウンロードに失敗してコンテナが起動しません。セキュリティグループは適宜割り当てておきます。
ここまで入力できたら、起動をクリックして、無事サービスが立ち上がることを祈ります。
実際にサーバに入れるか試す
まずは、パブリックIPを知るために、クラスターのタスクを選択します。
下記の赤枠に記載されているパブリックIPをメモして、サーバに入れるか試します。
私の環境では、無事ログインできました。(画像はCloudWatchのログ)ただ、Can't Keep Upと警告が出ており、メモリ使用率が上限に近いため、もっとメモリを上げたほうがよさそうです。
おわりに
無事にECSを立ち上げることはできました。次はこの設定をCloudFormationで行えるようにしたいと考えています。