mirror of
https://github.com/serverless/serverless.git
synced 2025-12-08 19:46:03 +00:00
129 lines
3.6 KiB
JavaScript
129 lines
3.6 KiB
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'),
|
|
}
|