osls
Version:
Open-source alternative to Serverless Framework
129 lines (117 loc) • 3.72 kB
JavaScript
'use strict';
const { addPermission, removePermission } = require('./lib/permissions');
const {
createEventBus,
deleteEventBus,
updateRuleConfiguration,
updateTargetConfiguration,
removeRuleConfiguration,
removeTargetConfiguration,
} = require('./lib/event-bridge');
const { getEnvironment, getLambdaArn, handlerWrapper } = require('../utils');
async function handler(event, context) {
if (event.RequestType === 'Create') {
return create(event, context);
} else if (event.RequestType === 'Update') {
return update(event, context);
} else if (event.RequestType === 'Delete') {
return remove(event, context);
}
throw new Error(`Unhandled RequestType ${event.RequestType}`);
}
async function create(event, context) {
const { FunctionName, EventBridgeConfig } = event.ResourceProperties;
const { Partition, Region, AccountId } = getEnvironment(context);
const lambdaArn = getLambdaArn(Partition, Region, AccountId, FunctionName);
return addPermission({
functionName: FunctionName,
partition: Partition,
region: Region,
accountId: AccountId,
eventBus: EventBridgeConfig.EventBus,
ruleName: EventBridgeConfig.RuleName,
})
.then(() =>
createEventBus({
region: Region,
eventBus: EventBridgeConfig.EventBus,
})
)
.then(() =>
updateRuleConfiguration({
region: Region,
ruleName: EventBridgeConfig.RuleName,
eventBus: EventBridgeConfig.EventBus,
pattern: EventBridgeConfig.Pattern,
schedule: EventBridgeConfig.Schedule,
state: EventBridgeConfig.State,
})
)
.then(() =>
updateTargetConfiguration({
lambdaArn,
region: Region,
ruleName: EventBridgeConfig.RuleName,
eventBus: EventBridgeConfig.EventBus,
input: EventBridgeConfig.Input,
inputPath: EventBridgeConfig.InputPath,
inputTransformer: EventBridgeConfig.InputTransformer,
})
);
}
async function update(event, context) {
const { Partition, Region, AccountId } = getEnvironment(context);
const { FunctionName, EventBridgeConfig } = event.ResourceProperties;
const lambdaArn = getLambdaArn(Partition, Region, AccountId, FunctionName);
return updateRuleConfiguration({
region: Region,
ruleName: EventBridgeConfig.RuleName,
eventBus: EventBridgeConfig.EventBus,
pattern: EventBridgeConfig.Pattern,
schedule: EventBridgeConfig.Schedule,
state: EventBridgeConfig.State,
}).then(() =>
updateTargetConfiguration({
lambdaArn,
region: Region,
functionName: FunctionName,
ruleName: EventBridgeConfig.RuleName,
eventBus: EventBridgeConfig.EventBus,
input: EventBridgeConfig.Input,
inputPath: EventBridgeConfig.InputPath,
inputTransformer: EventBridgeConfig.InputTransformer,
})
);
}
async function remove(event, context) {
const { Region } = getEnvironment(context);
const { FunctionName, EventBridgeConfig } = event.ResourceProperties;
return removePermission({
functionName: FunctionName,
region: Region,
ruleName: EventBridgeConfig.RuleName,
})
.then(() =>
removeTargetConfiguration({
ruleName: EventBridgeConfig.RuleName,
eventBus: EventBridgeConfig.EventBus,
region: Region,
})
)
.then(() =>
removeRuleConfiguration({
ruleName: EventBridgeConfig.RuleName,
eventBus: EventBridgeConfig.EventBus,
region: Region,
})
)
.then(() =>
deleteEventBus({
eventBus: EventBridgeConfig.EventBus,
region: Region,
})
);
}
module.exports = {
handler: handlerWrapper(handler, 'CustomResourceEventBridge'),
};