はじめに
UiPathを使っていて、以下のように考えることないでしょうか。
- UiPathを使っていて、実行環境をAWS Lambdaのように使いたいときだけ動かして、通常時は停止しているような仕組みはできないものか。
- 出先にスマホからプロセスを動かすに自宅PCをつけっぱなしにしておくのも嫌なのでAWSを使ってうまいことできないか。
ということで、EC2をUiPathプロセスを使う時だけ動かすということをやってみたいと思います。
構成
遠隔から操作したいので、iPhoneアプリから操作できるものだけを使用することにしました。
AWS Lambdaのように使いたかったのですが、今回の方法だとUiPathのプロセス実行までにiPhoneから操作が必要なため定期的に自動で実行することはできませんでした。
UiPathのプロセスを実行しEC2を停止するまでの手順は以下のようになっています。
- iPhoneから「AWSアプリ」を使用してEC2を起動する
- iPhoneから「RD Clientアプリ」を使用してEC2にサインインする
- UiPath Assistantが自動起動し、UiPath Automation Cloudでプロセスを実行できるようになる
- iPhoneから「UiPath Orchestratorアプリ」を使用し、プロセスを実行する
- プロセスの最後にPythonを実行する
- PythonプログラムでEC2を停止する
準備(前提)
今回紹介する方法では以下が前提となっています。ここらへんは特に解説するほどでもないと思うので説明からは省いています。
- EC2(Windows)インスタンスを構築済みである
- UiPath Automation Cloudに登録済みであり、UiPath StudioをEC2(Windows)にインストール済みである
- iPhoneにAWSアプリ、RD Clientアプリ、UiPath Orchestratorアプリをインストール済みである
- iPhoneからRD Clientアプリを使用してEC2(Windows)にリモートでアクセス確認済み
- EC2(Windows)にPython3をインストール済み
あと、EC2(Windows)の初期設定として、下記を実施しておくのがおすすめです。
- タイムゾーンを日本時間に変更する
- (IEを使うなら)IEの新規ドメインアクセスの警告を止めておく
ただし、いくつかは注意点もあります。
注意点
- iPhoneからは以前紹介したAWS SSM(セッションマネージャ)を使用したアクセスができない
- iPhoneのRD Clientアプリからアクセスする際、接続先のドメインやIPを指定するが、デフォルトではEC2のパブリックIPアドレスは起動するごとに変わってしまう
- EC2(Windows)ではデフォルトではExcelを使用できない
- AWSの料金が多少かかる
注意点への対策
2つ目の注意点
2つ目の注意点への対策は以下のいずれかになるかと思います。
- ElasticIPを設定し、パブリックIPを固定する
- EC2(Windows)の前にNLBを設置し、ドメイン名を固定する
ElasticIPは月およそ3USDほど、NLBは使っていなくても月およそ18USDほどかかる。そう考えると基本的にはElasticIPを使ったほうがコストを抑えられるということになるかと思います。
ただし、すでにNLBを稼働させており相乗りできるならNLBのほうがオススメということになります。
2021/2/26追記
Elastic IPのコストを節約したい方向けに、Elastic IPを使わずに名前解決で接続先を固定する方法を以下に記載しました。コスト削減につながるので是非実施してください。
3つ目の注意点
3つ目の注意点への対策は以下のいずれかになるかと思います。
- Windowsライセンスを持ち込みExcelをインストールする
- Excelを使用しない
新しくライセンスを調達するとお金もかかるので、Excelを使用しないことをオススメします。
じゃあUiPathでExcelに書き出していたしていた場合、どのファイルに書き出せばよいのかってことになるかと思いますが、オススメのファイルはjsonです。
jsonの書き出しについては以前の記事で紹介しているので参照ください。
4つ目の注意点
今回の構成でいくらくらいかかるのか考えてみます。
まずUiPathの費用についてですが、Community Editionを使用する前提で考えるので特にかかりません。
なので、AWSの費用がどれくらいかかるかということになるかと思います。
まず上記「1つ目の注意点」で書いたElasticIPの費用として1か月あたり3USDかかってきます。
次にEC2(Windows)の費用ですが、これは起動頻度に依るため、1月30回起動すると仮定して計算します。インスタンスサイズはt3.large、ストレージはデフォルトの30GBとします。一回の起動で3分使うとすれば、0.2USD程度です。
上記のElasticIPとEC2(Windows)の費用を合計すると1月あたり約3.2USD程度かかります。日本円にしても400円いかないくらいですね。大半がElasticIPの費用なのが悔しいところです。
構築
準備ができていれば構築手順はシンプルです。
- UiPath Assistantをサインインに合わせて自動起動するようにする
- UiPath Automation CloudのマシンにEC2(Windows)を設定する
- EC2インスタンスを停止するPythonコードを用意し、UiPathプロセスの最後で実行する
UiPath Assistantの自動起動
まずはUiPath Assistantのショートカットを見つけてコピーしておきます。以下のフォルダにあるはずです。
C:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Start Menu\Programs
ショートカットをコピーしたら、以下のいずれかのパスにショートカットを貼り付けておくだけです。
- サインインユーザを限定して自動起動する場合
C:\Users\%USERNAME%\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
- 全ユーザ共通で自動起動する場合
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
これでユーザがリモートサインインするとUiPath Assistantが自動起動するようになりました。
UiPath Automation Cloudの設定
UiPath Automation Cloudのロボットを設定する。
Tenant > Usersから登録したアカウントの情報を編集します。
アカウント情報の中に「Unattended Robot」の設定項目があるので、下記のように情報を入力します。
コンピュータ名については下記のように検索窓に「PC name」などと入れると調べることができる。
EC2インスタンスを停止するPythonコードの用意
ここではPythonコード実行用のIAMアカウント準備とコードの用意について触れていきます。
EC2停止用IAMユーザの準備
まずIAMポリシーから作成していきます。IAMダッシュボードのポリシータグから「ポリシー作成」をクリックします。
ポリシーにはそれぞれ以下を設定します。
- サービス: EC2
- アクション: StopInstances
- リソース: ARNの追加からInstanceIDを指定
あとはポリシー名を設定すればIAMポリシーの作成は完了です。
次にIAMユーザを作成していきます。IAMダッシュボードのユーザータグから「ポリシー作成」をクリックします。
ユーザー名を入力し、「プログラムによるアクセス」を選択します。
アクセス許可の設定では「既存のポリシーをアタッチ」から先ほど作成したIAMポリシーを選択します。
ユーザー作成の最後にアクセスキーとシークレットアクセスキーが表示される。のちほど使用するためメモしておく。
EC2を停止するPythonファイルを用意する。
EC2を停止するためのコードを用意します。boto3ライブラリを使用するので、コマンドプロンプトからインストールしておく。
> pip install boto3
インスタンス停止用のコードは以下となります。
import boto3
from boto3.session import Session
AWS_ACCESS_KEY = ""
AWS_SECRET_ACCESS_KEY = ""
INSTANCE_ID = ""
session = Session(aws_access_key_id=AWS_ACCESS_KEY,
aws_secret_access_key=AWS_SECRET_ACCESS_KEY,
region_name='ap-northeast-1')
ec2 = session.client('ec2')
response = ec2.stop_instances(
InstanceIds=[
INSTANCE_ID
]
)
下記の定義はそれぞれ値を入れたうえで使ってください。
- AWS_ACCESS_KEY: 上記で取得したアクセスキー
- AWS_SECRET_ACCESS_KEY: 上記で取得したシークレットアクセスキー
- INSTANCE_ID: 停止するEC2のインスタンスID
UiPathのプロセスの最後にインスタンス停止用のPythonを実行する
あとは上記のPythonコードをUiPathのプロセスの最後に実行すれば、UiPathプロセス実行後にインスタンスが停止するのでLambdaライクに使用できます。
UiPath Studioから下記のように「プロセスを開始」アクティビティでPythonを実行するように設定します。
iPhone操作
iPhoneでの操作を少し紹介します。以下のようにiPhoneアプリからそれぞれ操作できるのでUI的には快適かと思います。
おわりに
いかがでしょうか。出先からUiPathをさっと実行したい場合、現状はこんな感じでやっています。
もっと効率的なやり方があればアップデートしていきたいと思います。