PowerShell+Cloud Automator+VS CodeでWindows起動時にEC2インスタンスにSSH接続

記事タイトルとURLをコピーする

コントソハ

サーバーワークスではBYOD制度があり、社員のほとんどが自身のPCを持ち込んで仕事をしています。社内システム・顧客とのやり取りはすべてSaaS製品を利用し、それぞれのSaaSやAWSアカウントにはOneLoginからサインインします。すべて「クラウド」で完結するためローカルPCはほとんどTEMP領域のようなものです。

ここまで充実したBYOD制度がある会社もめずらしいのではないでしょうか?知りませんが。

ただし、BYOD制度があるからと言って、会社貸与のPCがないわけではありません。

所詮は「物理」なのでBYODしているデバイスも突然壊れたりどこかへ忘れたりします。

もしくはワタシのようにあえて貸与PCを使うエンジニアもいます。

ナゼBYODせずに貸与PCを使うかというと。。。

  • PCにこだわりがない
  • そもそもプライベートでノートPCを使わない

まあこんなところです。

『ローカルPCはほとんどTEMP領域のようなもの』と前述しましたが、実際はGitでうんぬんかんぬんしようとするとローカルにファイルがある状態となります。

そこで、ワタシはコードを書いたりとかGitでの管理とかはEC2インスタンスを利用しています。

本題

さて、普段業務を始めるときは以下の流れです

  1. PC(Windows)起動
  2. EC2(AmazonLinux2)起動
  3. Visual Studio CodeでSSH接続

んーーー、なんか自動化できそうですね。というわけでWindows起動時に自動でVS Code起動・接続するようにします。

構成

こんなんです。自動で接続できてEC2インスタンスもうれしそうです。

VS Codeの設定

VS CodeにはRemote - SSHという機能があり、VS CodeからSSH接続しファイルの編集が可能です。

設定は以下を参考にしてください。

VS Codeを閉じるときに最後に開いてるウィンドウがRemote - SSHなら次にVS Codeを開いたときに自動でRemote - SSHされるようですのでそのようにします。。。

EC2起動設定

弊社製品のCloud Automatorを利用します。AWS CLIでもいいんですが、IAMユーザーのクレデンシャルはローカルに持たせたくないですよねー。

今回はHTTPトリガーEC2インスタンス起動ジョブを作成し、curlでSSH接続するインスタンスを起動できるよう設定しました。

ジョブを作成すると以下のようにURLとアクセストークンが払い出されます。

PowerShellスクリプトの準備

PowerShellスクリプトを準備します。以下のように記載しました。


#EC2インスタンス起動。ジョブで払い出されるcurlではなくInvoke-WebRequestで書き換えます。
Invoke-WebRequest -Method Post  -Headers @{"Authorization"= "CAAuth XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"; "Content-Length"= "0"} https://manager.cloudautomator.com/trigger/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
#立ち上がるまで待機。念のため90秒。ほんとはpingとかなにか別の方法でチェックするのがいい。
Start-Sleep -s 90
#VC Codeを起動。パスはそれぞれの環境に書き換えてください。
& "C:\path\to\Microsoft VS Code\Code.exe"

Cloud AutomatorのHTTPトリガーのレスポンスではインスタンスが起動中でジョブがスキップされたかわからないので、いきなりインスタンス起動からは始めるのはアレだと思いますが、個人の環境なのでよしとします。。。ホントは実行前に起動中か確認して条件分岐とかがよいと思います。。。

スタートアップスクリプトへ設定

上記のスクリプトを保存しスタートアップスクリプトへ設定します。タイトルでは『Windows起動時』と言ってますが正しくは『Windowsログオン時』ですん。

「グループポリシーの編集」を開きます。

「コンピューターの構成」>「管理用テンプレート」>「システム」>「グループポリシー」から「ログオンスクリプト遅延を構成する」をダブルクリック。

「無効」を選択し「適用」します。

「ユーザーの構成」>「Windowsの設定」>「スクリプト(ログオン/ログオフ)」から「ログオン」をダブルクリック。

「PowerShellスクリプト」タブの「追加」から作成したPowerShellスクリプトを指定し「適用」します。

Windowsを起動&ログインしてみると

できました。画像とかははないです。

実際にやってみるとWindowsログオン→OneLoginにログイン→Slack・その他通知の確認とかしていると、90秒の待ち時間は作業開始するまでにちょうどよい時間でした。

まとめ

いかがでしたでしょうか。これでWindowsログオン時にEC2起動/接続が自動でできて快適です。また、ローカルにIAMユーザーのクレデンシャルを保存しなくていいのはCloud Automatorのメリットではあります。気になった方は試してみてはどうでしょうか。