为什么在环境更新期间忽略RollingWithAdditionalBatch策略

时间:2017-02-07 07:24:14

标签: amazon-web-services elastic-beanstalk aws-sdk amazon-elastic-beanstalk aws-sdk-ruby

我们正在使用eb_deployer,它使用ElasticBeanstalk Ruby Aws Sdk。 Aws::ElasticBeanstalk::Client#update_environment方法特别用于触发部署。我正在尝试使用RollingWithAdditionalBatch部署策略,但是当通过提到的sdk方法启动环境更新时,似乎会忽略此设置。

option_settings的{​​{1}}参数内,我们有:

update_environment

然而,尽管如此,据我所知,部署使用滚动策略:

{
    "namespace"=>"aws:elasticbeanstalk:command",
    "option_name"=>"DeploymentPolicy",
    "value"=>"RollingWithAdditionalBatch"
},

您可以在update-environment-call.txt

中找到方法调用的详细信息

经过一些测试后发现问题可能不一定与aws-sdk-ruby有关。 以下调用:

2017-01-11 15:59:42 UTC+0100    INFO    Environment update completed successfully.
2017-01-11 15:59:42 UTC+0100    INFO    Successfully deployed new configuration to environment.
2017-01-11 15:59:42 UTC+0100    INFO    New application version was deployed to running EC2 instances.
2017-01-11 15:58:32 UTC+0100    INFO    Deploying new version to instance(s).
2017-01-11 15:57:57 UTC+0100    INFO    Updating environment ENV_ID configuration settings.

触发滚动部署。

但是,如果我们删除VPC设置,则会根据请求调用使用其他批次滚动

client.update_environment(
         environment_id:"ENV_ID",
         version_label:"backend.1762",
         option_settings:[{
            "namespace"=>"aws:elasticbeanstalk:command",
            "option_name"=>"DeploymentPolicy",
            "value"=>"RollingWithAdditionalBatch"
         },{
            "namespace"=>"aws:ec2:vpc",
            "option_name"=>"VPCId",
            "value"=>"VPC_ID_ABC"
         }]
)

在后续调用client.update_environment( environment_id:"ENV_ID", version_label:"backend.1762", option_settings:[{ "namespace"=>"aws:elasticbeanstalk:command", "option_name"=>"DeploymentPolicy", "value"=>"RollingWithAdditionalBatch" }] ) 之间,唯一具有不同值的参数是update_environment

重现问题的步骤:

步骤1.我们使用version_label和某些version_label: 1调用update_environment。 option_settings包括option_settings,但也有其他设置,即RollingWithAdditionalBatch。环境已正确更新,VPCId在AWS Web Console中显示为已配置的值。

步骤2,3,4,5,...我们将RollingWithAdditionalBatchupdate_environment相同 version_label: n称为第1步。使用滚动策略部署应用程序版本,在我看来这是意料之外的。

但是,如果我们执行步骤2,3,5并且在option_settings中只为option_settings提供了一个选项,则使用RollingWithAdditionalBatch正确部署新版本。

有人遇到过这种行为并知道如何解决这个问题吗?

Related Github Issue

Related AWS Forum Post

1 个答案:

答案 0 :(得分:0)

如AWS Support所述

以下是我们与aws支持对话的一些重要摘录,以便与我们有同样问题的人可以找到它(强调我的):

  

如上所述(?),出现这种情况是因为您所做的更改导致配置更新被触发。配置更改使用的部署策略与应用程序部署使用的策略不同。某些修改将触发配置更新,其中一些更改将要求更换您的环境实例(尽管有些不会)。重要的是,即使自上次update_environment呼叫后配置选项尚未更改,也可以触发配置更新。

事实证明,这种行为虽然记录不完整,但弹性豆茎应该如何运作。

为了克服它,最好提供空option_settings以确保update_environment触发应用程序部署,如下所示:

client.update_environment(
         environment_id:"ENV_ID",
         version_label:"new_version_of_app",
         option_settings:[]
)