我使用默认实例配置文件aws-elasticbeanstalk-ec2-role
运行弹性beanstalk。应用程序在安装过程中使用私有SSH密钥访问外部资源,这意味着我使用.ebextensions config file
从S3复制内容。
但是,出于各种原因,我需要更改实例配置文件,但我发现这非常困难,可能是因为我的代码依赖于实例配置文件,并且似乎就像配置更改一样只有在配置更改启动新实例时成功部署应用程序时,AWS Web控制台才会成功(更改实例配置文件会导致启动新实例,然后终止旧实例)。
我认为关键问题是我的.ebextensions
文件引用了实例配置文件(aws-elasticbeanstalk-ec2-role
):
S3Auth:
buckets:
- <my-bucket>
roleName:
? "Fn::GetOptionSetting"
:
DefaultValue: aws-elasticbeanstalk-ec2-role
Namespace: "aws:asg:launchconfiguration"
OptionName: IamInstanceProfile
type: s3
如果我通过控制台更改实例配置文件,则会启动一个新实例并部署我的应用程序,这将失败,因此将恢复配置更改。
如果我首先更改.ebextensions
以使用新角色,则部署该角色将失败,因为引用的实例配置文件与EB当前具有的不匹配。即使首先部署(当然会失败)和然后更改配置,似乎不会使用新部署(失败)版本,但EB可能会回退到以前的版本 - 所以这看起来像是一个捕获22场景。
我找到的解决方案是
$ eb create -ip <instance profile>
这很有效,但是不得不终止现有环境来发布CNAME等,以便从头开始重新创建环境。
现在,我的问题。
由于问题似乎是实例配置文件更改并且应用程序更改需要以原子方式完成,是否有办法将实例配置文件更改为eb deploy
命令的一部分,例如通过.elasticbeanstalk/config.yml
指定实例配置文件?
有没有办法创建一个带有S3身份验证规则的.ebextensions
配置文件,该规则不会直接引用要使用的实例配置文件(必须与EB所拥有的匹配! ),而是&#34;使用当前的实例配置文件&#34;?似乎有点多余.ebextensions
文件必须说明要进行身份验证的实例配置文件,当唯一可用的是EB实际持有的那个?
还有其他解决这个问题的方法吗?