LoginSignup
24
14

More than 3 years have passed since last update.

Symbolノードを30分でAWS上に立ち上げる

Last updated at Posted at 2021-03-17

目的

まずは、Symbolメインネットローンチおめでとうございます!
ローンチはスタートでこれからが全てなので、頑張って記事を書いていこうと思います。

今回は、ノードの構築部分をスピンオフということで・・・

セキュリティ設定とか、dockerの設定とか、symbol-bootstrapの設定をとにかく省きたいので、新規に立ち上げる際にできる限り自動化してみた。
できる限り安全に作るということでAWSを使用。
もちろん使用は 自己責任 で。

image.png

まずはAWSアカウント、なければ作成する。(〜10分)

ここに書いてるとおりにアカウントを作るだけで問題なし。
アカウントは2FAすることを推奨

アカウント登録に必要なもの

  • あなたの名前・住所
  • クレジットカード
  • メールアドレス

AWS上のサーバ-(インスタンス)にSSHログインするための鍵作成(〜5分)

事前にないとサーバー作れないので事前に作成する。
順番通りにすれば鍵作れる

説明
① リージョンを選択
世界中にAWSがあるので、世界のどこかのデータセンター郡を選択する。
ここではバージニア北部にしている。東京とか大阪でも全然問題なし。
このリージョンにサーバが作られる。

② サービスの選択
上タブ左側にあるサービスをクリックすると、AWSが使用できるサービス一覧が出る

③ EC2を選択
コンピューティングサービス、つまりサーバ作れるサービスに移動できる
スクリーンショット 2021-03-16 14.31.55.png
① キーペアの選択
左項目は下まであるので、下の方にキーペアがある

② キーペアの作成を選択
左上のオレンジ色のボタンをクリックする
スクリーンショット 2021-03-16 14.41.00.png
① 名前を決める
適用に何でも

② 保存するファイル形式を選択
SSHクライアントを「OpenSSH」で使用するか、「Putty」でやるか環境によって変わるので好きな方法を選択。わからないならそのまま

③ キーペアを作成を押す
鍵が作成される。自動的に秘密鍵がダウンロードされるのでなくさないようにする。
スクリーンショット 2021-03-16 14.45.59.png

サーバーを立ち上げる(~15分)

gitHub上にAWS上に自動で作成するテンプレートから起動することで簡単に起動できる。(mainnetにも一応対応、自己責任で)
https://github.com/keiyow/symbol-aws-cloudformation

やってることは以下の通り、上のgithub上にテンプレート毎あげてるので、カスタムしたい人はどうぞ

  • 専用ネットワークを作成
  • ファイアウォールを作成(セキュリティグループで3000ポートの開放、SuperNodeSettingsが有効だと7880も開放)
  • 固定IPアドレスの取得
  • サーバーの作成(Ubuntu20)
  • 追加ディスクをマウントし、xfsでフォーマット
  • symbol-bootstrapの実行

GithubのREADMEにあるStackボタンを押して作成ウィザードから起動まで

説明
テンプレートのあるGithubへ行く https://github.com/keiyow/symbol-aws-cloudformation
GithubのREADMEにあるStackボタンを押して作成ウィザードを起動する スクリーンショット 2021-03-16 15.21.28.png
赤枠の雲のマークを押す スクリーンショット 2021-03-16 15.28.52.png
次へを押す スクリーンショット 2021-03-16 15.35.09.png
項目を設定し、次へを押す
項目の説明については下記を参照
image.png
一番下の次へを押す スクリーンショット 2021-03-16 16.10.11.png
2つのチェックを入れて、スタックの作成を押す。 スクリーンショット 2021-03-16 16.10.46.png
この状態で10分ほど待つ
(CREATE_IN_PROGRESS)
image.png
左項目の2つがCREATE_COMPLATEになったら構築完了 image.png

項目説明

項目 説明
Stack Name スタック名を指定。これはユニークであればなんでもOK
Service Name サーバー名やネットワーク名の冠名を指定。
AvailabilityZone1 AWSのデータセンターが国(リージョン)の中でさらに分かれているというイメージなだけなので適当に選択
PublicLocationIP RESTポート(3000)と通信(7900)ポートに接続できるIPアドレス範囲を指定。
DefaultUnixUser symbolを起動するUNIXユーザー名。わかりやすくsymbolユーザーとしている
KeyName 上で作成した鍵を指定。空欄だと作成時にエラーになるので注意。
symbolInstanceType サーバーのスペックを指定。AWSでは種類が多く、従量課金で高くつくことも多いのでちゃんと検討する。でも後からでもスペック変更できるので、とりあえずはt3.largeでも十分なはず。
symbolRootVolumeSize / パーティションのディスクサイズ(GB)
システム領域。このままで問題なし
symbolDataVolumeSize /mnt/symbol/data パーティションのディスクサイズ(GB)
ここにSymbolのデータを集約している。後からでも容量は増やせる
SymbolNetwork testnetかmainnetか選ぶ。 重要
SymbolAssembly api,peer,dualの3つから選べる。簡単に説明。
apiはrestを提供し、ブロック生成することはない。(ブロックは保持)
peerはブロックを生成することができる
dualはapi + peerの機能がある
SymbolBootstrapVersion symbol-bootstrap version のバージョンを指定
https://github.com/nemtech/symbol-bootstrap
SymbolFriendlyName ノード名を指定。explorerからノード名が確認できる。空だとbootstrapがランダムな名前を付けてくれる
SymbolCreateVotingFile 投票権ノードとしてVotingTreeファイルとアカウントを生成するか否か。投票権ノードになりたいわけでない場合は不要。このVotingアカウントとmainアカウントをlinkするトランザクションまでは投げない。(それは手動で)
SymbolSuperNodeSettings スーパーノードのagentを作成するか否か。有効にするとsuper node agentプラグラムが動き、ファイアウォールで7880ポートを開放する。 スーパーノードにならないのであれば不要
スーパーノードの登録処理(enrol)まではやらない。

ブラウザでノードが動いているか確認してみる

説明
出力を押す スクリーンショット 2021-03-16 16.50.47.png
ChainInfoのURLを押す スクリーンショット 2021-03-16 16.52.16.png
最初にあるheightの値が増えていることを確認する。増えていればノード参加できている
1の場合、うまくつながってない。
スクリーンショット 2021-03-16 16.54.52.png

サーバーにログインする

説明
サービスを選択し、EC2サービスに移動する スクリーンショット 2021-03-16 16.59.48.png
① 左項目のインスタンスを選択
② 作成したサーバーを選択
③ 接続を押す
スクリーンショット 2021-03-16 17.17.02.png
① セッションマネージャータブを選択
② 接続を押す
スクリーンショット 2021-03-16 17.21.37.png
ターミナルが開き、SSH接続した時と同じような状況になる image.png

ターミナル操作で内容確認

設定したDefaultUnixUserにスイッチする

DefaultUnixUserを変更していなければ、 symbol という名前のユーザーにスイッチする。

$ sudo su - symbol

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

symbol@sv-dual:~$

bootstrapで展開した位置に移動する

symbol@sv-dual:~$ cd /mnt/symbol/data
symbol@sv-dual:/mnt/symbol/data$

Symbolの状態を確認する

symbol@sv-dual:/mnt/symbol/data$ symbol-bootstrap healthCheck
                         _             _         _                    _         _
  ___  _   _  _ __ ___  | |__    ___  | |       | |__    ___    ___  | |_  ___ | |_  _ __  __ _  _ __
 / __|| | | || '_ ` _ \ | '_ \  / _ \ | | _____ | '_ \  / _ \  / _ \ | __|/ __|| __|| '__|/ _` || '_ \
 \__ \| |_| || | | | | || |_) || (_) || ||_____|| |_) || (_) || (_) || |_ \__ \| |_ | |  | (_| || |_) |
 |___/ \__, ||_| |_| |_||_.__/  \___/ |_|       |_.__/  \___/  \___/  \__||___/ \__||_|   \__,_|| .__/
       |___/                                                                                    |_|
2021-03-16T08:30:11.096Z info     Container db is running
2021-03-16T08:30:11.102Z info     Container api-node is running
2021-03-16T08:30:11.113Z info     Container api-broker is running
2021-03-16T08:30:11.114Z info     Container rest-gateway is running
2021-03-16T08:30:11.122Z info     Container api-node port 7900 -> 7900 is open
2021-03-16T08:30:11.124Z info     Container api-broker port 7902 -> 7902 is open
2021-03-16T08:30:11.124Z info     Container rest-gateway port 3000 -> 3000 is open
2021-03-16T08:30:11.146Z info     Testing http://localhost:3000/node/health
2021-03-16T08:30:11.193Z info     Rest http://localhost:3000/node/health is up and running...
2021-03-16T08:30:11.194Z info     Network is running!

設定されたアカウントを確認する

今回の方法では暗号化していないので秘密鍵は全て見える。(必要に応じてこのaddress.ymlは暗号化するなりして、秘密鍵はwalletに取り込んだり保存しておく)
基本mainアカウントのみを使うことになる。

アカウント周りに関しては、詳細に書かれていましたので参考になりました

symbol@sv-dual:/mnt/symbol/data$ cat target/addresses.yml
version: 2
networkType: 152
nemesisGenerationHashSeed: 45FBCF2F0EA36EFA7923C9BC923D6503169651F7FA4EFC46A8EAF5AE09057EBD
sinkAddress: TDGY4DD2U4YQQGERFMDQYHPYS6M7LHIF6XUCJ4Q
nodes:
    -
        name: api-node
        friendlyName: XXXXXX
        roles: 'Peer,Api,Voting'
        main:
            privateKey: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
            publicKey: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
            address: TDYUKB2Q3QE2YO4NDJCMPEFF3ZPQGFSUVFXQ4WI
        transport:
            privateKey: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
            publicKey: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
            address: TA4WZKMZIYSFRAHUCTFXOZR24DIBI2C4C7SR7MY
        remote:
            privateKey: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
            publicKey: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
            address: TBBNA43BTWQ2SRUHKBDRIVQTFFQMQXMYVS3VHMA
        voting:
            privateKey: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
            publicKey: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
            address: TAHCXD442C2Q5QUGYZVHWU6ZSPP745VB7SWLXII
        vrf:
            privateKey: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
            publicKey: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
            address: TA56LOSYLTRQGBXJVPYC7VZUZVBHZGUQBYXSX2Q

FAQ的なこと

ノード起動後、ハーベスティングしたいんだけど?

3/25 修正

mainアカウントに10,000xym以上送金すれば、ハーベスティングできる。

"minHarvesterBalance": "10'000'000'000",

Voting(投票ノード)やスーパーノードなどにも参加する場合は、linkコマンドを投げmainアカウントを有効にする必要がある。
linkコマンドのやりかたは linkされてないを参照
(残高も大分必要)

linkされてない

mainアカウントの残高があり、トランザクションを投げる前提なので、自動化はできない。(残高ある秘密鍵を事前にImportするやり方もあったが、なんか危ないので・・・)
mainアカウントに送金後、linkコマンドを発行することでlink transactionがアナウンスされる。
link後は、残高の要件を満たしていればharvestやvotingなどが動く。

ターミナルに接続してlinkコマンドの発行の仕方

$ sudo su - symbol # DefaultUnixUserで変更した場合はsymbolを変える
$ cd /mnt/symbol/data
$ symbol-bootstrap link --useKnownRestGateways

AWSの料金が高い

この作成したAWSでは、以下のサービスで従量課金が発生する。
(固定IPアドレスはサーバーを起動していれば無料)

  • EC2インスタンス(サーバー)料金
  • EBS(データディスク)料金
  • ネットワーク通信料

VPSとAWSで根本的に違うのは、 耐障害性
VPSでは物理ホストが死んだらデータが飛ぶが、AWSやAzureなどクラウドはデータを別で永続保持しているので、物理ホストが壊れて一時停止はあってもまた再開することができる。

ということでAWSで安く抑えるには、リザーブドインスタンス(スポットインスタンス、セービングプランは説明長くなるので一旦なしで・・・)というのを、年単位で使うこと前提で事前に購入することで割引を受けられ、サーバー代を安くすることが可能
(新規AWSアカウントの場合、前払いが必須)

例えば バージニア北部のt3.largeなら、立ち上げ時は

月 0.0832*24*30 = $59.904(6,520円/月ぐらい)
年 $59.904*12 = $718.848(78,450円/年ぐらい)

1年使用することを前提に一部前払いの場合、

初 $218(23,800円)(初月のみ)
月 $18(1,965円/月ぐらい)
年 218+(18*12) = $434(47,365円)

3年使用することを前提に全前払いとかしたら、大分安くなる

初 $822(89,700円)
月 $0
年 822/3 = $274(29,900円)

全部消したい

Cloudformationで、作成したスタック名(ネストと書いてないほう)を選択して、削除を押す。
2、3分で削除される。

スクリーンショット 2021-03-16 17.47.23.png

24
14
10

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
24
14