diff --git a/CodepipelineCloudformation.template b/CodepipelineCloudformation.template new file mode 100644 index 000000000..1874a8721 --- /dev/null +++ b/CodepipelineCloudformation.template @@ -0,0 +1,697 @@ +{ + "AWSTemplateFormatVersion" : "2010-09-09", + + "Description" : "AWS CloudFormation Sample Template AutoScalingMultiAZWithNotifications: Create a multi-az, load balanced and Auto Scaled sample web site running on an Apache Web Serever. The application is configured to span all Availability Zones in the region and is Auto-Scaled based on the CPU utilization of the web servers. Notifications will be sent to the operator email address on scaling events. The instances are load balanced with a simple health check against the default web page. **WARNING** This template creates one or more Amazon EC2 instances and an Application Load Balancer. You will be billed for the AWS resources used if you create a stack from this template.", + + "Parameters" : { + "InstanceType" : { + "Description" : "WebServer EC2 instances type", + "Type" : "String", + "Default" : "t2.micro", + "AllowedValues" : [ "t1.micro", "t2.nano", "t2.micro", "t2.small", "t2.medium", "t2.large", "m1.small", "m1.medium", "m1.large", "m1.xlarge", "m2.xlarge", "m2.2xlarge", "m2.4xlarge", "m3.medium", "m3.large", "m3.xlarge", "m3.2xlarge", "m4.large", "m4.xlarge", "m4.2xlarge", "m4.4xlarge", "m4.10xlarge", "c1.medium", "c1.xlarge", "c3.large", "c3.xlarge", "c3.2xlarge", "c3.4xlarge", "c3.8xlarge", "c4.large", "c4.xlarge", "c4.2xlarge", "c4.4xlarge", "c4.8xlarge", "g2.2xlarge", "g2.8xlarge", "r3.large", "r3.xlarge", "r3.2xlarge", "r3.4xlarge", "r3.8xlarge", "i2.xlarge", "i2.2xlarge", "i2.4xlarge", "i2.8xlarge", "d2.xlarge", "d2.2xlarge", "d2.4xlarge", "d2.8xlarge", "hi1.4xlarge", "hs1.8xlarge", "cr1.8xlarge", "cc2.8xlarge", "cg1.4xlarge"], + "ConstraintDescription" : "must be a valid EC2 instance type." + }, + + "OperatorEMail": { + "Description": "EMail address to notify if there are any scaling operations", + "Type": "String", + "AllowedPattern": "([a-zA-Z0-9_\\-\\.]+)@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.)|(([a-zA-Z0-9\\-]+\\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\\]?)", + "ConstraintDescription": "must be a valid email address." + }, + + "KeyName" : { + "Description" : "The EC2 Key Pair to allow SSH access to the instances", + "Type" : "AWS::EC2::KeyPair::KeyName", + "ConstraintDescription" : "must be the name of an existing EC2 KeyPair." + }, + + "SSHLocation" : { + "Description" : "The IP address range that can be used to SSH to the EC2 instances", + "Type": "String", + "MinLength": "9", + "MaxLength": "18", + "Default": "0.0.0.0/0", + "AllowedPattern": "(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})\\.(\\d{1,3})/(\\d{1,2})", + "ConstraintDescription": "must be a valid IP CIDR range of the form x.x.x.x/x." + } + }, + + "Mappings" : { + "Region2Examples" : { + "ap-east-1" : { "Examples" : "https://s3-ap-east-1.amazonaws.com/cloudformation-examples-ap-east-1" }, + "ap-northeast-1" : { "Examples" : "https://s3-ap-northeast-1.amazonaws.com/cloudformation-examples-ap-northeast-1" }, + "ap-northeast-2" : { "Examples" : "https://s3-ap-northeast-2.amazonaws.com/cloudformation-examples-ap-northeast-2" }, + "ap-northeast-3" : { "Examples" : "https://s3-ap-northeast-3.amazonaws.com/cloudformation-examples-ap-northeast-3" }, + "ap-south-1" : { "Examples" : "https://s3-ap-south-1.amazonaws.com/cloudformation-examples-ap-south-1" }, + "ap-southeast-1" : { "Examples" : "https://s3-ap-southeast-1.amazonaws.com/cloudformation-examples-ap-southeast-1" }, + "ap-southeast-2" : { "Examples" : "https://s3-ap-southeast-2.amazonaws.com/cloudformation-examples-ap-southeast-2" }, + "ca-central-1" : { "Examples" : "https://s3-ca-central-1.amazonaws.com/cloudformation-examples-ca-central-1" }, + "cn-north-1" : { "Examples" : "https://s3.cn-north-1.amazonaws.com.cn/cloudformation-examples-cn-north-1" }, + "cn-northwest-1" : { "Examples" : "https://s3.cn-northwest-1.amazonaws.com.cn/cloudformation-examples-cn-northwest-1" }, + "eu-central-1" : { "Examples" : "https://s3-eu-central-1.amazonaws.com/cloudformation-examples-eu-central-1" }, + "eu-north-1" : { "Examples" : "https://s3-eu-north-1.amazonaws.com/cloudformation-examples-eu-north-1" }, + "eu-west-1" : { "Examples" : "https://s3-eu-west-1.amazonaws.com/cloudformation-examples-eu-west-1" }, + "eu-west-2" : { "Examples" : "https://s3-eu-west-2.amazonaws.com/cloudformation-examples-eu-west-2" }, + "eu-west-3" : { "Examples" : "https://s3-eu-west-3.amazonaws.com/cloudformation-examples-eu-west-3" }, + "me-south-1" : { "Examples" : "https://s3-me-south-1.amazonaws.com/cloudformation-examples-me-south-1" }, + "sa-east-1" : { "Examples" : "https://s3-sa-east-1.amazonaws.com/cloudformation-examples-sa-east-1" }, + "us-east-1" : { "Examples" : "https://s3.amazonaws.com/cloudformation-examples-us-east-1" }, + "us-east-2" : { "Examples" : "https://s3-us-east-2.amazonaws.com/cloudformation-examples-us-east-2" }, + "us-west-1" : { "Examples" : "https://s3-us-west-1.amazonaws.com/cloudformation-examples-us-west-1" }, + "us-west-2" : { "Examples" : "https://s3-us-west-2.amazonaws.com/cloudformation-examples-us-west-2" } + } +, + "AWSInstanceType2Arch" : { + "t1.micro" : { "Arch" : "HVM64" }, + "t2.nano" : { "Arch" : "HVM64" }, + "t2.micro" : { "Arch" : "HVM64" }, + "t2.small" : { "Arch" : "HVM64" }, + "t2.medium" : { "Arch" : "HVM64" }, + "t2.large" : { "Arch" : "HVM64" }, + "m1.small" : { "Arch" : "HVM64" }, + "m1.medium" : { "Arch" : "HVM64" }, + "m1.large" : { "Arch" : "HVM64" }, + "m1.xlarge" : { "Arch" : "HVM64" }, + "m2.xlarge" : { "Arch" : "HVM64" }, + "m2.2xlarge" : { "Arch" : "HVM64" }, + "m2.4xlarge" : { "Arch" : "HVM64" }, + "m3.medium" : { "Arch" : "HVM64" }, + "m3.large" : { "Arch" : "HVM64" }, + "m3.xlarge" : { "Arch" : "HVM64" }, + "m3.2xlarge" : { "Arch" : "HVM64" }, + "m4.large" : { "Arch" : "HVM64" }, + "m4.xlarge" : { "Arch" : "HVM64" }, + "m4.2xlarge" : { "Arch" : "HVM64" }, + "m4.4xlarge" : { "Arch" : "HVM64" }, + "m4.10xlarge" : { "Arch" : "HVM64" }, + "c1.medium" : { "Arch" : "HVM64" }, + "c1.xlarge" : { "Arch" : "HVM64" }, + "c3.large" : { "Arch" : "HVM64" }, + "c3.xlarge" : { "Arch" : "HVM64" }, + "c3.2xlarge" : { "Arch" : "HVM64" }, + "c3.4xlarge" : { "Arch" : "HVM64" }, + "c3.8xlarge" : { "Arch" : "HVM64" }, + "c4.large" : { "Arch" : "HVM64" }, + "c4.xlarge" : { "Arch" : "HVM64" }, + "c4.2xlarge" : { "Arch" : "HVM64" }, + "c4.4xlarge" : { "Arch" : "HVM64" }, + "c4.8xlarge" : { "Arch" : "HVM64" }, + "g2.2xlarge" : { "Arch" : "HVMG2" }, + "g2.8xlarge" : { "Arch" : "HVMG2" }, + "r3.large" : { "Arch" : "HVM64" }, + "r3.xlarge" : { "Arch" : "HVM64" }, + "r3.2xlarge" : { "Arch" : "HVM64" }, + "r3.4xlarge" : { "Arch" : "HVM64" }, + "r3.8xlarge" : { "Arch" : "HVM64" }, + "i2.xlarge" : { "Arch" : "HVM64" }, + "i2.2xlarge" : { "Arch" : "HVM64" }, + "i2.4xlarge" : { "Arch" : "HVM64" }, + "i2.8xlarge" : { "Arch" : "HVM64" }, + "d2.xlarge" : { "Arch" : "HVM64" }, + "d2.2xlarge" : { "Arch" : "HVM64" }, + "d2.4xlarge" : { "Arch" : "HVM64" }, + "d2.8xlarge" : { "Arch" : "HVM64" }, + "hi1.4xlarge" : { "Arch" : "HVM64" }, + "hs1.8xlarge" : { "Arch" : "HVM64" }, + "cr1.8xlarge" : { "Arch" : "HVM64" }, + "cc2.8xlarge" : { "Arch" : "HVM64" } + }, + + "AWSInstanceType2NATArch" : { + "t1.micro" : { "Arch" : "NATHVM64" }, + "t2.nano" : { "Arch" : "NATHVM64" }, + "t2.micro" : { "Arch" : "NATHVM64" }, + "t2.small" : { "Arch" : "NATHVM64" }, + "t2.medium" : { "Arch" : "NATHVM64" }, + "t2.large" : { "Arch" : "NATHVM64" }, + "m1.small" : { "Arch" : "NATHVM64" }, + "m1.medium" : { "Arch" : "NATHVM64" }, + "m1.large" : { "Arch" : "NATHVM64" }, + "m1.xlarge" : { "Arch" : "NATHVM64" }, + "m2.xlarge" : { "Arch" : "NATHVM64" }, + "m2.2xlarge" : { "Arch" : "NATHVM64" }, + "m2.4xlarge" : { "Arch" : "NATHVM64" }, + "m3.medium" : { "Arch" : "NATHVM64" }, + "m3.large" : { "Arch" : "NATHVM64" }, + "m3.xlarge" : { "Arch" : "NATHVM64" }, + "m3.2xlarge" : { "Arch" : "NATHVM64" }, + "m4.large" : { "Arch" : "NATHVM64" }, + "m4.xlarge" : { "Arch" : "NATHVM64" }, + "m4.2xlarge" : { "Arch" : "NATHVM64" }, + "m4.4xlarge" : { "Arch" : "NATHVM64" }, + "m4.10xlarge" : { "Arch" : "NATHVM64" }, + "c1.medium" : { "Arch" : "NATHVM64" }, + "c1.xlarge" : { "Arch" : "NATHVM64" }, + "c3.large" : { "Arch" : "NATHVM64" }, + "c3.xlarge" : { "Arch" : "NATHVM64" }, + "c3.2xlarge" : { "Arch" : "NATHVM64" }, + "c3.4xlarge" : { "Arch" : "NATHVM64" }, + "c3.8xlarge" : { "Arch" : "NATHVM64" }, + "c4.large" : { "Arch" : "NATHVM64" }, + "c4.xlarge" : { "Arch" : "NATHVM64" }, + "c4.2xlarge" : { "Arch" : "NATHVM64" }, + "c4.4xlarge" : { "Arch" : "NATHVM64" }, + "c4.8xlarge" : { "Arch" : "NATHVM64" }, + "g2.2xlarge" : { "Arch" : "NATHVMG2" }, + "g2.8xlarge" : { "Arch" : "NATHVMG2" }, + "r3.large" : { "Arch" : "NATHVM64" }, + "r3.xlarge" : { "Arch" : "NATHVM64" }, + "r3.2xlarge" : { "Arch" : "NATHVM64" }, + "r3.4xlarge" : { "Arch" : "NATHVM64" }, + "r3.8xlarge" : { "Arch" : "NATHVM64" }, + "i2.xlarge" : { "Arch" : "NATHVM64" }, + "i2.2xlarge" : { "Arch" : "NATHVM64" }, + "i2.4xlarge" : { "Arch" : "NATHVM64" }, + "i2.8xlarge" : { "Arch" : "NATHVM64" }, + "d2.xlarge" : { "Arch" : "NATHVM64" }, + "d2.2xlarge" : { "Arch" : "NATHVM64" }, + "d2.4xlarge" : { "Arch" : "NATHVM64" }, + "d2.8xlarge" : { "Arch" : "NATHVM64" }, + "hi1.4xlarge" : { "Arch" : "NATHVM64" }, + "hs1.8xlarge" : { "Arch" : "NATHVM64" }, + "cr1.8xlarge" : { "Arch" : "NATHVM64" }, + "cc2.8xlarge" : { "Arch" : "NATHVM64" } + } +, + "AWSRegionArch2AMI" : { + "af-south-1" : {"HVM64" : "ami-0412806bd0f2cf75f", "HVMG2" : "NOT_SUPPORTED"}, + "ap-east-1" : {"HVM64" : "ami-0e0a21f8bd5195698", "HVMG2" : "NOT_SUPPORTED"}, + "ap-northeast-1" : {"HVM64" : "ami-0c3e3e7af817ad732", "HVMG2" : "NOT_SUPPORTED"}, + "ap-northeast-2" : {"HVM64" : "ami-0f8dbbf156e3a5cc6", "HVMG2" : "NOT_SUPPORTED"}, + "ap-northeast-3" : {"HVM64" : "ami-02a371c41f08cc499", "HVMG2" : "NOT_SUPPORTED"}, + "ap-south-1" : {"HVM64" : "ami-0f4ab3c8db917e421", "HVMG2" : "NOT_SUPPORTED"}, + "ap-south-2" : {"HVM64" : "ami-008b9c53bb1dcd29c", "HVMG2" : "NOT_SUPPORTED"}, + "ap-southeast-1" : {"HVM64" : "ami-0c3189395e5b39df7", "HVMG2" : "NOT_SUPPORTED"}, + "ap-southeast-2" : {"HVM64" : "ami-040d698318c0b1575", "HVMG2" : "NOT_SUPPORTED"}, + "ap-southeast-3" : {"HVM64" : "ami-065dcca47dde26602", "HVMG2" : "NOT_SUPPORTED"}, + "ap-southeast-4" : {"HVM64" : "ami-043e25432cf94e107", "HVMG2" : "NOT_SUPPORTED"}, + "il-central-1" : {"HVM64" : "ami-0054be7d7d9d65a1d", "HVMG2" : "NOT_SUPPORTED"}, + "ca-central-1" : {"HVM64" : "ami-05f40104305a2cdf7", "HVMG2" : "NOT_SUPPORTED"}, + "cn-north-1" : {"HVM64" : "ami-03f1e08d409b1e5fd", "HVMG2" : "NOT_SUPPORTED"}, + "cn-northwest-1" : {"HVM64" : "ami-00093746b9a0e272a", "HVMG2" : "NOT_SUPPORTED"}, + "eu-central-1" : {"HVM64" : "ami-0f454ec961da9a046", "HVMG2" : "NOT_SUPPORTED"}, + "eu-north-1" : {"HVM64" : "ami-0e78cd18c67fcf512", "HVMG2" : "NOT_SUPPORTED"}, + "eu-south-1" : {"HVM64" : "ami-07d048788725b9602", "HVMG2" : "NOT_SUPPORTED"}, + "eu-west-1" : {"HVM64" : "ami-0db5ca3e5748fb7e2", "HVMG2" : "NOT_SUPPORTED"}, + "eu-west-2" : {"HVM64" : "ami-07baf6b15b7387f24", "HVMG2" : "NOT_SUPPORTED"}, + "eu-west-3" : {"HVM64" : "ami-05a13fbd8aa57eedc", "HVMG2" : "NOT_SUPPORTED"}, + "me-south-1" : {"HVM64" : "ami-0007de3fdcaba7e44", "HVMG2" : "NOT_SUPPORTED"}, + "me-central-1" : {"HVM64" : "ami-06ce88defa3fc74ed", "HVMG2" : "NOT_SUPPORTED"}, + "eu-south-2" : {"HVM64" : "ami-051306f4e885d6de4", "HVMG2" : "NOT_SUPPORTED"}, + "eu-central-2" : {"HVM64" : "ami-0fcd532574732cb0f", "HVMG2" : "NOT_SUPPORTED"}, + "sa-east-1" : {"HVM64" : "ami-07f6e9fce0e888425", "HVMG2" : "NOT_SUPPORTED"}, + "us-east-1" : {"HVM64" : "ami-08e4e35cccc6189f4", "HVMG2" : "NOT_SUPPORTED"}, + "us-east-2" : {"HVM64" : "ami-0de69dde1945155da", "HVMG2" : "NOT_SUPPORTED"}, + "us-west-1" : {"HVM64" : "ami-08fe20a82dcaa1c92", "HVMG2" : "NOT_SUPPORTED"}, + "us-west-2" : {"HVM64" : "ami-05848d23360f5edfe", "HVMG2" : "NOT_SUPPORTED"} + } + + }, + + "Resources" : { + "VPC" : { + "Type" : "AWS::EC2::VPC", + "Properties" : { + "CidrBlock" : "10.0.0.0/16", + "Tags" : [ {"Key" : "Application", "Value" : { "Ref" : "AWS::StackId"} } ] + } + }, + + "Subnet1" : { + "Type" : "AWS::EC2::Subnet", + "Properties" : { + "VpcId" : { "Ref" : "VPC" }, + "AvailabilityZone" : "us-east-1a", + "CidrBlock" : "10.0.0.0/24", + "MapPublicIpOnLaunch" : "True", + "Tags" : [ {"Key" : "Application", "Value" : { "Ref" : "AWS::StackId"} } ] + } + }, + "Subnet2" : { + "Type" : "AWS::EC2::Subnet", + "Properties" : { + "VpcId" : { "Ref" : "VPC" }, + "AvailabilityZone" : "us-east-1b", + "CidrBlock" : "10.0.1.0/24", + "MapPublicIpOnLaunch" : "True", + "Tags" : [ {"Key" : "Application", "Value" : { "Ref" : "AWS::StackId"} } ] + } + }, + + "InternetGateway" : { + "Type" : "AWS::EC2::InternetGateway", + "Properties" : { + "Tags" : [ {"Key" : "Application", "Value" : { "Ref" : "AWS::StackId"} } ] + } + }, + + "AttachGateway" : { + "Type" : "AWS::EC2::VPCGatewayAttachment", + "Properties" : { + "VpcId" : { "Ref" : "VPC" }, + "InternetGatewayId" : { "Ref" : "InternetGateway" } + } + }, + + "RouteTable" : { + "Type" : "AWS::EC2::RouteTable", + "Properties" : { + "VpcId" : {"Ref" : "VPC"}, + "Tags" : [ {"Key" : "Application", "Value" : { "Ref" : "AWS::StackId"} } ] + } + }, + + "Route" : { + "Type" : "AWS::EC2::Route", + "DependsOn" : "AttachGateway", + "Properties" : { + "RouteTableId" : { "Ref" : "RouteTable" }, + "DestinationCidrBlock" : "0.0.0.0/0", + "GatewayId" : { "Ref" : "InternetGateway" } + } + }, + + "SubnetRouteTableAssociation" : { + "Type" : "AWS::EC2::SubnetRouteTableAssociation", + "Properties" : { + "SubnetId" : {"Ref": "Subnet1"}, + "RouteTableId" : { "Ref" : "RouteTable" } + } + }, + + "SubnetRouteTableAssociation2" : { + "Type" : "AWS::EC2::SubnetRouteTableAssociation", + "Properties" : { + "SubnetId" : {"Ref": "Subnet2"}, + "RouteTableId" : { "Ref" : "RouteTable" } + } + }, + + "NetworkAcl" : { + "Type" : "AWS::EC2::NetworkAcl", + "Properties" : { + "VpcId" : {"Ref" : "VPC"}, + "Tags" : [ {"Key" : "Application", "Value" : { "Ref" : "AWS::StackId"} } ] + } + }, + + "InboundHTTPNetworkAclEntry" : { + "Type" : "AWS::EC2::NetworkAclEntry", + "Properties" : { + "NetworkAclId" : {"Ref" : "NetworkAcl"}, + "RuleNumber" : "100", + "Protocol" : "6", + "RuleAction" : "allow", + "Egress" : "false", + "CidrBlock" : "0.0.0.0/0", + "PortRange" : {"From" : "80", "To" : "80"} + } + }, + + "InboundSSHNetworkAclEntry" : { + "Type" : "AWS::EC2::NetworkAclEntry", + "Properties" : { + "NetworkAclId" : {"Ref" : "NetworkAcl"}, + "RuleNumber" : "101", + "Protocol" : "6", + "RuleAction" : "allow", + "Egress" : "false", + "CidrBlock" : "0.0.0.0/0", + "PortRange" : {"From" : "22", "To" : "22"} + } + }, + + "InboundResponsePortsNetworkAclEntry" : { + "Type" : "AWS::EC2::NetworkAclEntry", + "Properties" : { + "NetworkAclId" : {"Ref" : "NetworkAcl"}, + "RuleNumber" : "102", + "Protocol" : "6", + "RuleAction" : "allow", + "Egress" : "false", + "CidrBlock" : "0.0.0.0/0", + "PortRange" : {"From" : "1024", "To" : "65535"} + } + }, + + "OutBoundHTTPNetworkAclEntry" : { + "Type" : "AWS::EC2::NetworkAclEntry", + "Properties" : { + "NetworkAclId" : {"Ref" : "NetworkAcl"}, + "RuleNumber" : "100", + "Protocol" : "6", + "RuleAction" : "allow", + "Egress" : "true", + "CidrBlock" : "0.0.0.0/0", + "PortRange" : {"From" : "80", "To" : "80"} + } + }, + + "OutBoundHTTPSNetworkAclEntry" : { + "Type" : "AWS::EC2::NetworkAclEntry", + "Properties" : { + "NetworkAclId" : {"Ref" : "NetworkAcl"}, + "RuleNumber" : "101", + "Protocol" : "6", + "RuleAction" : "allow", + "Egress" : "true", + "CidrBlock" : "0.0.0.0/0", + "PortRange" : {"From" : "443", "To" : "443"} + } + }, + + "OutBoundResponsePortsNetworkAclEntry" : { + "Type" : "AWS::EC2::NetworkAclEntry", + "Properties" : { + "NetworkAclId" : {"Ref" : "NetworkAcl"}, + "RuleNumber" : "102", + "Protocol" : "6", + "RuleAction" : "allow", + "Egress" : "true", + "CidrBlock" : "0.0.0.0/0", + "PortRange" : {"From" : "1024", "To" : "65535"} + } + }, + + "SubnetNetworkAclAssociation" : { + "Type" : "AWS::EC2::SubnetNetworkAclAssociation", + "Properties" : { + "SubnetId" : {"Ref": "Subnet1"}, + "NetworkAclId" : { "Ref" : "NetworkAcl" } + } + }, + + + "SubnetNetworkAclAssociation2" : { + "Type" : "AWS::EC2::SubnetNetworkAclAssociation", + "Properties" : { + "SubnetId" : {"Ref": "Subnet2"}, + "NetworkAclId" : { "Ref" : "NetworkAcl" } + } + }, + + "NotificationTopic": { + "Type": "AWS::SNS::Topic", + "Properties": { + "Subscription": [ { "Endpoint": { "Ref": "OperatorEMail" }, "Protocol": "email" } ] + } + }, + + "WebServerGroup" : { + "Type" : "AWS::AutoScaling::AutoScalingGroup", + "Properties" : { + "VPCZoneIdentifier" : [{"Ref": "Subnet1"} , {"Ref": "Subnet2"}], + "MinSize" : "2", + "MaxSize" : "3", + "LaunchTemplate": { + "LaunchTemplateId": { + "Ref": "LaunchTemplate" + }, + "Version": { + "Fn::GetAtt": [ + "LaunchTemplate", + "LatestVersionNumber" + ] + } + }, + "TargetGroupARNs" : [ { "Ref" : "ALBTargetGroup" } ], + "NotificationConfiguration" : { + "TopicARN" : { "Ref" : "NotificationTopic" }, + "NotificationTypes" : [ "autoscaling:EC2_INSTANCE_LAUNCH", + "autoscaling:EC2_INSTANCE_LAUNCH_ERROR", + "autoscaling:EC2_INSTANCE_TERMINATE", + "autoscaling:EC2_INSTANCE_TERMINATE_ERROR"] + } + }, + "CreationPolicy" : { + "ResourceSignal" : { + "Timeout" : "PT15M", + "Count" : "1" + } + }, + "UpdatePolicy": { + "AutoScalingRollingUpdate": { + "MinInstancesInService": "1", + "MaxBatchSize": "1", + "PauseTime" : "PT15M", + "WaitOnResourceSignals": "true" + } + } + }, + + "LaunchTemplate" : { + "Type" : "AWS::EC2::LaunchTemplate", + "Metadata" : { + "Comment" : "Install a simple application", + "AWS::CloudFormation::Init" : { + "config" : { + "packages" : { + "yum" : { + "httpd" : [] + } + }, + "files" : { + "/var/www/html/index.html" : { + "content" : { "Fn::Join" : ["\n", [ + "
Private IP: ' >> /var/www/html/index.html && ", + "curl -s http://169.254.169.254/latest/meta-data/local-ipv4 >> /var/www/html/index.html && ", + "echo '
' >> /var/www/html/index.html" + ] + ] + }, + "cwd" : "/" + } + }, + "services" : { + "sysvinit" : { + "httpd" : { + "enabled" : "true", + "ensureRunning" : "true" + }, + "cfn-hup" : { + "enabled" : "true", + "ensureRunning" : "true", + "files" : ["/etc/cfn/cfn-hup.conf", "/etc/cfn/hooks.d/cfn-auto-reloader.conf"] + } + } + } + } + } + }, + "Properties" : { + "LaunchTemplateData": { + "InstanceType": "t2.micro", + "KeyName" : { "Ref" : "KeyName" }, + "SecurityGroupIds": [ + { "Ref": "InstanceSecurityGroup" } + ], + "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" }, + { "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] }, + "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ + "#!/bin/bash -xe\n", + "yum update -y aws-cfn-bootstrap\n", + "yum update -y aws-cli\n", + "/opt/aws/bin/cfn-init -v ", + " --stack ", { "Ref" : "AWS::StackName" }, + " --resource LaunchTemplate ", + " --region ", { "Ref" : "AWS::Region" }, "\n", + "/opt/aws/bin/cfn-signal -e $? ", + " --stack ", { "Ref" : "AWS::StackName" }, + " --resource WebServerGroup ", + " --region ", { "Ref" : "AWS::Region" }, "\n" + ]]}} + } + } +}, + + + "WebServerScaleUpPolicy" : { + "Type" : "AWS::AutoScaling::ScalingPolicy", + "Properties" : { + "AdjustmentType" : "ChangeInCapacity", + "AutoScalingGroupName" : { "Ref" : "WebServerGroup" }, + "Cooldown" : "60", + "ScalingAdjustment" : "1" + } + }, + "WebServerScaleDownPolicy" : { + "Type" : "AWS::AutoScaling::ScalingPolicy", + "Properties" : { + "AdjustmentType" : "ChangeInCapacity", + "AutoScalingGroupName" : { "Ref" : "WebServerGroup" }, + "Cooldown" : "60", + "ScalingAdjustment" : "-1" + } + }, + + "CPUAlarmHigh": { + "Type": "AWS::CloudWatch::Alarm", + "Properties": { + "AlarmDescription": "Scale-up if CPU > 50% for 1 minute", + "MetricName": "CPUUtilization", + "Namespace": "AWS/EC2", + "Statistic": "Average", + "Period": "60", + "EvaluationPeriods": "1", + "Threshold": "50", + "AlarmActions": [ { "Ref": "WebServerScaleUpPolicy" } ], + "Dimensions": [ + { + "Name": "AutoScalingGroupName", + "Value": { "Ref": "WebServerGroup" } + } + ], + "ComparisonOperator": "GreaterThanThreshold" + } + }, + "CPUAlarmLow": { + "Type": "AWS::CloudWatch::Alarm", + "Properties": { + "AlarmDescription": "Scale-down if CPU < 50% for 1 minute", + "MetricName": "CPUUtilization", + "Namespace": "AWS/EC2", + "Statistic": "Average", + "Period": "60", + "EvaluationPeriods": "1", + "Threshold": "50", + "AlarmActions": [ { "Ref": "WebServerScaleDownPolicy" } ], + "Dimensions": [ + { + "Name": "AutoScalingGroupName", + "Value": { "Ref": "WebServerGroup" } + } + ], + "ComparisonOperator": "LessThanThreshold" + } + }, + + "ALBSecurityGroup" : { + "Type" : "AWS::EC2::SecurityGroup", + "Properties" : { + "GroupDescription" : "Enable HTTP from the Internet", + "SecurityGroupIngress" : [ { + "IpProtocol" : "tcp", + "FromPort" : "80", + "ToPort" : "80", + "CidrIp" : "0.0.0.0/0" + } ], + "VpcId" : { "Ref" : "VPC" } + } + }, + + "ApplicationLoadBalancer" : { + "Type" : "AWS::ElasticLoadBalancingV2::LoadBalancer", + "Properties" : { + "Subnets" : [{"Ref": "Subnet1"} , {"Ref": "Subnet2"}], + "SecurityGroups" : [{"Ref": "ALBSecurityGroup"}] + } + }, + + "ALBListener" : { + "Type" : "AWS::ElasticLoadBalancingV2::Listener", + "Properties" : { + "DefaultActions" : [{ + "Type" : "forward", + "TargetGroupArn" : { "Ref" : "ALBTargetGroup" } + }], + "LoadBalancerArn" : { "Ref" : "ApplicationLoadBalancer" }, + "Port" : "80", + "Protocol" : "HTTP" + } + }, + + "ALBTargetGroup" : { + "Type" : "AWS::ElasticLoadBalancingV2::TargetGroup", + "Properties" : { + "HealthCheckIntervalSeconds" : 30, + "HealthCheckTimeoutSeconds" : 5, + "HealthyThresholdCount" : 2, + "Port" : 80, + "Protocol" : "HTTP", + "UnhealthyThresholdCount" : 5, + "VpcId" : {"Ref" : "VPC"} + } + }, + + "InstanceSecurityGroup" : { + "Type" : "AWS::EC2::SecurityGroup", + "Properties" : { + "GroupDescription" : "Enable SSH access and HTTP from the load balancer only", + "SecurityGroupIngress" : [ { + "IpProtocol" : "tcp", + "FromPort" : "22", + "ToPort" : "22", + "CidrIp" : "0.0.0.0/0" + }, + { + "IpProtocol" : "tcp", + "FromPort" : "80", + "ToPort" : "80", + "CidrIp" : "0.0.0.0/0" + }, + { + "IpProtocol" : "tcp", + "FromPort" : "80", + "ToPort" : "80", + "SourceSecurityGroupId" : {"Fn::Select" : [0, {"Fn::GetAtt" : ["ApplicationLoadBalancer", "SecurityGroups"]}]} + } ], + "VpcId" : { "Ref" : "VPC" } + } + } + }, + + "Outputs" : { + "URL" : { + "Description" : "The URL of the website", + "Value" : { "Fn::Join" : [ "", [ "http://", { "Fn::GetAtt" : [ + "ApplicationLoadBalancer", "DNSName" ]}]]} + } + } +} diff --git a/app.js b/app.js index 541532ebe..ff8272ba8 100644 --- a/app.js +++ b/app.js @@ -1,8 +1,28 @@ +// const express = require('express'); +// const app = express(); +// const port = 8080; + +// app.get('/', (req, res) => res.send('RCB EE SALA CUP NAMDHEEE')); + +// app.listen(port); +// console.log(`App running on http://localhost:${port}`); + + + const express = require('express'); +const path = require('path'); + const app = express(); -const port = 8080; +const port = process.env.PORT || 8080; + +// 1. Serve everything in /public as static +app.use(express.static(path.join(__dirname, 'public'))); -app.get('/', (req, res) => res.send('Hello World!')); +// 2. On "/" send the index.html file +app.get('/', (req, res) => { + res.sendFile(path.join(__dirname, 'public', 'index.html')); +}); -app.listen(port); -console.log(`App running on http://localhost:${port}`); +app.listen(port, () => + console.log(`App running on http://localhost:${port}`) +); diff --git a/app.zip b/app.zip new file mode 100644 index 000000000..c7175f07b Binary files /dev/null and b/app.zip differ diff --git a/public/images/Module-5.7671640ce429a5183243197ef3c266bcd3d4aa20.png b/public/images/Module-5.7671640ce429a5183243197ef3c266bcd3d4aa20.png new file mode 100644 index 000000000..288652d81 Binary files /dev/null and b/public/images/Module-5.7671640ce429a5183243197ef3c266bcd3d4aa20.png differ diff --git a/public/images/RCB.jpg b/public/images/RCB.jpg new file mode 100644 index 000000000..df98ba248 Binary files /dev/null and b/public/images/RCB.jpg differ diff --git a/public/images/RCB1.jpg b/public/images/RCB1.jpg new file mode 100644 index 000000000..bd7451696 Binary files /dev/null and b/public/images/RCB1.jpg differ diff --git a/public/images/RCB2.jpeg b/public/images/RCB2.jpeg new file mode 100644 index 000000000..1c13d2942 Binary files /dev/null and b/public/images/RCB2.jpeg differ diff --git a/public/index.html b/public/index.html new file mode 100644 index 000000000..cfb65a47a --- /dev/null +++ b/public/index.html @@ -0,0 +1,216 @@ + + + + + + +Pruthvi Siregere, Chalana Gowda, and the whole team welcome you to the ultimate fan experience. Join us to + celebrate every match!
+ +Community Head
+The Heart of the Club
+Community Manager
+