boto3のresourceを使って情報を取ってみた
以前に、boto3を使ってAWSから情報を取ってくる記事を書きました。 nasrinjp1.hatenablog.com
この時はclientを使いましたが、せっかくboto3を使うのでresourceでも試してみました。
まずは接続から。
import boto3 access_key = '****' secret_key = '****' region = 'ap-northeast-1' session = boto3.session.Session(region_name=region, aws_access_key_id=access_key, aws_secret_access_key=secret_key) ec2 = session.resource('ec2')
普段は、スクリプト言語のドキュメントなんて読まないので、ここからは結構苦労しました。まず最初につまづいたのがこれ。
>>> ec2.instances.all()
ec2.instancesCollection(ec2.ServiceResource(), ec2.Instance)
あれ?all()ってやるとlistで返すってドキュメントに書いてるやん…なにこれ。
>>> ec2.instances.all()[0].instance_id Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: 'ec2.instancesCollection' object does not support indexing
いや、indexingをサポートしないって言われても…どうしたらいいものか。
といろいろ悩んで調べてみたら、このページを見つけました。 qiita.com
もしかして、forで回したら取れる??
>>> for i in ec2.instances.all(): ... print(i) ... ec2.Instance(id='i-********')
取れた!!
>>> for i in ec2.instances.all(): ... print(i.instance_id) ... print(i.tags) ... i-******** [{'Key': 'Name', 'Value': 'test'}]
というわけで、ちゃんと目的のものは取れていました。よかったよかった。
でも、とりあえずベタのテキストで、リスト表記でもいいのでインスタンスIDを一覧表示させたい場合も、いちいちforとかで処理しないといけないのだろうか。何かしらやり方はあるんやろな、きっと。