ENECHANGE所属のエンジニア id:tetsushi_fukabori こと深堀です。
急速に寒くなってきた2025年10月13日の週にこの記事を執筆しています。皆さんはお健やかにお過ごしでしょうか。
私はというとつい最近勤続5年の休暇を頂いて、家族の犬と二人でキャンプ&登山をしてきました。
家族の犬は原産が寒い地域の大型犬なのでもはや寒いレベルのキャンプがたいそう楽しかったらしく、5℃を下回っていそうな気温でも外の地面でうたた寝をしていました。身体が強すぎる。
今回は2025年09月30日に発表されたAmazon ECSのManaged Instancesに関する記事です。
Managed Instancesは発表直後から様々な技術ブログで解説が取り上げられているので詳細は省略しますが、Fargateの簡便さとEC2インスタンスのコストの優秀さ・制御しやすさを両取りするようなECSのインフラ機能で、AWSが管理するEC2インスタンス上でECSタスクを稼働させる機能です。
個人的にはセキュリティ周りなどをAWSが引き受けてくれる点が特に良いのだろうと思っています。
今回着目したのはManaged Instances上ではECSエージェントの設定はどうなっているのか?特にイメージPull設定についてどうなっているのか?です。
iselegantさんの下記の記事にでも触れられていますが、Managed InstancesはEC2インスタンスなのでイメージのキャッシュが効くことが期待されます。
一方で、キャッシュの利用についてはECSエージェントの設定の影響を受けますが、Managed Instancesではインスタンスの起動テンプレートに介入できないためECSエージェントの設定を調整できず、AWSの設定に従う形になります。
今回はこのような状況でECSエージェントの振る舞いを通じてManaged InstancesにおけるECSエージェントのイメージPull設定を調査しました。
併せてECSにおけるイメージのキャッシュに関して調査・整理しています。
この記事を届けたい人
- ECSエージェントのイメージPull設定による振る舞いを理解したい方
- Managed Instancesのコンテナイメージのキャッシュ設定を把握したい方
- この記事を届けたい人
- 概略
- ECSエージェントのイメージPullの振る舞い(ECS_IMAGE_PULL_BEHAVIOR)
- Managed InstancesにおけるECSエージェント設定を確認
- まとめ
概略
この記事は長いので忙しい人向けに先に概略を書いておきます。
- Managed InstancesにおけるECSエージェントの振る舞い(
ECS_IMAGE_PULL_BEHAVIOR)はalways相当のもよう- ECRからのイメージPullに失敗した場合、ローカルにイメージが存在していてもエラー終了します
- ECSエージェントのキャッシュ関連の振る舞いは以下のように整理できる
defaultはまずPullを試行し、その成否によらずコンテナ作成を実行alwaysはまずPullを試行し、Pull失敗はタスクのエラー終了、Pull成功はコンテナ作成を実行onceはまず過去にECSエージェント経由でPullに成功しているか履歴をチェックし、Pull成功の履歴がなければPullを試行し、その成否によらずコンテナ作成を実行prefer-cachedはローカルのイメージの存在をチェックし、存在しなければPullを試行し、その成否によらずコンテナ作成を実行
- ECSエージェントの振る舞いとは別にDockerエンジンによるレイヤーキャッシュやローカルイメージの利用が以下の点で介在しうるため、ユーザーから見るとECSエージェントのREADMEと相違しているように見えることがある
- Pull時にマニフェストの各レイヤーのハッシュ値に一致するレイヤーがローカルに存在する場合、そのレイヤーを流用(
"Already exists")しNW経由でのダウンロードは行わない - コンテナ作成時にローカルに必要なイメージが存在する場合、そのイメージを利用してコンテナを作成する
- Pull時にマニフェストの各レイヤーのハッシュ値に一致するレイヤーがローカルに存在する場合、そのレイヤーを流用(
追記
この記事を執筆中にドキュメントにイメージキャッシュについて記載が追加されたようです。
When Amazon ECS starts a task that runs on Amazon ECS Managed Instances, Amazon ECS pulls the image remotely only if it wasn't pulled by a previous task on the same container instance or if the cached image was removed by the automated image cleanup process. Otherwise, the cached image on the Amazon ECS Managed Instance is used. This ensures that no unnecessary image pulls are attempted.
機械翻訳は以下の通り。
Amazon ECS が Amazon ECS マネージドインスタンス上で実行されるタスクを開始すると、同じコンテナインスタンス上の以前のタスクによってイメージがプルされていない場合、またはキャッシュされたイメージが自動イメージクリーンアッププロセスによって削除されている場合にのみ、Amazon ECS はリモートでイメージをプルします。それ以外の場合は、Amazon ECS マネージドインスタンス上にキャッシュされたイメージが使用されます。これにより、不要なイメージのプルが試行されることがなくなります。
積極的にキャッシュを使うよ、という記載ですね。
ただ、以降の検証結果と併せて考えると、このドキュメントの記載は「Dockerエンジンによるレイヤーキャッシュ利用」も含んだ記載になっているように見えます。
ECSエージェントのイメージPullの振る舞い(ECS_IMAGE_PULL_BEHAVIOR)
ECSエージェントとは
まず前提ですが、ECSはコンテナ化されたアプリケーションを実行するためのサービスです。
自分のPCにDockerをインストールして、docker runをするのと基本的には何も変わりません。
その際、どのコンピューティング環境でコンテナを実行するかで選択肢があります。
- Fargate
- EC2インスタンス
- EC2インスタンス(Managed Instances) ←New!
それぞれについては別記事に譲ります。
これらのコンピューティング環境上でコンテナを起動するためにはイメージを取得してコンテナを起動する主体が必要です。
ローカルマシンであれば人間がdocker image pullやdocker runを実行しますが、ECSにおいてこれを実行する存在がECSエージェントです。
ECSエージェントはコンピューティング環境で起動している常駐プロセスで、APIを通じてAWSサービスやCLIとやり取りします。
ECSエージェントはOSSとして公開されていて仕様を読めます。
ECSエージェントの振る舞いはコンピューティング環境の環境変数(≠ECSタスクの環境変数)や設定ファイルを通じて操作でき、以下に設定がまとまっています。
ECSエージェントのイメージPull設定
ECSエージェントにはエージェントがイメージをリポジトリからどのように取得するかを指定するECS_IMAGE_PULL_BEHAVIORという設定があり、以下の説明があります。
The behavior used to customize the container image and digest pull process. If
defaultis specified, the image/digest will be pulled remotely, if the pull fails then the cached image/digest on the instance will be used. Ifalwaysis specified, the image/digest will be pulled remotely, if the pull fails then the task will fail. Ifonceis specified, the image/digest will be pulled remotely if it has not been pulled before or if the image was removed by image cleanup, otherwise the cached image/digest on the instance will be used. Ifprefer-cachedis specified, the image/digest will be pulled remotely if there is no cached image, otherwise the cached image/digest in the instance will be used.
機械翻訳すると以下のとおりです。
コンテナイメージとダイジェストのプルプロセスをカスタマイズするために使用される動作。default が指定されている場合、イメージ/ダイジェストはリモートでプルされ、プルが失敗した場合はインスタンスにキャッシュされたイメージ/ダイジェストが使用されます。always が指定されている場合、イメージ/ダイジェストはリモートでプルされ、プルが失敗した場合はタスクが失敗します。once が指定されている場合、イメージ/ダイジェストが以前にプルされていない場合、またはイメージがイメージのクリーンアップによって削除された場合は、イメージ/ダイジェストがリモートでプルされます。それ以外の場合は、インスタンスにキャッシュされたイメージ/ダイジェストが使用されます。prefer-cached が指定されている場合、キャッシュされたイメージがない場合はイメージ/ダイジェストがリモートでプルされ、そうでない場合はインスタンスにキャッシュされたイメージ/ダイジェストが使用されます。
つまり
- イメージをPullに行くのかローカルを優先するのか
- イメージのPullに失敗したらどう振る舞うのか
- イメージのキャッシュ有無に対してどう振る舞うのか
を規定する設定値になります。
ECSタスクをEC2インスタンス(含むManaged Instances)で動かす場合、毎回Pullするよりは使いまわしたい…など考える場合に重要なパラメータです。
ECSエージェントのPull設定ごとの振る舞い
実際にソースコードを追い、また実際の挙動を見ながらECS_IMAGE_PULL_BEHAVIOR設定値ごとの振る舞いをシーケンス図で図解します。
default
まずdefaultは以下のような振る舞いになります。
---
title: ECS_IMAGE_PULL_BEHAVIOR=default
---
sequenceDiagram
box ECSエージェント
participant TM as タスクマネージャー
participant TE as タスクエンジン
participant DB as Pull履歴DB
end
box Docker
participant DE as Dockerエンジン
participant IS as イメージストア
end
participant ECR as リモートレジストリ
Note over TM,ECR: イメージPullフェーズ
TM->>TE: Pull開始
TE->>DE: PullImage要求
DE->>ECR: イメージ取得
alt Pull成功
ECR->>IS: イメージダウンロード
ECR-->>DE: Pull成功
DE-->>TE: Pull成功
TE-->>TM: Pull完了イベント
Note right of TM: ✅ Pull成功、コンテナ作成フェーズへ
else Pull失敗
ECR--xDE: Pull失敗
DE--xTE: Pull失敗
TE-->>TM: Pull完了イベント
Note right of TM: Pull失敗だがコンテナ作成フェーズへ
end
Note over TM,ECR: コンテナ作成フェーズ<br>イメージストアにイメージがあれば起動成功✅<br>イメージがなければ起動失敗=タスクがエラー終了❌
READMEに書いてある内容と同じに見えますが、ポイントはECSエージェントとDockerエンジンを分けている点です。
READMEに書いてある内容をそのまま読み下すと以下のように理解できるかと思います。
default が指定されている場合、イメージ/ダイジェストはリモートでプルされ、プルが失敗した場合はインスタンスにキャッシュされたイメージ/ダイジェストが使用されます。
- 必ずイメージのPullが行われる
- 失敗した場合だけキャッシュされたイメージを使う
この説明だと「ECRからのイメージ/レイヤーのダウンロード=NW経由の転送が毎回発生する」かのように読めるかと思います。私はそう読みました。
しかし、このREADMEの説明はあくまでECSエージェント視点でのみ書かれており、Dockerエンジンを含むユーザーから見える振る舞いそのものを表現してはいません。
Dockerエンジンはどのように振る舞うかと言うと、Pullの実行時にまずマニフェストの取得を試みます。
1 つのマニフェストには、イメージに関するレイヤー、サイズ、ダイジェスト値などの情報を含みます。
ここにおけるダイジェストとはDockerイメージ全体を一意に特定するキーとなる文字列で、latestなどのタグの状況によらずイメージで不変です。
またレイヤーに関する情報としてハッシュ値があり、これはレイヤーを一意に特定するキーです。記憶ではおおよそ「直前のレイヤーのハッシュ+このレイヤーでのコマンド(COPY .envなどの文字列)を情報源として生成されるハッシュ値」だったと思います。文脈も含めて判断している、ということですね。
Dockerエンジンはマニフェストに含まれるレイヤーのハッシュ値と同じハッシュ値をローカルのイメージストアから検索し、見つかった場合は「Already exists.」メッセージのみ表示して実際のNW転送を行いません。
つまりdefaultにおいては「ECSエージェントは必ずPullを行う」「Dockerエンジンはローカルにイメージ/レイヤーが存在しない分だけNW転送を行う」という振る舞いになるため、コンピューティング環境上にすでにイメージ・レイヤーが存在する場合は実際のNW転送は発生せず、見た目上Pullをせずにローカルイメージを使ったように観察されます。
結果としてdefaultでは以下のように振る舞います。
- ローカルにイメージなし
- Pull成功→NW転送あり、Pullしたイメージでコンテナ作成✅️
- Pull失敗→イメージがなくコンテナが起動できないためタスク失敗❌️
- ローカルにイメージあり
- Pull成功→NW転送はなく、ローカルイメージでコンテナ作成✅️
- Pull失敗→ローカルイメージでコンテナ作成✅️
結構READMEを読んだだけと印象が違うのではないでしょうか?
always
alwaysは以下のような振る舞いになります。
sequenceDiagram
box ECSエージェント
participant TM as タスクマネージャー
participant TE as タスクエンジン
participant DB as Pull履歴DB
end
box Docker
participant DE as Dockerエンジン
participant IS as イメージストア
end
participant ECR as リモートレジストリ
Note over TM,ECR: イメージPullフェーズ
TM->>TE: Pull開始
TE->>DE: PullImage要求(強制)
DE->>ECR: イメージ取得
alt Pull成功
ECR->>IS: イメージダウンロード
ECR-->>DE: Pull成功
DE-->>TE: Pull成功
TE-->>TM: Pull完了
Note right of TM: ✅ Pull成功、コンテナ作成フェーズへ
else Pull失敗
ECR--xDE: Pull失敗
DE--xTE: Pull失敗
TE-->>TM: Pullエラー
Note right of TM: ❌ タスク失敗
end
Note over TM,ECR: コンテナ作成フェーズ<br>イメージストアにイメージがあれば起動成功✅<br>イメージがなければ起動失敗=タスクがエラー終了❌
重要なポイントはPullの失敗が必ずタスクの失敗になることです。
always以外では、Pullの失敗は直接的にタスク失敗にはなりません。ローカルにイメージが存在さえすればコンテナが作成できるからです。
結果としてalwaysでは以下のように振る舞います。
- ローカルにイメージなし
- Pull成功→NW転送あり、Pullしたイメージでコンテナ作成✅️
- Pull失敗→Pull失敗を理由にタスク失敗❌️
- ローカルにイメージあり
- Pull成功→NW転送はなく、ローカルイメージでコンテナ作成✅️
- Pull失敗→Pull失敗を理由にタスク失敗❌️
once
onceは以下のような振る舞いになります。
sequenceDiagram
box ECSエージェント
participant TM as タスクマネージャー
participant TE as タスクエンジン
participant DB as Pull履歴DB
end
box Docker
participant DE as Dockerエンジン
participant IS as イメージストア
end
participant ECR as リモートレジストリ
Note over TM,ECR: イメージPullフェーズ
TM->>TE: Pull開始
TE->>DB: 過去のPull成功履歴確認
alt Pull成功済み
DB-->>TE: Pull成功済み
TE-->>TM: Pullスキップ
Note right of TM: ✅ Pull不要、コンテナ作成フェーズへ
else Pull未実行 or 失敗履歴あり
DB-->>TE: Pull未実行 or 失敗履歴
TE->>DE: PullImage要求
DE->>ECR: イメージ取得
alt Pull成功
ECR->>IS: イメージダウンロード
ECR-->>DE: Pull成功
DE-->>TE: Pull成功
TE->>DB: Pull成功履歴記録
TE-->>TM: Pull完了
Note right of TM: ✅ Pull成功、コンテナ作成フェーズへ
else Pull失敗
ECR--xDE: Pull失敗
DE--xTE: Pull失敗
TE-->>TM: Pullエラー
Note right of TM: ❌ タスク失敗
end
end
Note over TM,ECR: コンテナ作成フェーズ<br>イメージストアにイメージがあれば起動成功✅<br>イメージがなければ起動失敗=タスクがエラー終了❌
onceは少し毛色が違い、「過去にECSエージェント経由でイメージをPullし成功したか」をチェックします。
このチェックにはECSエージェントが持っているDB(ただのテキストファイルかもしれません)を参照します。
そのうえで「Pullが成功した履歴があればPullしない」「Pullが成功した履歴がなければ(実際のローカルイメージの有無によらず)Pullする」ことになります。
とは言え、履歴がなくともローカルイメージがある場合のPullはNW転送を伴わないため、ほぼPullをしないのと同等です。
結果としてonceでは以下のように振る舞います。
- ローカルにイメージなし
- Pull成功→NW転送あり、Pullしたイメージでコンテナ作成✅️
- Pull失敗→イメージがなくコンテナが起動できないためタスク失敗❌️
- Pullしない→イメージがなくコンテナが起動できないためタスク失敗❌️
- ローカルにイメージあり
- Pull成功→NW転送はなく、ローカルイメージでコンテナ作成✅️
- Pull失敗→ローカルイメージでコンテナ作成✅️
- Pullしない→ローカルイメージでコンテナ作成✅️
ここで「Pullしない」と書いたのはECSエージェントによるPull成功の履歴が存在するパターンです。
履歴はローカルのイメージ状態に依存しないため、履歴はあるけどイメージがない…という状態があり得るのでこのように記載しています。
prefer-cached
prefer-cachedは以下のような振る舞いになります。
直訳するとprefer-cachedは「キャッシュされたものを好む」のようです。
sequenceDiagram
box ECSエージェント
participant TM as タスクマネージャー
participant TE as タスクエンジン
participant DB as Pull履歴DB
end
box Docker
participant DE as Dockerエンジン
participant IS as イメージストア
end
participant ECR as リモートレジストリ
Note over TM,ECR: イメージPullフェーズ
TM->>TE: Pull開始
TE->>DE: InspectImage(ローカル確認)
DE->>IS: ローカルイメージ検索
alt ローカルイメージあり
IS-->>DE: イメージあり
DE-->>TE: ローカルイメージ存在
TE-->>TM: Pullスキップ
Note right of TM: ✅ Pullスキップ、コンテナ作成フェーズへ
else ローカルイメージなし
IS--xDE: イメージなし
DE--xTE: ローカルにイメージなし
TE->>DE: PullImage要求
DE->>ECR: イメージ取得
alt Pull成功
ECR->>IS: イメージダウンロード
ECR-->>DE: Pull成功
DE-->>TE: Pull成功
TE-->>TM: Pull完了
Note right of TM: ✅ Pull成功、コンテナ作成フェーズへ
else Pull失敗
ECR--xDE: Pull失敗
DE--xTE: Pull失敗
TE-->>TM: Pull完了
Note right of TM: Pull失敗だがコンテナ作成フェーズへ
end
end
Note over TM,ECR: コンテナ作成フェーズ<br>イメージストアにイメージがあれば起動成功✅<br>イメージがなければ起動失敗=タスクがエラー終了❌
ポイントはまずローカルイメージを確認することです。
このローカルイメージは、onceと異なり、どのような方法で手に入れているかを問いません。
ローカルイメージがあればPullしない、ということで、最も省力的な振る舞いでしょう。
結果としてprefer-cachedでは以下のように振る舞います。
- ローカルにイメージなし
- Pull成功→NW転送あり、Pullしたイメージでコンテナ作成✅️
- Pull失敗→イメージがなくコンテナが起動できないためタスク失敗❌️
- ローカルにイメージあり
- Pullしない→ローカルイメージでコンテナ作成✅️
ECS_IMAGE_PULL_BEHAVIORとローカルイメージ状態による振る舞いのまとめ
ユーザー視点でみえる振る舞いをまとめます。
| イメージ無 | イメージ有 | |
|---|---|---|
default |
✅️Pullしたイメージで起動 or ❌️Pull失敗でエラー |
✅️ローカルイメージで起動 |
always |
✅️Pullしたイメージで起動 or ❌️Pull失敗でエラー |
✅️ローカルイメージで起動 or ❌️Pull失敗でエラー |
once |
✅️Pullしたイメージで起動 or ❌️Pull失敗でエラー or ❌️Pullせずイメージなしでエラー |
✅️ローカルイメージで起動 |
prefer-cached |
✅️Pullしたイメージで起動 or ❌️Pull失敗でエラー |
✅️ ローカルイメージで起動 |
これを踏まえて以降では実験によりManaged Instancesの場合のECSエージェントのECS_IMAGE_PULL_BEHAVIOR設定を確認してみます
Managed InstancesにおけるECSエージェント設定を確認
方針
前述の整理をベースにすると、以下の観点で調査することでManaged Instances上のECSエージェントのECS_IMAGE_PULL_BEHAVIOR設定を確認できそうです。
- イメージが有る状態でPullを失敗させて、タスク実行時にエラーになるか?
- なる→
always - ならない→
defaultoronceorprefer-cached
- なる→
- 一度イメージをPullさせたうえでイメージを削除し、タスク実行時にエラーになるか?
- なる→
once - ならない→
defaultorprefer-cached
- なる→
- イメージが有る状態でPullを実行させ、リポジトリ向けにマニフェストの取得リクエストが発生するか?
- 発生する→
default - 発生しない→
prefer-cached
- 発生する→
正直に言うと、3つ目は実験するのが困難なのであまり到達したくないです。
Pullの失敗はECRの権限をIAMポリシーから奪うことで実現するつもりなので、リクエストが発生するdefaultは権限チェック&リジェクトの待ち時間が長い…など微妙な方法で判定ができるかもしれませんが…どうでしょう。
方法
まずはalwaysを特定できるようStep Functionsステートマシンを作ります。
単純に検証するだけだと一発でECS RunTaskで良いかもしれませんが、せっかくなので性能面も確認してみましょう。
ユーザー管理のEC2インスタンスのタスクも加え、比較がわかりやすいようにします。
作ったステートマシンは以下のとおりです。
長いのでGistでどうぞ。
ECS_IMAGE_PULL_BEHAVIOR毎の振る舞いの違いを確認するステートマシン例 · GitHub
Gist内にStep FunctionsのステートマシンのJSONと、ECSタスクで実行するイメージのDockerfileと実行スクリプトも含めています。
ステートマシンの概観は以下のとおりです。

この状態で緑の「三回目のRunTask」でalways設定のステートがPull失敗によりエラーになります。
同じタイミングでManaged Instancesのステートがエラーになれば設定はalways相当とわかります。
RunTaskのレーンは三回とも同一で、左から「Managed Instances」「default」「always」「once」「prefer-cached」です。
実験結果
結果は以下のとおりです。

この通り、alwaysとManaged Instancesがエラー終了しているため、調査結果はManaged InstancesのECS_IMAGE_PULL_BEHAVIOR設定はalwaysとなりました。
考察
実行時間も含めて考察してみます。
初回のRunTask
まず初回のRunTaskは以下のような処理時間になっています。

テストのためにイメージを重くしてあるのと、RunTask自体も多少時間がかかるよう1分ほどの時間がかかるwaitがある処理にしています。
結果を見ると、Managed Instancesだけ他より40秒ほど処理時間が長く、他のEC2インスタンスのタスクはほぼ同じ処理時間で終了しています。
これはManaged InstancesはEC2インスタンスのプロビジョニング時間が含まれるためです。
- Managed Instancesのステート
- 必要なEC2インスタンスのインスタンスタイプなどを決定
- EC2インスタンスをプロビジョニング
- イメージのPull
- RunTask
- 他のステート
- イメージのPull
- RunTask
この違いにより、40秒ほどでインスタンスをプロビジョニングできていることがわかります。
二回目のRunTask
次に二回目のRunTaskは以下のような処理時間になっています。

結果を見ると、すべてのパターンでステートの実行時間は短くなっており、これはイメージのPullがスキップまたは実質的なNW転送なしになったためと考えられます。
実行しているコマンドがジャスト1分で完了するものであることから、ほぼすべての時間がコマンドの実行時間になっている、という点からもそのように見えます。
ただ、Managed Instancesは20秒ほど他のステートよりも処理時間が長いです。
インスタンスは入れ替わっていませんでしたが、Managed Instances特有の何らかのチェック処理が走っているかもしれません。
三回目のRunTask
最後に三回目のRunTaskは以下のような処理時間でした。

結果を見ると、Managed Instancesとalwaysはどちらも20秒程度でステートが失敗しています。
これはECRの権限を奪ったことでイメージPullができなかったためであり、権限を奪った場合にエラーと判断するのは20秒ほど時間がかかるのでしょう。
傍証として、defaultもonceやprefer-cachedに比べて20秒ほど処理時間が長く、最初にPullを試行しているためECRの権限エラー分処理時間が長くなっていると考えると整合します。
onceとprefer-cachedはイメージのPull自体行わないため、ほぼすべての時間がコマンドの実行時間になっています。
ほか
実は最初期にはFargateもレーンに加えたステートマシンになっていました。
が、Fargateは当然毎回プロビジョニングとイメージPullを行うのでステートの処理時間が長くなり、結果としてManaged InstancesのEC2インスタンスが終了してしまいました。
Managed InstancesのRunTask完了からおおよそ3分程度でインスタンスが終了したため、インスタンス上のイメージの使い回しを意識するならインスタンスの自動終了を考慮に含めておく必要がありそうです。
考察まとめ
- Managed InstancesはECRからのPullに失敗するとタスクがエラー終了するので
ECS_IMAGE_PULL_BEHAVIOR = alwaysとなっている ECS_IMAGE_PULL_BEHAVIORによる振る舞いの違いはDockerエンジンも含めて考えると机上検討の通りになる- Managed Instancesは自動でEC2インスタンスが終了するのでイメージのキャッシュ効率を考えるのであれば考慮に入れる必要がある
まとめ
Amazon ECSのManaged Instancesについて、ECSエージェントの設定、特にECS_IMAGE_PULL_BEHAVIORで設定されるイメージPullの振る舞いについて実験しました。
この結果、Managed InstancesではECS_IMAGE_PULL_BEHAVIOR = alwaysが設定されていることが確認できました。
同時にECSエージェントのREADMEを読むだけでは分かりにくい、ユーザーから見たキャッシュ利用の振る舞いについても整理し、理解しやすい形にしてみました。
みなさんがECSタスクのインフラ選定やECSエージェントの設定を決定する際のインプットとして活用いただければ嬉しいです。