【发布时间】:2016-06-02 15:09:43
【问题描述】:
我正在使用一个用 python 编码的 lambda 函数作为 aws-api-gateway 方法的后端。
api已经完成,但是现在我有一个新的问题,api应该部署到多个环境(生产、测试等),并且每个都应该为后端使用不同的配置。假设我有这个处理程序:
import settings
import boto3
def dummy_handler(event, context):
logger.info('got event{}'.format(event))
utils = Utils(event["stage"])
response = utils.put_ticket_on_dynamodb(event["item"])
return json.dumps(response)
class Utils:
def __init__(self, stage):
self.stage = stage
def put_ticket_on_dynamodb(self, item):
# Write record to dynamoDB
try:
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table(settings.TABLE_NAME)
table.put_item(Item=item)
except Exception as e:
logger.error("Fail to put item on DynamoDB: {0}".format(str(e)))
raise
logger.info("Item successfully written to DynamoDB")
return item
现在,为了在每个阶段使用不同的TABLE_NAME,我将setting.py文件替换为一个模块,结构如下:
settings/
__init__.py
_base.py
_servers.py
development.py
production.py
testing.py
按照这个答案here。
但我不知道如何在我的解决方案中使用它,考虑到该阶段(作为参数传递给 Utils 类)将匹配模块设置中的设置文件名,我应该在我的类 Utils 中更改什么让它工作?
【问题讨论】:
-
我不明白你的问题。链接的答案建议让
settings/__init__.py包含一些逻辑来确定它部署在哪种服务器上,然后导入相应子模块的内容。如果您这样做,则在查找设置的代码中无需执行任何操作。 -
@Blckknght,就我而言,我没有逻辑来确定阶段的种类,我只有参数阶段,并将其传递给 init 方法Utils 类的。
标签: python-2.7 aws-api-gateway