amazon-web-services - AWS 云形成 : How to get subnet list from VPC?

标签 amazon-web-services amazon-ec2 subnet aws-cloudformation amazon-elasticache

在 CloudFormation 中,我正在创建一个 VPC、两个 EC2 实例,并在它们前面创建一个 Elasticache。在模板中,我尝试将elasticache添加到vpc。问题发生在创建 AWS::Elasticache::SubnetGroup

    "CacheSubnetGroup" : {
      "Type" : "AWS::ElastiCache::SubnetGroup",
      "Properties" : {
        "Description" : "Subnets available for the ElastiCache Cluster",
        "SubnetIds" : [ ... ]
      }
    },

不想要求用户按照建议输入子网列表 here因为我假设用户不知道子网是什么。有没有类似于 { "Fn::GetAtt": ["myVpc", "SubnetList"] } 的函数?

编辑 在 jarmod 响应后,我正在创建子网、vpc 和其他所有内容。但仍然存在一个问题。我可以在创建的 VPC 中启动 EC2,但实例已创建,并且在初始化过程中实例会关闭并启动新实例。这个循环一直持续到我删除 cf 堆栈为止。这是我认为问题根源的部分:

"WebServerGroup" : {
  "Type" : "AWS::AutoScaling::AutoScalingGroup",
  "Properties" : {
    "VPCZoneIdentifier" : [{ "Ref" : "InstanceSubnet1" }, { "Ref" : "InstanceSubnet2" }, { "Ref" : "InstanceSubnet3" }, { "Ref" : "InstanceSubnet4" }],
    "LaunchConfigurationName" : { "Ref" : "LaunchConfig" },
    "MinSize" : "1",
    "MaxSize" : "4",
    ...
  }
}

最佳答案

处理这种情况有三种典型方法(按照我的首选顺序):

  1. 如果子网仅由该堆栈使用,请将它们创建为堆栈的一部分并使用 ref。

  2. 如果子网将由多个堆栈使用,请在单独的堆栈中创建它们,将它们定义为输出,在定义堆栈上执行描述堆栈以获取值,然后将它们传递到此堆栈作为参数。

  3. 如果子网是在其他地方(CloudFormation 之外)创建的,只需将它们作为参数传递即可。

如果您确实想使用 VPC 中的所有子网(我不建议这样做,以防将来出于其他目的创建新子网),那么您始终可以对 VpcId 进行描述子网和过滤来获取列表.

关于amazon-web-services - AWS 云形成 : How to get subnet list from VPC?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30541950/

相关文章:

python 3 : ipaddr/netaddr modules

amazon-web-services - 如何查看所有区域中所有正在运行的 Amazon EC2 实例?

ruby-on-rails - 单个 AWS 实例中的多个 Web 框架?

node.js - Node 议程调度程序 Mongo errno : 20, 代码: 'EMFILE'

nginx - 无法连接到 EC2 实例中部署的 nginx 服务器

mysql - 授予对子网上所有机器的 mysql 访问权限

mysql - 基于IP和子网掩码的广播地址与mysql

python - 目标 WSGI 脚本 '/opt/python/current/app/application.py' 不包含 WSGI 应用程序 'application'

mysql - mysql aws 安全组设置的安全影响

amazon-web-services - AWS : add second internal load balancer to elastic beanstalk in terraform