ENECHANGE Developer Blog

ENECHANGE開発者ブログ

ECS/FargateのSOCI Index Manifestをv1からv2に移行した理由と方法

VPoTの岩本 (iwamot) です。

ENECHANGEでは、AWS FargateでのAmazon ECSタスク起動を速くするため、Seekable OCI (SOCI) を利用しています。

tech.enechange.co.jp

このたび、SOCI Index Manifestのバージョンをv1からv2に移行しました。

本記事では、なぜ移行したのか、どのように移行したのかをお伝えします。

なぜ移行したのか

移行した理由はシンプルで、v1がサポートされなくなるからです。AWSからは、以下の内容を含む通知がありました。

2026 年 2 月 9 日以降、AWS Fargate はタスク起動のためのマニフェスト v1 をサポートしなくなります。SOCI インデックスマニフェスト v1 で作成された既存のコンテナイメージは、期限後も引き続き Fargate で実行されます。ただし、SOCI によって可能になったより高速なタスク起動の恩恵を受けられなくなります。

v2に移行しないと、タスク起動が遅くなってしまうというわけです。

どのように移行したのか

移行方法もシンプルで、ひとことで言えば「v2対応の新しいSOCI Index Builderを導入した」となります。もともと、同名の別ソリューションを利用していたのですが、v2非対応のまま廃止されたので乗り換えた形です。

以下、大まかな導入手順です。

1. ツールを準備

SOCI Index BuilderのGitリポジトリをクローンします。

git clone https://github.com/awslabs/cfn-ecr-aws-soci-index-builder.git
cd cfn-ecr-aws-soci-index-builder

2. .taskcat.yml を編集

次に .taskcat.yml を編集します。といっても、デプロイ先のリージョンを変える程度です。たとえば、東京リージョンのECRリポジトリにあるイメージだけを高速化の対象にするなら、以下のように変更します。

--- a/.taskcat.yml
+++ b/.taskcat.yml
@@ -12,11 +12,5 @@ tests:
     parameters:
       SociRepositoryImageTagFilters: "*:*"
     regions:
-      - us-east-1
-      - us-east-2
-      - us-west-1
-      - us-west-2
-      - eu-west-1
-      - eu-west-2
-      - eu-west-3
+      - ap-northeast-1
     template: templates/SociIndexBuilder.yml

3. taskcat upload を実行

続いて taskcat upload を実行します。それにより、CloudFormationテンプレートや、Lambda関数のパッケージがS3にアップロードされます。

taskcatはインストールして使うより、Dockerで実行するほうがお勧めです。Python 3.14に未対応だったり、そもそも使う機会が少なかったりするので。

以下、テスト実行例です。--dry-run を外すと、実際にアップロードされます。

docker run --rm \
  -v $(pwd):/mnt \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -e AWS_ACCESS_KEY_ID \
  -e AWS_SECRET_ACCESS_KEY \
  -e AWS_SESSION_TOKEN \
  -e GIT_PYTHON_REFRESH=quiet \
  taskcat/taskcat taskcat upload --dry-run

4. CloudFormationスタックを作成

あとは、アップロードされたCloudFormationテンプレートを使ってスタックを作成するだけです。ドキュメントのとおり、マネジメントコンソールで作るのが簡便です。

参考のため、Terraformで単一リージョンにスタックを作成する例を載せておきます。

locals {
  repository_image_tag_filters = ["*:*"]
}

data "aws_s3_object" "template" {
  bucket = "<アップロード先のS3バケット名>"
  key    = "cfn-ecr-aws-soci-index-builder/templates/SociIndexBuilder.yml"
}

resource "aws_cloudformation_stack" "this" {
  capabilities     = ["CAPABILITY_IAM"]
  name             = "cfn-ecr-aws-soci-index-builder"
  parameters = {
    IamPermissionsBoundaryArn     = "none"
    QSS3BucketName                = data.aws_s3_object.template.bucket
    QSS3KeyPrefix                 = "${split("/", data.aws_s3_object.template.key)[0]}/"
    SociIndexVersion              = "V2"
    SociRepositoryImageTagFilters = join(",", local.repository_image_tag_filters)
  }
  template_url = format(
    "https://%s.s3.%s.amazonaws.com/%s",
    data.aws_s3_object.template.bucket,
    data.aws_s3_object.template.region,
    data.aws_s3_object.template.key
  )
}

まとめ

以上、ECS/FargateのSOCI Index Manifestのバージョンをv1からv2に移行した理由と方法をお伝えしました。

これまでv1を使っていて、まだv2に移行していない方は、そこまで手間ではないので、移行をお勧めします。

未導入の方も、上記の4ステップで簡単に高速化できるので、ぜひお試しください。