Advertisement
Javi

AWS: VPC 2AZs sin natgateway

Aug 13th, 2018
334
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ---
  2. AWSTemplateFormatVersion: '2010-09-09'
  3. Description: '2AZs (pub+priv) (based on cloudonaut.io template)'
  4. # Invoke with
  5. # aws cloudformation create-stack --stack-name <name> --template-body https://pastebin.com/raw/<id> --parameters ParameterKey=Owner,ParameterValue=<owner> ParameterKey=ClassB,ParameterValue=10 --profile awslabs
  6. Metadata:
  7.   'AWS::CloudFormation::Interface':
  8.     ParameterGroups:
  9.     - Label:
  10.         default: 'VPC Parameters'
  11.       Parameters:
  12.      - ClassB
  13. Parameters:
  14.   ClassB:
  15.     Description: 'Class B of VPC (10.XXX.0.0/16)'
  16.     Type: Number
  17.     Default: 0
  18.     ConstraintDescription: 'Must be in the range [0-255]'
  19.     MinValue: 0
  20.     MaxValue: 255
  21.   Owner:
  22.     Description: 'Owner of the resources.'
  23.     Type: String
  24.  
  25. Resources:
  26.   VPC:
  27.     Type: 'AWS::EC2::VPC'
  28.     Properties:
  29.       CidrBlock: !Sub '10.${ClassB}.0.0/16'
  30.       EnableDnsSupport: true
  31.       EnableDnsHostnames: true
  32.       InstanceTenancy: default
  33.       Tags:
  34.       - Key: Name
  35.         Value: !Sub '${Owner}-vpc-${ClassB}'
  36.       - Key: Owner
  37.         Value: !Sub '${Owner}'
  38.   InternetGateway:
  39.     Type: 'AWS::EC2::InternetGateway'
  40.     Properties:
  41.       Tags:
  42.       - Key: Name
  43.         Value: !Sub '${Owner}-igw-${ClassB}'
  44.       - Key: Owner
  45.         Value: !Sub '${Owner}'
  46.   VPCGatewayAttachment:
  47.     Type: 'AWS::EC2::VPCGatewayAttachment'
  48.     Properties:
  49.       VpcId: !Ref VPC
  50.       InternetGatewayId: !Ref InternetGateway
  51.   SubnetAPublic:
  52.     Type: 'AWS::EC2::Subnet'
  53.     Properties:
  54.       AvailabilityZone: !Select [0, !GetAZs '']
  55.       CidrBlock: !Sub '10.${ClassB}.0.0/20'
  56.       MapPublicIpOnLaunch: true
  57.       VpcId: !Ref VPC
  58.       Tags:
  59.       - Key: Name
  60.         Value: !Sub '${Owner}-sub-${ClassB}-A public'
  61.       - Key: Reach
  62.         Value: public
  63.       - Key: Owner
  64.         Value: !Sub '${Owner}'
  65.   SubnetAPrivate:
  66.     Type: 'AWS::EC2::Subnet'
  67.     Properties:
  68.       AvailabilityZone: !Select [0, !GetAZs '']
  69.       CidrBlock: !Sub '10.${ClassB}.16.0/20'
  70.       VpcId: !Ref VPC
  71.       Tags:
  72.       - Key: Name
  73.         Value: !Sub '${Owner}-sub-${ClassB}-A private'
  74.       - Key: Reach
  75.         Value: private
  76.       - Key: Owner
  77.         Value: !Sub '${Owner}'
  78.   SubnetBPublic:
  79.     Type: 'AWS::EC2::Subnet'
  80.     Properties:
  81.       AvailabilityZone: !Select [1, !GetAZs '']
  82.       CidrBlock: !Sub '10.${ClassB}.32.0/20'
  83.       MapPublicIpOnLaunch: true
  84.       VpcId: !Ref VPC
  85.       Tags:
  86.       - Key: Name
  87.         Value: !Sub '${Owner}-sub-${ClassB}-B public'
  88.       - Key: Reach
  89.         Value: public
  90.       - Key: Owner
  91.         Value: !Sub '${Owner}'
  92.   SubnetBPrivate:
  93.     Type: 'AWS::EC2::Subnet'
  94.     Properties:
  95.       AvailabilityZone: !Select [1, !GetAZs '']
  96.       CidrBlock: !Sub '10.${ClassB}.48.0/20'
  97.       VpcId: !Ref VPC
  98.       Tags:
  99.       - Key: Name
  100.         Value: !Sub '${Owner}-sub-${ClassB}-B private'
  101.       - Key: Reach
  102.         Value: private
  103.       - Key: Owner
  104.         Value: !Sub '${Owner}'
  105.   RouteTablePublic:
  106.     Type: 'AWS::EC2::RouteTable'
  107.     Properties:
  108.       VpcId: !Ref VPC
  109.       Tags:
  110.       - Key: Name
  111.         Value: !Sub '${Owner}-rt-${ClassB}-public'
  112.       - Key: Owner
  113.         Value: !Sub '${Owner}'
  114.   RouteTablePrivate:
  115.     Type: 'AWS::EC2::RouteTable'
  116.     Properties:
  117.       VpcId: !Ref VPC
  118.       Tags:
  119.       - Key: Name
  120.         Value: !Sub '${Owner}-rt-${ClassB}-private'
  121.       - Key: Owner
  122.         Value: !Sub '${Owner}'
  123.   RouteTableAssociationAPublic:
  124.     Type: 'AWS::EC2::SubnetRouteTableAssociation'
  125.     Properties:
  126.       SubnetId: !Ref SubnetAPublic
  127.       RouteTableId: !Ref RouteTablePublic
  128.   RouteTableAssociationAPrivate:
  129.     Type: 'AWS::EC2::SubnetRouteTableAssociation'
  130.     Properties:
  131.       SubnetId: !Ref SubnetAPrivate
  132.       RouteTableId: !Ref RouteTablePrivate
  133.   RouteTableAssociationBPublic:
  134.     Type: 'AWS::EC2::SubnetRouteTableAssociation'
  135.     Properties:
  136.       SubnetId: !Ref SubnetBPublic
  137.       RouteTableId: !Ref RouteTablePublic
  138.   RouteTableAssociationBPrivate:
  139.     Type: 'AWS::EC2::SubnetRouteTableAssociation'
  140.     Properties:
  141.       SubnetId: !Ref SubnetBPrivate
  142.       RouteTableId: !Ref RouteTablePrivate
  143.   RouteTablePublicInternetRoute:
  144.     Type: 'AWS::EC2::Route'
  145.     DependsOn: VPCGatewayAttachment
  146.     Properties:
  147.       RouteTableId: !Ref RouteTablePublic
  148.       DestinationCidrBlock: '0.0.0.0/0'
  149.       GatewayId: !Ref InternetGateway
  150.      
  151.      
  152.      
  153.      
  154. Outputs:
  155.   TemplateID:
  156.     Description: 'cloudonaut.io template id'
  157.     Value: 'vpc/vpc-2azs'
  158.   StackName:
  159.     Description: 'Stack name'
  160.     Value: !Sub '${AWS::StackName}'
  161.   AZs:
  162.     Description: 'AZs'
  163.     Value: 2
  164.     Export:
  165.       Name: !Sub '${AWS::StackName}-AZs'
  166.   AZA:
  167.     Description: 'AZ of A'
  168.     Value: !Select [0, !GetAZs '']
  169.     Export:
  170.       Name: !Sub '${AWS::StackName}-AZA'
  171.   AZB:
  172.     Description: 'AZ of B'
  173.     Value: !Select [1, !GetAZs '']
  174.     Export:
  175.       Name: !Sub '${AWS::StackName}-AZB'
  176.   ClassB:
  177.     Description: 'Class B.'
  178.     Value: !Ref ClassB
  179.     Export:
  180.       Name: !Sub '${AWS::StackName}-ClassB'
  181.   VPC:
  182.     Description: 'VPC.'
  183.     Value: !Ref VPC
  184.     Export:
  185.       Name: !Sub '${AWS::StackName}-VPC'
  186.   SubnetsPublic:
  187.     Description: 'Subnets public.'
  188.     Value: !Join [',', [!Ref SubnetAPublic, !Ref SubnetBPublic]]
  189.     Export:
  190.       Name: !Sub '${AWS::StackName}-SubnetsPublic'
  191.   SubnetsPrivate:
  192.     Description: 'Subnets private.'
  193.     Value: !Join [',', [!Ref SubnetAPrivate, !Ref SubnetBPrivate]]
  194.     Export:
  195.       Name: !Sub '${AWS::StackName}-SubnetsPrivate'
  196.   SubnetAPublic:
  197.     Description: 'Subnet A public.'
  198.     Value: !Ref SubnetAPublic
  199.     Export:
  200.       Name: !Sub '${AWS::StackName}-SubnetAPublic'
  201.   SubnetPrivate:
  202.     Description: 'Subnet A private.'
  203.     Value: !Ref SubnetAPrivate
  204.     Export:
  205.       Name: !Sub '${AWS::StackName}-SubnetAPrivate'
  206.   SubnetBPublic:
  207.     Description: 'Subnet B public.'
  208.     Value: !Ref SubnetBPublic
  209.     Export:
  210.       Name: !Sub '${AWS::StackName}-SubnetBPublic'
  211.   SubnetBPrivate:
  212.     Description: 'Subnet B private.'
  213.     Value: !Ref SubnetBPrivate
  214.     Export:
  215.       Name: !Sub '${AWS::StackName}-SubnetBPrivate'
  216.   RouteTablePrivate:
  217.     Description: 'Route table private (deprecated in v4, will be removed in v5).'
  218.     Value: !Ref RouteTablePrivate
  219.     Export:
  220.       Name: !Sub '${AWS::StackName}-RouteTablePrivate'
  221.   RouteTablePublic:
  222.     Description: 'Route table public (deprecated in v4, will be removed in v5).'
  223.     Value: !Ref RouteTablePublic
  224.     Export:
  225.       Name: !Sub '${AWS::StackName}-RouteTablePublic'
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement