我想減少使用 Amazon Elastic Container Service (Amazon ECS) 擷取映像檔時的延遲。
解決方法
減少映像檔的大小
若要減少映像檔提取時間,請減少映像檔的大小。有關如何減少映像檔大小的資訊,請參閱 Docker Docs 網站上的建置最佳實務。
若您使用的是 Amazon Linux 2023 容器映像檔,最佳實務是使用 AL2023 最小容器映像檔來減少映像檔大小。
使用最近的 AWS 區域端點
若要降低延遲,請使用距離應用程式執行位置最近的區域端點。
若您使用公有登錄檔 (例如 Amazon Elastic Container Registry (Amazon ECR) Public 或 Docker Hub),請使用提取快取。使用提取快取時,您可以將映像檔部署到與應用程式具有相同端點的私有登錄檔。如需更多資訊,請參閱將上游登錄檔與 Amazon ECR 私有登錄檔同步。
如果該映像檔已存在於不同區域的 Amazon ECR 私有登錄檔中,則使用私有映像檔複寫。透過私有映像檔複寫,您可以在應用程式區域中部署相同的映像檔。
將 ECS_IMAGE_PULL_BEHAVIOR 設定為一次
若您使用 Amazon Elastic Compute Cloud (Amazon EC2) 啟動類型,請修改 ECS_IMAGE_PULL_BEHAVIOR 參數,以設定 Amazon ECS 提取行為。若要減少容器執行個體的儲存空間,請將 ECS_IMAGE_PULL_BEHAVIOR 設為 once (一次)。此組態使用快取映像檔,只有在映像檔從未提取過或已由自動清理移除時,才會遠端提取映像檔。有關映像檔清理的更多資訊,請參閱Amazon ECS 任務與映像檔自動清理。
在以下範例中,ECS_IMAGE_PULL_BEHAVIOUR 設定為 once (一次)。首次啟動具有 amazonlinux:2023-minimal 容器的任務時,EC2 執行個體中的 Amazon ECS 代理程式會提取該映像檔。若要檢查映像檔提取的開始與結束時間,請檢查 msg 值;若要檢查映像檔提取所花費的時間,請參閱 elapsed 和 elapsedMs:
level=info time=2024-11-11T17:02:09Z msg="Pulling image for container concurrently" container="al2023" image="amazonlinux:2023-minimal" task="taskid"
level=info time=2024-11-11T17:02:14Z msg="Finished pulling image for container" task="taskid" container="al2023" image="amazonlinux:2023-minimal" elapsed="4.6245648s" elapsedMs=4624
當第二次啟動帶有 amazonlinux:2023-minimal 容器的任務時,Amazon ECS 代理程式會使用快取,而不會重新提取映像檔。若要檢查 Amazon ECS 是否找到並使用了快取的映像檔,請檢查 msg 值:
level=info time=2024-11-11T17:07:06Z msg="Found cached image, use it directly for container" task="taskid" container="al2023" image="amazonlinux:2023-minimal"
有關 Amazon ECS 代理程式組態參數的更多資訊,請參閱 Amazon ECS 容器代理程式組態。
相關資訊
Amazon ECR 中的跨區域複寫功能已正式推出
最佳化 Amazon ECR 的效能