amazon-s3 - 圣杯 on_s3_event 触发器似乎不起作用
问题描述
我有一个 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 函数中的全局状态吗?
解决方案
所以你这里的设计是有缺陷的。
当您在 chalice 中创建 S3 事件时,它将为该事件创建一个单独的 Lambda 函数。CONFIG 变量将在该 Lambda 函数的运行实例和 Lambda 函数的所有新实例中得到更新。但是,您的 Chalice 应用程序中已经运行的任何其他 Lambda 将继续使用其当前设置,直到它们被清理并重新启动。
如果您无法忍受仅在部署 Lambda 函数时才可更改的配置,您可以使用 redis 或内存缓存/数据库中的其他一些。
推荐阅读
- grails - Grails:无法删除或更新父行:外键约束失败
- java - 将方法转换为通用方法以避免重复代码
- python - psycopg2 连接错误:不能将超过 100 个参数传递给函数?
- google-apps-script - ImportHTML 不会更新数据
- php - 如何在随机选择中停止mysqli重复
- python - 如何在另一个字典中提取 Python 字典并返回他的一些键
- javascript - response.getselectedbutton() 不是函数?
- mongodb - Mongodb 多字段相等性检查
- electron - Electron - 防止窗口从渲染过程中关闭
- angular - 如何从 ngx-extended-pdf-viewer 的 node_modules 中省略子文件夹