AWS CodeDeploy部署ECS上React应用时Install生命周期事件耗时过长的调试需求
根据AWS官方文档说明:
Install – During this deployment lifecycle event, the CodeDeploy agent copies the revision files from the temporary location to the final destination folder. This event is reserved for the CodeDeploy agent and cannot be used to run scripts.
针对这个阶段耗时过长的问题,可以从以下几个方向排查:
检查部署包体积:React应用打包后如果包含大量未优化的静态资源(比如高清原图、冗余依赖、未做tree shaking的代码),会直接增加文件复制的工作量。用
du -sh命令查看打包后的部署包大小,对比历史版本是否有异常增长;同时确认是否开启了前端资源压缩(gzip/brotli)、tree shaking、图片压缩等优化手段,减少包体积。排查容器实例磁盘IO瓶颈:Install阶段的核心是本地文件复制,磁盘读写性能直接影响耗时。通过CloudWatch监控容器实例的
DiskReadOps、DiskWriteOps、DiskReadBytes、DiskWriteBytes指标,看是否存在IO使用率过高的情况。如果使用EBS卷,检查卷的IOPS配置是否匹配当前需求,或者是否有其他进程在抢占磁盘资源。确认临时目录与目标目录的存储位置:CodeDeploy agent会先将部署包下载到实例的临时目录(默认在
/opt/codedeploy-agent/deployment-root下的临时文件夹),再复制到目标部署目录。如果这两个目录位于不同的存储介质(比如临时目录在本地磁盘,目标目录在挂载的远程EBS卷),跨介质复制的速度会远慢于同介质复制。可以通过df -h查看实例的存储挂载情况,确认两者是否在同一磁盘分区。分析CodeDeploy Agent日志:老旧的Agent版本可能存在性能缺陷,先确认Agent是最新稳定版。然后查看Agent日志文件(默认路径
/var/log/aws/codedeploy-agent/codedeploy-agent.log),搜索Install阶段的日志条目,查看是否有单文件复制耗时过长、文件权限等待、重试操作等异常记录,定位具体的慢操作点。检查目标目录的状态:如果目标目录已存在大量文件,CodeDeploy需要逐一替换或清理,文件数量越多耗时越长。另外用
lsof命令检查目标目录下是否有被进程占用的文件,这类文件会导致Agent无法及时替换,引发等待重试,拉长Install阶段耗时;同时确认目标目录的权限配置是否正确,避免Agent因权限不足出现阻塞。
内容的提问来源于stack exchange,提问作者Kaushal panchal

