EC2のインスタンスを操作するとき、(会社ではCLIのバッチファイルを手元に持ってるのですが)私物の環境ではいつもコンソールにログインして起動/停止していたので、
これもバッチ化することにしました。
AWS CLIではなく、 Pythonライブラリの boto3で作ってみます。
職場の環境と異なり、自分の学習環境のEC2はIPアドレスを固定していません。(お金かかるから。)
なので、毎回コンソールから起動して、IPアドレスを確認し、そのIPアドレスに接続する、という作業を行っていました。
これを短縮するため、起動したらIPアドレスを取得して表示できるようにします。
ドキュメントはこの辺りが参考になります。
ec2.html#instance
以下のように、ec2インスタンスのオブジェクトを用意します。
import boto3
ec2 = boto3.resource('ec2')
instance = ec2.Instance('{インスタンスID}')
そして、start
で起動してwait_until_running()
で起動完了を待ち、
public_ip_address
を取得すれば良いです。
完成したバッチファイルの中身は次のようになります。
これを.pyファイルとして保存して、実行できるように権限を744にします。
#!/usr/bin/env python
import boto3
instance_id = "{インスタンスID}"
ec2 = boto3.resource('ec2')
instance = ec2.Instance(instance_id)
print("インスタンス起動開始")
instance.start()
instance.wait_until_running()
print("インスタンス起動完了")
ip = instance.public_ip_address
print(f"IPアドレス: {ip}")
実行するときちんと、
インスタンス起動開始
インスタンス起動完了
IPアドレス: xx.xxx.xxx.xxx
が表示されました。
ついでですが、停止バッチは次のようになります。
#!/usr/bin/env python
import boto3
instance_id = "{インスタンスID}"
ec2 = boto3.resource('ec2')
instance = ec2.Instance(instance_id)
print("インスタンス停止開始")
instance.stop()
instance.wait_until_stopped()
print("インスタンス停止完了")