觀點 · 資訊分享

AWS Lambda 容器映像支援 SOCI 延遲載入:幾 GB 的映像不用下載完就能啟動,最多快 70%

AWS 讓跑在 Lambda Managed Instances 上的容器函式支援 SOCI 延遲載入:Lambda 只抓啟動時需要的檔案,其餘等程式真的讀到再抓。官方說容器啟動時間最多縮短 70%,受益最大的是好幾 GB 的 AI 與資料處理映像。

發布
2026-10-28
篇幅
約 4 分鐘 · 1,987 字
結構
7 節 + 4 題常見問題
標籤
#AWS#Lambda#容器映像#SOCI#Serverless
AWS Lambda 容器映像支援 SOCI 延遲載入:幾 GB 的映像不用下載完就能啟動,最多快 70%

一句話看懂:AWS 讓跑在 Lambda Managed Instances 上的容器函式支援 SOCI 延遲載入,不用等整個映像下載完才啟動,官方說啟動時間最多可縮短 70%。

Lambda 容器映像支援 SOCI 延遲載入資訊圖卡:函式先啟動、要用到的檔案才抓,官方說啟動時間最多快 70%

先用白話講:SOCI 延遲載入是什麼?

想像你搬到新辦公室。傳統做法是等整車家具全部搬進來、拆完箱才能開始上班;延遲載入則是先把桌椅電腦搬進來馬上開工,其他箱子等要用到再拆。

容器映像就是那一整車家具:程式、函式庫、依賴套件全部打包在一起,大型的 AI 或資料處理映像動輒好幾 GB。以前 Lambda 要把整個映像下載、解壓縮完才能啟動函式;SOCI(Seekable OCI)是 AWS 開源的技術,它替映像做一份「目錄索引」,記下每個檔案放在哪一層的哪個位置,Lambda 就能只抓現在需要的檔案,其他的等程式真的讀到再抓。

發生什麼事

AWS 在 10 月 28 日宣布,部署在 Lambda Managed Instances(讓 Lambda 函式跑在 EC2 執行個體上、由 Lambda 代管的部署模式)上的容器映像 Event Functions,現在支援 SOCI 延遲載入。

  • 官方說法:容器啟動時間最多縮短 70%
  • 針對的情境:資料處理管線、高流量 API 後端、批次運算這類映像好幾 GB、以前新環境要準備好幾分鐘的工作
  • 所有有 Lambda Managed Instances 的 AWS 商用區域都可用
  • 開發者指南另外提醒:啟動時間會變得對映像總大小不敏感,好處最大的是只讀到一小部分內容的大型映像,例如打包了機器學習框架的那種

會影響誰?

情境 以前 現在
幾 GB 的 ML 推論映像擴容 新機器要先下載整個映像,等好幾分鐘 只抓啟動需要的檔案,官方說最多快 7 成
一般小映像(幾百 MB) 本來就快 好處有限,官方建議開關都測一次
標準 Lambda(非 Managed Instances) 不適用 仍不適用,只限 Managed Instances

給開發者的技術細節

設定只有三步:建索引、推上 ECR、把函式的映像 URI 指到帶索引的 tag。

# 在 Amazon Linux 2023 上,用 nerdctl 替既有映像產生 SOCI 索引
sudo nerdctl image convert --soci \
  $REGISTRY/my-function:v1 $REGISTRY/my-function:v1-soci
sudo nerdctl push --platform linux/arm64 $REGISTRY/my-function:v1-soci

之後把函式映像 URI 設成 my-function:v1-soci 並發布新版本,Lambda 會自動偵測索引、啟用延遲載入,不用改其他設定。要注意的限制:

  • 只支援 SOCI Index Manifest v2,v1 索引不吃;映像索引必須剛好兩個項目(原映像 manifest 加上 SOCI 索引)
  • 映像必須是單一架構,--platform 要跟函式的架構一致
  • Lambda 不會在背景把剩下的檔案補抓完:handler 第一次讀到的檔案,會在那次呼叫時才抓,拉長那次的執行時間。官方建議把 import 與讀檔都放在初始化階段
  • 用 Kiro、Claude Code、Codex 這類程式助理的人,可以裝 Agent Toolkit for AWS 的 Lambda Managed Instances skill,讓代理幫忙設定與部署

我的看法

這個功能的受益者很明確:映像大到幾 GB、又需要快速擴容的工作。接案做網站的人,Lambda 映像通常幾百 MB,SOCI 能省的時間有限,而且它只支援 Managed Instances 這種部署模式,不是標準 Lambda,別看到「快 70%」就急著改部署流程。

真正值得記下來的是官方那句提醒:延遲載入把下載成本從「啟動時」搬到「第一次讀檔時」。如果你的程式習慣在 handler 裡才 import 重型套件,開了 SOCI 之後第一次呼叫反而會變慢,而且很難從監控裡看出原因。要開就先把所有 import 搬到初始化區塊,再拿開關前後的數據比一次。

名詞小辭典

  • 容器映像(Container Image):把程式、函式庫與執行環境打包成一個檔案,到哪台機器都能用同樣的方式跑。
  • OCI:Open Container Initiative,容器映像與執行環境的業界共同格式標準。
  • 延遲載入(Lazy Loading):先啟動、要用到哪個檔案才去抓,而不是一開始就全部下載。
  • Amazon ECR:AWS 的容器映像倉庫,Lambda 從這裡拉映像。

資料來源

常見問題

SOCI 延遲載入是什麼?
SOCI(Seekable OCI)是 AWS 開源的技術,替容器映像做一份索引,記下每個檔案在哪一層的哪個位置。Lambda 靠這份索引只抓啟動時需要的檔案,其他的等程式真的讀到再抓,所以不用等整個映像下載完才啟動。
我的標準 Lambda 函式能用嗎?
不行。官方寫明 SOCI 只適用於跑在 Lambda Managed Instances 上的容器映像函式,而且要在有 Lambda Managed Instances 的 AWS 商用區域才可用。
開了 SOCI 之後會不會有副作用?
會有一個要注意的地方:Lambda 不會在背景把剩下的檔案補抓完。如果你的程式在 handler 裡才第一次讀某個檔案或 import 某個套件,那次呼叫會變慢。官方建議把所有 import 與讀檔搬到初始化階段,並拿開關前後的數據比一次。
怎麼替既有映像建 SOCI 索引?
官方範例是在 Amazon Linux 2023 上安裝 soci-snapshotter、containerd 與 nerdctl,用 nerdctl image convert --soci 把既有映像轉成帶索引的新 tag(例如 v1-soci),推上 ECR,再把函式映像 URI 改成這個 tag 並發布新版本。
LINE