Skip to content

fix(ci): 監視試験の固定イメージをキャッシュしてIaCの取得制限を緩和 - #569

Merged
lambig merged 4 commits into
mainfrom
fix/iac-monitor-image-cache
Oct 21, 2026
Merged

lambig merged 4 commits into
mainfrom
fix/iac-monitor-image-cache

Conversation

@lambig

@lambig lambig commented Oct 21, 2026 •

Copy link
Copy Markdown
Owner

IaCの監視ログ転送試験がPublic ECRの Data limit exceeded で止まる問題に、固定イメージのキャッシュと、制限継続時の同一公式イメージへの補助取得で対処します。#506の上限付き再試行に続くCI安定化です。

変更と到達点

  • 公開image archiveだけを保存し、復元時にconfig digest(image ID)とOS/architectureを照合します。試験用Composeは検証済みIDと --pull never で起動し、運用Composeのdigestを維持します。
  • キャッシュがない場合は従来の上限付きpullを使い、ECRのthrottlingが続く場合だけAWS公式Docker Hubの同一manifestへ切り替えます。破損・不一致・取得失敗・実試験失敗はCI失敗のままです。
  • レビュー指摘に対応し、既存キャッシュディレクトリの権限を維持します。0755の設定は新規作成時だけに限定し、パス内・archiveのsymlinkを拒否します。保存用ファイルは排他的に新規作成し、既存の .partial リンクを追いません。

検証と残工程

現head 08e40013456c69fbbd74ba29a5683aca338c0d2f でtransport単体検査25件成功。既存0700、親パスを含むsymlink・リンク先の不変性、一時ファイル保護を検査しました。実Dockerをrootで実行し、umask 077でも新規0755・既存0700・archive 0644を確認し、両方の保存・復元とhit時のpull未呼出しに成功しています。

取得経路の先行検証では上流index → amd64 manifest → config ID、および公式ミラーの同一性を実取得で照合しています。前head 7cbd15b7effb0da2ae824617b3fde5ecfe3f22b2 の初回キャッシュ保存と別runnerでの復元・IaC全工程は成功済みです。

現headのIaC全工程も成功しました。残る判断は権限修正の再レビューです。CIの他ジョブは実行状況をPRのチェック欄で確認できます。

レビュー観点・残る条件

既存ディレクトリの権限維持とsymlink拒否の証拠で指摘を閉じられるかを確認してください。rootで書き込むため、指定先と親パスは他の利用者が差し替えられない専用の場所を前提としています。

初回・キャッシュ消失後に両方の取得先が利用できない場合は失敗します。製品の実機受け入れは別工程です。

2026-10-22の利用者によるIaC失敗対応の依頼と、ABServiceへの実装・検証・コミット・push・PR作成の継続承認を適用しています。

公開前確認: base 9f1e9b3ba150e1af8f4021d35cdee5a649505442、head 08e40013456c69fbbd74ba29a5683aca338c0d2f。全差分と追加ファイルを確認し、実設定・アカウント固有値・運用データの追加はありません。

@lambig lambig left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

独立レビュー(TL / PM / PO)

対象: ABService PR #569 / head 7cbd15b7effb0da2ae824617b3fde5ecfe3f22b2

判定:取得制限対策の方式・実動作は妥当。root実行時のキャッシュディレクトリ権限に小さな修正を1件要請します。 変更対象を広げる必要はありません。

TL — キャッシュの整合性と失敗契約

  • image-cache-lock.jsonにECRの固定index、linux/amd64 manifest、config digestを分けて記録し、復元後にDocker image ID/OS/architectureを照合する方式は、Docker archiveからRepoDigestsが失われる点を踏まえて妥当です。試験用Composeは検証済みIDへoverrideして--pull never、運用Composeのdigestは維持しています。
  • キャッシュ対象はdocker image saveで作るイメージarchiveのみで、テスト稼働前に保存されます。認証情報、コンテナログ、テストの合否判定をキャッシュする経路は差分にありません。
  • registry_throttledの判定を引き継ぎ、ECRでbounded retryを使い切った場合に限り、同一config IDへ収束するAWS公式Docker Hubの固定manifestへ補助取得します。認証失敗・image不在・timeout・startup失敗、archive破損/ID不一致は引き続き失敗扱いです。
  • [要修正・軽微] cached_image()がroot権限で呼び出される一方、既存の任意の--image-cache指定先へ無条件にchmod(0o755)を適用します。 ローカル利用時にモード0700の既存ディレクトリを与えると、内容が公開イメージだけとは限らないのにディレクトリの探索・一覧権限を拡大します。シンボリックリンク先にも作用し得ます。既存ディレクトリの権限を変更しないか、専用の新規子ディレクトリを安全に作成し、rootからの書込み先についてsymlinkを拒否する等の境界を明示してください。CIの専用パスでは今回の成功を否定するものではありません。既存0700のモード維持とsymlink拒否の回帰検査があると終了条件が明確です(該当行にinlineコメント)。

PM — 実CIでの再現証拠

  • CI run 39635993554は最新attemptの17ジョブがすべてsuccessで、CI gateも成功しました。IaCの初回job 119347196014でcache miss→実イメージ検証→cache保存、後続job 119352736021で別runnerのcache hit(約47 MB)→固定ID確認→実監視転送試験成功をログで直接確認しています。
  • 外部レジストリ双方が利用できない初回・失効時には失敗する残余リスクが明記され、キャッシュ破損時に合格条件を緩めず失敗させる扱いも一貫しています。今回の対策をIaC以外の断続的CI不具合の解決とは扱わない判断は適切です。
  • 完了と次の判断は具体的です。本件に製品リリース全体の儀式的な工数積算を追加する理由はありません。

PO — 対象範囲

  • 本変更はIaCのテスト環境に限定され、本番の監視Compose、製品の機能・ユーザー操作・M21実機受け入れに影響する契約変更はありません。取得制限のためにテスト本体をskipしない点も支持します。

権限境界の1件を補正後、最終判定可能です。

Comment thread infra/monitoring/transport/image_cache.py Outdated

@lambig lambig left a comment

Copy link
Copy Markdown
Owner Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

再レビュー(TL / PM / PO)— 前回指摘1件の解消確認

対象head: 08e40013456c69fbbd74ba29a5683aca338c0d2f。前回指摘: キャッシュディレクトリの権限境界。

判定:前回指摘は解消。差分への追加修正要求はありません。 ただしレビュー時点で現headの全体CIは実行中のため、マージ判断はCI gate成功を条件とします。

TL:権限境界の修正 — 解消

  • 変更前の無条件chmod(0o755)はなくなりました。mkdir()で新規作成したディレクトリのみ0755へ設定し、既存ディレクトリにはchmodを行わないため、既存0700を維持できます。
  • キャッシュディレクトリと親パスのsymlink、archiveのsymlinkを拒否する検査が入りました。保存用の一時ファイルはNamedTemporaryFileで新規に作り、既存の.partialリンクをたどらない構成です。
  • テストには既存0700、新規ディレクトリ+umask077、親を含むsymlink、archive symlink、既存.partialリンクと書込先不変性が追加されています。前回の終了条件を直接検証する内容です。
  • root実行のため、指定先と親パスが他利用者に差し替えられない信頼済みの場所であることをREADMEに明示しています。この前提の下では今回の利用経路に対して妥当です。

PM:修正範囲とCI

  • 前回レビュー対象7cbd15b7から現headまでは1コミット、変更はimage_cache.py、test_image_cache.py、READMEの3ファイルだけです。対象外への変更はありません。
  • 現headのCI run 39667967131のIaC job 119458089663はsuccessです。ログでcache hit後の固定ID照合、監視ログ転送・再起動/復旧の実試験成功、テスト環境のcleanupと後続Terraform検査の成功を確認しました。
  • 一方、確認時点ではBackend / E2E / Offline Player / amd64 containerなどが実行中で、CI gateは未確定です。今回のコード修正は確認済みとし、最終統合判断には現headの全件CI gate成功を照合してください。

PO:変更目的の維持

  • CIで使う固定イメージのキャッシュという目的を維持し、root権限の局所的な副作用を除去できています。製品の実機受け入れの終了条件に変更はありません。

結論:指摘解消によりレビュー上のブロッカーなし。現headのCI gate成功後、マージ可能と判断します。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant