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

时间:2017-10-17 19:30:38

标签: amazon-web-services amazon-s3 aws-lambda amazon-cloudformation aws-opsworks

我正在尝试在包含更新的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有关但我迷路了,我不知道使用哪种方法以及从哪里开始。你能说清楚吗?

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

这就是我解决这个问题的方法:

  • lambda-dep-test存储区
  • 中启用版本控制
  • CloudFormation 模板的AWS::Lambda::Function声明中,使用S3ObjectVersion部分中的Code属性指定应部署的版本。

现在,您可以更新模板并在每次在存储桶中更新lambda代码时指定新的S3ObjectVersion,或者您可以将其声明为模板中的参数并在S3ObjectVersion中引用它。然后,可以通过打包和上载.zip文件来编写这两种解决方案。