我正在尝试弄清楚如何使用 CodeDeploy 更新一组实例上的应用程序。文档帮助我完成了文件部署,并使用钩子进行了必要的调整(保留配置文件、重新启动进程等)。
不过,我有一个要求。在部署期间,应用程序包含需要针对数据库 (RDS) 运行的 MySQL 脚本。我可以创建一个钩子来执行此操作,但我只希望该钩子在整个部署过程中运行一次。我认为它将从部署组中的每个实例运行一次。实现此目标的最佳方法是什么?
答案1
由于有问题的操作是运行数据库脚本,我通过添加一个额外的查询来解决这个问题,该查询将部署 ID(可用的环境变量)插入到部署日志表中。该表强制部署 ID 列的唯一性,如果插入失败,脚本将不执行任何操作。
这有一个很好的副作用,即在应用程序内部生成部署历史记录。
此外,不存在过早释放“锁”的风险 - 这是每个部署的永久锁定。我假设 CodeDeploy 将始终提供唯一的部署 ID。
更新:我稍后重新审视了这一点,以防止自动扩展不必要地重新运行数据库脚本(它们部署相同的修订版本,但部署 ID 不同)。我现在使用 aws cli 工具 () 从 CodeDeploy API 请求修订版本信息,并将其插入到我的数据库表中,而不是部署 ID。