# Deploys and EC2 node with docker tools suitable for # building joystream node docker images 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 - IpProtocol: tcp FromPort: 443 ToPort: 443 CidrIp: 0.0.0.0/0 - IpProtocol: tcp FromPort: 80 ToPort: 80 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 apt-get install -y apt-transport-https ca-certificates curl gnupg lsb-release curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null apt-get update -y apt-get install -y docker-ce docker-ce-cli containerd.io usermod -aG docker ubuntu # Update docker-compose to 1.28+ curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose chmod +x /usr/local/bin/docker-compose ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose # 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 apt-get install -y python3-pip /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