我必须首先说我对AWS相对陌生,但发现它非常有用。让我描述一下我的情景。。。
我目前拥有的
- 自动缩放组(ASG(
- 一种弹性负载平衡器(ELB(
- 使用CodeDeploy和Bitbucket的CD/DVD管道
- Node/Express应用程序在EC2实例上提供自定义API
- VPC和子网运行良好
- 带有我的应用程序代码的AMI
我的问题
当ASG决定使用我的启动模板和AMI来扩展新的EC2实例时,它将使用AMI中的应用程序代码。但是,如果我在某个时刻部署到master,我的AMI将不会更新,但ASG中的实例将更新。确保ASG生成的新实例运行最新代码版本(master(的最佳方法是什么?
我最初的想法
我正在考虑在启动配置中包含一个bash脚本,该脚本将从Bitbucket中提取最新代码,并运行以下任何步骤来运行我的应用程序(如"npm安装"、"npm运行启动"等(。我相信有人有一个更优雅的解决方案,我很乐意听到一些建议。
对于任何人来说,我确实解决了我的问题。我一开始是对的。";用户数据";启动模板中的字段是在实例启动并运行后引导我的应用程序的好地方。它基本上是从远程回购中克隆出来的,然后执行任何必要的步骤来启动应用程序。
例如,在EC2 的启动配置中
#cloud-boothook
#!/bin/bash
git clone myremoterepo.git
cd myremoterepo
npm install
npm run start
此外,如果您正在运行一个经典的负载均衡器,当您的ASG扩展EC2实例时,CodeDeploy将尝试基于S3中的最新代码回购来启动部署。因此,上述解决方案将是多余的。