AWSTemplateFormatVersion: 2010-09-09 Parameters: EC2InstanceType: Type: String Default: t2.xlarge EC2AMI: Type: String Default: 'ami-09e67e426f25ce0d7' KeyName: Description: Name of an existing EC2 KeyPair to enable SSH access to the instance Type: 'AWS::EC2::KeyPair::KeyName' Default: 'joystream-key' ConstraintDescription: must be the name of an existing EC2 KeyPair. Resources: SecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: !Sub 'Internal Security group for validator nodes ${AWS::StackName}' SecurityGroupIngress: - IpProtocol: tcp FromPort: 22 ToPort: 22 CidrIp: 0.0.0.0/0 Tags: - Key: Name Value: !Sub '${AWS::StackName}_validator' InstanceLaunchTemplate: Type: AWS::EC2::LaunchTemplate Metadata: AWS::CloudFormation::Init: config: packages: apt: wget: [] unzip: [] Properties: LaunchTemplateName: !Sub 'LaunchTemplate_${AWS::StackName}' LaunchTemplateData: ImageId: !Ref EC2AMI InstanceType: !Ref EC2InstanceType KeyName: !Ref KeyName SecurityGroupIds: - !GetAtt SecurityGroup.GroupId BlockDeviceMappings: - DeviceName: /dev/sda1 Ebs: VolumeSize: '120' UserData: Fn::Base64: !Sub | #!/bin/bash -xe # send script output to /tmp so we can debug boot failures exec > /tmp/userdata.log 2>&1 # Update all packages apt-get update -y # Prevent interactive prompts that would interrupt the installation export DEBIAN_FRONTEND=noninteractive # Install the updates apt-get upgrade -y # Get latest cfn scripts and install them; apt-get install -y python3-setuptools mkdir -p /opt/aws/bin wget https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-py3-latest.tar.gz python3 -m easy_install --script-dir /opt/aws/bin aws-cfn-bootstrap-py3-latest.tar.gz /opt/aws/bin/cfn-signal -e $? -r "Instance Created" '${WaitHandle}' Instance: Type: AWS::EC2::Instance Properties: LaunchTemplate: LaunchTemplateId: !Ref InstanceLaunchTemplate Version: !GetAtt InstanceLaunchTemplate.LatestVersionNumber Tags: - Key: Name Value: !Sub '${AWS::StackName}_1' WaitHandle: Type: AWS::CloudFormation::WaitConditionHandle WaitCondition: Type: AWS::CloudFormation::WaitCondition Properties: Handle: !Ref 'WaitHandle' Timeout: '600' Count: 1 Outputs: PublicIp: Description: The DNS name for the created instance Value: !Sub "${Instance.PublicIp}" Export: Name: !Sub "${AWS::StackName}PublicIp" InstanceId: Description: The Instance ID Value: !Ref Instance