serverless
Version:
Serverless Framework - Build web, mobile and IoT applications with serverless architectures using AWS Lambda, Azure Functions, Google CloudFunctions & more
48 lines (42 loc) • 1.41 kB
JavaScript
;
const AWS = require('aws-sdk');
const { getEventBusName } = require('./utils');
function getStatementId(functionName, ruleName) {
const normalizedRuleName = ruleName.toLowerCase().replace(/[.:*]/g, '');
const id = `${functionName}-${normalizedRuleName}`;
if (id.length < 100) {
return id;
}
return id.substring(0, 100);
}
function addPermission(config) {
const { functionName, partition, region, accountId, eventBus, ruleName } = config;
const lambda = new AWS.Lambda({ region });
let SourceArn = `arn:${partition}:events:${region}:${accountId}:rule/${ruleName}`;
if (eventBus) {
const eventBusName = getEventBusName(eventBus);
SourceArn = `arn:${partition}:events:${region}:${accountId}:rule/${eventBusName}/${ruleName}`;
}
const params = {
Action: 'lambda:InvokeFunction',
FunctionName: functionName,
Principal: 'events.amazonaws.com',
StatementId: getStatementId(functionName, ruleName),
SourceArn,
};
return lambda.addPermission(params).promise();
}
function removePermission(config) {
const { functionName, region, ruleName } = config;
const lambda = new AWS.Lambda({ region });
const params = {
FunctionName: functionName,
StatementId: getStatementId(functionName, ruleName),
};
return lambda.removePermission(params).promise();
}
module.exports = {
getStatementId,
addPermission,
removePermission,
};