如何使用lamda将s3中的最新代码部署到lamda函数

如何使用lamda将s3中的最新代码部署到lamda函数

问题描述:

我试图随时部署我的lambda函数,而我的s3存储区包含它的更新。如何使用lamda将s3中的最新代码部署到lamda函数

如果我知道我有一个桶中,我可以简单地使用云的形成自动lambda函数的创建和部署

{ 
"AWSTemplateFormatVersion": "2010-09-09", 
"Description": "AWS CloudFormation CloudWatch Log Janitor Demo Stack", 
"Resources": { 
    "TestLamdaRole": { 
     "Type": "AWS::IAM::Role", 
     "Properties": { 
      "AssumeRolePolicyDocument": { 
       "Version": "2012-10-17", 
       "Statement": [{ 
        "Effect": "Allow", 
        "Principal": { 
         "Service": [ 
          "lambda.amazonaws.com" 
         ] 
        }, 
        "Action": [ 
         "sts:AssumeRole" 
        ] 
       }] 
      }, 
      "Path": "/" 
     } 
    }, 
    "EbsBackupExecutionPolicy": { 
     "DependsOn": [ 
      "TestLamdaRole" 
     ], 
     "Type": "AWS::IAM::Policy", 
     "Properties": { 
      "PolicyName": "hamedlamdapolicytest", 
      "Roles": [{ 
       "Ref": "TestLamdaRole" 
      }], 
      "PolicyDocument": { 
       "Version": "2012-10-17", 
       "Statement": [{ 
         "Effect": "Allow", 
         "Action": [ 
          "logs:*" 
         ], 
         "Resource": [ 
          "arn:aws:lambda:us-east-1:1111111111111:function:*" 
         ] 
        }, 
        { 
         "Effect": "Allow", 
         "Action": [ 
          "ec2:Describe*" 
         ], 
         "Resource": [ 
          "*" 
         ] 
        } 
       ] 
      } 
     } 
    }, 
    "LambdaFuction": { 
     "Type": "AWS::Lambda::Function", 
     "Properties": { 
      "Code": { 
       "S3Bucket": "lambda-dep-test", 
       "S3Key": "index.zip" 
      }, 
      "Role": { 
       "Fn::GetAtt": [ 
        "TestLamdaRole", 
        "Arn" 
       ] 
      }, 
      "Timeout": 60, 
      "Handler": "lambda_function.handler", 
      "Runtime": "nodejs6.10", 
      "MemorySize": 128, 
      "FunctionName": "stg1-test" 
     } 
    } 
} 

}

了最新的zip拉姆达代码,但问题是,只要我运行上面的lambda代码,然后每当用户把某物放入桶中时,最新的代码不会自动部署。我知道这与lambda有关,但我迷路了,我不知道使用哪种方法以及从哪里开始。你能说清楚这一点吗?

+1

有没有简单的方法来实现这一点。在S3中创建一个事件。无论何时添加新文件,该事件都会触发不同的Lambda函数,它将更新原始函数(在这种情况下为:stg1-test) –

或者使用框架如无服务器。他们使用简单的命令更容易部署,并且易于与您的CI集成。 https://serverless.com

+0

感谢您对此框架的了解。但我想要的是自动部署,没有任何用户干预。框架是否这样做? –

+0

无服务器将zip文件部署到配置的s3存储桶并触发lambda部署。在你的情况下,你仍然需要用户交互上传zip文件到s3。 –

我这是怎么解决这个问题:

  • lambda-dep-test桶在CloudFormation模板启用版本
  • 在你AWS::Lambda::Function声明中,使用S3ObjectVersion属性在Code部分指定哪些版本应该部署。

现在,您可以更新模板,并指定拉姆达代码在桶更新新S3ObjectVersion每次或者你可以声明它作为模板参数,并在S3ObjectVersion引用它。这两种解决方案都可以通过打包和上传.zip文件来编写脚本。