UNPKG

@riddance/deploy

Version:

47 lines 9.38 kB
import { jsonResponse } from '@riddance/fetch'; import { awsRequest } from '../lite.js'; export async function syncEventBridge(context, region, account, prefix, service, reflection) { await Promise.all(reflection.timers.map(async (fn) => { const fullName = `${prefix}-${service}-${fn.name}`; await createRule(context, region, account, prefix, fn.name, service, fullName, fn.schedule); await createTarget(context, region, account, fn.name, fullName); })); } async function createRule(context, _region, _account, prefix, name, service, fullName, schedule) { context.log.trace(`creating event bridge rule ${name} for ${schedule}`); const r = await jsonResponse(awsRequest(context, 'POST', 'events', '', { Name: fullName, ScheduleExpression: scheduleExpression(schedule), Tags: [ { Key: 'framework', Value: 'riddance' }, { Key: 'environment', Value: prefix }, { Key: 'service', Value: service }, ], }, 'AWSEvents.PutRule', 'application/x-amz-json-1.1'), 'Error creating event bridge schedule.'); if (!r.RuleArn) { throw new Error('Unexpected schedule rule response'); } } async function createTarget(context, region, account, name, fullName) { context.log.trace(`creating event bridge target ${name}`); const r = await jsonResponse(awsRequest(context, 'POST', 'events', '', { Rule: fullName, Targets: [ { Id: fullName, Arn: `arn:aws:lambda:${region}:${account}:function:${fullName}`, }, ], }, 'AWSEvents.PutTargets', 'application/x-amz-json-1.1'), 'Error creating event bridge schedule.'); if (r.FailedEntryCount !== 0) { throw new Error('Unexpected schedule rule response'); } } function scheduleExpression(schedule) { const [min, h, dom, m, dow] = schedule.split(' '); if (!min || !h || !dom || !m || !dow) { throw new Error('Invalid cron expression: ' + schedule); } return `cron(${min} ${h} ${dom} ${m} ${dow.replace('*', '?')} *)`; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZlbnQtYnJpZGdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiZXZlbnQtYnJpZGdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQTtBQUU5QyxPQUFPLEVBQUUsVUFBVSxFQUFnQixNQUFNLFlBQVksQ0FBQTtBQUVyRCxNQUFNLENBQUMsS0FBSyxVQUFVLGVBQWUsQ0FDakMsT0FBZ0IsRUFDaEIsTUFBYyxFQUNkLE9BQWUsRUFDZixNQUFjLEVBQ2QsT0FBZSxFQUNmLFVBQXNCO0lBRXRCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDYixVQUFVLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUMsRUFBRSxFQUFDLEVBQUU7UUFDN0IsTUFBTSxRQUFRLEdBQUcsR0FBRyxNQUFNLElBQUksT0FBTyxJQUFJLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtRQUNsRCxNQUFNLFVBQVUsQ0FDWixPQUFPLEVBQ1AsTUFBTSxFQUNOLE9BQU8sRUFDUCxNQUFNLEVBQ04sRUFBRSxDQUFDLElBQUksRUFDUCxPQUFPLEVBQ1AsUUFBUSxFQUNSLEVBQUUsQ0FBQyxRQUFRLENBQ2QsQ0FBQTtRQUNELE1BQU0sWUFBWSxDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLEVBQUUsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUE7SUFDbkUsQ0FBQyxDQUFDLENBQ0wsQ0FBQTtBQUNMLENBQUM7QUFFRCxLQUFLLFVBQVUsVUFBVSxDQUNyQixPQUFnQixFQUNoQixPQUEyQixFQUMzQixRQUE0QixFQUM1QixNQUFjLEVBQ2QsSUFBWSxFQUNaLE9BQWUsRUFDZixRQUFnQixFQUNoQixRQUFnQjtJQUVoQixPQUFPLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyw4QkFBOEIsSUFBSSxRQUFRLFFBQVEsRUFBRSxDQUFDLENBQUE7SUFDdkUsTUFBTSxDQUFDLEdBQUcsTUFBTSxZQUFZLENBQ3hCLFVBQVUsQ0FDTixPQUFPLEVBQ1AsTUFBTSxFQUNOLFFBQVEsRUFDUixFQUFFLEVBQ0Y7UUFDSSxJQUFJLEVBQUUsUUFBUTtRQUNkLGtCQUFrQixFQUFFLGtCQUFrQixDQUFDLFFBQVEsQ0FBQztRQUNoRCxJQUFJLEVBQUU7WUFDRixFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsS0FBSyxFQUFFLFVBQVUsRUFBRTtZQUN2QyxFQUFFLEdBQUcsRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRTtZQUNyQyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRTtTQUNyQztLQUNKLEVBQ0QsbUJBQW1CLEVBQ25CLDRCQUE0QixDQUMvQixFQUNELHVDQUF1QyxDQUMxQyxDQUFBO0lBQ0QsSUFBSSxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQTtJQUN4RCxDQUFDO0FBQ0wsQ0FBQztBQUVELEtBQUssVUFBVSxZQUFZLENBQ3ZCLE9BQWdCLEVBQ2hCLE1BQWMsRUFDZCxPQUFlLEVBQ2YsSUFBWSxFQUNaLFFBQWdCO0lBRWhCLE9BQU8sQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLGdDQUFnQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ3pELE1BQU0sQ0FBQyxHQUFHLE1BQU0sWUFBWSxDQUN4QixVQUFVLENBQ04sT0FBTyxFQUNQLE1BQU0sRUFDTixRQUFRLEVBQ1IsRUFBRSxFQUNGO1FBQ0ksSUFBSSxFQUFFLFFBQVE7UUFDZCxPQUFPLEVBQUU7WUFDTDtnQkFDSSxFQUFFLEVBQUUsUUFBUTtnQkFDWixHQUFHLEVBQUUsa0JBQWtCLE1BQU0sSUFBSSxPQUFPLGFBQWEsUUFBUSxFQUFFO2FBQ2xFO1NBQ0o7S0FDSixFQUNELHNCQUFzQixFQUN0Qiw0QkFBNEIsQ0FDL0IsRUFDRCx1Q0FBdUMsQ0FDMUMsQ0FBQTtJQUNELElBQUksQ0FBQyxDQUFDLGdCQUFnQixLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzNCLE1BQU0sSUFBSSxLQUFLLENBQUMsbUNBQW1DLENBQUMsQ0FBQTtJQUN4RCxDQUFDO0FBQ0wsQ0FBQztBQUVELFNBQVMsa0JBQWtCLENBQUMsUUFBZ0I7SUFDeEMsTUFBTSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2pELElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUNuQyxNQUFNLElBQUksS0FBSyxDQUFDLDJCQUEyQixHQUFHLFFBQVEsQ0FBQyxDQUFBO0lBQzNELENBQUM7SUFDRCxPQUFPLFFBQVEsR0FBRyxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxLQUFLLENBQUE7QUFDckUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGpzb25SZXNwb25zZSB9IGZyb20gJ0ByaWRkYW5jZS9mZXRjaCdcbmltcG9ydCB0eXBlIHsgUmVmbGVjdGlvbiB9IGZyb20gJ0ByaWRkYW5jZS9ob3N0L3JlZmxlY3QnXG5pbXBvcnQgeyBhd3NSZXF1ZXN0LCB0eXBlIENvbnRleHQgfSBmcm9tICcuLi9saXRlLmpzJ1xuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc3luY0V2ZW50QnJpZGdlKFxuICAgIGNvbnRleHQ6IENvbnRleHQsXG4gICAgcmVnaW9uOiBzdHJpbmcsXG4gICAgYWNjb3VudDogc3RyaW5nLFxuICAgIHByZWZpeDogc3RyaW5nLFxuICAgIHNlcnZpY2U6IHN0cmluZyxcbiAgICByZWZsZWN0aW9uOiBSZWZsZWN0aW9uLFxuKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICAgIHJlZmxlY3Rpb24udGltZXJzLm1hcChhc3luYyBmbiA9PiB7XG4gICAgICAgICAgICBjb25zdCBmdWxsTmFtZSA9IGAke3ByZWZpeH0tJHtzZXJ2aWNlfS0ke2ZuLm5hbWV9YFxuICAgICAgICAgICAgYXdhaXQgY3JlYXRlUnVsZShcbiAgICAgICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgICAgIHJlZ2lvbixcbiAgICAgICAgICAgICAgICBhY2NvdW50LFxuICAgICAgICAgICAgICAgIHByZWZpeCxcbiAgICAgICAgICAgICAgICBmbi5uYW1lLFxuICAgICAgICAgICAgICAgIHNlcnZpY2UsXG4gICAgICAgICAgICAgICAgZnVsbE5hbWUsXG4gICAgICAgICAgICAgICAgZm4uc2NoZWR1bGUsXG4gICAgICAgICAgICApXG4gICAgICAgICAgICBhd2FpdCBjcmVhdGVUYXJnZXQoY29udGV4dCwgcmVnaW9uLCBhY2NvdW50LCBmbi5uYW1lLCBmdWxsTmFtZSlcbiAgICAgICAgfSksXG4gICAgKVxufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVSdWxlKFxuICAgIGNvbnRleHQ6IENvbnRleHQsXG4gICAgX3JlZ2lvbjogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIF9hY2NvdW50OiBzdHJpbmcgfCB1bmRlZmluZWQsXG4gICAgcHJlZml4OiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIHNlcnZpY2U6IHN0cmluZyxcbiAgICBmdWxsTmFtZTogc3RyaW5nLFxuICAgIHNjaGVkdWxlOiBzdHJpbmcsXG4pIHtcbiAgICBjb250ZXh0LmxvZy50cmFjZShgY3JlYXRpbmcgZXZlbnQgYnJpZGdlIHJ1bGUgJHtuYW1lfSBmb3IgJHtzY2hlZHVsZX1gKVxuICAgIGNvbnN0IHIgPSBhd2FpdCBqc29uUmVzcG9uc2U8eyBSdWxlQXJuOiBzdHJpbmcgfT4oXG4gICAgICAgIGF3c1JlcXVlc3QoXG4gICAgICAgICAgICBjb250ZXh0LFxuICAgICAgICAgICAgJ1BPU1QnLFxuICAgICAgICAgICAgJ2V2ZW50cycsXG4gICAgICAgICAgICAnJyxcbiAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICBOYW1lOiBmdWxsTmFtZSxcbiAgICAgICAgICAgICAgICBTY2hlZHVsZUV4cHJlc3Npb246IHNjaGVkdWxlRXhwcmVzc2lvbihzY2hlZHVsZSksXG4gICAgICAgICAgICAgICAgVGFnczogW1xuICAgICAgICAgICAgICAgICAgICB7IEtleTogJ2ZyYW1ld29yaycsIFZhbHVlOiAncmlkZGFuY2UnIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgS2V5OiAnZW52aXJvbm1lbnQnLCBWYWx1ZTogcHJlZml4IH0sXG4gICAgICAgICAgICAgICAgICAgIHsgS2V5OiAnc2VydmljZScsIFZhbHVlOiBzZXJ2aWNlIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnQVdTRXZlbnRzLlB1dFJ1bGUnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtYW16LWpzb24tMS4xJyxcbiAgICAgICAgKSxcbiAgICAgICAgJ0Vycm9yIGNyZWF0aW5nIGV2ZW50IGJyaWRnZSBzY2hlZHVsZS4nLFxuICAgIClcbiAgICBpZiAoIXIuUnVsZUFybikge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgc2NoZWR1bGUgcnVsZSByZXNwb25zZScpXG4gICAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBjcmVhdGVUYXJnZXQoXG4gICAgY29udGV4dDogQ29udGV4dCxcbiAgICByZWdpb246IHN0cmluZyxcbiAgICBhY2NvdW50OiBzdHJpbmcsXG4gICAgbmFtZTogc3RyaW5nLFxuICAgIGZ1bGxOYW1lOiBzdHJpbmcsXG4pIHtcbiAgICBjb250ZXh0LmxvZy50cmFjZShgY3JlYXRpbmcgZXZlbnQgYnJpZGdlIHRhcmdldCAke25hbWV9YClcbiAgICBjb25zdCByID0gYXdhaXQganNvblJlc3BvbnNlPHsgRmFpbGVkRW50cnlDb3VudDogbnVtYmVyIH0+KFxuICAgICAgICBhd3NSZXF1ZXN0KFxuICAgICAgICAgICAgY29udGV4dCxcbiAgICAgICAgICAgICdQT1NUJyxcbiAgICAgICAgICAgICdldmVudHMnLFxuICAgICAgICAgICAgJycsXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgUnVsZTogZnVsbE5hbWUsXG4gICAgICAgICAgICAgICAgVGFyZ2V0czogW1xuICAgICAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgICAgICBJZDogZnVsbE5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBBcm46IGBhcm46YXdzOmxhbWJkYToke3JlZ2lvbn06JHthY2NvdW50fTpmdW5jdGlvbjoke2Z1bGxOYW1lfWAsXG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAnQVdTRXZlbnRzLlB1dFRhcmdldHMnLFxuICAgICAgICAgICAgJ2FwcGxpY2F0aW9uL3gtYW16LWpzb24tMS4xJyxcbiAgICAgICAgKSxcbiAgICAgICAgJ0Vycm9yIGNyZWF0aW5nIGV2ZW50IGJyaWRnZSBzY2hlZHVsZS4nLFxuICAgIClcbiAgICBpZiAoci5GYWlsZWRFbnRyeUNvdW50ICE9PSAwKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBzY2hlZHVsZSBydWxlIHJlc3BvbnNlJylcbiAgICB9XG59XG5cbmZ1bmN0aW9uIHNjaGVkdWxlRXhwcmVzc2lvbihzY2hlZHVsZTogc3RyaW5nKSB7XG4gICAgY29uc3QgW21pbiwgaCwgZG9tLCBtLCBkb3ddID0gc2NoZWR1bGUuc3BsaXQoJyAnKVxuICAgIGlmICghbWluIHx8ICFoIHx8ICFkb20gfHwgIW0gfHwgIWRvdykge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY3JvbiBleHByZXNzaW9uOiAnICsgc2NoZWR1bGUpXG4gICAgfVxuICAgIHJldHVybiBgY3Jvbigke21pbn0gJHtofSAke2RvbX0gJHttfSAke2Rvdy5yZXBsYWNlKCcqJywgJz8nKX0gKilgXG59XG4iXX0=