Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 事件触发器上的圣杯似乎不起作用_Amazon S3_Aws Lambda_Chalice - Fatal编程技术网

Amazon 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函

我有一个Chalice应用程序,可以从S3存储桶中的文件读取配置数据。该文件可以随时更改,我希望应用程序立即使用更新的值,因此我使用
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
}