Amazon web services 更改弹性beanstalk上的实例配置文件

Amazon web services 更改弹性beanstalk上的实例配置文件,amazon-web-services,amazon-elastic-beanstalk,ebextensions,Amazon Web Services,Amazon Elastic Beanstalk,Ebextensions,我有一个运行默认实例配置文件的elastic beanstalkaws-elasticbeanstalk-ec2-role。该应用程序在安装过程中使用私有SSH密钥访问外部资源,这意味着我使用的是从S3复制内容 然而,出于各种原因,我需要更改实例配置文件,但我发现这非常困难,可能是因为我的代码依赖于实例配置文件,而且,通过AWS web控制台进行的配置更改似乎只有在配置更改启动新实例时成功部署应用程序时才会成功(更改实例配置文件会导致启动新实例,然后终止旧实例) 我认为关键问题在于我的.ebex

我有一个运行默认实例配置文件的elastic beanstalk
aws-elasticbeanstalk-ec2-role
。该应用程序在安装过程中使用私有SSH密钥访问外部资源,这意味着我使用的是从S3复制内容

然而,出于各种原因,我需要更改实例配置文件,但我发现这非常困难,可能是因为我的代码依赖于实例配置文件,而且,通过AWS web控制台进行的配置更改似乎只有在配置更改启动新实例时成功部署应用程序时才会成功(更改实例配置文件会导致启动新实例,然后终止旧实例)

我认为关键问题在于我的
.ebextensions
文件引用了实例概要文件(
aws-elasticbeanstalk-ec2-role
):

S3Auth:
水桶:
- 
roleName:
? “Fn::GetOptions设置”
: 
默认值:aws-elasticbeanstalk-ec2-role
命名空间:“aws:asg:launchconfiguration”
选项名称:IAMSInstanceProfile
类型:s3
如果我通过控制台更改实例配置文件,将启动一个新实例并部署我的应用程序,这将失败,因此将恢复配置更改。 如果我首先更改我的
.ebextensions
以使用新角色,则部署该角色将失败,因为引用的实例配置文件与EB当前的配置文件不匹配。即使先部署(当然会失败),然后更改配置,似乎也不会使用新部署的(失败的)版本,但EB可能会退回到以前的版本,因此这似乎是一个第22条军规

我找到的解决办法是

  • 从头开始创建一个新环境,并使用
  • $eb create-ip

    这是可行的,但必须终止现有环境才能发布CNAMEs等,以便从头开始重新创建环境,这可能是非常不可取的

  • 部署一个不依赖于实例概要文件的虚拟Hello World应用程序,然后在web控制台中更改实例概要文件,然后使用新的实例概要文件部署实际应用程序
  • 现在,我的问题

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

  • 有没有一种方法可以创建一个带有S3身份验证规则的
    .ebextensions
    配置文件,该规则不直接引用要使用的实例配置文件(必须与EB的配置文件匹配!!),而是“使用当前实例配置文件”?
    .ebextensions
    文件必须说明要使用哪个实例配置文件进行身份验证,而唯一可用的是EB实际持有的实例配置文件,这似乎有点多余

  • 还有别的办法解决这个问题吗

  • S3Auth: 
      buckets: 
        - <my-bucket>
      roleName: 
        ? "Fn::GetOptionSetting"
        : 
          DefaultValue: aws-elasticbeanstalk-ec2-role
          Namespace: "aws:asg:launchconfiguration"
          OptionName: IamInstanceProfile
      type: s3