Parameters: KeyName: Description: Name of an existing EC2 KeyPair to enable SSH access to the instances. Linked to AWS Parameter Type: AWS::EC2::KeyPair::KeyName ConstraintDescription: must be the name of an existing EC2 KeyPair. InstanceType: Description: Enter t2.micro, t3.micro. Default is t2.micro. Type: String Default: t2.micro AllowedValues: - t2.micro - t3.micro LatestAmiId: Description: (DO NOT CHANGE) Type: 'AWS::SSM::Parameter::Value' Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' AllowedValues: - /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 Resources: ELBVPC: Type: AWS::EC2::VPC Properties: CidrBlock: 10.0.0.0/16 EnableDnsSupport: true EnableDnsHostnames: true Tags: - Key: Name Value: ELB-VPC MyVPC: Type: AWS::EC2::VPC Properties: CidrBlock: 20.0.0.0/16 Tags: - Key: Name Value: My-VPC ELBIGW: Type: AWS::EC2::InternetGateway Properties: Tags: - Key: Name Value: ELB-IGW MyIGW: Type: AWS::EC2::InternetGateway Properties: Tags: - Key: Name Value: My-IGW ELBIGWAttachment: Type: AWS::EC2::VPCGatewayAttachment Properties: InternetGatewayId: !Ref ELBIGW VpcId: !Ref ELBVPC MyIGWAttachment: Type: AWS::EC2::VPCGatewayAttachment Properties: InternetGatewayId: !Ref MyIGW VpcId: !Ref MyVPC ELBPublicRT: Type: AWS::EC2::RouteTable Properties: VpcId: !Ref ELBVPC Tags: - Key: Name Value: ELB-Public-RT ELBDefaultPublicRoute: Type: AWS::EC2::Route DependsOn: ELBIGWAttachment Properties: RouteTableId: !Ref ELBPublicRT DestinationCidrBlock: 0.0.0.0/0 GatewayId: !Ref ELBIGW MyPublicRT: Type: AWS::EC2::RouteTable Properties: VpcId: !Ref MyVPC Tags: - Key: Name Value: My-Public-RT MyDefaultPublicRoute: Type: AWS::EC2::Route DependsOn: MyIGWAttachment Properties: RouteTableId: !Ref MyPublicRT DestinationCidrBlock: 0.0.0.0/0 GatewayId: !Ref MyIGW ELBPublicSN1: Type: AWS::EC2::Subnet Properties: VpcId: !Ref ELBVPC AvailabilityZone: !Select [ 0, !GetAZs '' ] CidrBlock: 10.0.0.0/24 Tags: - Key: Name Value: ELB-Public-SN-1 ELBPublicSN2: Type: AWS::EC2::Subnet Properties: VpcId: !Ref ELBVPC AvailabilityZone: !Select [ 2, !GetAZs '' ] CidrBlock: 10.0.1.0/24 Tags: - Key: Name Value: ELB-Public-SN-2 MyPublicSN: Type: AWS::EC2::Subnet Properties: VpcId: !Ref MyVPC AvailabilityZone: !Select [ 0, !GetAZs '' ] CidrBlock: 20.0.0.0/24 Tags: - Key: Name Value: My-Public-SN ELBPublicSNRouteTableAssociation: Type: AWS::EC2::SubnetRouteTableAssociation Properties: RouteTableId: !Ref ELBPublicRT SubnetId: !Ref ELBPublicSN1 ELBPublicSNRouteTableAssociation2: Type: AWS::EC2::SubnetRouteTableAssociation Properties: RouteTableId: !Ref ELBPublicRT SubnetId: !Ref ELBPublicSN2 MyPublicSNRouteTableAssociation: Type: AWS::EC2::SubnetRouteTableAssociation Properties: RouteTableId: !Ref MyPublicRT SubnetId: !Ref MyPublicSN MySG: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Enable HTTP access via port 80 and SSH access via port 22 VpcId: !Ref MyVPC Tags: - Key: Name Value: My-SG SecurityGroupIngress: - IpProtocol: tcp FromPort: '22' ToPort: '22' CidrIp: 0.0.0.0/0 - IpProtocol: icmp FromPort: -1 ToPort: -1 CidrIp: 0.0.0.0/0 ELBSG: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Enable HTTP access via port 80 and SSH access via port 22 VpcId: !Ref ELBVPC Tags: - Key: Name Value: ELBSG SecurityGroupIngress: - IpProtocol: tcp FromPort: '80' ToPort: '80' CidrIp: 0.0.0.0/0 - IpProtocol: udp FromPort: '161' ToPort: '161' CidrIp: 0.0.0.0/0 - IpProtocol: tcp FromPort: '22' ToPort: '22' CidrIp: 0.0.0.0/0 - IpProtocol: icmp FromPort: -1 ToPort: -1 CidrIp: 0.0.0.0/0 MyEC2: Type: AWS::EC2::Instance Properties: InstanceType: !Ref InstanceType ImageId: !Ref LatestAmiId KeyName: !Ref KeyName Tags: - Key: Name Value: My-EC2 NetworkInterfaces: - DeviceIndex: 0 SubnetId: !Ref MyPublicSN GroupSet: - !Ref MySG AssociatePublicIpAddress: true UserData: Fn::Base64: !Sub | #!/bin/bash hostnamectl --static set-hostname MyEC2 yum install tcpdump tmux -y ELBEC21: Type: AWS::EC2::Instance Properties: InstanceType: !Ref InstanceType ImageId: !Ref LatestAmiId KeyName: !Ref KeyName Tags: - Key: Name Value: ELB-EC2-1 NetworkInterfaces: - DeviceIndex: 0 SubnetId: !Ref ELBPublicSN1 GroupSet: - !Ref ELBSG AssociatePublicIpAddress: true UserData: Fn::Base64: !Sub | #!/bin/bash hostnamectl --static set-hostname ELB-EC2-1 yum install httpd php -y service httpd start chkconfig httpd on echo "

ELB-EC2-1 Web Server

" > /var/www/html/index.html ELBEC22: Type: AWS::EC2::Instance Properties: InstanceType: !Ref InstanceType ImageId: !Ref LatestAmiId KeyName: !Ref KeyName Tags: - Key: Name Value: ELB-EC2-2 NetworkInterfaces: - DeviceIndex: 0 SubnetId: !Ref ELBPublicSN2 GroupSet: - !Ref ELBSG AssociatePublicIpAddress: true UserData: Fn::Base64: !Sub | #!/bin/bash hostnamectl --static set-hostname ELB-EC2-2 yum install httpd php -y service httpd start chkconfig httpd on echo "

ELB-EC2-2 Web Server

" > /var/www/html/index.html