AWSのEC2サーバをElastic IPなどを使わずに使用しているため起動のたびにIPを取得してリモートデスクトップ接続をしていた。
今回はそのIP取得とリモートデスクトップ接続をRPAで自動化してみた。
事前準備:EC2起動・停止 のフロー
前回作ったテスト用のフローをちょっと変更して、EC2インスタンスを起動するフローと、停止するフローを作成。
参考
EC2起動
起動後すぐにあがってこないため、10秒の待ち時間を調整用に追加。
(もっと適切な方法はありそう。)
EC2停止
EC2インスタンスIP取得のフロー
前提として、下記の条件あり。
- 前日のEC2のサーバが起動している状態で使用。
- AWSコンソールへのログイン情報はブラウザ側で記憶。
フローは下記のようにした。
新しいChromeを起動する
初期URLにAWSコンソールのURLを設定。
ウィンドウの状態は「最大化」に設定。これは一部Webリンクがうまいこと使えなかったため、固定のサイズにして「マウスクリックの送信」で指定座標でクリックさせるため。
マウスクリックの送信
AWSコンソールへのサインインがうまいこといかなかったので、サインインのボタンの座標を指定して、マウスを左クリックさせた。
Webページのリンクをクリックします
「EC2」→「インスタンス(実行中)」→「【インスタンス名】」とクリックされるように設定。
Web UI要素の取得がうまくいかなかったが、ブラウザの拡張機能を入れ直したらうまくいった。
(たまに失敗するので、「エラー発生時」で再試行する設定をONにした)
マウスクリックの送信
再びマウスクリックを利用してパブリックIPをコピーするアイコンに座標を指定し、クリック。
Webブラウザを閉じる
一応ブラウザは閉じておきます。
クリップボード テキストを取得
クリップボードに取ったパブリックIPを変数として格納。
テキストをファイルに書き込む
ここで、適当なテキストファイルにIP、ID、パスワードがカンマ区切りとなるように書き込む。
※パスワードを書き込む際のエスケープ文字は”%”
%ClipboardText%,Administrator,【パスワード】
これでいったんリモートデスクトップに必要な情報は取得。
Powershellでリモートデスクトップ実行
この部分もPower Automate Desktopでできそうだが、既存のPowershellがあったので流用。下記のPowershellで無事接続できるようになった。
$info = Import-Csv 【Power Automate Desktopで作成したファイル】 -Encoding Default -Header "IP","ID","PW"
$IP = ${info}.IP
$ID = ${info}.ID
$PW = ${info}.PW
cmdkey /generic:TERMSRV/${IP} /user:${ID} /pass:${PW}
mstsc /v:$IP
コメント