sorta kinda...

主にAWS関連ですが、これに限らずいろいろ勉強したことや思ったことを書いていきます。

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とかで処理しないといけないのだろうか。何かしらやり方はあるんやろな、きっと。