<jupyter_start><jupyter_text>※ このNotebookでは、perftool動作確認のための環境構築をを実施します。  ssh公開鍵の作成Jupyter Notebook サーバからVCノードに ssh 接続するために、ssh キーペアを作成しておきます。<jupyter_code># 動作確認用SSHキーペア作成
!mkdir -p ~/.ssh
!test -f ~/.ssh/id_rsa || ssh-keygen -t rsa -f ~/.ssh/id_rsa -N ""<jupyter_output><empty_output><jupyter_text>VCノードの作成  VCP SDK の初期化 VCP SDK を使用ために、はじめにアクセストークンを使用して VCP SDKを初期化してください。  次のセルを実行すると、VCコントローラのアクセストークンの入力枠が表示されます。  アクセストークンの値を入力し、Enterキーを押すことで初期化が完了します。<jupyter_code>from getpass import getpass
vcc_access_token = getpass()

from common import logsetting
from vcpsdk.vcpsdk import VcpSDK

# VCP SDKの初期化
vcp = VcpSDK(
    vcc_access_token,  # VC Controllerのアクセストークン
)

vcp.version()<jupyter_output>········

vcplib:
  filename: /notebooks/notebook/vcpsdk/vcplib/occtr.py
  version: 20.08.0+20200831

vcpsdk:
  filename: /notebooks/notebook/vcpsdk/vcpsdk/vcpsdk.py
  version: 20.10.0+2021001

  plugin:
    aws: 1.2+20191001
    aws_disk: 1.0+20190408
    aws_spot: 1.1+20191001
    azure: 1.2+20191001
    vmware: 1.1+20191001
    azure_disk: 1.0+20190408
    sakura: 1.1+20191001
    sakura_disk: 1.0+20190930
    oracle: 1.0+20200331
    oracle_disk: 1.0+20200331
    aic: 1.2+20191001
    abc: 1.3+20190408
    hokudai: 1.1+20191001
    chameleon: 1.0+20200831
    chameleon_ext: 20200831
    gcp: 1.0+20190408
    onpremises: 1.0+20190408

vc_controller:
  host: 10.0.0.1
  name: vcc1045
  wait_timeout_sec: 1000(default 15min)
  vc_controller: 20.10.1+20210101
  vc_controller_git_tag: 20.10.1

  plugin:
    vmware: 1.1+20210101
    chameleon: 1.0+20210101
    azure: 1.2+20210101
    aws_spot: 1.1+20210101
    aic: 1.2+20210101
    sakura: 1.1+20210101
    hokudai: 1.1+20210101
    abc: 1.[...]<jupyter_text>もしエラーが発生したら...- `Exception: ('VCP', 'config vc failed')` ... 使われたアクセストークンが正しくない- `Exception: ('VCP', 'server error')` ... VCコントローラのIPアドレス設定が正しくないか、ネットワーク接続エラーが発生している  VCノードの起動 次のセルを実行し、動作確認用のVCノードを1個作成します。  クラウドのインスタンスを起動してVCノード用の初期設定を行うため、実行完了まで数分程度を要します。<jupyter_code># UnitGroupの作成
unit_group = vcp.create_ugroup(
    'sinetstream01'    # UnitGroupの名前
)

spec = vcp.get_spec('aws', 'small')
spec.set_ssh_pubkey('/home/jovyan/.ssh/id_rsa.pub')
spec.num_nodes = 2

unit = unit_group.create_unit(
    'aws-testnodes',    # Unit名の指定
    spec
)<jupyter_output>2021-03-18 14:56:22,623 - INFO - BOOTING ... 0 sec
2021-03-18 14:56:27,750 - INFO - BOOTING ... 5 sec
2021-03-18 14:56:32,873 - INFO - BOOTING ... 10 sec
2021-03-18 14:56:38,006 - INFO - BOOTING ... 15 sec
2021-03-18 14:56:43,135 - INFO - BOOTING ... 20 sec
2021-03-18 14:56:48,265 - INFO - BOOTING ... 25 sec
2021-03-18 14:56:53,394 - INFO - BOOTING ... 30 sec
2021-03-18 14:56:58,531 - INFO - BOOTING ... 35 sec
2021-03-18 14:57:03,667 - INFO - BOOTING ... 40 sec
2021-03-18 14:57:08,801 - INFO - BOOTING ... 45 sec
2021-03-18 14:57:13,930 - INFO - BOOTING ... 50 sec
2021-03-18 14:57:19,086 - INFO - BOOTING ... 55 sec
2021-03-18 14:57:24,443 - INFO - BOOTING ... 60 sec
2021-03-18 14:57:29,707 - INFO - BOOTING ... 65 sec
2021-03-18 14:57:34,902 - INFO - BOOTING ... 70 sec
2021-03-18 14:57:40,039 - INFO - BOOTING ... 75 sec
2021-03-18 14:57:45,172 - INFO - BOOTING ... 80 sec
2021-03-18 14:57:50,310 - INFO - BOOTING ... 85 sec
2021-03-18 14:57:55,440 - INFO - BOOTING ... 90 sec
2021-03-18 14:[...]<jupyter_text>もしエラーが発生したら...AWSのクレデンシャル情報が正しくない場合、以下のようなエラーが発生します。  Valut に設定した内容を確認してください。```*** HAS ERROR:---2019/06/12 05:09:13 UTC: * provider.aws: InvalidClientTokenId: The security token included in the request is invalid.---```  起動したVCノードの確認次のセルを実行し、起動したVCノードを確認してください。<jupyter_code>unit.df_nodes()<jupyter_output><empty_output><jupyter_text>VCノードへのsshログインJupyterNotebook の Terminal 機能を用いて、作成したVCノードにsshログインすることができます。  VCノードのIPアドレスは上記の `unit.df_nodes()` の出力に含まれています。```$ ssh -i ~/.ssh/id_rsa root@{cloud_instance_address}```<jupyter_code># unit_group.find_ip_addresses() は UnitGroup内の全VCノードのIPアドレスのリストを返します
ip_addresses = unit_group.find_ip_addresses(node_state='RUNNING')
client_ip = ip_addresses[0]
server_ip = ip_addresses[1]<jupyter_output><empty_output><jupyter_text>まず、ログインする前に ~/.ssh/known_hosts のホストキーを更新します。<jupyter_code>!touch ~/.ssh/known_hosts
# ~/.ssh/known_hosts から古いホストキーを削除する
!ssh-keygen -R {client_ip}
!ssh-keygen -R {server_ip}

# ホストキーの登録
!ssh-keyscan -H {client_ip} >> ~/.ssh/known_hosts
!ssh-keyscan -H {server_ip} >> ~/.ssh/known_hosts
import os
ssh_private_key = os.path.expanduser('~/.ssh/id_rsa')
ssh_opts = f"-i {ssh_private_key} -l root"
!ssh {ssh_opts} {client_ip} uname -a
!ssh {ssh_opts} {server_ip} uname -a<jupyter_output>Linux ip-172-30-2-7 4.4.0-159-generic #187-Ubuntu SMP Thu Aug 1 16:28:06 UTC 2019 x86_64 Linux
Linux ip-172-30-2-36 4.4.0-159-generic #187-Ubuntu SMP Thu Aug 1 16:28:06 UTC 2019 x86_64 Linux<jupyter_text>Brokerを準備する<jupyter_code>!ssh {ssh_opts} {server_ip} /usr/local/bin/docker run -d --name broker --hostname broker -p 1883:1883 -p 9092:9092 sinetstream/tutorial:1.0.0
!ssh {ssh_opts} {server_ip} /usr/local/bin/docker ps -l
!ssh {ssh_opts} {server_ip} /usr/local/bin/docker exec -t broker ps ax<jupyter_output>CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                                            NAMES
e4d92eb5ef85        sinetstream/tutorial:1.0.0   "/usr/local/bin/supe…"   2 minutes ago       Up 2 minutes        0.0.0.0:1883->1883/tcp, 0.0.0.0:9092->9092/tcp   broker
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:00 /usr/bin/python3 /usr/local/bin/supervisord -n -c /et
    9 ?        Sl     0:06 java -Xmx1G -Xms1G -server -XX:+UseG1GC -XX:MaxGCPaus
   10 ?        S      0:00 /usr/sbin/mosquitto -c /etc/mosquitto/mosquitto.conf
   12 ?        Sl     0:01 java -Xmx512M -Xms512M -server -XX:+UseG1GC -XX:MaxGC
  717 pts/0    Rs+    0:00 ps ax<jupyter_text>pertool実行環境を準備する<jupyter_code>!ssh {ssh_opts} {client_ip} /usr/local/bin/docker run -d --name reader --hostname reader -e ENABLE_BROKER=false --add-host=broker:{server_ip} sinetstream/tutorial:1.0.0
!ssh {ssh_opts} {client_ip} /usr/local/bin/docker ps -l
!ssh {ssh_opts} {client_ip} /usr/local/bin/docker exec -t reader ps ax<jupyter_output>CONTAINER ID        IMAGE                        COMMAND                  CREATED             STATUS              PORTS                NAMES
4e81e87190e4        sinetstream/tutorial:1.0.0   "/usr/local/bin/supe…"   3 minutes ago       Up 3 minutes        1883/tcp, 9092/tcp   reader
  PID TTY      STAT   TIME COMMAND
    1 ?        Ss     0:00 /usr/bin/python3 /usr/local/bin/supervisord -n -c /et
   30 pts/0    Rs+    0:00 ps ax<jupyter_text>Reader用のコンテナを起動する際に指定した --add-host は　Readerコンテナの /etc/hosts に、Broker の IPアドレスを登録するためのものです。 Kafkaブローカーを利用するためにはサーバアドレスの名前解決が必要となるため、このパラメータの指定を追加しています。 Readerコンテナの /etc/hosts を表示して Broker のIPアドレスが登録されていることを確認します。<jupyter_code>!ssh {ssh_opts} {client_ip} /usr/local/bin/docker exec -t reader cat /etc/hosts<jupyter_output>127.0.0.1	localhost

::1	localhost ip6-localhost ip6-loopback

fd00:c2b6:b24b:be67:2827:688d:e6a1:6a3b	ip6-localnet

fdf8:f53e:61e4::18	ip6-mcastprefix

fc00:db20:35b:7399::5	ip6-allnodes

fd00:c2b6:b24b:be67:2827:688d:e6a1:6a3b	ip6-allrouters

172.30.2.36	broker

172.17.0.2	reader<jupyter_text>SINETStreamをインストールする<jupyter_code>!ssh {ssh_opts} {client_ip} /usr/local/bin/docker exec -t -u user01 reader pip3 install --user sinetstream-kafka sinetstream-mqtt<jupyter_output>Collecting sinetstream-kafka
  Downloading https://files.pythonhosted.org/packages/fd/7c/cfb05a77a711cc2ed397063e4953e2a86ec494087b8d1d6e63ba71088e5c/sinetstream_kafka-1.5.0-py3-none-any.whl
Collecting sinetstream-mqtt
  Downloading https://files.pythonhosted.org/packages/75/f4/a94c6835181fdd9a16c42906632124a6151972d73771a5f3b6560b76dcfd/sinetstream_mqtt-1.5.0-py3-none-any.whl
Collecting promise
  Downloading https://files.pythonhosted.org/packages/cf/9c/fb5d48abfe5d791cd496e4242ebcf87a4bb2e0c3dcd6e0ae68c11426a528/promise-2.3.tar.gz
Collecting kafka-python>=2.0
[?25l  Downloading https://files.pythonhosted.org/packages/75/68/dcb0db055309f680ab2931a3eeb22d865604b638acf8c914bedf4c1a0c8c/kafka_python-2.0.2-py2.py3-none-any.whl (246kB)
[K     |################################| 256kB 12.4MB/s eta 0:00:01
[?25hCollecting sinetstream>=1.5.0
  Downloading https://files.pythonhosted.org/packages/75/e9/416e68c5209237de0b844b0f260dbe529ffbf868218ec3745df4f884c8c5/sinetstream-1.5.0-py3-none-any[...]<jupyter_text>最後に Successfully installed ...と表示されていれば、ライブラリのインストールに成功しています。 確認のためインストールされている Python3　ライブラリの一覧を表示してみます。<jupyter_code>!ssh {ssh_opts} {client_ip} /usr/local/bin/docker exec -t -u user01 reader pip3 list<jupyter_output>Package           Version
----------------- -------
avro-python3      1.10.2 
kafka-python      2.0.2  
paho-mqtt         1.5.1  
pip               19.3.1 
promise           2.3    
pycryptodomex     3.10.1 
PyYAML            3.12   
setuptools        42.0.2 
sinetstream       1.5.0  
sinetstream-kafka 1.5.0  
sinetstream-mqtt  1.5.0  
six               1.15.0 
supervisor        4.1.0  
[33mWARNING: You are using pip version 19.3.1; however, version 21.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.[0m<jupyter_text>SINETStreamの動作確認  Readerのプログラムと設定ファイルを準備する<jupyter_code>!ssh {ssh_opts} {client_ip} /usr/local/bin/docker exec -t -u user01 reader mkdir -p /home/user01/sinetstream/reader
ss_url='https://raw.githubusercontent.com/nii-gakunin-cloud/sinetstream/master'

!ssh {ssh_opts} {client_ip} /usr/local/bin/docker exec -t -u user01 reader curl -O {ss_url}/docs/tutorial/.sinetstream_config.yml -O {ss_url}/python/sample/text/consumer.py
!ssh {ssh_opts} {client_ip} /usr/local/bin/docker exec -t -u user01 reader mv .sinetstream_config.yml sinetstream/reader/
!ssh {ssh_opts} {client_ip} /usr/local/bin/docker exec -t -u user01 reader mv consumer.py sinetstream/reader/

!ssh {ssh_opts} {client_ip} /usr/local/bin/docker exec -t -u user01 reader ls -a /home/user01/sinetstream/reader<jupyter_output>.  ..  .sinetstream_config.yml	consumer.py<jupyter_text>Writerのプログラムと設定ファイルを準備する<jupyter_code>!ssh {ssh_opts} {client_ip} /usr/local/bin/docker exec -t -u user01 reader mkdir -p /home/user01/sinetstream/writer
ss_url='https://raw.githubusercontent.com/nii-gakunin-cloud/sinetstream/master'

!ssh {ssh_opts} {client_ip} /usr/local/bin/docker exec -t -u user01 reader curl -O {ss_url}/docs/tutorial/.sinetstream_config.yml -O {ss_url}/python/sample/text/producer.py
!ssh {ssh_opts} {client_ip} /usr/local/bin/docker exec -t -u user01 reader mv .sinetstream_config.yml sinetstream/writer/
!ssh {ssh_opts} {client_ip} /usr/local/bin/docker exec -t -u user01 reader mv producer.py sinetstream/writer/
!ssh {ssh_opts} {client_ip} /usr/local/bin/docker exec -t -u user01 reader ls -a /home/user01/sinetstream/writer<jupyter_output>.  ..  .sinetstream_config.yml	producer.py<jupyter_text>https://www.sinetstream.net/docs/tutorial/TUTORIAL-STEP2.html 3.1. Kafkaブローカーとの間でメッセージの送受信を行う と同様に実行してみる  VCノードの削除次のセルを実行し、動作確認に使用したクラウドインスタンスを削除してください。  実行完了まで数分程度を要します。<jupyter_code>unit_group.cleanup()<jupyter_output>2021-03-18 14:56:14,734 - INFO - cleanup completed. vc sinetstream01 is cleanup(no unit)