"自动分配公共IP"使用Elastic Beanstalk进行子网或启动配置

时间:2017-09-28 19:38:55

标签: amazon-web-services amazon-cloudformation

如果我理解正确,就无法设置属性"自动分配公共IP"来自云形成模板的子网。

这可以通过Auto Scaling中的Launch配置来完成,使Ec2实例启动公共IP。

但是,此选项是AFAIK,在使用Cloud Formation编写脚本时,不适用于通过Elastic Beanstalk配置的启动配置。

AWS :: ElasticBeanstalk :: Environment元素具有' OptionSettings',但只有命名空间的一部分&#aw; autoscaling:launchconfiguration'通过了。 见这个例子

someEnvironment:
    Type: AWS::ElasticBeanstalk::Environment
    Properties:
      ApplicationName:
        Ref: someApp
      Description: AWS Environment for my App
      TemplateName:
        Ref: myTemplate
      OptionSettings:
        - Namespace: 'aws:autoscaling:launchconfiguration'
          OptionName: IamInstanceProfile
          Value: 'arn:aws:iam::xxx:instance-profile/aws-elasticbeanstalk-ec2-role'
        - Namespace: 'aws:elasticbeanstalk:environment'
          OptionName: ServiceRole
          Value: 'aws-elasticbeanstalk-service-role'

我尝试添加' aws:autoscaling:launchconfiguration'> AssociatePublicIpAddress / true,但模板失败,因为该属性未知。

在EB自动缩放组中创建的服务器无法向Elastic Beanstalk服务发出信号,表示他们已经启动,并且整个CF堆栈超时并在15分钟后回滚。 / p>

解决方法是在创建后修改VPC。我可以这样做,因为我已经将我的CF脚本与导出和导入值分层。我必须在公共子网上手动启用自动分配IP。这感觉很糟糕。

我在这里遗漏了什么吗?

1 个答案:

答案 0 :(得分:3)

有许多方法可以实现您的目标。

aws:autoscaling:launchconfiguration上没有AssociatePublicIpAddress,这是正确的。

aws:ec2:vpc选项设置中有AssociatePublicIpAddress。这可能是这样的:

    - Namespace: 'aws:ec2:vpc'
      OptionName: AssociatePublicIpAddress
      Value: true

由于您要在VPC上指定属性,因此您可能还需要指定VPCIdSubnets属性

    - Namespace: 'aws:ec2:vpc'
      OptionName: VPCId
      Value: <your vpc>
    - Namespace: 'aws:ec2:vpc'
      OptionName: Subnets
      Value: "instance_subnet, etc"

我在使用ElasticBeanstalk时发现必不可少的一个资源是General Options for All Environments文档。它列出了CloudFormation ElasticBeanstalk资源,.ebextensions和保存的配置共有的所有主要名称空间和选项。

希望有所帮助。