酒杯on_s3_event触发器似乎不起作用

问题描述 投票:0回答:1

我有一个Chalice应用程序,该应用程序从S3存储桶中的文件中读取配置数据。该文件可能会不时更改,我希望应用程序立即使用更新后的值,因此我正在使用on_s3_event装饰器重新加载配置文件。

我的代码看起来像这样(为清晰起见,向下剥离):

CONFIG = {}
app = Chalice(app_name='foo')

@app.on_s3_event(bucket=S3_BUCKET, events=['s3:ObjectCreated:*'],
    prefix='foo/')
def event_handler(event):
    _load_config()

def _load_config():

    # fetch json file from S3 bucket

    CONFIG['foo'] = some item from the json file...
    CONFIG['bar'] = some other item from the json file...

_load_config()

@app.route('/')
def home():
    # refer to CONFIG values here

我的问题是,在上载新版本的配置文件后的一小段时间(可能是5-10分钟),应用仍然使用旧的配置值。

我做错了吗?我应该完全不依赖Lambda函数中的全局状态吗?

amazon-s3 aws-lambda chalice
1个回答
0
投票

所以您的设计有缺陷。

当您在圣杯中创建S3事件时,它将为该事件创建一个单独的Lambda函数。 CONFIG变量将在该Lambda函数的运行实例和Lambda函数的所有新实例中得到更新。但是,Chalice应用程序中任何其他正在运行的Lambda都将继续使用其当前设置,直到将其清除并重新启动。

如果无法使用只能在部署Lambda函数时更改的配置,则可以在内存缓存/数据库中使用redis或其他配置。

© www.soinside.com 2019 - 2024. All rights reserved.