Python 2.7 在用python编码的aws lambda函数上使用不同的设置
我使用一个用python编码的lambda函数作为aws api网关方法的后端。Python 2.7 在用python编码的aws lambda函数上使用不同的设置,python-2.7,aws-api-gateway,Python 2.7,Aws Api Gateway,我使用一个用python编码的lambda函数作为aws api网关方法的后端。 api已经完成,但现在我有一个新问题,api应该部署到多个环境(生产、测试等),每个环境都应该为后端使用不同的配置。假设我有一个处理程序: import settings import boto3 def dummy_handler(event, context): logger.info('got event{}'.format(event)) utils = Utils(event["stag
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
现在,为了在每个阶段上使用不同的表名
,我用一个模块替换setting.py文件,其结构如下:
settings/
__init__.py
_base.py
_servers.py
development.py
production.py
testing.py
以下是答案。但考虑到stage(作为参数传递给Utils类)将匹配模块设置中的设置文件名,我不知道如何在解决方案中使用它,我应该在类Utils中更改什么以使其工作?处理此用例的另一种替代方法是使用API网关的阶段变量,并将阶段不同的设置作为参数传递给Lambda函数 阶段变量是与特定API部署阶段关联的名称-值对,其行为类似于API设置和映射模板中使用的环境变量。例如,您可以通过在阶段变量中设置不同的端点值,将每个阶段中的API方法配置为连接到不同的后端端点 下面是一个关于使用阶段变量的示例
下面是关于使用阶段变量的说明。我最后在这里使用了不同的方法。我没有使用python模块进行设置,而是使用单个脚本进行设置,并使用包含每个环境配置的字典。我想为每个环境使用单独的设置脚本,但到目前为止我找不到如何使用 因此,现在我的设置文件如下所示:
COUNTRY_CODE = 'CL'
TIMEZONE = "America/Santiago"
LOCALE = "es_CL"
DEFAULT_PAGE_SIZE = 20
ENV = {
'production': {
'TABLE_NAME': "dynamodbTable",
'BUCKET_NAME': "sssBucketName"
},
'testing': {
'TABLE_NAME': "dynamodbTableTest",
'BUCKET_NAME': "sssBucketNameTest"
},
'test-invoke-stage': {
'TABLE_NAME': "dynamodbTableTest",
'BUCKET_NAME': "sssBucketNameTest"
}
}
我的代码是:
def put_ticket_on_dynamodb(self, item):
# Write record to dynamoDB
try:
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table(settings.ENV[self.stage]["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
我不明白你的问题。链接的答案建议设置
settings/\uuuuu init\uuuuu.py
包含一些逻辑,以确定它部署在哪种类型的服务器上,然后导入相应子模块的内容。如果这样做,则在查找设置的代码中无需执行任何操作。@Blckknght,在我的情况下,我没有确定阶段类型的逻辑,我只有param阶段,我将其传递给类Utils的init方法。谢谢Mike,但是这里的问题更多的是关于python的,以及如何使用阶段信息导入不同的设置文件,使用相同的lambda函数。我已经在传递舞台信息了。