如果我理解正确,就无法设置属性"自动分配公共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。这感觉很糟糕。
我在这里遗漏了什么吗?
答案 0 :(得分:3)
有许多方法可以实现您的目标。
aws:autoscaling:launchconfiguration上没有AssociatePublicIpAddress
,这是正确的。
aws:ec2:vpc选项设置中有AssociatePublicIpAddress
。这可能是这样的:
- Namespace: 'aws:ec2:vpc'
OptionName: AssociatePublicIpAddress
Value: true
由于您要在VPC上指定属性,因此您可能还需要指定VPCId
和Subnets
属性
- 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和保存的配置共有的所有主要名称空间和选项。
希望有所帮助。