我正在尝试在包含更新的s3桶中随时部署我的lambda函数。
如果我知道我在存储桶中有最新的zip lambda代码,我可以简单地使用云形成来自动创建和部署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"
}
}
}
}
但问题是,只要我运行上面的lambda代码,那么每当用户将数据放入存储桶时,最新的代码就不会自动部署。我知道它与lambda有关但我迷路了,我不知道使用哪种方法以及从哪里开始。你能说清楚吗?
答案 0 :(得分:1)
或者使用无服务器等框架。它们使用简单的命令使部署更容易,并且易于与CI集成。 https://serverless.com
答案 1 :(得分:1)
这就是我解决这个问题的方法:
lambda-dep-test
存储区AWS::Lambda::Function
声明中,使用S3ObjectVersion
部分中的Code
属性指定应部署的版本。现在,您可以更新模板并在每次在存储桶中更新lambda代码时指定新的S3ObjectVersion
,或者您可以将其声明为模板中的参数并在S3ObjectVersion
中引用它。然后,可以通过打包和上载.zip文件来编写这两种解决方案。