diff --git a/template.yaml b/template.yaml index 1a4a3c2b..2778b38b 100644 --- a/template.yaml +++ b/template.yaml @@ -1,99 +1,81 @@ AWSTemplateFormatVersion: '2010-09-09' -Description: Deploy EC2 instance using a specific AMI, configure a security group with ingress rules for SSH and port 3001, and create VPC and subnet. - -Parameters: - AMI: - Type: String - Default: ami-021141a79f4c8fc02 # Default to your AMI ID if needed - InstanceType: - Type: String - Default: t3.large # Default to t3.large - VpcCidrBlock: - Type: String - Default: 10.0.0.0/16 # Default to a private network range - SubnetCidrBlock: - Type: String - Default: 10.0.1.0/24 # Default to a smaller subnet range - SecurityGroupName: - Type: String - Default: ShuffleSG +Description: 'Create an EC2 instance with port 3001 open and auto-generate network resources' Resources: - # Create the VPC VPC: Type: AWS::EC2::VPC Properties: - CidrBlock: !Ref VpcCidrBlock - EnableDnsSupport: "true" - EnableDnsHostnames: "true" - Tags: - - Key: Name - Value: ShuffleVPC + CidrBlock: 10.0.0.0/16 + EnableDnsHostnames: true + EnableDnsSupport: true - # Create the Subnet within the VPC - Subnet: + PublicSubnet: Type: AWS::EC2::Subnet Properties: - CidrBlock: !Ref SubnetCidrBlock VpcId: !Ref VPC - AvailabilityZone: !Select [ 0, !GetAZs '' ] - MapPublicIpOnLaunch: "true" - Tags: - - Key: Name - Value: ShuffleSubnet + AvailabilityZone: !Select + - 0 + - !GetAZs + Ref: 'AWS::Region' + CidrBlock: 10.0.1.0/24 + MapPublicIpOnLaunch: true + + InternetGateway: + Type: AWS::EC2::InternetGateway + + AttachGateway: + Type: AWS::EC2::VPCGatewayAttachment + Properties: + VpcId: !Ref VPC + InternetGatewayId: !Ref InternetGateway + + PublicRouteTable: + Type: AWS::EC2::RouteTable + Properties: + VpcId: !Ref VPC + + PublicRoute: + Type: AWS::EC2::Route + DependsOn: AttachGateway + Properties: + RouteTableId: !Ref PublicRouteTable + DestinationCidrBlock: 0.0.0.0/0 + GatewayId: !Ref InternetGateway + + SubnetRouteTableAssociation: + Type: AWS::EC2::SubnetRouteTableAssociation + Properties: + SubnetId: !Ref PublicSubnet + RouteTableId: !Ref PublicRouteTable - # Create the Security Group for the EC2 instance SecurityGroup: Type: AWS::EC2::SecurityGroup Properties: - GroupName: !Ref SecurityGroupName + GroupDescription: Allow port 3001 access VpcId: !Ref VPC SecurityGroupIngress: - - IpProtocol: tcp - FromPort: 22 - ToPort: 22 - CidrIp: 0.0.0.0/0 # Allow SSH from anywhere - IpProtocol: tcp FromPort: 3001 ToPort: 3001 - CidrIp: 0.0.0.0/0 # Allow traffic on port 3001 from anywhere + CidrIp: 0.0.0.0/0 + - IpProtocol: tcp + FromPort: 22 + ToPort: 22 + CidrIp: 0.0.0.0/0 - # Create an EC2 instance EC2Instance: Type: AWS::EC2::Instance Properties: - ImageId: !Ref AMI - InstanceType: !Ref InstanceType - NetworkInterfaces: - - AssociatePublicIpAddress: true - DeviceIndex: 0 - GroupSet: - - !Ref SecurityGroup - SubnetId: !Ref Subnet - Tags: - - Key: Name - Value: Shuffle AMI Test Instance - CpuOptions: - CoreCount: 1 - ThreadsPerCore: 1 - PrivateDnsNameOptions: - HostnameType: "ip-name" - EnableResourceNameDnsARecord: true - EnableResourceNameDnsAAAARecord: false + InstanceType: t3.large + SecurityGroupIds: + - !Ref SecurityGroup + SubnetId: !Ref PublicSubnet + ImageId: ami-04996ef73316c465c Outputs: InstanceId: - Description: "Instance ID of the created EC2 instance" + Description: InstanceId of the newly created EC2 instance Value: !Ref EC2Instance - PublicIP: - Description: "Public IP address of the EC2 instance" - Value: !GetAtt EC2Instance.PublicIp - VPCId: - Description: "VPC ID" - Value: !Ref VPC - SubnetId: - Description: "Subnet ID" - Value: !Ref Subnet - SecurityGroupId: - Description: "Security Group ID" - Value: !Ref SecurityGroup + PublicDNS: + Description: Public DNSName of the newly created EC2 instance + Value: !GetAtt EC2Instance.PublicDnsName \ No newline at end of file