🟫
EC2インスタンスを起動してグローバルIPをSlackに通知する
EC2インスタンスを起動させてアタッチされたグローバルIPをSlackに通知するシェルスクリプトのメモ
書かないこと
- EC2インスタンスの作成方法
- Slackアプリの作成方法
- EC2インスタンスの運用のベストプラクティス
- EC2インスタンス起動してアタッチされたグローバルIPをSlackに通知するスクリプトの紹介しか書きません
- 踏み台サーバ等のリモートアクセスのみが必要なケースでは、Session Managerを使用する方が良いようです
前提
- 既にEC2インスタンスは作成済み
- 停止しているEC2インスタンスを起動するスクリプトになります
- 環境によってEC2インスタンスを分けている
- 例えば開発環境とステージング環境等の環境毎にEC2インスタンスを用意していることを想定しています
- Elastic IPは設定していない
シェルスクリプト
環境変数の用意
STAGING_INSTANCE_ID=ステージング環境のインスタンスID
DEVELOPMENT_INSTANCE_ID=開発環境のインスタンスID
SLACK_BOT_TOKEN={Slackアプリのトークン}
.envはgitignoreしておきましょう
実行スクリプト
#!/bin/bash
echo 'Input environment[staging/development]'
read ENV
# ユーザからの入力値に応じて.envからインスタンスIDを取得
if [ $ENV = 'staging' ]; then
ENV_JP='STAGING'
INSTANCE_ID=`cat script/.env | grep STAGING_INSTANCE_ID | cut -d '=' -f 2`
elif [ $ENV = 'development' ]; then
ENV_JP='DEVELOPMENT'
INSTANCE_ID=`cat script/.env | grep DEVELOPMENT_INSTANCE_ID | cut -d '=' -f 2`
else
echo 'Input staging or development'
exit 1
fi
if [ ! -e script/.env ] || [ -z $INSTANCE_ID ]; then
echo 'script/.env is not found or INSTANCE_ID is not found'
exit 1
fi
echo "Start EC2 instance"
EC2_IP=`aws ec2 start-instances --instance-ids $INSTANCE_ID > /dev/null 2>&1 && aws ec2 wait instance-running --instance-ids $INSTANCE_ID && aws ec2 describe-instances --instance-ids $INSTANCE_ID | jq ".Reservations[0].Instances[0].PublicIpAddress"| sed -e 's/"//g'`
echo "EC2_IP: $EC2_IP"
SLACK_BOT_TOKEN=`cat script/.env | grep SLACK_BOT_TOKEN | cut -d '=' -f 2`
# EC2_IPが取得できた場合はslackに通知する
if [ -z $SLACK_BOT_TOKEN ]; then
exit 0
fi
echo "Slack通知"
curl -X POST 'https://slack.com/api/chat.postMessage' \
-d "token=$SLACK_BOT_TOKEN" \
-d "channel={SLACKチャンネル名}" \
-d "text= *$ENV* 環境の踏み台サーバが起動しました。IPアドレス: *$EC2_IP*" > /dev/null 2>&1
最後に
EC2インスタンスにはElastic IP
(固定グローバルIP)を紐付けられます。
起動していないEC2インスタンスに紐付けられているEIPの料金は$0.005
/時間、1$ = 130円として468円/月になります。
少額なので今回紹介したスクリプトを用意する必要はないかもしれません...
ご参考までに。
Discussion