AWS ElasticBeanstalk Terraform DisableIMDSv1 未知配置设置

Posted

技术标签:

【中文标题】AWS ElasticBeanstalk Terraform DisableIMDSv1 未知配置设置【英文标题】:AWS ElasticBeanstalk Terraform DisableIMDSv1 Unknown Configuration Setting 【发布时间】:2020-12-09 04:52:56 【问题描述】:

我正在尝试在我正在编写的 ElasticBeanstalk 模块中禁用 IMDSv1。我正在查看可用的 EB 自动缩放设置选项here。它表明 DisableIMDSv1 是一个有效设置,但是当我运行 terraform apply 时,它给了我这个错误。

ConfigurationValidationException: Configuration validation exception: Invalid option specification (Namespace: 'aws:autoscaling:launchconfiguration', OptionName: 'DisableIMDSv1'): Unknown configuration setting.
        status code: 400

我正在使用一个变量来循环我的设置,所以这就是 DisableIMDSv1 的变量代码的样子。

    launch_configuration = 
      namespace = "aws:autoscaling:launchconfiguration"
      name      = "IamInstanceProfile"
      value     = "some-role"
    
    disable_imds_v1 = 
      namespace = "aws:autoscaling:launchconfiguration"
      name      = "DisableIMDSv1"
      value     = "true"
    

如果我注释掉 disable_imds_v1 部分,我可以成功运行我的terraform apply

看起来 DisableIMDSv1 选项可能是对可用 beanstalk 设置选项的新增功能。 Added June 2020.

这是他们没有可用选项的 terraform 问题,还是我需要升级到 terraform 0.13.x?我正在使用terraform version 0.12.23aws provider 3.2.0。我运行了一个 terraform init -upgrade,它将我的 aws 提供程序从 3.1.0 提升到 3.2.0,我认为这可能会解决它,但我仍然看到 Unknown configuration setting 消息。

【问题讨论】:

【参考方案1】:

我在基于 Amazon Linux 1 (AL1) 的 EB 环境中遇到了同样的问题。我认为 AL1 不支持该选项。但它在 AL2 中对我有用。

以下是我使用的示例。我还使用 setting 作为设置的名称,而不是 launch_configurationdisable_imds_v1 在你的情况下。

比如我用aws_elastic_beanstalk_environment:

resource "aws_elastic_beanstalk_environment" "ebenv" 

  # ...

  # DisableIMDSv1 option will NOT work in AL1 
  #solution_stack_name = "64bit Amazon Linux 2018.03 v2.9.9 running php 7.2"

  # but it will work with AL2 
  solution_stack_name = "64bit Amazon Linux 2 v3.1.0 running PHP 7.4"
  
  setting 
    namespace = "aws:autoscaling:launchconfiguration"
    name  = "EC2KeyName"
    value = aws_key_pair.key.key_name
  
 
  setting 
    namespace = "aws:autoscaling:launchconfiguration"
    name      = "DisableIMDSv1"
    value     = "true"
    
  

【讨论】:

谢谢马尔辛!这就是问题所在。我正在使用64bit Amazon Linux 2018.03 v2.15.3 running Docker 19.03.6-ce 解决方案堆栈,将其更改为64bit Amazon Linux 2 v3.1.0 running Docker 解决方案堆栈使其适用。

以上是关于AWS ElasticBeanstalk Terraform DisableIMDSv1 未知配置设置的主要内容,如果未能解决你的问题,请参考以下文章

强制 https aws elasticbeanstalk

从在 ElasticBeanstalk 中运行的 Flask 应用程序使用 AWS

在 AWS 上使用 ElastiCache 和 ElasticBeanstalk 配置 Redis

是否有任何东西可以将 AWS::ElasticBeanstalk::Environment 链接到它创建的嵌套堆栈?

Rails 部署到 AWS ElasticBeanstalk/RDS 失败

AWS Elasticbeanstalk 部署错误