如何使用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有关,但我迷路了,我不知道使用哪种方法以及从哪里开始。你能说清楚这一点吗?
或者使用框架如无服务器。他们使用简单的命令更容易部署,并且易于与您的CI集成。 https://serverless.com
感谢您对此框架的了解。但我想要的是自动部署,没有任何用户干预。框架是否这样做? –
无服务器将zip文件部署到配置的s3存储桶并触发lambda部署。在你的情况下,你仍然需要用户交互上传zip文件到s3。 –
我这是怎么解决这个问题:
- 在
lambda-dep-test
桶在CloudFormation模板启用版本 - 在你
AWS::Lambda::Function
声明中,使用S3ObjectVersion
属性在Code
部分指定哪些版本应该部署。
现在,您可以更新模板,并指定拉姆达代码在桶更新新S3ObjectVersion
每次或者你可以声明它作为模板参数,并在S3ObjectVersion
引用它。这两种解决方案都可以通过打包和上传.zip文件来编写脚本。
有没有简单的方法来实现这一点。在S3中创建一个事件。无论何时添加新文件,该事件都会触发不同的Lambda函数,它将更新原始函数(在这种情况下为:stg1-test) –