UNPKG

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
'use strict'; 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, };