我想将现有的 Elastic Beanstalk 环境替换为launch configuration
。launch template
在 EC2 仪表板中,我创建了一个启动模板,并在现有的 EB 自动扩展组中选择了它。现在,一切正常,直到我进入 EB 仪表板并更改自动扩展配置:
这样就再次设置了之前的启动配置,替换了我之前设置的启动模板。
即使我在 EB 仪表板中更改配置,如何确保自动扩展组的启动模板得以保留?
我假设在 EB 配置中设置启动模板并进行滚动更新,但在General Options
EB 配置文档中有该aws:autoscaling:launchconfiguration
选项但没有aws:autoscaling:launchtemplate
。
https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/command-options-general.html
但是当你用谷歌搜索时,"aws:autoscaling:launchtemplate"
会发现一些关于它的参考资料。
EB 配置是否尚不兼容启动模板?
答案1
2022 年 12 月 6 日更新
我已就此问题联系了 AWS 支持。自 2022 年 12 月 31 日起,AWS 将弃用启动配置。因此,我们必须使用启动模板而不是启动配置。这是他们的回复。
首先,目前的指导意见是,您无需针对启动配置弃用采取任何行动。Beanstalk 将在需要时使用启动配置,并会根据需要自动使用启动模板来启动新实例和新功能。但是,如果此指导意见发生变化,我一定会及时通知您。
但是,如果您希望将 Elastic Beanstalk 环境更改为 使用启动模板而不是启动配置,我 建议在您的 EB 环境中启用“禁用 IMDSv1”选项 配置 [2]IMDS 是实例元数据服务,代码使用它来访问实例元数据。禁用 IMDSv1 需要使用 Amazon EC2 启动模板。当您在环境创建或更新期间配置此功能时,Elastic Beanstalk 会尝试将您的环境配置为使用 Amazon EC2 启动模板(如果环境尚未使用它们)。如果您有与 IMDSv1 终端节点通信的自定义脚本,则需要确保将这些脚本迁移到较新的 IMDSv2 [3]。
此外,请注意,在将配置更改应用到环境时,这可能会导致一些停机时间。我建议创建一个新环境并执行蓝/绿部署 [4],以最大限度地减少这种潜在的停机时间。请在非生产环境中测试这一点,并根据非生产环境中的结果继续进行生产。
请参考提供的文档,如果需要任何帮助请告诉我。
参考:
[1] 管理环境 -https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.managing.html
[2] 使用 Elastic Beanstalk 控制台配置 IMDS -https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/environments-cfg-ec2-imds.html#environments-cfg-ec2-imds.console
[3] IMDSv2 -https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html
[4] 使用 Elastic Beanstalk 进行蓝绿部署 -https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/using-features.CNAMESwap.html
答案2
根据 AWS 的说法:
- 目前无法通过 CLI 或 EB 仪表板使用 EB 的启动模板。
- AWS 已开始开发该功能。
作为一种解决方法,我手动设置了自动扩展组的启动模板,并且它有效。仅当通过 Elastic Beanstalk 更新配置时,才会再次设置原始启动配置,并且必须手动将其替换为启动模板。
答案3
对于使用 AWS CloudFormation 启动 Elastic Beanstalk 环境的用户:
使用创建新堆栈最新的 elastic beanstalk cloudformation 示例仍会创建AWS::AutoScaling::LaunchConfiguration
资源,而不是启动模板。可以通过列出结果堆栈的资源来验证这一点。
...启用“禁用 IMDSv1”选项...
但令人困惑的是,由此产生的 Elastic Beanstalk 环境已经显示IMDSv1 Deactivated
在 Web 控制台的配置页面上。(DisableIMDSv1
默认适用true
于 AL2023)
文档aws:自动缩放:启动配置选项状态:
用于您的环境的实例是使用 Amazon EC2 启动模板或 Auto Scaling 组启动配置资源创建的。以下选项适用于这两种资源类型。
建议(对我而言)可以使用这个命名空间来配置启动模板也一样。
经过反复尝试,我们发现需要禁用IMDSv1
明确地在 CloudFormation 模板中,尽管已经在新创建的 beanstalk 环境中被禁用。
因此,示例模板的相关部分将如下所示:
# ...
sampleConfigurationTemplate:
Type: AWS::ElasticBeanstalk::ConfigurationTemplate
Properties:
ApplicationName:
Ref: sampleApplication
Description: AWS ElasticBeanstalk Sample Configuration Template
OptionSettings:
# ...
- Namespace: aws:autoscaling:launchconfiguration # <- new
OptionName: DisableIMDSv1 # <- new
Value: true # <- new
- Namespace: aws:autoscaling:launchconfiguration
OptionName: IamInstanceProfile
Value: !Ref MyInstanceProfile
# ...
检查修改后的模板创建的堆栈资源,发现AWS::AutoScaling::LaunchConfiguration
资源确实已被替换AWS::EC2::LaunchTemplate
。