7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ECS on EC2で導入した自社製品コンテナ(HULFT10)をECSマネージドインスタンスへ移行できるか検証してみた

Last updated at Posted at 2025-10-02

初めに

先日 AWS より以下の発表がありました。
Announcing Amazon ECS Managed Instances

※Google翻訳結果の引用

AWS は本日、Amazon Elastic Container Service (Amazon ECS) マネージドインスタンスの提供開始を発表しました。これは、インフラストラクチャ管理のオーバーヘッドを削減しながら、Amazon EC2 の全機能にアクセスできるように設計された、新しいフルマネージドコンピューティングオプションです。インフラストラクチャ運用を AWS にオフロードすることで、ECS マネージドインスタンスは、ワークロードを迅速に起動および拡張し、パフォーマンスを向上させ、総所有コストを削減するのに役立ちます。

ECSの起動タイプが増えるという、ECSを触れている人にとってはかなりインパクトのある発表だったかと思います。
かくいう私も ECS 上で動作するコンテナ製品である HULFT10 for Container Services を Marketplace に出品している身なので、今後この機能とどうやって向き合っていくべきなのか悩んでいます。

HULFT for Container Services は CloudFormation を利用して、ユーザー環境の ECS に HULFT コンテナを導入してもらう製品です。
導入時のオプションとして、ECS on EC2 と ECS on Fargate どちらで動作させるかを選択できるようにしています。

もともと、できればインフラは AWS のフルマネージドを利用して動作する仕組みを作りたかったので Fargate 版のみを提供する予定だったのですが、後述する理由から EC2 版でしか実現できない機能があり、EC2版も提供することとなりました。
今回 ECS マネージドインスタンスが提供されることで、フルマネージドで EC2 版のみで実現できている機能を提供できるのではないかということで、実現可能かどうかを調査しました。

検証内容

以下の二つを検証しました。

  • ユーザーデータ入力を使用した EC2 インスタンスの起動を指定可能か
  • CloudFormationで導入された ECS on EC2 環境を ECS マネージドインスタンス環境に移行可能か

ユーザーデータ入力を使用した EC2 インスタンスの起動を指定可能か

HULFT10 for Container Services では新規 VPC に ECS を導入する都合上、既存システムの EFS にアクセスするためには、ECSタスクでのマウントではなく、EC2 上でEFSをマウントする必要がありました。
これを実現するために、ユーザーデータ入力により、EC2 インスタンス起動時に EFS のマウントを実施しています。

今回対応したマネージドインスタンスでユーザーデータによる EFS のマウントが可能なのかを検証しました。

CloudFormationで導入された ECS on EC2 環境を ECS マネージドインスタンス環境に移行可能か

CloudFormation で HULFT10 for Container Services を導入済みのユーザーが、マネージドインスタンスを利用した起動設定に切り替えることができるのか(CloudFormation の設定と競合しない形で設定できるか)を検証しました。

検証結果

ユーザーデータ入力を使用した EC2 インスタンスの起動を指定可能か

キャパシティープロバイダーの作成時にマネージドインスタンス属性を設定可能でしたが、ユーザーデータ入力の設定はありませんでした。
CloudFormation のリファレンスにも見当たりません。

また、使用されている OS が Bottlerocket というコンテナホスティング用の専用 OS と説明されているため、ユーザーデータ入力が使用できたとしても、EFS のマウントは難しそうです。

CloudFormationで導入された ECS on EC2 環境を ECS マネージドインスタンス環境に移行可能か

マネージドインスタンスの使用は、オプションで指定するものではなく、launchType として選択するものでした。そのため、既存のテンプレートの launchTypeMANAGED_INSTANCES に修正する必要がありそうです。

実際にコンソール操作でマネージドインスタンス導入後に元のCloudFormationテンプレートでスタック更新を実施し確認をしたところ、タスク定義が更新され、サービスの再起動が行われても、マネージドインスタンスで動作している状況が保持されていました。

タスク定義の「アプリケーション環境」は EC2 に戻っていたのですが、サービス側の「キャパシティープロバイダー戦略」の設定が残っていたため、この動作となったようです。

タスク定義とサービスの設定でちぐはぐになってしまっていてあまりよくない状況ですし、コンテナインスタンスには Auto Scaling グループ設定により起動している使用されていない EC2 が待機することになります。正式な移行には専用の CloudFormation テンプレートが必要そうです。

検証詳細

以下は上記検証のために実際に操作した内容です。

設定を変更するクラスターは HULFT10 for Container Services を 「Deployment to ECS on EC2」で導入したものです。

キャパシティープロバイダーの作成

対象クラスターの「インフラストラクチャ」からマネージドインスタンス用のキャパシティプロバイダーを作成します。
5.png

スケーリングタイプにマネージドインスタンスが新規追加されていました。
1.png

マネージドインスタンスの作成には専用の「インフラストラクチャロール」の作成が必要です。
「新しいインフラストラクチャロールを作成」ボタンから作成しました。
2.png

対象のユースケースが選択された状態で開きます。
3.png

IAM ポリシーも選択済み
4.png

IAM ロール作成後、ロールにインラインポリシーで iam:PassRole を追加しました。
この権限を追加しないと、デプロイ時に以下のエラーが発生します。

service ecs-control-hulft-XXXX-ap-northeast-1-01 was unable to place a task. Reason: ResourceInitializationError: Unable to launch instance(s) for capacity provider test-managed. UnauthorizedOperation: You are not authorized to perform this operation. User: arn:aws:sts::XXXX:assumed-role/ecsInfrastructureRole/ECSFargateManagedInstances is not authorized to perform: iam:PassRole on resource: arn:aws:iam::XXXX:role/ecsInstancerole-hulft-XXXX because no identity-based policy allows the iam:PassRole action. RequestId: XXXX.

このページで説明されていました。

15.png

作成したロールを設定します。
4.png

せっかくなのでインスタンス選択をカスタムしてみます。
image.png

メモリは GiB ではなく MiB 指定でした

インスタンス属性を追加のオプションも確認しましたが、残念ながら使用したかった「ユーザーデータ入力」はありませんでした。
12.png

ネットワーク設定は EC2 に設定しているものと同じものを設定します。
6.png

以上の設定で作成を実行すると、キャパシティプロバイダー上に作成したマネージドインスタンスが表示されました。
7.png

起動テンプレート

キャパシティプロバイダーの作成後に、マネージドインスタンス用の起動テンプレートが作成されていました。
Auto Scaling グループで使用するものと同じテンプレートのようだったので、もしかしたらここからユーザーデータの入力を設定できるかもしれません(望み薄ですが……)
11.png

タスク定義の更新

タスク定義の「起動タイプ」を Amazon EC2 インスタンス から マネージドインスタンス に変更します。
9.png

EC2 を利用していた理由のボリュームのバインドマウントの部分は、Fargate 起動タイプと同じ扱いのようでした。
10.png

サービスの更新

サービスの更新で「タスク定義のリビジョン」を更新し、「コンピューティング設定 (- アドバンスト)」を開きます。
13.png

「キャパシティプロバイダー戦略」を選択し、先ほど作成したキャパシティプロバイダーを選択し、更新を実行します。
14.png

起動確認

しばらくすると、コンテナインスタンスにキャパシティプロバイダーで起動されたインスタンスが登録されました(Auto Scaling グループは事前に停止しています)
17.png

起動したタスクの情報からも、起動タイプがマネージドインスタンスであることを確認できます。
16.png

お疲れ様でした。

最後に

ここまで読んでいただきありがとうございます。
今回は HULFT の起動タイプとしては対応を見送りたいと思いますが、今後のアップデートに期待して情報収集を続けていきます。

7
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?