我们正在使用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,...我们将RollingWithAdditionalBatch
与update_environment
和相同 version_label: n
称为第1步。使用滚动策略部署应用程序版本,在我看来这是意料之外的。
但是,如果我们执行步骤2,3,5并且在option_settings
中只为option_settings
提供了一个选项,则使用RollingWithAdditionalBatch
正确部署新版本。
答案 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:[]
)