boto3 で ec2 の自分に割り当てられたタグを読み込む
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 から取得出来るか試してみる。
>>> import os
>>> os.environ.get('AWS_KEY')
'some-key'
>>> os.environ.get('AWS_SECRET')
'some-secret'
>>> os.environ.get('AWS_REGION')
'ap-northeast-1'
取得出来る事が確認出来たら、実際に自分に割り当てられたタグを取得してみる。
>>> 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 のバケットなんかを実行時に変えれて便利便利 :-)
Author And Source
この問題について(boto3 で ec2 の自分に割り当てられたタグを読み込む), 我々は、より多くの情報をここで見つけました https://qiita.com/soundkitchen/items/31e2e27a0e5c253df511著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .