每次部署新修订版时,是否可以让 CodeDeploy 自动启动一个新实例“就像上一个实例一样”?
谢谢你。
我想你会想要使用 Cloudformation 来启动实例,并让它使用 Codedeploy 拉取最新的更新。
我认为您不能反过来使用它,即让 CodeDeploy 调用 Cloudformation。
http://docs.aws.amazon.com/codedeploy/latest/userguide/how-to-use-cloud-formation-template.html
CodeDeploy 目前不进行实例管理,因此理想情况下您必须通过其他 AWS 服务来管理您的实例。
在您的情况下,看起来您想为每个新部署启动新实例,我认为您可以使用 CloudFormation 创建一个工作流,启动一个新实例并为其部署新修订。或者,您可以使用 AWS lambda 创建一个自动创建实例并从 S3 部署的工作流。这是一篇关于如何设置从 S3 自动部署的博客文章。
是的,您可以让 CodeDeploy 在部署生命周期中创建一个新实例,或者在部署期间使用生命周期事件挂钩创建您需要的任何任务,通过 AppSpec 文件。
例如,在ValidateService
活动期间,您可以调用 AWS CLI 运行 start-instance 命令来启动新实例。
以下是 AppSpec 文件的示例:
os: linux
files:
- source: Config/config.txt
destination: webapps/Config
- source: source
destination: /webapps/myApp
hooks:
BeforeInstall:
- location: Scripts/UnzipResourceBundle.sh
- location: Scripts/UnzipDataBundle.sh
AfterInstall:
- location: Scripts/RunResourceTests.sh
timeout: 180
ApplicationStart:
- location: Scripts/RunFunctionalTests.sh
timeout: 3600
ValidateService:
- location: Scripts/StartInsance.sh
timeout: 3600
runas: codedeployuser
这里的ValidateService
事件调用Scripts/StartInsance.sh
可以被编码来启动一个实例。
您可能需要提供一些逻辑来防止对多个实例的部署启动多个实例。