CTCロゴ
トップ

/

記事

/

自動化ツールを一元管理する|Robocorp Control Room

その他

公開日:2023.12.26

自動化ツールを一元管理する|Robocorp Control Room

    自動化ツールを一元管理する|Robocorp Control Room

    この記事をシェア

    初めまして。ネットワークテクノロジー課の武藤です。今年の4月にCTCに転職してきました。
    現在は主にネットワーク自動化に関する開発業務を行っています。
    この記事ではRobocorp社が提供するControl Roomについてご紹介します。

    Robocorp社について

    Robocorp社は2019年に設立されたスタートアップの企業です。
    PythonとRobotFrameworkを使用したRPAソリューションを主軸としており、RobotFramework用のRPAライブラリやVisual Studio Code拡張機能の提供などを行っています。
    今回ご紹介するControl RoomもRobocorp社が提供するソリューションの一つです。これは自動化ツールの実行管理をSaaSとして提供します。

    Control Roomの概要

    Control RoomはRobotFrameworkの実行などを管理するオーケストレーションツールです。ブラウザからリモートマシン上での自動化ツール(RobotFramework, Python, etc...)の実行管理を可能にします。

    また、そのときに出力される各種ログファイルなどもControl Roomにアップロード可能なため、実行履歴とその時のログを紐づけて一元管理することが可能です。

    Control Room概要図

    Control Roomの特徴

    Control Roomの特徴として、ユーザが用意したマシン上で任意のツールを実行可能なところが挙げられます。

    Control Roomで自動化ツールを実行する際には以下の2つの実行方法が選択できます。

    • Robocorpが管理するVM上で実行する方法(Cloud Worker)

    • ユーザが管理するマシンにエージェントをインストールして実行する方法(Workforce Agent)

    後者のWorkforce Agentを使用すると、ユーザが用意したマシン上で自動化ツールを実行できます。

    これによって、インターネットからのアクセスが難しいオンプレミスの機材へのアクセスも容易に実現可能なため、そのような機材(ネットワーク機器など)を対象とする自動化とは特に相性の良いソリューションとなっています。

    本記事では、実際にControl RoomとWorkforce Agentを使用して、オンプレミス環境に存在するマシン上でRobotFrameworkを実行する一連の流れを試してみます。

    使用例

    今回はユーザのオンプレミス環境のLinux VMで実行することを想定して環境をセットアップします。

    使用する環境は以下の通りです。

    • CPU: 2コア

    • RAM: 4GB

    • OS: Linux (Ubuntu Server 22.04)

    Control RoomからRobotFrameworkのシナリオを実行する方法を以下のステップで紹介します。

    • Workerの登録

    • RobotFrameworkシナリオの作成

    • 作成したシナリオ一式のアップロード

    • Processの作成

    • Processの実行

    Workerの登録

    RobotFrameworkシナリオが実行されるマシンをControl Roomに登録します。これはWorkerと呼ばれます。

    Workerにも複数種類が用意されていますが、今回は以下の公式ドキュメントに従って、Linuxサーバ上でデーモンとして動かす形でセットアップをします。

    説明記事画面キャプチャ

    https://robocorp.com/docs/control-room/unattended/worker-setups/background-service

    最初にホームディレクトリ配下に .robocorp ディレクトリを作成し、そこにエージェント用のバイナリをダウンロードして実行権限を付与します。

    $ mkdir ~/.robocorp
    $ curl https://downloads.robocorp.com/workforce-agent-core/releases/latest/linux64/robocorp-workforce-agent-core -o ~/.robocorp/robocorp-workforce-agent-core
    chmod +x ~/.robocorp/robocorp-workforce-agent-core

    以下のコマンドを実行してバージョンを確認します。2023年11月現在では7.1.16がダウンロードされました。

    $ ~/.robocorp/robocorp-workforce-agent-core -v
    7.1.16

    次はこのWorkerをControl Roomに登録します。

    まず登録用のトークンを取得します。Control Roomの Workers ページから +New Worker ボタンを押すことで以下の画面が表示されます。

    トークン画面表示画面

    ここの One-Time Link Token が該当のトークンになります。これを使用して以下のコマンドを実行します。

    <link token> は取得したトークンに置き換えてください。

    $ ~/.robocorp/robocorp-workforce-agent-core link <link token>

    以下のように Link process complete. のログが表示されればControl RoomにWorkerが正常に登録されています。Control Roomの Workers ページに行くと、マシンがWorkerとして見えるようになっています。

    [2023-11-15T09:54:13.551] [INFO] CommandHandler - Workforce Agent Core started v7.1.6
    [2023-11-15T09:54:13.552] [INFO] CommandHandler - OS: [linux] - [5.15.0-88-generic] - [x64]
    ~~~ (省略) ~~~
    [2023-11-15T09:54:14.765] [INFO] RuntimeLink - Link process complete.
    
    [2023-11-15T09:54:14.765] [INFO] shutdown - Agent Core shutting down...
    [2023-11-15T09:54:14.766] [INFO] shutdown - Shutting down logger...

    これでWorkerとしてマシンを登録することができました。これをバックグランドで動かすためにsystemdに登録します。

    以下の内容で /etc/systemd/system/RobocorpAgentCore.service を作成します。ユーザ名とrobocorpエージェントへのパスは適宜置き換えてください。

    [Unit]
    Description=Robocorp Agent
    
    [Service]
    User=robocorp
    ExecStart=/home/robocorp/.robocorp/robocorp-workforce-agent-core start --service
    Restart=always
    PrivateDevices=true
    ProtectControlGroups=true
    ProtectKernelTunables=true
    ProtectSystem=full
    RestrictSUIDSGID=true
    PrivateTmp=yes
    
    [Install]
    WantedBy=default.target

    作成したらサービスを起動します。VM再起動後も自動で立ち上がるようにしておきます。

    $ sudo systemctl daemon-reload
    $ sudo systemctl enable --now RobocorpAgentCore.service

    起動状態を確認します。

    $ systemctl status RobocorpAgentCore.service
    ● RobocorpAgentCore.service - Robocorp Agent
         Loaded: loaded (/etc/systemd/system/RobocorpAgentCore.service; enabled; vendor preset: enabled)
         Active: active (running) since Wed 2023-11-15 12:34:28 UTC; 4s ago
       Main PID: 4475 (robocorp-agent-)
          Tasks: 10 (limit: 629145)
         Memory: 58.2M
            CPU: 1.073s
         CGroup: /system.slice/RobocorpAgentCore.service
                 └─4475 /home/robocorp/.robocorp/robocorp-workforce-agent-core start --service

    Control Roomの Workers ページでWorkerの State が Idle になっていれば登録完了です。

    RobotFrameworkシナリオの作成

    登録したWorkerで実行するRobotFrameworkのシナリオと、それをControl Roomから実行するために必要な robot.yaml 、 conda.yaml を作成します。

    今回は以下のRobotシナリオを作成します。内容としては、Junosが搭載されたNW機器にSSHログインし、 ge-0/0/0 に 192.0.2.1/24 という接続先が設定されていることを確認するRobotシナリオです。ファイル名は main.robot とします。

    *** Settings ***
    Library    SSHLibrary
    Library    RPA.Robocorp.WorkItems
    
    *** Test Cases ***
    Check IP Address for ge-0/0/0
        ${username} =  Get Work Item Variable    username
        ${password} =  Get Work Item Variable    password
        ${host} =  Get Work Item Variable    host
    
        Open Connection    ${host}
        Login  username=${username}    password=${password}
        ${show_interfaces} =  Execute Command   show interfaces ge-0/0/0 
        Close Connection
    
        Should Contain    ${show_interfaces}    192.0.2.1/24

     robot.yaml はControl Roomから実行するタスクを定義するために使用します。各項目の詳細な説明は公式ドキュメントに記載されています。

    今回は以下のような内容で作成します。
    ポイントとしては、Robotシナリオの実行時にlog.htmlの出力ディレクトリを output に指定し、 artifactsDir に output を指定することで、生成されたlog.htmlなどがControl Roomにアップロードされるようになります。

    tasks: 
       # タスクの定義(名前は任意)
       Check Interfaces:
          # 実行したいコマンド
          shell: python -m robot --report NONE --outputdir output main.robot
    
    # RobotFrameworkの環境を構築するためのconda設定ファイル
    condaConfigFile: conda.yaml
    
    # 生成物としてControl Roomにアップロードするディレクトリのパス
    artifactsDir: output

     conda.yaml にはWorkerがシナリオを実行する際に使用するPythonの仮想環境を定義します。

    channels:
      - conda-forge
    
    dependencies:
      - python=3.11.6
      - pip=23.3.1
      - pip:
        - rpaframework
        - robotframework-sshlibrary

    これでControl RoomからRobotFrameworkのシナリオを実行する準備が一通り整いました。ではこれをControl Roomから実行できるようにします。

    作成したシナリオ一式のアップロード

    Control Roomでは実行するRobotシナリオ一式をTask Packageという単位で管理しています。前段で作成したシナリオ一式もControl Roomに一つのTask Packageとして登録します。登録する方法は何通りか用意されていますが、今回は作成したファイルをまとめてzipファイルとしてアップロードする方法を取ります。

    まず、前段で作成したRobotシナリオファイル( main.robot )、 robot.yaml 、 conda.yaml をzipファイル( sample-robot.zip )にします。

    zipファイルが用意できたらControl Roomの Tasks ページから + Add Task Package をクリックします。

    以下の様な画面が表示されるので、今回は sample task という名前で登録してみます。作成したzipファイルを指定したら Add を押します。

    タスクパッケージ管理画面

    これで今回作成したRobotシナリオがControl Roomに sample task というTask Packageとして登録されました。

    Processの作成

    登録したTask Packageを実行するためにはProcessというものを作成します。これは一つ以上のStepから構成されており、Stepは任意のTask Package内の一つのtaskを紐づけて使用します。

    では実際に今回作成したRobotシナリオを実行するためのProcessを作成します。Control Roomの Unattended → Processes に移動し、右上にある + New Process のボタンをクリックします。

    以下のような画面が表示されるので、今回は「Sample Process」として新たなProcessを作成します。

    Process作成画面

    名前を入力したら Steps タブに移動し、各Stepを定義します。Stepでは、実行したいTaskとそれを実際に動かすWorkerを指定します。

    一つのStepには一つのTaskが紐づきます。このTaskとは robot.yaml で tasks 配下に定義した一つ一つの要素を指します。

    今回は robot.yaml に Check Interfaces というTaskとして定義していたのでそれを指定します。Workerには今回登録したWorkerを選択します。

    Process編集画面

    上記の情報を入力したら Save Changes をクリックします。これでProcessの作成は完了です。

    Processの実行

    では作成したProcessを実行します。 Unattended → Processes のページに移動し、先ほど作成したProcessをクリックして詳細画面に移動します。

    Processを実行するには右上の Run Process ボタンをクリックします。この時、 Run と Run with input data という2つの実行方法が選べます。前者はProcessをそのまま実行しますが、後者は実行時に任意のデータを与えることができます。

    今回作成したRobotシナリオはユーザ名( username )、パスワード( password )、接続先( host )を、Process実行時に与える想定で書いています。そのため、今回は Run with input data を選択します。

    以下のようにユーザ名、パスワード、接続先を入力して Run Process を押してシナリオを実行します。

    Process実行画面

    実行するとProcessページの下に実行状況が表示されます。実行中は「In Progress」と表示されます。

    実行中Process画面

    Processが完了すると「Completed」という表示になります。これをクリックするとより詳細なProcessの情報が確認できます。

    Process完了画面

    Processの詳細画面では、実行日時や経過時間、アップロードされた生成物が確認可能です。今回はRobotFrameworkのシナリオを実行しているため、log.htmlが出力されています。

    Process詳細画面

    まとめ

    この記事ではRobocorpが提供する自動化ソリューションのControl Roomを紹介しました。Control Roomを使用することで、自動化のワークフローと関連アセット、実行履歴の一元管理を実現できます。

    今回はRobotFrameworkのシナリオを用いて紹介しましたが、基本的にはWorkerとして登録したマシンでは任意のコマンドを実行することが可能なので、さまざまな用途に適用可能なソリューションとなっています。

    Control RoomにはFreeプランも提供されていますので、気になった方は試してみてはいかがでしょうか。

    なお、今回は基本的な使い方をご紹介しましたが、これ以外にも、定期実行機能や、機微な情報を保存するための機能(Vault)など、自動化ツールの実行管理を補助するための機能が備わっています。

    そのような情報も今後発信していけたらと思いますので、引き続きCITTECをよろしくお願いします。


    参考資料

    公式ドキュメント: https://robocorp.com/docs/control-room

    当サイトに掲載されている情報(記事、資料、動画、テンプレート等)については、その正確性および妥当性の確保に努めておりますが、ご利用に際しては、利用者ご自身の責任においてご判断ください。なお、個別の事情に応じては、専門家へのご相談を含め、適切な対応をご検討いただくことを推奨いたします。

    この記事をシェア

    執筆者情報

    武藤 匠汰

    2023年4月にCTCに中途入社。PythonおよびRobotFrameworkを使用したネットワーク機器の検証自動化を主に担当。インターネットが好き。

    Documents

    お役立ち資料

    View All