繁体   English   中英

具有VPC,子网和安全组选择的EC2的CloudFormation模板(JSON)

[英]CloudFormation Template (JSON) for EC2 with VPC, Subnet & Security Group Choices

我正在尝试在JSON中设置一个CloudFormation模板,该模板代表一个EC2实例,刚刚入门,但是在选择VPC和子网时遇到问题。 最后,它将是跨多个帐户使用的模板,每个帐户具有多个VCP和子网。 任何帐户中都没有默认的VPC。

我想让VPC出现模板提示,然后基于VPC迭代有效的子网。 我一直在处理此Amazon博客文章: 使用AWS Lambda查找有关AWS CloudFormation堆栈参数的信息| AWS管理工具博客

但是,我似乎无法使它正常工作。 我有Lambda函数设置,具有本文中概述的正确角色,但出现错误“该用户没有默认VPC”。 我也乐意采用一种更简单的方法来使其工作。

{
   "AWSTemplateFormatVersion":"2010-09-09",
   "Description":"EC2 CloudFormation Template - Version 1.0",
   "Metadata":{},
   "Parameters":{
      "InstanceType":{
         "Description":"EC2 instance type",
         "Type":"String",
         "Default":"t2.small",
         "AllowedValues":[
            "t1.micro",
            "t2.nano",
            "t2.micro",
            "t2.small",
            "t2.medium",
            "t2.large"
         ],
         "ConstraintDescription":"must be a valid EC2 instance type."
      },
      "VpcName" : {
        "Type" : "AWS::EC2::VPC::Id",
        "Description" : "Select the VPC for this EC2 Instances"
      },
      "SubnetName" : {
        "Type" : "AWS::EC2::Subnet::Id",
        "Description" : "The list of SubnetIds"
      }
    },
   "Mappings":{},
   "Conditions":{},
   "Resources":{
     "VcpInfo" : {
       "Type" : "Custom::VcpInfo",
       "Properties" : {
         "ServiceToken" : "arn:aws:lambda:us-east-1:206765214992:function:Test_GetAtt",
         "NameFilter" : { "Ref": "VpcName" }
       }
     },
     "SubnetInfo" : {
       "Type" : "Custom::SubnetInfo",
       "Properties" : {
         "ServiceToken" : "arn:aws:lambda:us-east-1:206765214992:function:Test_GetAtt",
         "NameFilter" : { "Ref": "SubnetName" }
       }
      },
      "EOTSSEC2":{
         "Type":"AWS::EC2::Instance",
         "Properties":{
            "DisableApiTermination":"false",
            "ImageId":"ami-06bee8e1000e44ca4",
            "InstanceType":{ "Ref":"InstanceType"  },
            "Monitoring":"true"
         }
      }
    },
    "Outputs":{
     "VCPCidrBlock" : {
       "Description" : "VCP CidrBlock",
       "Value" : "!GetAtt VcpInfo.CidrBlock"
     },
     "SubnetAvailabilityZon" : {
       "Description" : "Subnet AvailabilityZone",
       "Value" : "!GetAtt SubnetInfo.AvailabilityZone"
     },
     "SubnetCidrBlock" : {
       "Description" : "Subnet CidrBlock",
       "Value" : "!GetAtt SubnetInfo.CidrBlock"
     },
     "SubnetVpcId" : {
       "Description" : "Subnet VpcId",
       "Value" : "!GetAtt SubnetInfo.VpcId"
     }
   }
}

我想得到一个VPC提示,然后显示一个有效的子网列表。

该博客文章显示了如何获取有关特定资源 (例如子网)的属性信息 ,然后如何在模板的其他位置使用这些属性,例如在“输出”部分中,以显示有关那些所选资源的更多信息。

但是, 不可能调用自定义资源来操作“ Parameters部分。 这是因为参数是构建堆栈之前收集的。

因此,如果您希望提示输入VPC,然后仅使用属于该VPC的子网列表填充Subnet参数,那么对不起-这是不可能的。

欢迎您创建自己的“前端” ,向用户询问信息,包括上述功能,然后调用CloudFormation创建具有所需参数的堆栈,但是无法在自定义逻辑中向参数添加自定义逻辑。 CloudFormation管理控制台。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM