Python-boto3でAWSのEC2インスタンスを立ち上げ、そのPublicIPを取得する
boto3とawscliを入れておく
$pip install boto3 $pip install awscli
AWSのCredentialsなどをセットする
$ aws configure AWS Access Key ID [None]: アクセスキー AWS Secret Access Key [None]: アクセスキーシークレット Default region name [None]: regionコード Default output format [None]: json
homeの.awsに設定情報が格納される。boto3ではこれを読んで認証するので、毎回Credentialsをセットする必要はない。
~/.aws/config ~/.aws/credentials
ここからが本題です。
実際にboto3を使ってEC2インスタンスを立ち上げ、立ち上げたインスタンスのPublicIPを取得してみる。
import boto3 ec2 = boto3.resource('ec2') # Terminateしたときにボリュームも一緒に消したい場合、その設定などをかく blockDeviceMappings = [{ "DeviceName": "/dev/sda1", "Ebs": { "DeleteOnTermination": True, "VolumeType": "gp2" }, }] # インスタンス生成 ret = ec2.create_instances( ImageId="イメージID", MinCount=1, MaxCount=1, InstanceType="インスタンスの種類(t2.microなど)", KeyName="キーペアの名前", SecurityGroupIds=["セキュリティグループID"], BlockDeviceMappings=blockDeviceMappings ) # 生成したインスタンスIDを取得 createdInstanceId = ret[0].instance_id createdInstance = ec2.Instance(createdInstanceId) pprint(createdInstance.public_ip_address) # None....
インスタンス生成後すぐにはPublicIPなどは取得できないので、running状態になるまで待つ。
# インスタンス生成 ret = ec2.create_instances( ImageId="イメージID", MinCount=1, MaxCount=1, InstanceType="インスタンスの種類(t2.microなど)", KeyName="キーペアの名前", SecurityGroupIds=["セキュリティグループID"], BlockDeviceMappings=blockDeviceMappings ) # 生成したインスタンスIDを取得 createdInstanceId = ret[0].instance_id # PublicIPを取得するため、EC2インスタンスがrunning状態になるまで待つ ret[0].wait_until_running() # waitingをかけた後に再度インスタンスを取得 createdInstance = ec2.Instance(createdInstanceId) # ここでPublicIPがとれる。 pprint(createdInstance.public_ip_address)
wait_until_runningでrunningになるまで待つことで、PublicIPが取得できました。
boto3を使ったEC2用のプロトタイプみたいなものを作ったので、よかったら参考にどうぞ。
github.com