LoginSignup
0
0

More than 1 year has passed since last update.

aws EC2開始時の設定の簡略化(cli)

Last updated at Posted at 2021-05-15

aws EC2をEIPつけないで毎日再起動する状況で活躍するshellくんです。
(EIPはお金かかるんで、ケチりたいんです。)

挙動

ec2の起動と、ssh/configのIPアドレスの書き換えを行います。
ec2の停止を行います。

(当環境はmacですが、linuxでも動作可かと思います。windowsはパスさえ正しく設定すればいけるのでは無いでしょうか。また、zshrcではコメントアウト処理に特別の設定が必要なので、.shファイルのコメントアウトは取り除いてください。)


EC2はEIPをつけないと一日起きにIPアドレスが変わってしまいます。
すると、sshやwebサーバを立てている場合は毎日指定するIPアドレスが変わってしまいます。(ドメインも無い場合)

当環境ではvscodeによるremotesshも行いたいので、~/.ssh/configにて設定をしています。

ここら辺の設定を毎回手動で行うのは面倒くさいので、簡略化させました。以下ソースです。
(事前にaws configureの設定は行ってください。)

インスタンス設定.sh

ec2.sh
#!/bin/bash
KEY_NAME="your_key" #  ec2にsshを行う際のkey名を元に開始、停止するインスタンスを指定します。
SSH_AWS_NAME="your_aws" # .ssh/configにおけるHOSTNAMEを記載してください。

EC2_PRIVATE_ADDR=$( \
        aws ec2 describe-instances --filters Name=key-name,Values=${KEY_NAME} \
          --query 'Reservations[].Instances[].PrivateIpAddress' \
          --output text \
)
EC2_INSTANCE_ID=$( \
        aws ec2 describe-instances \
          --filters Name=private-ip-address,Values=${EC2_PRIVATE_ADDR} \
          --query 'Reservations[].Instances[].InstanceId' \
          --output text \
)

EC2_STATE=$( \
        aws ec2 describe-instances --filters Name=key-name,Values=${KEY_NAME} \
          --query 'Reservations[].Instances[].State.Name' \
          --output text \
)

if [ ${EC2_STATE} = "stopped" ]; then
  echo "plz wait, starting ec2"
  aws ec2 start-instances --instance-ids ${EC2_INSTANCE_ID} 1>/dev/null && aws ec2 wait instance-running --instance-ids ${EC2_INSTANCE_ID}

  SSH_IP_BEFORE=$(cat ~/.ssh/config | awk '/'${SSH_AWS_NAME}'/ { getline; print $2}')
  EC2_PUBLIC_ADDR=$(aws ec2 describe-instances --filters Name=key-name,Values=${KEY_NAME} \
          --query 'Reservations[].Instances[].PublicIpAddress' \
          --output text \
  )

  sed -i -e "s/${SSH_IP_BEFORE}/${EC2_PUBLIC_ADDR}/g" ~/.ssh/config

  echo "http://${EC2_PUBLIC_ADDR}/" #URL指定になっているものはcommnad+クリックでブラウザに飛べます。
  echo "ssh aws" #.ssh/configに記載しているためpemファイルを指定しなくてもログインできます。

  echo "running ec2"
elif [ ${EC2_STATE} = "running" ]; then
  echo "plz wait, stopping ec2"
  aws ec2 stop-instances --instance-ids ${EC2_INSTANCE_ID} 1>/dev/null && aws ec2 wait instance-stopped --instance-ids ${EC2_INSTANCE_ID}
  echo "stopped ec2"
fi

実行結果

[bash] % bash ec2.sh
plz wait, stopping ec2
stoped ec2
[bash] % bash ec2.sh
plz wait, starting ec2
http://XX.XXX.XXX.XXX/
ssh aws
running ec2

参考

ssh.config参考

vscode remote-ssh参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0