こんにちは、ふじみや です。
前回、LINEからEC2インスタンスを開始させたり停止させたりする方法についてご紹介をしました。
とはいえ、これだけだとグローバルIPアドレスの固定化をしていない(Elastic IPを利用していない)場合、接続先サーバのIPアドレスが分からなくて結局AWSのコンソールにログインしてIPアドレスを確認する必要があり、結局手間はほとんど省けていないことになってしまいますよね。
なお、Elastic IPって何?どうやって設定するの?という方はこちらをご参照ください。
どうにか方法がないか調べたところ LINE Notify というサービスがあり、これを使えば起動したインスタンスからLINEにIPアドレスを通知するということが出来そうと分かりましたので、今回はこの方法についてご紹介をしたいと思います。
今回の記事は以下の記事を参考にさせていただいております。
今回の作業の流れ
大まかに今回の流れを説明します。
- LINE Notify で アクセストークン を発行
- インスタンスを開始し、LINEにIPアドレスを通知するシェルスクリプトを作成
- Sytemdにサービスを登録
なお、インスタンスのAMIは Amazon Linux 2 でも Ubuntu でも動作をすることを確認済です。
LINE Notifyでの連携
事前準備として、EC2インスタンスの開始・停止を行うBotを含めたグループを作成しておきましょう。
LINE Notify に接続後、右上の ログイン よりご自身のLINEアカウントにログインをしてください。ログイン後は右上に表示されるアカウント名をクリックし、マイページを表示させましょう。
次に、マイページの下部にある アクセストークン を発行してください。そうするとトークン名の記入と通知の送信先を選択するように指示されますので、今回はトークン名を「テスト」、送信先も「テスト」というグループにしました。この「テスト」グループには前回作成したBotと私の2名しか参加していないトークルームとなっています。
発行をクリックするとトークンが表示されますので、コピーしてメモ帳などにでも貼付をしておきましょう。トークンが分からなくなってしまった場合には再発行はできず、改めてトークン発行を頂く必要がありますのでご注意ください。
トークンを発行するとLINE Notifyから次の通知が届きますので、グループにLINE Notifyを追加しましょう。
シェルスクリプトの作成
次にインスタンスにSSHで接続して、ホームディレクトリでも新しいディレクトリを作成しても構いませんので、スクリプトを作成しましょう。今回はホームディレクトリ直下に line-notify.sh という名前で作成します。
vim line-notify.sh
line-notify.sh の内容は次の通りとしてください。
#!/bin/bash
LINE_ACCESS_TOKEN="先ほどコピーしたトークン"
MYIP=`curl -s ifconfig.me`
function line_notify() {
MESSAGE=$1
curl -X POST -H "Authorization: Bearer ${LINE_ACCESS_TOKEN}" -F "message=$MESSAGE" https://notify-api.line.me/api/notify
}
line_notify "IP Address: ${MYIP}"
編集を完了したら次に権限を設定しておきましょう。
sudo chmod 744 line-notify.sh
権限設定後はちゃんとIPアドレスが通知されるかテストです。
./line-notify.sh
成功すればコンソール画面に {“status”:200,”message”:”ok”} と表示され、LINEのテストグループにもIPアドレスが通知されます。
Systemdへのサービス登録
ここまで出来たら、最後にインスタンスが起動した際に自動的に line-notify.sh が実行されるようにします。
このあたりの方法については以下の記事と基本的には同じです。
まずはユニットファイルを作成します。
sudo vim /etc/systemd/system/line-notify.service
エディタが開いたらファイルの内容は次の通りにしてください。
[Unit]
#このUnitファイルの説明をDescriptionにて記載。
Description = notify global IP address to LINE
After = network-online.target
[Service]
#実行するユーザーを指定(Amazon Linux 2の利用を前提とした記載にしています)
User = ec2-user
#作業するディレクトリを指定
WorkingDirectory = /home/ec2-user/
#このサービスとして実行するコマンドの内容
ExecStart = /bin/bash /home/ec2-user/line-notify.sh
#サービス停止時の動作
Restart = on-failure
#起動に時間がかかることによる失敗を避けるため、タイムアウト値を設定
TimeoutStartSec = 180
[Install]
WantedBy = multi-user.target
ユニットファイルの作成後は line-notify.service の自動起動を有効にしておきましょう。
sudo systemctl enable line-notify.service
systemdの登録が上手くいっているか確認するためには次を入力してサービスの再起動をしてください。
sudo systemctl restart line-notify.service
LINEにIPアドレスが通知されれば成功です。
テスト
最後に、LINEからEC2インスタンスを開始させてIPアドレスが通知されるか確認してみましょう。
無事、これも成功しましたね。
まとめ
これでLINEを利用してインスタンスの開始からIPアドレスの取得まで出来るようになりました。
IPアドレスを固定化していない場合サーバのIPアドレスを毎回確認するのは本当に手間だったので、これで費用をかけることなく簡単にサーバのIPアドレスも分かってストレス激減です。
前回の記事とあわせて皆さんも是非試してみてくださいね!
それではまた。
コメント