LoginSignup
4
2

More than 5 years have passed since last update.

boto3 で ec2 の自分に割り当てられたタグを読み込む

Last updated at Posted at 2016-02-25

ec2 に用意されてるタグ機能。環境変数っぽく使うと地味に便利。
特定のタグを見て、アプリケーション側で読み込む設定ファイルを実行時に変える。とかとか。
ec2 には自分のメタデータを取得する API が用意されてるので、これと boto3 を使ってごにょごにょやってみる。

まずは下準備として、 access_key_id, secret_access_key をアプリケーション側から見えるようにしておく。
ソースコードにベタ書きでも良いけど、セキュアじゃないので shell に export するなりしておく。

$ export AWS_KEY='some-key'
$ export AWS_SECRET='some-secret'
$ export AWS_REGION='ap-northeast-1'

これを python から取得出来るか試してみる。

console
>>> import os
>>> os.environ.get('AWS_KEY')
'some-key'
>>> os.environ.get('AWS_SECRET')
'some-secret'
>>> os.environ.get('AWS_REGION')
'ap-northeast-1'

取得出来る事が確認出来たら、実際に自分に割り当てられたタグを取得してみる。

console
>>> import os
>>> import urllib2
>>> from boto3.session import Session
>>> 
# メタデータ API から自分の instance-id を取ってくる。
>>> instance_id = urllib2.urlopen('http://169.254.169.254/latest/meta-data/instance-id').read()
>>> 
# aws api の Session 作る。
>>> aws = Session(aws_access_key_id=os.environ.get('AWS_KEY'),
...               aws_secret_access_key=os.environ.get('AWS_SECRET'),
...               region_name=os.environ.get('AWS_REGION'))
>>> 
# ec2 オブジェクト作る。
>>> ec2 = aws.resource('ec2')
# instance-id を指定して instance オブジェクト作る。いわばコレが自分自身。
>>> instance = ec2.Instance(id=instance_id)
>>> 
# タグをまるっと取ってくる。多少使いにくい形なので整形もしてる。
>>> tags = dict([(tag['Key'], tag['Value']) for tag in instance.tags])
# ココにだーっとリストされる。はず。
>>> tags
{'Name': 'API_PROD', ...}

個人的には Env なタグを必ず付けるようにしていて、それを見て読み込む設定ファイルを決めるようにしてる。
これをしとくと、同じ ami でも db まわりの設定や s3 のバケットなんかを実行時に変えれて便利便利 :-)

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2