本番環境とテスト環境を別リージョンに作っているのですが、AWS外にアクセスする時など、ちょいちょい環境によって異なる動作をさせたいケースが出てきます。
基本的にAPI Gatewayを使っているので
x-amazon-apigateway-integration:
type: HTTP
uri: https://example.com
httpMethod: GET
requestParameters:
integration.request.header.hoge: "'some value'"
みたいな感じで、yamlをリージョンごとに分けることで対応しているのですが、似たようなyamlがリポジトリに二重管理されててどうもスマートではなく。。
AWS Lambdaに環境変数持たせられたらハッピーなのに、と考えていたら、勉強会で非推奨の裏技を教わりました。
print(context.function_name)
ファンクション名にパラメータ書いて渡す、、だと、、、?
教わった時は「descriptionにJSON書けるよ!」って聞いて、それなら許容範囲かなーと調べたんだけどdescriptionの取得方法が見つからなかった。
ファンクション名に独自パーサでパラメータ書くとか死亡フラグすぎるので素直にAWS Lambdaのバージョンアップ待とう、、
ちゃんとgetFunctionConfigurationでありました!
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/API_GetFunctionConfiguration.html
http://boto3.readthedocs.org/en/latest/reference/services/lambda.html#Lambda.Client.get_function_configuration
contextオブジェクトが持ってるものと勘違いしてました。これで幅が広がるなぁ^^
import boto3
def lambda_handler(event, context):
client = boto3.client('lambda')
response = client.get_function_configuration(
FunctionName=context.function_name
)
print(response['Description'])