Skip to content

Instantly share code, notes, and snippets.

@ecyshor
Last active January 15, 2017 17:42
Show Gist options
  • Save ecyshor/9cc79cb3a0595cb97a220375de417abd to your computer and use it in GitHub Desktop.
Save ecyshor/9cc79cb3a0595cb97a220375de417abd to your computer and use it in GitHub Desktop.
Lambda used to deploy other lambdas
console.log('Preparing deployment function.')
var AWS = require('aws-sdk');
var lambda = new AWS.Lambda();
var lambdasToDeploy = JSON.parse(new Buffer(process.env.CONFIGURATION, 'base64').toString("ascii"));
exports.handler = function(event, context) {
console.log('Running deployment function for ' + JSON.stringify(lambdasToDeploy));
key = event.Records[0].s3.object.key
bucket = event.Records[0].s3.bucket.name
version = event.Records[0].s3.object.versionId
console.log("key" + key + "version" + version)
lambdasToDeploy.forEach(function(lambdaToDeploy){
if (key == lambdaToDeploy.key && version) {
console.log("Uploading to lambda function: " + lambdaToDeploy.name + " using key " + key + " for version " + version);
var params = {
FunctionName: lambdaToDeploy.name,
S3Key: key,
S3Bucket: bucket,
S3ObjectVersion: version
};
lambda.updateFunctionCode(params, function(err, data) {
if (err) {
console.log(err, err.stack);
context.fail(err);
} else {
console.log(data);
}
})
}});
}
AWSTemplateFormatVersion: "2010-09-09"
Transform: 'AWS::Serverless-2016-10-31'
Resources:
LambdaFunctionToDeploy:
Type: "AWS::Serverless::Function"
Properties:
Handler: index.wopwop
Runtime: nodejs4.3
CodeUri: 's3://lambdas/awsome-code.zip'
Policies:
- AWSLambdaBasicExecutionRole
- AWSLambdaExecutedateSNSTopic
#Configured function
LambdaDeploymentFunction:
Type: "AWS::Serverless::Function"
DependsOn: LambdaFunctionToDeploy
Properties:
Handler: index.handler
Runtime: nodejs4.3
CodeUri: '<code_uri>'
Timeout: 60
Policies:Policies:
- Version: '2012-10-17'
Statement:
- Effect: "Allow"
Action:
- "lambda:UpdateFunctionCode"
Resource: !GetAtt LambdaFunctionToDeploy.Arn
- Effect: "Allow"
Action:
- "logs:*"
Resource: "*"
- Effect: "Allow"
Action:
- "s3:GetObject"
Resource: "arn:aws:s3:::<code_bucket>/*"
Environment:
Variables:
CONFIGURATION:
"Fn::Base64":
!Sub |
[{"key":"awsome-code.zip","name":"${LambdaToDeploy}"}]
Events:
CodeUpdated:
Type: S3
Properties:
Bucket: lambdas
Events: s3:ObjectCreated:*
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment