【開発準備を0秒に!】タイマーで起動したEC2にノータッチでSSH接続

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

自動化大好きな皆さま、こんにちは。

朝PCを立ち上げて、コーヒーを淹れて自席に戻ればすぐに開発が始められる・・
そんな朝、よくないですか?

ここでは峯の記事でご紹介した「開発用EC2への自動SSH」をMacユーザーが実現する方法をご紹介します。
(動作環境:mac OS mojave 10.14.6)

既存記事と異なる部分は
・手元がWindowsではなくMac
・トリガーがPC起動ではなく時刻
という2点です。

1. 全体図


以下が独立して自動でおこなわれます。
・平日の9:40になったらCloud AutomatorによりEC2が起動
・平日の9:50になったらlaunchdによりVisual Studio Codeが起動
[補足]
Visual Studio CodeでEC2にSSHしたままアプリを閉じると、次回アプリ起動時は勝手にセッションが張られます。

2-1. 設定 〜launchdの定義ファイルを書く〜

launchd??

OS Xを立ち上げると最初に起動するプロセスだそうです。
XMLで定義ファイル(.plistファイル)を作成しておくと、cronのようにコマンドを定期実行させたりできます。
Mac OS Xではcronの利用は非推奨らしいので、おとなしくlaunchdを使います。

vscode.plistを書いてみる

実際のXMLがこちらです。




    Label
    vscode
    ProgramArguments
    
        /bin/bash
        /usr/local/bin/code
    
    StartCalendarInterval
    
        
            Weekday
            1
            Hour
            9
            Minute
            50
        
        
            Weekday
            2
            Hour
            9
            Minute
            50
        
        
            Weekday
            3
            Hour
            9
            Minute
            50
        
        
            Weekday
            4
            Hour
            9
            Minute
            50
        
        
            Weekday
            5
            Hour
            9
            Minute
            50
        
    
    StandardOutPath
    /Users/iso/output.out
    StandardErrorPath
    /Users/iso/output.err


ちょっと解説

各キーについて上から順に説明します。

キー名 必須かどうか 説明
Label
必須
識別名。ユニークである必要があります。
ProgramArguments
必須
コマンドやオプション。dictで複数指定可能です。
実行ファイルへの絶対パスやオプションを入力します。
StartCalendarInterval
任意
ジョブスケジューリング。構文はcronと同様です。
今回は毎週月〜金曜日の09:50に実行するように指定しています。
StandardOutPath
任意
標準出力のパス。
StandardErrorPath
任意
標準エラー出力のパス。

.plistを保存する

.plistファイルの置き場は、管理者・実行単位によって変わります。
今回はユーザがエージェントを管理し、実行もシステム全体ではなくユーザごとでよいので「~/Library/LaunchAgents」に保存しました。

2-2. 設定 〜launchd以外〜

Cloud Automatorの設定

タイマートリガーEC2起動ジョブを作成します。

Visual Studio Codeの設定

こちらをご参考にどうぞ。

まとめ

これで快適にSSH接続先EC2で作業が始められるようになりました!
日々のお仕事にお役立ていただければ幸いです。