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 AWS Lambda如何从S3中选择脚本的最新版本_Amazon S3_Aws Lambda - Fatal编程技术网

Amazon s3 AWS Lambda如何从S3中选择脚本的最新版本

Amazon s3 AWS Lambda如何从S3中选择脚本的最新版本,amazon-s3,aws-lambda,Amazon S3,Aws Lambda,我有一个S3存储桶,我们使用它作为代码存储库来存储Lambda代码,然后由Lambda读取 S3 bucket是一个新版本,因此每次我们再次上传脚本(修改代码后),都会为现有文件创建一个新版本的zip文件 现在,我希望Lambda自动获取zip文件的最新版本,而不是每次在CloudFormation模板中手动更改它并运行它或手动将其附加到Lambda。如果您希望在Lambda函数的代码上载到S3 bucket时自动部署新版本的代码,然后,您可以使用通知SNS主题并订阅另一个执行部署的Lambda

我有一个S3存储桶,我们使用它作为代码存储库来存储Lambda代码,然后由Lambda读取

S3 bucket是一个新版本,因此每次我们再次上传脚本(修改代码后),都会为现有文件创建一个新版本的zip文件


现在,我希望Lambda自动获取zip文件的最新版本,而不是每次在CloudFormation模板中手动更改它并运行它或手动将其附加到Lambda。

如果您希望在Lambda函数的代码上载到S3 bucket时自动部署新版本的代码,然后,您可以使用通知SNS主题并订阅另一个执行部署的Lambda函数(例如,通过CloudFormation或AWS SDK deploy Lambda函数)。

我能够解决问题,因此只想发布解决方案供参考:

遵循以下步骤:

  • 确保Lambda函数的名称和zip文件(部署包)的名称完全相同

  • 创建一个Lambda,当您在S3存储桶中上载任何新代码时,该Lambda将被触发

  • 处理事件信息并使用S3API it从s3获取文件的最新版本

  • 使用boto3 API重新配置最终Lambda

    import boto3
    import json
    
    client = boto3.client("s3")
    lambda_client = boto3.client("lambda")
    
    def lambda_handler(event, context):
    
      bucket = event["Records"][0]["s3"]["bucket"]["name"]
      file = event["Records"][0]["s3"]["object"]["key"]
    
      get_version = client.get_object(
                 Bucket = bucket,
                 Key = file
                 )
    
      versionId = (get_version["VersionId"]) #Getting the latest version of the code 
    
      update_lambda = lambda_client.update_function_code(
                         FunctionName= file.split("/")[-1].split(".")[0],
                         S3Bucket=bucket,
                         S3Key=file,
                         S3ObjectVersion= versionId
                         )
    

  • 您可以让调用lambda函数的任何地方都使用
    $LATEST
    版本进行调用。@jellycsc听起来更像是希望lambda自动从S3获取最新的部署包,并在此基础上执行自动(重新)部署。啊,是的。嘿,Kai,谢谢你的建议,但我不想创建一个新的lambda,我只想将新的code.zip版本附加到现有的lambda上,因为有很多这样的版本,所以我担心上面的过程将无法与我的用例一起工作。@Naman你需要一些调用lambda API的过程/代码来实现这一点-即,将代码上载到你的Lambda函数。所以,你需要找个地方来计算。