123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- # 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
|