Amazon s3 事件触发器上的圣杯似乎不起作用
我有一个Chalice应用程序,可以从S3存储桶中的文件读取配置数据。该文件可以随时更改,我希望应用程序立即使用更新的值,因此我使用Amazon s3 事件触发器上的圣杯似乎不起作用,amazon-s3,aws-lambda,chalice,Amazon S3,Aws Lambda,Chalice,我有一个Chalice应用程序,可以从S3存储桶中的文件读取配置数据。该文件可以随时更改,我希望应用程序立即使用更新的值,因此我使用on\u s3\u事件decorator重新加载配置文件 我的代码如下所示(为了清晰起见,将代码精简): 我的问题是,在上传新版本的配置文件后的一小段时间(可能5-10分钟),应用程序仍然使用旧的配置值 我做错了吗?我是否应该完全不依赖Lambda函数中的全局状态?因此,您的设计存在缺陷 当您在chalice中创建S3事件时,它将为该事件创建一个单独的Lambda函
on\u s3\u事件
decorator重新加载配置文件
我的代码如下所示(为了清晰起见,将代码精简):
我的问题是,在上传新版本的配置文件后的一小段时间(可能5-10分钟),应用程序仍然使用旧的配置值
我做错了吗?我是否应该完全不依赖Lambda函数中的全局状态?因此,您的设计存在缺陷 当您在chalice中创建S3事件时,它将为该事件创建一个单独的Lambda函数。CONFIG变量将在Lambda函数的运行实例和Lambda函数的所有新实例中得到更新。但是,您的Chalice应用程序中已经运行的任何其他Lambda将继续使用其当前设置,直到它们被清理并重新启动
如果您无法使用仅在部署Lambda函数时才可更改的配置,则可以使用redis或其他内存缓存/db 您应该使用.config/config.json文件为您的chalice应用程序存储变量。这些变量存储在操作系统库中,可以调用:
URL = os.environ['MYVAR']
您的config.json文件可能如下所示:
{
"version": "2.0",
"app_name": "MyApp",
"manage_iam_role": false,
"iam_role_arn": "arn:aws:iam::************:role/Chalice",
"lambda_timeout": 300,
"stages": {
"development": {
"environment_variables": {
"MYVAR": "foo"
}
},
"production": {
"environment_variables": {
"MYVAR": "bar"
}
}
},
"lambda_memory_size": 2048
}
chalice软件包还是部署?@Lamanus我使用了
chalice部署
。你打开通知了吗?我的理解是,当Chalice在s3事件中看到装饰器时,它会为您这样做。我在事件处理函数中还有一条日志消息(我没有显示),该消息确实出现在我的日志中。
{
"version": "2.0",
"app_name": "MyApp",
"manage_iam_role": false,
"iam_role_arn": "arn:aws:iam::************:role/Chalice",
"lambda_timeout": 300,
"stages": {
"development": {
"environment_variables": {
"MYVAR": "foo"
}
},
"production": {
"environment_variables": {
"MYVAR": "bar"
}
}
},
"lambda_memory_size": 2048
}