UNPKG

@aws-community/ephemeral

Version:

Ephemeral Stacks! A CDK Stack and Construct that will self-destruct after a specified time period.

32 lines 4.99 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.handler = void 0; const util_dynamodb_1 = require("@aws-sdk/util-dynamodb"); const client_cloudformation_1 = require("@aws-sdk/client-cloudformation"); const handler = async (event) => { const stacksToDestroy = event.Records.reduce((p, record) => { if (record.eventName === 'REMOVE') { if (record.dynamodb?.OldImage) { const oldImage = record.dynamodb.OldImage; const item = (0, util_dynamodb_1.unmarshall)(oldImage); const currentTimeInSeconds = new Date().getTime() / 1000; if (item.ttl > currentTimeInSeconds) { // item was manually removed and not expired console.log('item was manually removed and not expired', currentTimeInSeconds, item.ttl); return [...p]; } return [...p, item.pk]; } } return [...p]; }, []); console.log(stacksToDestroy); if (stacksToDestroy.length > 0) { const client = new client_cloudformation_1.CloudFormationClient({}); await Promise.all(stacksToDestroy.map(async (stackName) => await client.send(new client_cloudformation_1.DeleteStackCommand({ StackName: stackName, })))); } }; exports.handler = handler; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzdHJveWVyLXN0YWNrLmZuLWRlc3Ryb3llci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9kZXN0cm95ZXItc3RhY2suZm4tZGVzdHJveWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLDBEQUFvRDtBQUVwRCwwRUFBMEY7QUFFbkYsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUFFLEtBQTBCLEVBQWlCLEVBQUU7SUFDekUsTUFBTSxlQUFlLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQVcsQ0FBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUU7UUFDbkUsSUFBSSxNQUFNLENBQUMsU0FBUyxLQUFLLFFBQVEsRUFBRTtZQUNqQyxJQUFJLE1BQU0sQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFO2dCQUM3QixNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLFFBR2hDLENBQUM7Z0JBQ0YsTUFBTSxJQUFJLEdBQUcsSUFBQSwwQkFBVSxFQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNsQyxNQUFNLG9CQUFvQixHQUFHLElBQUksSUFBSSxFQUFFLENBQUMsT0FBTyxFQUFFLEdBQUcsSUFBSSxDQUFDO2dCQUN6RCxJQUFJLElBQUksQ0FBQyxHQUFHLEdBQUcsb0JBQW9CLEVBQUU7b0JBQ25DLDRDQUE0QztvQkFDNUMsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQ0FBMkMsRUFBRSxvQkFBb0IsRUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3pGLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO2lCQUNmO2dCQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7YUFDeEI7U0FDRjtRQUNELE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNQLE9BQU8sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDN0IsSUFBSSxlQUFlLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRTtRQUM5QixNQUFNLE1BQU0sR0FBRyxJQUFJLDRDQUFvQixDQUFDLEVBQ3ZDLENBQUMsQ0FBQztRQUNILE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FDZixlQUFlLENBQUMsR0FBRyxDQUNqQixLQUFLLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FDbEIsTUFBTSxNQUFNLENBQUMsSUFBSSxDQUNmLElBQUksMENBQWtCLENBQUM7WUFDckIsU0FBUyxFQUFFLFNBQVM7U0FDckIsQ0FBQyxDQUNILENBQ0osQ0FDRixDQUFDO0tBQ0g7QUFDSCxDQUFDLENBQUM7QUFuQ1csUUFBQSxPQUFPLFdBbUNsQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgRHluYW1vREJTdHJlYW1FdmVudCB9IGZyb20gJ2F3cy1sYW1iZGEnO1xuaW1wb3J0IHsgdW5tYXJzaGFsbCB9IGZyb20gJ0Bhd3Mtc2RrL3V0aWwtZHluYW1vZGInO1xuaW1wb3J0IHsgQXR0cmlidXRlVmFsdWUgfSBmcm9tICdAYXdzLXNkay9jbGllbnQtZHluYW1vZGInO1xuaW1wb3J0IHsgQ2xvdWRGb3JtYXRpb25DbGllbnQsIERlbGV0ZVN0YWNrQ29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2NsaWVudC1jbG91ZGZvcm1hdGlvbic7XG5cbmV4cG9ydCBjb25zdCBoYW5kbGVyID0gYXN5bmMgKGV2ZW50OiBEeW5hbW9EQlN0cmVhbUV2ZW50KTogUHJvbWlzZTx2b2lkPiA9PiB7XG4gIGNvbnN0IHN0YWNrc1RvRGVzdHJveSA9IGV2ZW50LlJlY29yZHMucmVkdWNlPHN0cmluZ1tdPigocCwgcmVjb3JkKSA9PiB7XG4gICAgaWYgKHJlY29yZC5ldmVudE5hbWUgPT09ICdSRU1PVkUnKSB7XG4gICAgICBpZiAocmVjb3JkLmR5bmFtb2RiPy5PbGRJbWFnZSkge1xuICAgICAgICBjb25zdCBvbGRJbWFnZSA9IHJlY29yZC5keW5hbW9kYi5PbGRJbWFnZSBhcyBSZWNvcmQ8XG4gICAgICAgIHN0cmluZyxcbiAgICAgICAgQXR0cmlidXRlVmFsdWVcbiAgICAgICAgPjtcbiAgICAgICAgY29uc3QgaXRlbSA9IHVubWFyc2hhbGwob2xkSW1hZ2UpO1xuICAgICAgICBjb25zdCBjdXJyZW50VGltZUluU2Vjb25kcyA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMDtcbiAgICAgICAgaWYgKGl0ZW0udHRsID4gY3VycmVudFRpbWVJblNlY29uZHMpIHtcbiAgICAgICAgICAvLyBpdGVtIHdhcyBtYW51YWxseSByZW1vdmVkIGFuZCBub3QgZXhwaXJlZFxuICAgICAgICAgIGNvbnNvbGUubG9nKCdpdGVtIHdhcyBtYW51YWxseSByZW1vdmVkIGFuZCBub3QgZXhwaXJlZCcsIGN1cnJlbnRUaW1lSW5TZWNvbmRzLCBpdGVtLnR0bCk7XG4gICAgICAgICAgcmV0dXJuIFsuLi5wXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gWy4uLnAsIGl0ZW0ucGtdO1xuICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gWy4uLnBdO1xuICB9LCBbXSk7XG4gIGNvbnNvbGUubG9nKHN0YWNrc1RvRGVzdHJveSk7XG4gIGlmIChzdGFja3NUb0Rlc3Ryb3kubGVuZ3RoID4gMCkge1xuICAgIGNvbnN0IGNsaWVudCA9IG5ldyBDbG91ZEZvcm1hdGlvbkNsaWVudCh7XG4gICAgfSk7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoXG4gICAgICBzdGFja3NUb0Rlc3Ryb3kubWFwKFxuICAgICAgICBhc3luYyAoc3RhY2tOYW1lKSA9PlxuICAgICAgICAgIGF3YWl0IGNsaWVudC5zZW5kKFxuICAgICAgICAgICAgbmV3IERlbGV0ZVN0YWNrQ29tbWFuZCh7XG4gICAgICAgICAgICAgIFN0YWNrTmFtZTogc3RhY2tOYW1lLFxuICAgICAgICAgICAgfSksXG4gICAgICAgICAgKSxcbiAgICAgICksXG4gICAgKTtcbiAgfVxufTtcbiJdfQ==