AWS CodeBuild中ls可见文件却无法通过aws s3 cp传到S3
报错原因分析
- 核心诱因:
aws s3 cp命令额外添加了--recursive参数--recursive的设计用途是递归复制目录下的全部批量文件,当传入单个文件路径时,AWS CLI会自动将该路径判定为目录,因此日志中出现了带末尾斜杠的/codebuild/output/src985236234/src/backup.sql/路径,系统检索该目录自然会提示不存在。
- 其他不规范配置:
- 数据库备份操作放在
install阶段不符合CodeBuild的阶段职责划分,install阶段仅用于安装构建依赖,建议迁移到build阶段 - S3目标路径未补全末尾斜杠,易引发CLI路径解析歧义
- 原mysqldump命令中
-p参数与后续选项间的空格被打码遗漏,实际运行时会触发参数解析错误
- 数据库备份操作放在
修正后的Buildspec配置
version: 0.2 phases: install: commands: - echo Installing MySQL - apt update - apt-get install mysql-client -y - mysqldump --version build: commands: # 补全-p参数与后续选项的空格 - mysqldump -h ***** -u $User -p**** --no-data --routines --triggers -f testdb > ./backup.sql - ls # 移除多余的--recursive参数,S3路径末尾补斜杠 - aws s3 cp backup.sql s3://dev-test/ --acl public-read --cache-control "max-age=100" post_build: commands: - echo Build completed on `date`
额外提示:如果需要指定备份文件在S3桶中的存储路径,可以直接在目标地址补全文件名,例如
s3://dev-test/backup/20240520.sql
内容的提问来源于stack exchange,提问作者Raghu Ram
相关产品推荐
相关产品推荐

