tl;dr
Lambda ファンクションから IAM role の AWS クレデンシャル情報を取得したい
どうするのか
参考
qiita.com
ありがとうございます!!mm
環境変数から取得する
以下のようなサンプルファンクション。
import os def lambda_handler(event, context): print "----------------------------------------" print os.environ.get('AWS_ACCESS_KEY_ID') print os.environ.get('AWS_SECRET_ACCESS_KEY') print os.environ.get('AWS_SESSION_TOKEN') print "----------------------------------------"
IAM role には他の Lambda ファンクション作成時に自動的に作成された IAM role の lambda_basic_execution を付与。
実行してみると…
START RequestId: aae46b65-97e5-11e6-8038-c5c1480ca076 Version: $LATEST ---------------------------------------- Axxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx ---------------------------------------- END RequestId: aae46b65-97e5-11e6-8038-c5c1480ca076 REPORT RequestId: aae46b65-97e5-11e6-8038-c5c1480ca076 Duration: 0.22 ms Billed Duration: 100 ms Memory Size: 128 MB Max Memory Used: 7 MB
いい感じ。
Amazon Elasticsearch に接続する例
AWS4Auth との合わせ技。
- IAM role
サービスロールには AWS Lambda を選択し、以下のようなポリシーをインラインポリシーにて付与。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "es:*" ], "Resource": "*" } ] }
- ファンクション
from elasticsearch import Elasticsearch, RequestsHttpConnection from requests_aws4auth import AWS4Auth import requests import json, os def lambda_handler(event, context): awsauth = AWS4Auth( os.environ.get('AWS_ACCESS_KEY_ID'), os.environ.get('AWS_SECRET_ACCESS_KEY'), 'ap-northeast-1', 'es', session_token=os.environ.get('AWS_SESSION_TOKEN') ) es = Elasticsearch( hosts=[{'host': 'search-oreno-es-xxxxxxxxxxxxxxx.ap-northeast-1.es.amazonaws.com', 'port': 443}], http_auth=awsauth, use_ssl=True, verify_certs=True, connection_class=RequestsHttpConnection ) return json.dumps(es.info())
実行してみると以下のような感じ。
"{\"cluster_name\": \"xxxxxxxxxxxxxx:oreno-es\", \"tagline\": \"You Know, for Search\", \"version\": {\"lucene_version\": \"5.5.0\", \"build_hash\": \"0944b4bae2d0f7a126e92b6133caf1651ae316cc\", \"number\": \"2.3.2\", \"build_timestamp\": \"2016-05-20T07:46:04Z\", \"build_snapshot\": false}, \"name\": \"Wraith\"}"
おけ。
以上
メモでした。
元記事はこちら
「ラムダこりゃ外伝 – Lambda ファンクションから IAM role の AWS クレデンシャル情報を取得する for Python」