在AWS Code Deploy更新正在运行的实例中的应用程序之后,使用RunInstances启动的新EC2实例将使用Launch Template中的旧AMI

问题描述

我有一个环境,可以根据需要创建新的EC2 worker实例。 我使用现有实例的快照AMI创建了启动模板,然后在RunInstances调用中使用它来启动新的EC2实例。

每次更新应用程序时,都会使用AWS Code Deploy将其部署到正在运行的EC2。问题在于,以编程方式创建的任何新EC2都使用原始的启动模板,该模板的映像中具有旧应用程序的版本。因此,新的EC2获得应用程序的原始快照,而不是最新部署的版本。

有没有办法克服这个问题? (基本上将最新的代码部署应用于新实例,或者获取每个部署要使用的更新的启动模板...)

let params = {        
            MaxCount: count,MinCount: 1,LaunchTemplate: {
                LaunchTemplateName: "<original-launch-template>"
            },TagSpecifications: [{
                ResourceType: "instance",Tags: [
                    { Key: "Name",Value : "<code-deploy-tag>"},]
            }],}; 
    let data = await new AWS.EC2({ region: "<region>"}).runInstances(params).promise();

   

解决方法

您可以使用在启动时运行的用户数据脚本来安装/更新软件,而不必依赖AMI上安装的软件。

这样,在启动新的EC2实例时,它将始终获得最新版本。

,

这有效

                     -----------

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...