Quantcast
Channel: Bashタグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 2722

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

$
0
0
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参考

Viewing all articles
Browse latest Browse all 2722

Trending Articles