Skip to content

Commit f9bb515

Browse files
authored
Merge pull request #116 from aws-samples/bsc
Bsc
2 parents f92ac68 + 92468ab commit f9bb515

File tree

11 files changed

+4315
-93
lines changed

11 files changed

+4315
-93
lines changed

lib/bsc/app.ts

Lines changed: 3 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ import 'dotenv/config'
22
import "source-map-support/register";
33
import * as cdk from "aws-cdk-lib";
44
import * as config from "./lib/config/bscConfig";
5-
import * as configTypes from "./lib/config/bscConfig.interface";
65
import { BscCommonStack } from "./lib/common-stack";
76
import { BscSingleNodeStack } from "./lib/single-node-stack";
87
import { BscHANodesStack } from "./lib/ha-nodes-stack";
@@ -20,29 +19,14 @@ new BscSingleNodeStack(app, "bsc-single-node", {
2019
stackName: `bsc-single-node-${config.baseNodeConfig.nodeConfiguration}-${config.baseNodeConfig.bscNetwork}`,
2120

2221
env: { account: config.baseConfig.accountId, region: config.baseConfig.region },
23-
nodeRole: <configTypes.BscNodeRole> "single-node",
24-
instanceType: config.baseNodeConfig.instanceType,
25-
instanceCpuType: config.baseNodeConfig.instanceCpuType,
26-
bscNetwork: config.baseNodeConfig.bscNetwork,
27-
nodeConfiguration: config.baseNodeConfig.nodeConfiguration,
28-
snapshotsUrl:config.baseNodeConfig.snapshotsUrl,
29-
dataVolume: config.baseNodeConfig.dataVolume,
22+
...config.baseNodeConfig
3023
});
3124

3225
new BscHANodesStack(app, "bsc-ha-nodes", {
3326
stackName: `bsc-ha-nodes-${config.baseNodeConfig.nodeConfiguration}-${config.baseNodeConfig.bscNetwork}`,
3427
env: { account: config.baseConfig.accountId, region: config.baseConfig.region },
35-
nodeRole: <configTypes.BscNodeRole> "rpc-node",
36-
instanceType: config.baseNodeConfig.instanceType,
37-
instanceCpuType: config.baseNodeConfig.instanceCpuType,
38-
bscNetwork: config.baseNodeConfig.bscNetwork,
39-
nodeConfiguration: config.baseNodeConfig.nodeConfiguration,
40-
snapshotsUrl:config.baseNodeConfig.snapshotsUrl,
41-
dataVolume: config.baseNodeConfig.dataVolume,
42-
43-
albHealthCheckGracePeriodMin: config.haNodeConfig.albHealthCheckGracePeriodMin,
44-
heartBeatDelayMin: config.haNodeConfig.heartBeatDelayMin,
45-
numberOfNodes: config.haNodeConfig.numberOfNodes
28+
...config.baseNodeConfig,
29+
...config.haNodeConfig
4630
});
4731

4832
// Security Check

lib/bsc/lib/assets/user-data/node.sh

Lines changed: 29 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,9 @@ echo "DATA_VOLUME_TYPE=${_DATA_VOLUME_TYPE_}" >> /etc/environment
1111
echo "DATA_VOLUME_SIZE=${_DATA_VOLUME_SIZE_}" >> /etc/environment
1212
echo "BSC_NODE_TYPE=${_BSC_NODE_TYPE_}" >> /etc/environment
1313
echo "BSC_NETWORK=${_BSC_NETWORK_}" >> /etc/environment
14+
echo "BSC_DOWNLOAD_SNAPSHOT=${_BSC_DOWNLOAD_SNAPSHOT_}" >> /etc/environment
1415
echo "LIFECYCLE_HOOK_NAME=${_LIFECYCLE_HOOK_NAME_}" >> /etc/environment
1516
echo "AUTOSCALING_GROUP_NAME=${_AUTOSCALING_GROUP_NAME_}" >> /etc/environment
16-
echo "NODE_ROLE=${_NODE_ROLE_}" >> /etc/environment
1717
source /etc/environment
1818

1919
arch=$(uname -m)
@@ -94,26 +94,6 @@ fi
9494
wget $(curl -s https://api.github.com/repos/bnb-chain/bsc/releases/latest |grep browser_ |grep $BSC_NETWORK |cut -d\" -f4)
9595
unzip $BSC_NETWORK.zip
9696

97-
# install aria2 a p2p downloader
98-
99-
if [ "$arch" == "x86_64" ]; then
100-
wget https://github.com/q3aql/aria2-static-builds/releases/download/v1.36.0/aria2-1.36.0-linux-gnu-64bit-build1.tar.bz2
101-
tar jxvf aria2-1.36.0-linux-gnu-64bit-build1.tar.bz2
102-
cd aria2-1.36.0-linux-gnu-64bit-build1/
103-
make install
104-
else
105-
wget https://github.com/q3aql/aria2-static-builds/releases/download/v1.36.0/aria2-1.36.0-linux-gnu-arm-rbpi-build1.tar.bz2
106-
tar jxvf aria2-1.36.0-linux-gnu-arm-rbpi-build1.tar.bz2
107-
cd aria2-1.36.0-linux-gnu-arm-rbpi-build1/
108-
make install
109-
fi
110-
111-
# finish download and archive
112-
sudo yum install zstd -y
113-
sudo yum install pv -y
114-
zstd --version
115-
pv --version
116-
11797
echo 'Configuring BSC Node service as a system service'
11898
# Copy startup script to correct location
11999
if [[ "$BSC_NODE_TYPE" == "full" ]]; then
@@ -149,12 +129,12 @@ chmod +x /opt/syncchecker.sh
149129
(crontab -l; echo "*/1 * * * * /opt/syncchecker.sh >/tmp/syncchecker.log 2>&1") | crontab -
150130
crontab -l
151131

152-
if [ "$NODE_ROLE" == "single-node" ]; then
132+
if [[ "$LIFECYCLE_HOOK_NAME" == "none" ]]; then
153133
echo "Single node. Signaling completion to CloudFormation"
154134
/opt/aws/bin/cfn-signal --stack $STACK_NAME --resource $RESOURCE_ID --region $AWS_REGION
155135
fi
156136

157-
if [ "$NODE_ROLE" == "single-node" ]; then
137+
if [[ "$LIFECYCLE_HOOK_NAME" == "none" ]]; then
158138
echo "Single node. Wait for one minute for the volume to be available"
159139
sleep 60
160140
fi
@@ -189,11 +169,32 @@ fi
189169

190170
lsblk -d
191171

192-
# download snapshot if network is mainnet
193-
if [ "$BSC_NETWORK" == "mainnet" ]; then
194-
echo "Downloading BSC snapshot"
195-
chmod +x /opt/download-snapshot.sh
196-
/opt/download-snapshot.sh
172+
if [[ "$BSC_DOWNLOAD_SNAPSHOT" == "true" ]]; then
173+
# install aria2 a p2p downloader
174+
175+
if [ "$arch" == "x86_64" ]; then
176+
wget https://github.com/q3aql/aria2-static-builds/releases/download/v1.36.0/aria2-1.36.0-linux-gnu-64bit-build1.tar.bz2
177+
tar jxvf aria2-1.36.0-linux-gnu-64bit-build1.tar.bz2
178+
cd aria2-1.36.0-linux-gnu-64bit-build1/
179+
make install
180+
else
181+
wget https://github.com/q3aql/aria2-static-builds/releases/download/v1.36.0/aria2-1.36.0-linux-gnu-arm-rbpi-build1.tar.bz2
182+
tar jxvf aria2-1.36.0-linux-gnu-arm-rbpi-build1.tar.bz2
183+
cd aria2-1.36.0-linux-gnu-arm-rbpi-build1/
184+
make install
185+
fi
186+
187+
# finish download and archive
188+
sudo yum install zstd -y
189+
sudo yum install pv -y
190+
zstd --version
191+
pv --version
192+
# download snapshot if network is mainnet
193+
if [[ "$BSC_NETWORK" == "mainnet" ]]; then
194+
echo "Downloading BSC snapshot"
195+
chmod +x /opt/download-snapshot.sh
196+
/opt/download-snapshot.sh
197+
fi
197198
fi
198199

199200
chown bcuser:bcuser -R /data

lib/bsc/lib/common-stack.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import * as iam from "aws-cdk-lib/aws-iam";
44
import * as nag from "cdk-nag";
55

66
export interface BscCommonStackProps extends cdk.StackProps {
7-
87
}
98

109
export class BscCommonStack extends cdk.Stack {

lib/bsc/lib/config/bscConfig.interface.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ export interface BscBaseNodeConfig extends configTypes.BaseNodeConfig {
1818
nodeConfiguration: BscNodeConfiguration;
1919
snapshotsUrl: string;
2020
dataVolume: BscDataVolumeConfig;
21+
downloadSnapshot: boolean;
2122
}
2223

2324
export interface BscHAConfig {

lib/bsc/lib/config/bscConfig.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,10 @@ export const baseConfig: configTypes.BscBaseConfig = {
2525
export const baseNodeConfig: configTypes.BscBaseNodeConfig = {
2626
instanceType: new ec2.InstanceType(process.env.BSC_INSTANCE_TYPE ? process.env.BSC_INSTANCE_TYPE : "m7g.4xlarge"),
2727
instanceCpuType: process.env.BSC_CPU_TYPE?.toLowerCase() == "x86_64" ? ec2.AmazonLinuxCpuType.X86_64 : ec2.AmazonLinuxCpuType.ARM_64 ,
28-
bscNetwork: <configTypes.BscNetwork>process.env.BSC_CLUSTER || "mainnet",
28+
bscNetwork: <configTypes.BscNetwork>process.env.BSC_NETWORK || "mainnet",
2929
nodeConfiguration: <configTypes.BscNodeConfiguration>process.env.BSC_NODE_CONFIGURATION || "full",
3030
snapshotsUrl: process.env.BSC_SNAPSHOTS_URL || constants.NoneValue,
31+
downloadSnapshot: process.env.BSC_DOWNLOAD_SNAPSHOT?.toLowerCase() === "true" ? true : false,
3132
dataVolume: {
3233
sizeGiB: process.env.BSC_DATA_VOL_SIZE ? parseInt(process.env.BSC_DATA_VOL_SIZE) : 4000,
3334
type: parseDataVolumeType(process.env.BSC_DATA_VOL_TYPE?.toLowerCase() ? process.env.BSC_DATA_VOL_TYPE?.toLowerCase() : "gp3"),

lib/bsc/lib/ha-nodes-stack.ts

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,7 @@ import * as constants from "../../constructs/constants";
1212
import { HANodesConstruct } from "../../constructs/ha-rpc-nodes-with-alb";
1313
import * as nag from "cdk-nag";
1414

15-
export interface BscHANodesStackProps extends cdk.StackProps {
16-
nodeRole: configTypes.BscNodeRole;
17-
instanceType: ec2.InstanceType;
18-
instanceCpuType: ec2.AmazonLinuxCpuType;
19-
bscNetwork: configTypes.BscNetwork;
20-
nodeConfiguration: configTypes.BscNodeConfiguration;
21-
snapshotsUrl: string;
22-
dataVolume: configTypes.BscDataVolumeConfig;
23-
albHealthCheckGracePeriodMin: number;
24-
heartBeatDelayMin: number;
25-
numberOfNodes: number;
15+
export interface BscHANodesStackProps extends cdk.StackProps, configTypes.BscBaseNodeConfig, configTypes.BscHAConfig {
2616
}
2717

2818
export class BscHANodesStack extends cdk.Stack {
@@ -35,13 +25,13 @@ export class BscHANodesStack extends cdk.Stack {
3525
const autoScalingGroupName = STACK_NAME;
3626

3727
const {
38-
nodeRole,
3928
instanceType,
4029
instanceCpuType,
4130
bscNetwork,
4231
nodeConfiguration,
4332
snapshotsUrl,
4433
dataVolume,
34+
downloadSnapshot,
4535
albHealthCheckGracePeriodMin,
4636
heartBeatDelayMin,
4737
numberOfNodes
@@ -79,7 +69,7 @@ export class BscHANodesStack extends cdk.Stack {
7969
_BSC_NODE_TYPE_: nodeConfiguration,
8070
_DATA_VOLUME_TYPE_: dataVolume.type,
8171
_DATA_VOLUME_SIZE_: dataVolumeSizeBytes.toString(),
82-
_NODE_ROLE_: nodeRole,
72+
_BSC_DOWNLOAD_SNAPSHOT_: downloadSnapshot.toString(),
8373

8474
_BSC_NETWORK_: bscNetwork,
8575
_LIFECYCLE_HOOK_NAME_: lifecycleHookName,

lib/bsc/lib/single-node-stack.ts

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,7 @@ import * as configTypes from "./config/bscConfig.interface";
1313
import { BscNodeSecurityGroupConstructs } from "./constructs/bsc-node-security-group"
1414
import * as nag from "cdk-nag";
1515

16-
export interface BscSingleNodeStackProps extends cdk.StackProps {
17-
nodeRole: configTypes.BscNodeRole;
18-
instanceType: ec2.InstanceType;
19-
instanceCpuType: ec2.AmazonLinuxCpuType;
20-
bscNetwork: configTypes.BscNetwork;
21-
nodeConfiguration: configTypes.BscNodeConfiguration;
22-
snapshotsUrl: string;
23-
dataVolume: configTypes.BscDataVolumeConfig;
16+
export interface BscSingleNodeStackProps extends cdk.StackProps, configTypes.BscBaseNodeConfig {
2417
}
2518

2619
export class BscSingleNodeStack extends cdk.Stack {
@@ -37,12 +30,12 @@ export class BscSingleNodeStack extends cdk.Stack {
3730
// Getting our config from initialization properties
3831
const {
3932
instanceType,
40-
nodeRole,
4133
instanceCpuType,
4234
bscNetwork,
4335
nodeConfiguration,
4436
snapshotsUrl,
4537
dataVolume,
38+
downloadSnapshot,
4639
} = props;
4740

4841
// Using default VPC
@@ -100,7 +93,7 @@ export class BscSingleNodeStack extends cdk.Stack {
10093
_BSC_NODE_TYPE_: nodeConfiguration,
10194
_DATA_VOLUME_TYPE_: dataVolume.type,
10295
_DATA_VOLUME_SIZE_: dataVolumeSizeBytes.toString(),
103-
_NODE_ROLE_: nodeRole,
96+
_BSC_DOWNLOAD_SNAPSHOT_: downloadSnapshot.toString(),
10497

10598
_BSC_NETWORK_: bscNetwork,
10699
_LIFECYCLE_HOOK_NAME_: constants.NoneValue,

lib/bsc/sample-configs/.env-sample-full

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ AWS_REGION="us-east-2"
1111

1212
## Common configuration parameters ##
1313
BSC_NETWORK="mainnet" # All options: "mainnet", "testnet"
14+
BSC_DOWNLOAD_SNAPSHOT="true" # All options: "true" | "false"
1415
BSC_NODE_CONFIGURATION="full" # All options: "full"
1516

1617
## Instance Nodes

lib/bsc/test/ha-nodes-stack.test.ts

Lines changed: 2 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import * as cdk from "aws-cdk-lib";
33
import * as dotenv from 'dotenv';
44
dotenv.config({ path: './test/.env-test' });
55
import * as config from "../lib/config/bscConfig";
6-
import * as configTypes from "../lib/config/bscConfig.interface";
76
import { BscHANodesStack } from "../lib/ha-nodes-stack";
87

98
describe("BscHANodesStack", () => {
@@ -14,18 +13,8 @@ describe("BscHANodesStack", () => {
1413
const bscHANodesStack = new BscHANodesStack(app, "bsc-sync-node", {
1514
stackName: `bsc-ha-nodes-${config.baseNodeConfig.nodeConfiguration}`,
1615
env: { account: config.baseConfig.accountId, region: config.baseConfig.region },
17-
nodeRole: <configTypes.BscNodeRole> "rpc-node",
18-
19-
instanceType: config.baseNodeConfig.instanceType,
20-
instanceCpuType: config.baseNodeConfig.instanceCpuType,
21-
bscNetwork: config.baseNodeConfig.bscNetwork,
22-
nodeConfiguration: config.baseNodeConfig.nodeConfiguration,
23-
snapshotsUrl:config.baseNodeConfig.snapshotsUrl,
24-
dataVolume: config.baseNodeConfig.dataVolume,
25-
26-
albHealthCheckGracePeriodMin: config.haNodeConfig.albHealthCheckGracePeriodMin,
27-
heartBeatDelayMin: config.haNodeConfig.heartBeatDelayMin,
28-
numberOfNodes: config.haNodeConfig.numberOfNodes,
16+
...config.baseNodeConfig,
17+
...config.haNodeConfig
2918
});
3019

3120
// Prepare the stack for assertions.

lib/bsc/test/single-node-stack.test.ts

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import * as cdk from "aws-cdk-lib";
33
import * as dotenv from 'dotenv';
44
dotenv.config({ path: './test/.env-test' });
55
import * as config from "../lib/config/bscConfig";
6-
import * as configTypes from "../lib/config/bscConfig.interface";
76
import { BscSingleNodeStack } from "../lib/single-node-stack";
87

98
describe("BSCSingleNodeStack", () => {
@@ -15,13 +14,7 @@ describe("BSCSingleNodeStack", () => {
1514
stackName: `bsc-single-node`,
1615

1716
env: { account: config.baseConfig.accountId, region: config.baseConfig.region },
18-
nodeRole: <configTypes.BscNodeRole> "single-node",
19-
instanceType: config.baseNodeConfig.instanceType,
20-
instanceCpuType: config.baseNodeConfig.instanceCpuType,
21-
bscNetwork: config.baseNodeConfig.bscNetwork,
22-
nodeConfiguration: config.baseNodeConfig.nodeConfiguration,
23-
snapshotsUrl:config.baseNodeConfig.snapshotsUrl,
24-
dataVolume: config.baseNodeConfig.dataVolume,
17+
...config.baseNodeConfig
2518
});
2619

2720
// Prepare the stack for assertions.

0 commit comments

Comments
 (0)