部署成功后在/var/app/current创建文件失败求助
解决Elastic Beanstalk部署后创建文件被覆盖的问题
我之前也碰到过一模一样的问题!EB的部署流程确实会先把代码检出到临时目录/tmp/deployment/application,之后再替换掉/var/app/current,所以如果你的配置用了普通的commands,创建的文件会被后续的覆盖操作清掉。下面给你几个靠谱的解决方案:
核心方案:用container_commands替代commands
container_commands是在EB把代码部署到/var/app/current之后、启动应用容器之前执行的,这时候创建的文件就不会被覆盖了。
举个最简单的配置例子,在.ebextensions/create-custom-file.config里写:
container_commands: # 给命令加编号,确保执行顺序(多命令场景下有用) 01_create_my_file: command: "echo '这是我要的自定义内容' > /var/app/current/my-untracked-file.txt" # 如果不需要只在主实例执行,就设为false leader_only: false # 可选:指定执行命令的用户,EB默认应用用户是webapp user: webapp
进阶:生成复杂内容的文件
如果你的文件内容比较多,或者需要用到环境变量,可以用here-doc来生成:
container_commands: 01_create_config_file: command: | cat > /var/app/current/app-config.yaml <<EOF app_name: MyEBApp environment: ${EB_ENVIRONMENT} api_key: ${MY_API_KEY} EOF # 传递环境变量给命令 env: EB_ENVIRONMENT: "production" MY_API_KEY: "your-secret-key"
这样生成的文件内容会自动替换环境变量的值,而且完全不会被纳入VCS追踪,完美符合你的需求。
排错小贴士
如果文件还是没生成,去看EB的活动日志找原因:
tail -f /var/log/eb-activity.log
日志里会显示每个container_commands的执行结果,比如权限不足、命令语法错误都会在这里体现。
内容的提问来源于stack exchange,提问作者miron
相关产品推荐
相关产品推荐

