AWS上でKubernetesを用いたCENMのデプロイ・設定方法について理解できる。
はじめに
このデプロイガイドでは、AWSのElastic Kubernetes Service(以下、EKS)上にCorda Enterprise Network Manager(以下、CENM)をテストデプロイするための簡単な手順を紹介します。デプロイには、CENMのDockerイメージに付属するBashスクリプトとHelmテンプレートを使用します。
なお、本手順はR3公式ドキュメントのCENM Deployment on AWSをベースに、CENMへのノード参加手順や一部記述を補記したものになります。
必要環境
- 有効なAWSサブスクリプション
- Linux、MacOSまたはWindows用のUnix互換環境(CygwinやWSL等(デプロイには Bashスクリプトを使用するため))
- CENMコマンドラインインタフェース(CLI)(CENMに接続し管理するために使用しますが、デプロイには必須ではありません。)
CENMをデプロイする
CENMのEKSへのデプロイは以下の手順で行います。
本手順でデプロイを完了すると以下の構成のCENMが構築されます。(下記構成図は簡易的なものであり、正確に実際のAWS上の構成を表しているわけではありません。)
ツールの設定
- Kubectlをインストールします。
- Eksctlをインストールします。
- Helmをインストールします。
- Dockerをインストールします。(CENM CLIを使用する場合に使用します。本手順では必須ではありません。)
- Docker HubからCENM CLIツールのイメージをダウンロードします。(本手順ではCENM CLIの使い方については説明していません。詳細はこちらをご確認ください。)
Helmのバージョンが3.2以上であることを確認してください。
EKSをセットアップ
EKSクラスターは最低でも10GBのメモリを必要とするため、適切なインスタンスとノード数を選択します。AWSコンソールからクラスターを管理できるように--managed
オプションをつけてください。
下記のコマンドはCENMをデプロイするEKSクラスターを構成するための一例です。必要に応じてオプションを変更してください。
各オプションの意味は以下の通りです。
-name
クラスター名-version
k8sバージョン-node-type
ノードのEC2インスタンスタイプ(デフォルトはm5.large)-node
ノード数(デフォルトは2)-managed
マネージドコンソールでの管理有無-region
リージョンとAZ
EFSをセットアップ
パフォーマンスの観点からEFSは上記EKSと同じリージョンを選択することをお勧めします。
EFSを以下の手順で設定します。
- EFSコンソールにて、「ファイルシステムの作成」をクリック
- 「カスタマイズ」をクリック
- ファイルシステムの名前を入力
- その他の項目を必要に応じて変更する
- 「次へ」ボタンをクリック
- ネットワーク
- EKSクラスタで使用しているのと同じVPCを選択する
- AZ:デフォルト
- サブネットID:デフォルト
- IPアドレス:デフォルト
- セキュリティグループ:上記で作成したEKSクラスターの設定タブ→ネットワーキングタブに遷移し、「クラスターセキュリティグループ」に記載されているセキュリティグループを選択する
- 「次へ」ボタンをクリック
- ファイルシステムポリシー
- 変更せずに、「次へ」ボタンをクリック
EFSが作成されたら、アクセスポイントを作成する。
- 「アクセスポイント」を作成をクリック
- 名前を入力
- ルートディレクトリパス:/
- ユーザID:1000
- グループID:1000
- セカンダリセキュリティグループ:空のまま
- 所有者ユーザ:1000
- 所有者グループ:1000
- アクセス許可:0777
- 「アクセスポイントを作成」をクリック
CENMデプロイシェルをダウンロードする
以下のリポジトリをGithubからクローンしてきます。任意のバージョンを選択できますが、本手順ではv1.5を使用しています。
EKSクラスタへEFSプロビジョナをデプロイする
上記でクローンしてきたリポジトリ内のcenm-deployment/k8s/efs.yamlを以下のように編集します。
- [REGION]:EFSのリージョン
- [EFS file system ID]:EFSのファイルシステムID(EFSのコンソールで確認できます。)
下記コマンドを実行し、EFSプロビジョナを生成します。
下記コマンドを実行し、ストレージクラスを生成します。
CENMをブートストラップする
CENMをブートストラップするには、/k8s/helm/bootstrap.cenm スクリプトを実行します。このスクリプトには --ACCEPT_LICENSE Y 引数が含まれていますが、これは必須であり、使用許諾契約書を読んで同意したことを確認するものです。
ACCEPT_LICENSE [Y]
:ブートストラッパーによるデプロイメントのライセンスに同意します。h
:ヘルプメッセージを出力します。i|--idman [name]
:既存のIdentity Managerサービスを指定します。n|--notary [name]
:既存のNotaryサービスを指定します。p|--prefix [prefix]
:Helmチャートのリリースプリフィックスを指定します。m|--mpv [version]
:ネットワークの最小プラットフォームバージョンを指定します。a|--auto
:上記の値を自動で補完します。
今回は以下のコマンドでブートストラップします。
デプロイが完了するまで10分以上かかります。デプロイの状況について下記コマンドで確認できます。
PodのステータスがCompleteまたはRunningになっていればデプロイ成功です。
ここでステータスが上記以外の場合は、以下のコマンドを実行し、Podの詳細情報を取得します。
下記のようなメッセージが表示された場合、ノードのメモリ不足だということが分かります。
※クラスタ作成時にインスタンスとしてデフォルトのm5.largeを選択した場合、本手順の構成では最低でもノードを4つ建てないとメモリ不足によりPodのデプロイに失敗するのでご注意ください。
既存の外部向けIPを使用する場合は、下記のコマンドでブートストラップします。
CordaノードをCENMに参加する
上記手順でデプロイしたCENMの検証のため、自分のCordaノードをCENMに参加します。
※ここではCordaノードの準備については説明せず、各自でCordaノードを準備済みという前提で進めていきます。
ノードをCENMに参加するために、node.confファイルに以下を追記します。
<IDENTITY-MANAGER-IP>と<NETWORK-MAP-IP>はkubectl get svc
コマンドで取得した、Identity ManagerとNetwork MapのIPを入力します。
次に、network-root-truststore.jks を Corda ノードにアップロードします。次のコマンドを使って、CENM Signing Service からローカルにダウンロードします。
取得したnetwork-root-truststore.jksをCordaノードのcertificates配下に配置します。
また、ローカルのCordaノードがOSSで実装されている場合、node.confに以下の記述が必要になります。
- devMode=trueではCENMを利用できないので、falseに変更します。
- networkService{}で参加するネットワークのエンドポイントIPを指定します。
- デフォルトではCordapp JARsの署名者として許可されていない公開鍵リストにCorda開発鍵が含まれるためcordappSignerKeyFingerprintBlacklist=[]を指定することで、Corda開発鍵をCordapp JARsの署名者として許可します。Cordapp JARsを別途署名する場合は、こちらの方法をご参照ください。
次に、Cordaコアのあるディレクトリで以下のコマンド実行し、CENMにノードを登録します。
以下のようなメッセージが表示されれば登録完了です。
お疲れ様でした。
おわりに
本ガイドではCENM deployment repoを使用した、CENMのEKSへのテストデプロイ手順について説明しました。本手順はCENM Deployment with Docker, Kubernetes, and Helm chartsとCENM Deployment on AWSベースに最短でCENMをEKSにデプロイできるよう構成したものです。より詳細を知りたい方は元の手順をご参照ください。また、CENMを構成する各コンポーネントについて深く知りたい方はこちらで詳しく説明されています。
<ご質問・ご要望の例>
- Corda Portalの記事について質問したい
- ブロックチェーンを活用した新規事業を相談したい
- 企業でのブロックチェーン活用方法を教えて欲しい 等々