AWSTemplateFormatVersion: "2010-09-09" Description: AWS CloudFormation workshop - Nested stacks - EC2 template. Metadata: AWS::CloudFormation::Interface: ParameterGroups: - Label: default: Amazon EC2 Configuration Parameters: - AmiID ParameterLabels: AmiID: default: Amazon Machine Image ID Parameters: EnvironmentType: Description: Specify the Environment type of the stack. Type: String AllowedValues: - Dev - Test - Prod Default: Test ConstraintDescription: Specify either Dev, Test or Prod. AmiID: Description: The ID of the AMI. Type: AWS::SSM::Parameter::Value Default: /aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2 VpcId: Description: The VPC ID Type: AWS::EC2::VPC::Id SubnetId: Description: The Subnet ID Type: AWS::EC2::Subnet::Id WebServerInstanceProfile: Description: Instance profile resource ID Type: String Mappings: EnvironmentToInstanceType: Dev: InstanceType: t2.nano Test: InstanceType: t2.micro Prod: InstanceType: t2.small Resources: WebServerInstance: CreationPolicy: ResourceSignal: Count: 1 Timeout: PT10M Type: AWS::EC2::Instance Metadata: AWS::CloudFormation::Init: config: packages: yum: httpd: [] php: [] files: /var/www/html/index.php: content: |

EC2 Instance ID:

Availability Zone:

AMI ID:

mode: 000644 owner: apache group: apache /etc/cfn/cfn-hup.conf: content: !Sub | [main] stack=${AWS::StackId} region=${AWS::Region} interval=1 mode: 000400 owner: root group: root /etc/cfn/hooks.d/cfn-auto-reloader.conf: content: !Sub | [cfn-auto-reloader-hook] triggers=post.update path=Resources.WebServerInstance.Metadata.AWS::CloudFormation::Init action=/opt/aws/bin/cfn-init --stack ${AWS::StackName} -resource WebServerInstance --region ${AWS::Region} runas=root 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: SubnetId: !Ref SubnetId IamInstanceProfile: !Ref WebServerInstanceProfile ImageId: !Ref AmiID InstanceType: !FindInMap [EnvironmentToInstanceType, !Ref EnvironmentType, InstanceType] SecurityGroupIds: - !Ref WebServerSecurityGroup Tags: - Key: Name Value: !Join [' ', [!Ref EnvironmentType, Web Server]] UserData: !Base64 Fn::Sub: | #!/bin/bash -xe # Update aws-cfn-bootstrap to the latest yum install -y aws-cfn-bootstrap # Call cfn-init script to install files and packages /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource WebServerInstance --region ${AWS::Region} # Call cfn-signal script to send a signal with exit code /opt/aws/bin/cfn-signal --exit-code $? --stack ${AWS::StackName} --resource WebServerInstance --region ${AWS::Region} WebServerSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Enable HTTP and HTTPS access SecurityGroupIngress: - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 0.0.0.0/0 SecurityGroupEgress: - IpProtocol: tcp FromPort: 80 ToPort: 80 CidrIp: 0.0.0.0/0 - IpProtocol: tcp FromPort: 443 ToPort: 443 CidrIp: 0.0.0.0/0 VpcId: !Ref VpcId WebServerEIP: Type: AWS::EC2::EIP Properties: Domain: vpc InstanceId: !Ref WebServerInstance Outputs: WebServerPublicDNS: Description: Public DNS of EC2 instance Value: !GetAtt WebServerInstance.PublicDnsName WebServerElasticIP: Description: Elastic IP associated with the web server EC2 instance Value: !Ref WebServerEIP WebsiteURL: Description: Application URL Value: !Sub http://${WebServerEIP}