AWS EC2の起動とpublicDNSを自動取得するスクリプト
AWS EC2の起動とpublicDNSを自動取得するスクリプト:
個人でAWSのEC2を利用する時は、お金の節約のために使わない時は都度インスタンスを停止するかと思います。EC2にWebサーバを立てて接続する時にはPublic DNSにアクセスするかと思いますが、再起動をする度に変わるので変更をするのは面倒くさいですよね。
Elastic IPアドレスをつければ良いと思いきや、インスタンスに紐づいてなければ地味に課金されていきます。意外と高くつきます。
スクリプトの概要は下記の流れです。
前提: EC2のインスタンスIDは元々知っている事
事前に
環境変数を読み込む
下記の
実行結果の例
環境変数
単純に処理だけのメモにしたかったのでエラーハンドリングは何もしてないので、適宜改良してください。
ついでに私はsshをするのに楽したいので下記設定をしています
もっとスマートな方法があれば知りたい。
個人でAWSのEC2を利用する時は、お金の節約のために使わない時は都度インスタンスを停止するかと思います。EC2にWebサーバを立てて接続する時にはPublic DNSにアクセスするかと思いますが、再起動をする度に変わるので変更をするのは面倒くさいですよね。
Elastic IPアドレスをつければ良いと思いきや、インスタンスに紐づいてなければ地味に課金されていきます。意外と高くつきます。
Elastic IP アドレスを効率的に使用するため、Elastic IP アドレスが実行中のインスタンスに関連付けられていない場合や、停止しているインスタンスやアタッチされていないネットワークインターフェイスに関連付けられている場合は、時間毎に小額の料金が請求されます。という事で、AWS CLIを利用してインスタンス起動時にpublic IPを取得するスクリプトを利用するようにしました。
処理の流れ
スクリプトの概要は下記の流れです。前提: EC2のインスタンスIDは元々知っている事
- EC2インスタンスを起動する
- runnning状態になるまで待つ
- インスタンスのPublic DNSを取得する
- 環境変数を更新する
- ステータスチェックを終わるまで待つ
利用手順
事前にinstance_id
を環境変数にsetするための .env
ファイルを作成する.env
export instance_id=<instance_id> export public_ip=<ひとまず空欄で良い>
source .env
下記の
ec2-start.sh
スクリプトを作成して実行する。ec2-start.sh
echo "---instance start---" aws ec2 start-instances --instance-ids $instance_id aws ec2 wait instance-running --instance-ids $instance_id echo "---instance running---" # public DNSの取得 export public_ip=$(aws ec2 describe-instances --instance-ids $instance_id --query "Reservations[].Instances[].PublicDnsName| [0]"|sed "s/\"//g") echo "public_ip="$public_ip # public_ipの更新 sed -i -e "/public_ip/d" .env #過去のpublic_ipを削除している echo "export public_ip="$public_ip >> .env #public_ipを更新している # インスタンスのstatusがokになるのを待つ aws ec2 wait instance-status-ok --instance-ids $instance_id echo "---instance status ok---"
mayu$ ./script/ec2-start.sh ---instance start--- { "StartingInstances": [ { "CurrentState": { "Code": 0, "Name": "pending" }, "InstanceId": "i-013cfe9040886878c", "PreviousState": { "Code": 80, "Name": "stopped" } } ] } ---instance running--- public_ip=ec2-13-114-36-228.ap-northeast-1.compute.amazonaws.com ---instance status ok---
.env
export instance_id="i-013cfe9040886878c" export public_ip=ec2-13-114-36-228.ap-northeast-1.compute.amazonaws.com
public_ip
にインスタンスのpublic DNSが取れるようになりました。単純に処理だけのメモにしたかったのでエラーハンドリングは何もしてないので、適宜改良してください。
ついでに私はsshをするのに楽したいので下記設定をしています
~/.ssh/config
#EC2 instance Host <ホスト名> User ec2-user HostName $public_ip IdentityFile <秘密鍵>
コメント
コメントを投稿