2

我有一个使用默认实例配置文件运行的弹性 beanstalk aws-elasticbeanstalk-ec2-role。该应用程序在安装过程中使用私有 SSH 密钥访问外部资源,这意味着我正在使用 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个场景。

我找到的解决方案是

  1. 从头开始创建一个新环境并从一开始就指定实例配置文件,使用

$ eb create -ip <instance profile>

这是可行的,但可能非常不希望不得不终止现有环境以发布 CNAME 等,以便从头开始重新创建环境。

  1. 部署一个不依赖于实例配置文件的虚拟 Hello World 应用程序,然后在 Web 控制台中更改实例配置文件,然后使用新的实例配置文件部署真实应用程序。

现在,我的问题。

  1. 由于问题似乎是实例配置文件更改和应用程序更改需要以原子方式完成,有没有办法将实例配置文件作为eb deploy命令的一部分更改,例如通过指定实例配置文件.elasticbeanstalk/config.yml

  2. 有没有办法.ebextensions使用不直接引用要使用的实例配置文件的 S3 身份验证规则创建配置文件(无论如何都必须匹配 EB 的配置文件!!),而是“使用当前实例配置文件”?文件必须说明要使用哪个实例配置文件进行身份验证似乎有点多余,.ebextensions而唯一可用的配置文件是 EB 实际持有的配置文件?

  3. 有没有其他方法可以解决这个问题?

4

0 回答 0