0

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

option_settings在我们的参数里面update_environment

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

然而,尽管有上述部署,据我所知,部署正在使用滚动策略:

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.

您可以在update-environment-call.txt中找到方法调用的详细信息。

经过更多测试后,发现该问题可能不一定与aws-sdk-ruby相关。以下调用:

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"
         }]
)

触发滚动部署。

但是,如果我们删除 VPC 设置,则会按要求调用Rolling with Additional batch :

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

update_environment在对具有不同值的唯一参数的后续调用之间是version_label.

重现问题的步骤:

第 1 步。我们调用 update_environmentversion_label: 1和确定option_settings。option_settings 包括RollingWithAdditionalBatch但也有其他设置,即VPCId. 环境已正确更新,并RollingWithAdditionalBatch在 AWS Web 控制台中显示为配置值。

步骤 2,3,4,5,... 我们调用与update_environment步骤1相同。新版本的应用程序使用滚动策略部署,在我看来这是出乎意料的。version_label: n option_settings

但是,如果我们执行步骤 2、3、5 并option_settings仅提供一个选项,RollingWithAdditionalBatch则新版本将使用RollingWithAdditionalBatch.

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

相关 Github 问题

相关 AWS 论坛帖子

4

1 回答 1

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:[]
)  
于 2017-03-03T07:30:36.660 回答