【发布时间】:2019-05-09 05:45:35
【问题描述】:
我有一个使用以下 CloudFormation 模板创建的 AWS Beanstalk 应用程序和环境:
MyApp:
Type: 'AWS::ElasticBeanstalk::Application'
Properties:
ApplicationName: MyAppName
InitialApplication:
Type: 'AWS::ElasticBeanstalk::ApplicationVersion'
Properties:
ApplicationName: !Ref MyApp
Description: Version 1.0
SourceBundle:
S3Bucket: !Sub 'elasticbeanstalk-samples-${AWS::Region}'
S3Key: ecs-sample.zip
AppEnvironment:
Type: 'AWS::ElasticBeanstalk::Environment'
Properties:
ApplicationName: !Ref MyApp
Description: staging
TemplateName: !Ref AppConfigurationTemplate
VersionLabel: !Ref InitialApplication
AppConfigurationTemplate:
Type: 'AWS::ElasticBeanstalk::ConfigurationTemplate'
DependsOn:
- MySecurityGroup
Properties:
ApplicationName: !Ref MyApp
Description: My Configuration Template
SolutionStackName: '64bit Amazon Linux 2018.03 v2.11.2 running Multi-container Docker 18.03.1-ce (Generic)'
OptionSettings:
# Lots of options here
# Application environment variables
- Namespace: aws:elasticbeanstalk:application:environment
OptionName: MY_APP_OPTION
Value: SOME_VALUE
问题是,如果我将环境变量添加到我的应用程序(即在aws:elasticbeanstalk:application:environment 命名空间中),Beanstalk 会将环境的应用程序版本重置为初始应用程序。因此,假设我在一年前创建了 CloudFormation 堆栈,并且已经部署了我的应用程序的 50 个版本……如果我随后通过 CloudFormation 添加环境变量,则环境的应用程序将重置为示例应用程序。这当然会破坏一切,因为数据库发生了变化等。我想要的当然是添加/修改环境变量而不更改 Beanstalk 环境中部署的应用程序版本。
为什么 Beanstalk 在进行此更改时会重置我的应用程序,有什么方法可以阻止它?
提前致谢!
【问题讨论】:
-
您进行了哪些更改?这很可能看起来像部署 Cloudformation 堆栈的经典案例,然后通过控制台/cli 等而不是在 cloudformation 内部修改相关资源。如果您尚未更新 Cloudformation 堆栈,那么这是预期的行为,Cloudformation 将看到比模板更新的版本作为漂移,并将尝试将其重置为正常,这是原始模板。我对 beanstalk 了解不多,但您可能想查看 InitialApplication 部分以确保它正在部署最新版本。
-
是的,我已经在 EB 控制台中部署了新的应用程序版本,还添加了环境变量。但在我这样做之前(在 CF 模板和 EB 环境之间存在偏差之前),在 CF 模板中添加一个新的环境变量也会回滚应用程序版本。也许是因为我部署了一个新应用程序。因此,CF 模板似乎需要始终与最新的应用程序版本保持同步。我希望只指定初始版本,因为这将允许我通过 EB 控制台进行部署。
-
是的,不断更新 cloudformation 是最佳实践,当然也值得推荐。如果你不这样做,那么你最终会陷入像你现在正在经历的尴尬场景中,这很不幸,但可以解决。您需要将 CF 模板中的捆绑源更新为最新版本,以便部署,它可能需要重建基础设施,因为这是一个不知道已经发生的重大变化。
-
是的,我只是不认为我必须通过 CF 部署;我认为应用程序版本只是最初的版本。我将不得不修补东西并注意不要破坏任何东西。非常感谢您的意见!
-
没问题,我不知道您是否希望我发布答案,以便您接受关闭线程或接受其他人的答案,请告诉我。
标签: amazon-web-services amazon-cloudformation amazon-elastic-beanstalk