0

I'm trying to build out a small infrastructure:

  • A single VPC
  • A single subnet
  • A single security group with a single rule: ssh
  • A single instance

So far, in order to make it remotely functional I've had to add:

  • Internet Gateway
  • Route Table
    • Route

When I deploy the template, it creates successfully. I can look through my console and see all of the components.

What I'm having a problem with is connecting to the instance afterward. Attempts to connect via ssh time out.

I think I've narrowed this problem down to the fact that when the stack is built, two route tables are deployed. One is marked as main which has no default route added to it, The other one I explicitly define in my template and to which I add the default route.

If I add the default route to the template-define table after the fact, I can ssh.

I guess my questions are:

  • how do I mark the table that I'm creating in the template as the main table, or
  • how do I tell CloudFormation to not create the default table that is being marked as main, or
  • how do I get the default route into the main table?

Template:

AWSTemplateFormatVersion: 2010-09-09
Resources:
  vpcCandidateEyMm7zuOcn:
    Type: 'AWS::EC2::VPC'
    Properties:
      CidrBlock: 192.168.0.0/16
      EnableDnsHostnames: 'true'
      EnableDnsSupport: 'true'
      InstanceTenancy: default
      Tags:
        - Key: Test
          Value: Test
    Metadata:
      'AWS::CloudFormation::Designer':
        id: 052446e9-ed29-4689-8eb2-2006482f7a65
  IgCandidateEyMm7zuOcn:
    Type: "AWS::EC2::InternetGateway"
    Properties:
      Tags:
      - Key: Test
        Value: Test
  AigCandidateEyMm7zuOcn:
    Type: "AWS::EC2::VPCGatewayAttachment"
    Properties:
      VpcId: 
        Ref: vpcCandidateEyMm7zuOcn
      InternetGatewayId:
        Ref: IgCandidateEyMm7zuOcn
  RtblCandidateEyMm7zuOcn:
    Type: "AWS::EC2::RouteTable"
    Properties: 
      VpcId: 
        Ref: vpcCandidateEyMm7zuOcn
  myRoute:
    Type: AWS::EC2::Route
    DependsOn: IgCandidateEyMm7zuOcn
    Properties:
      RouteTableId:
        Ref: RtblCandidateEyMm7zuOcn
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId:
        Ref: IgCandidateEyMm7zuOcn
  subnetCandidateEyMm7zuOcn:
    Type: 'AWS::EC2::Subnet'
    Properties:
      CidrBlock: 192.168.1.0/24
      MapPublicIpOnLaunch: 'true'
      Tags:
        - Key: Test
          Value: Test
      VpcId: !Ref vpcCandidateEyMm7zuOcn
    Metadata:
      'AWS::CloudFormation::Designer':
        id: b9300540-4fb5-4a9c-a432-d12d9a78e08c
  allowSSH:
    Type: 'AWS::EC2::SecurityGroup'
    Properties:
      GroupDescription: 'Allow SSH from Anywhere'
      VpcId:
        Ref: vpcCandidateEyMm7zuOcn
      SecurityGroupIngress:
        - IpProtocol: tcp
          FromPort: '22'
          ToPort: '22'
          CidrIp: 0.0.0.0/0
  ansibleInstance:
    Type: 'AWS::EC2::Instance'
    Properties:
      ImageId: ami-4bf3d731
      KeyName: AWSCentOS7
      InstanceType: t2.micro
      SubnetId: !Ref subnetCandidateEyMm7zuOcn
      SecurityGroupIds:
      - !Ref allowSSH
      Tags:
        - Key: Name
          Value: Test
      UserData:
        Fn::Base64: !Sub |
          #!/bin/bash
          pip install ansible
          cd ~
          wget https://s3.amazonaws.com/ansibledepot/web.tar.gz
          tar zxvf web.tar.gz
    Metadata:
      'AWS::CloudFormation::Designer':
        id: 63fffdde-e058-45ad-b2c8-7cf00fd54351
  • Found the answer here. I had to add the subnet to the route table. – theillien Jun 9 '18 at 17:27
  • Please answer your own question, otherwise people will come in here spending their time trying to help with a problem that's already resolved. Suggest you show the CloudFormation code to add the route table, or the finished template. – Tim Jun 9 '18 at 18:47
0

Found the answer here. I had to add the subnet to the route table.

    "subnet0RTA": {
  "Type" : "AWS::EC2::SubnetRouteTableAssociation",
  "Properties" : {
    "RouteTableId" : {"Ref" : "rtb"},
    "SubnetId" : {"Ref" : "subnet0"}
  }
},
"subnet1RTA": {
  "Type" : "AWS::EC2::SubnetRouteTableAssociation",
  "Properties" : {
    "RouteTableId" : {"Ref" : "rtb"},
    "SubnetId" : {"Ref" : "subnet1"}
  }
},

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.