AWS ECS-FagateをSeekable OCIを使って高速起動してみます。
AWS SOCI (Seekable OCI) は、Fargateのコンテナ起動時間を短縮するための技術です。
Railsのような比較的大きなイメージ(数百MB〜1GB)を使う場合、従来は「イメージの全ダウンロード完了」を待ってから起動していましたが、Seekable OCIを使うと「必要な部分だけ先にダウンロードして即起動(Lazy Loading)」が可能になります。
今回は「ECRにプッシュしたら勝手にインデックスを作ってくれる仕組み(Lambda)」 を用意して、実際にコンテナを立ち上げてみます。
Seekable OCIを使ってみる
「ECRにプッシュしたら勝手にインデックスを作ってくれる仕組み(Lambda)」 は、AWS SOCI Index BuilderというAWS公式のCloudFomaritonテンプレートが用意されています。
これを使って「ECRにプッシュしたら勝手にインデックスを作ってくれる仕組み(Lambda)」 を構築します。
「ECRにプッシュしたら勝手にインデックスを作ってくれる仕組み(Lambda)」の構築
以下のCloudFormationファイルを使用します。
以下のようにスタック作成してリソースを作成します。(パラメータは必要に応じて変更)

今回はRails8.1のコンテナイメージをPushしてみます。
Railsコンテナイメージの作成
ローカルにRailsインストールして、Railsアプリを作成してみます。
以下のコマンドでRailsインストール
sudo gem install rails以下のコマンドでRailsアプリ作成して、作成したディレクトリに移動
rails new my-app
cd my-appバージョン確認
rails -v
Rails 8.1.1
Dockerfileも作成されているので「vi Dockerfile」で確認できます。
今回はテスト用なので、Dockerfileを以下のように変更します。
「ENV RAILS_ENV="production"」をコメントアウトして、「ENV RAILS_ENV=development」を追記します。
#ENV RAILS_ENV="production" \
ENV RAILS_ENV=development\
以下のようにENTRYPOINTをコメントアウト
#ENTRYPOINT ["/rails/bin/docker-entrypoint"]
以下のようにEXPOSEとCMDを変更
#EXPOSE 80
#CMD ["./bin/thrust", "./bin/rails", "server"]
EXPOSE 3000
CMD ["bundle", "exec", "puma", "-C", "config/puma.rb"]
config/environments/development.rbに以下を追記します。これがないとFargateで確認時にエラーになります。
config.hosts.clearコンテナイメージの動作確認
まずはビルドします。
docker build -t rails-demo .次にコンテナ起動です。
docker run -d -p 3000:3000 \
-e RAILS_MASTER_KEY=$(cat config/master.key) \
--name my-app \
rails-demohttp://localhost:3000/にアクセスして以下のwelcome画面が出ればokです。

Rails8.1のコンテナイメージをECRにPush
以下のコマンドで、AWSの接続設定をしておきます。
aws configure次にECRログインします。
aws ecr get-login-password --region ap-northeast-1 | docker login --username AWS --password-stdin {AWSアカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com以下のコマンドでリポジトリを作成します。
aws ecr create-repository \
--repository-name rails \
--image-scanning-configuration scanOnPush=true \
--region ap-northeast-1Railsアプリのタグ作成します
docker tag rails-demo:latest {AWSアカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/rails:latestRailsアプリのpushです
docker push {AWSアカウントID}.dkr.ecr.ap-northeast-1.amazonaws.com/rails:latestPush結果
Pushしてしばらくすると、以下のようにECRにSoci Indexが追加されます。
このSoci Indexがコンテナ立ち上げを高速化してくれます。

ECS-Fargateでコンテナを立ち上げてみる
ECS-Fargateの設定は以下をご参照ください

コンテナのパブリックIPにアクセスして以下のように表示されればOKです。

起動時間を見てみる
Seekable OCIの場合
以下のコマンドで確認します。
aws ecs describe-tasks \
--cluster <クラスター名> \
--tasks <タスクID> \
--query "tasks[0].{CreatedAt:createdAt, PullStarted:pullStartedAt, PullStopped:pullStoppedAt, StartedAt:startedAt}"以下の結果が返ってきました。
{
"CreatedAt": "2025-12-28T10:39:06.054000+09:00",
"PullStarted": "2025-12-28T10:39:17.362000+09:00",
"PullStopped": "2025-12-28T10:39:27.310000+09:00",
"StartedAt": "2025-12-28T10:39:28.900000+09:00"
}作成からスタートまで21秒程度です。
Seekable OCIなしの場合
Seekable OCIなしの場合は以下の結果でした。
{
"CreatedAt": "2025-12-28T10:35:07.750000+09:00",
"PullStarted": "2025-12-28T10:35:22.546000+09:00",
"PullStopped": "2025-12-28T10:35:34.311000+09:00",
"StartedAt": "2025-12-28T10:35:37.096000+09:00"
}作成からスタートまで30秒です。
まとめ
Seekable OCIでコンテナ起動の高速化をやってみました。
実際の本番運用するRailsアプリでどのくらい高速化するかやってみたいと思います!

