AWSTemplateFormatVersion: '2010-09-09' Parameters: KeyName: Description: Name of an existing EC2 KeyPair to enable SSH access Type: 'AWS::EC2::KeyPair::KeyName' LSPName: Description: LSP Name Type: String VPCID: Description: The ID of the VPC in which to create the resources Type: 'AWS::EC2::VPC::Id' Mappings: AMIRegionMap: ap-northeast-1: AMIID: ami-0deffe25fb08894f5 ap-northeast-2: AMIID: ami-097243fad67b35a40 ap-northeast-3: AMIID: ami-03ad2f651aaddff3a ap-south-1: AMIID: ami-0361008010558ea2d ap-southeast-1: AMIID: ami-07bf64b7ca62c96ee ap-southeast-2: AMIID: ami-0cc8e61f3957442b8 ca-central-1: AMIID: ami-0cfe1aac5d0b881ff eu-central-1: AMIID: ami-0042e6537994c4181 eu-north-1: AMIID: ami-00347e40213620217 eu-west-1: AMIID: ami-04620cb5b85309067 eu-west-2: AMIID: ami-0315c69b482426e70 eu-west-3: AMIID: ami-0dcc6ef9e7a6e70f2 sa-east-1: AMIID: ami-027ba68d27297f530 us-east-1: AMIID: ami-01e8fbda99c153c6b us-east-2: AMIID: ami-0ef27e70f95b439e8 us-west-1: AMIID: ami-09d529cbaf5cc7e6f us-west-2: AMIID: ami-0acfc42b227d0b719 Resources: # EC2 Instance EC2Instance: Type: 'AWS::EC2::Instance' Properties: InstanceType: m6a.xlarge ImageId: !FindInMap [AMIRegionMap, !Ref "AWS::Region", AMIID] KeyName: !Ref KeyName BlockDeviceMappings: # resize root volume to 1TB - DeviceName: "/dev/xvda" Ebs: VolumeSize: 1024 VolumeType: gp2 DeleteOnTermination: true UserData: Fn::Base64: !Sub | #!/bin/bash # Elevate privileges if [ "$EUID" -ne 0 ]; then sudo bash "$0" "$@" exit fi # Redirect all outputs to a log file exec > >(tee -a "/tmp/deployment.log") 2>&1 # fix locale if on debian if grep -q "Debian" /etc/os-release; then sed -i '/^# en_US.UTF-8 UTF-8/s/^# //' /etc/locale.gen locale-gen echo "export LC_ALL=en_US.UTF-8" >> /etc/bash.bashrc echo "export LANG=en_US.UTF-8" >> /etc/bash.bashrc fi source /etc/bash.bashrc # create users sudo adduser --disabled-password --gecos "" lightning sudo adduser --disabled-password --gecos "" bitcoin sudo adduser --disabled-password --gecos "" lspd # Create a file to store the credentials CREDENTIALS="/home/lspd/credentials.txt" touch "$CREDENTIALS" # Generate a random password for PostgreSQL users LSPD_DB_PASSWORD=$(> "$CREDENTIALS" echo "postgres lspd:" >> "$CREDENTIALS" echo "username: lspd " >> "$CREDENTIALS" echo "password: $LSPD_DB_PASSWORD" >> "$CREDENTIALS" echo "postgres lightning:" >> "$CREDENTIALS" echo "username: lightning" >> "$CREDENTIALS" echo "password: $LIGHTNING_DB_PASSWORD" >> "$CREDENTIALS" # Generic name if no name is provided (running locally) if [ -z "$LSPName" ]; then LSPName="lsp-$(> "$CREDENTIALS" echo "rpcuser: cln" >> "$CREDENTIALS" echo "rpcpassword: $RPCPASSWORD" >> "$CREDENTIALS" sudo mkdir /etc/bitcoin/ sudo touch /etc/bitcoin/bitcoin.conf cat <> "$CREDENTIALS" sudo echo "cln hsm_secret backup:" >> "$CREDENTIALS" sudo xxd /home/lightning/.lightning/bitcoin/hsm_secret >> "$CREDENTIALS" # Post install PUBKEY=$(sudo -u lightning lightning-cli getinfo | jq .id | cut -d "\"" -f 2) LSPD_PRIVATE_KEY=$(lspd genkey | awk -F= '{print $2}' | cut -d "\"" -f 2) TOKEN=$(lspd genkey | awk -F= '{print $2}' | cut -d "\"" -f 2) EXTERNAL_IP=$(curl -s http://whatismyip.akamai.com/) echo "### LSPD Credentials ###" >> "$CREDENTIALS" echo "token: $TOKEN" >> "$CREDENTIALS" echo "lspd_private_key: $LSPD_PRIVATE_KEY" >> "$CREDENTIALS" cat <