@aws-community/ephemeral
Version:
Ephemeral Stacks! A CDK Stack and Construct that will self-destruct after a specified time period.
53 lines • 6.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.handler = void 0;
const client_cloudformation_1 = require("@aws-sdk/client-cloudformation");
const client_dynamodb_1 = require("@aws-sdk/client-dynamodb"); // ES6 import
const lib_dynamodb_1 = require("@aws-sdk/lib-dynamodb");
const marshallOptions = {
// Whether to automatically convert empty strings, blobs, and sets to `null`.
convertEmptyValues: false,
// Whether to remove undefined values while marshalling.
removeUndefinedValues: true,
// Whether to convert typeof object to map attribute.
convertClassInstanceToMap: true, // false, by default.
};
const unmarshallOptions = {
// Whether to return numbers as a string instead of converting them to native JavaScript numbers.
wrapNumbers: false, // false, by default.
};
const translateConfig = {
marshallOptions,
unmarshallOptions,
};
const client = new client_dynamodb_1.DynamoDBClient({});
const ddbDocClient = lib_dynamodb_1.DynamoDBDocumentClient.from(client, translateConfig);
const cf = new client_cloudformation_1.CloudFormationClient({});
const handler = async (event) => {
if (!process.env.DESTROY_TABLE_NAME) {
return;
}
const StackName = event.detail['stack-id'];
const describeCommand = new client_cloudformation_1.DescribeStacksCommand({
StackName,
});
const stacks = await cf.send(describeCommand);
const stack = stacks.Stacks?.[0];
const stackLife = stack?.Tags?.find((tag) => tag.Key === 'STACK_LIFE')?.Value;
if (stackLife) {
try {
await ddbDocClient.send(new lib_dynamodb_1.PutCommand({
TableName: process.env.DESTROY_TABLE_NAME,
Item: {
pk: stack.StackName,
ttl: Math.ceil(new Date().getTime() / 1000 + Number(stackLife)),
},
}));
}
catch (e) {
console.log(e);
}
}
};
exports.handler = handler;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzdHJveWVyLXN0YWNrLmZuLWNsb3VkZm9ybWF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2Rlc3Ryb3llci1zdGFjay5mbi1jbG91ZGZvcm1hdGlvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwwRUFDZ0U7QUFDaEUsOERBQTBELENBQUMsYUFBYTtBQUN4RSx3REFBMkU7QUFFM0UsTUFBTSxlQUFlLEdBQUc7SUFDdEIsNkVBQTZFO0lBQzdFLGtCQUFrQixFQUFFLEtBQUs7SUFDekIsd0RBQXdEO0lBQ3hELHFCQUFxQixFQUFFLElBQUk7SUFDM0IscURBQXFEO0lBQ3JELHlCQUF5QixFQUFFLElBQUksRUFBRSxxQkFBcUI7Q0FDdkQsQ0FBQztBQUVGLE1BQU0saUJBQWlCLEdBQUc7SUFDeEIsaUdBQWlHO0lBQ2pHLFdBQVcsRUFBRSxLQUFLLEVBQUUscUJBQXFCO0NBQzFDLENBQUM7QUFFRixNQUFNLGVBQWUsR0FBRztJQUN0QixlQUFlO0lBQ2YsaUJBQWlCO0NBQ2xCLENBQUM7QUFFRixNQUFNLE1BQU0sR0FBRyxJQUFJLGdDQUFjLENBQUMsRUFDakMsQ0FBQyxDQUFDO0FBQ0gsTUFBTSxZQUFZLEdBQUcscUNBQXNCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxlQUFlLENBQUMsQ0FBQztBQUMxRSxNQUFNLEVBQUUsR0FBRyxJQUFJLDRDQUFvQixDQUFDLEVBQ25DLENBQUMsQ0FBQztBQUVJLE1BQU0sT0FBTyxHQUFHLEtBQUssRUFDMUIsS0FBb0MsRUFDckIsRUFBRTtJQUNqQixJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRTtRQUNuQyxPQUFPO0tBQ1I7SUFDRCxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzNDLE1BQU0sZUFBZSxHQUFHLElBQUksNkNBQXFCLENBQUM7UUFDaEQsU0FBUztLQUNWLENBQUMsQ0FBQztJQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUU5QyxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFakMsTUFBTSxTQUFTLEdBQUcsS0FBSyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEtBQUssWUFBWSxDQUFDLEVBQUUsS0FBSyxDQUFDO0lBQzlFLElBQUksU0FBUyxFQUFFO1FBQ2IsSUFBSTtZQUNGLE1BQU0sWUFBWSxDQUFDLElBQUksQ0FDckIsSUFBSSx5QkFBVSxDQUFDO2dCQUNiLFNBQVMsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLGtCQUFrQjtnQkFDekMsSUFBSSxFQUFFO29CQUNKLEVBQUUsRUFBRSxLQUFLLENBQUMsU0FBUztvQkFDbkIsR0FBRyxFQUFFLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxPQUFPLEVBQUUsR0FBRyxJQUFJLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO2lCQUNoRTthQUNGLENBQUMsQ0FDSCxDQUFDO1NBQ0g7UUFBQyxPQUFPLENBQUMsRUFBRTtZQUNWLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDaEI7S0FDRjtBQUNILENBQUMsQ0FBQztBQTlCVyxRQUFBLE9BQU8sV0E4QmxCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFdmVudEJyaWRnZUV2ZW50IH0gZnJvbSAnYXdzLWxhbWJkYSc7XG5pbXBvcnQgeyBDbG91ZEZvcm1hdGlvbkNsaWVudCxcbiAgRGVzY3JpYmVTdGFja3NDb21tYW5kIH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWNsb3VkZm9ybWF0aW9uJztcbmltcG9ydCB7IER5bmFtb0RCQ2xpZW50IH0gZnJvbSAnQGF3cy1zZGsvY2xpZW50LWR5bmFtb2RiJzsgLy8gRVM2IGltcG9ydFxuaW1wb3J0IHsgRHluYW1vREJEb2N1bWVudENsaWVudCwgUHV0Q29tbWFuZCB9IGZyb20gJ0Bhd3Mtc2RrL2xpYi1keW5hbW9kYic7XG5cbmNvbnN0IG1hcnNoYWxsT3B0aW9ucyA9IHtcbiAgLy8gV2hldGhlciB0byBhdXRvbWF0aWNhbGx5IGNvbnZlcnQgZW1wdHkgc3RyaW5ncywgYmxvYnMsIGFuZCBzZXRzIHRvIGBudWxsYC5cbiAgY29udmVydEVtcHR5VmFsdWVzOiBmYWxzZSwgLy8gZmFsc2UsIGJ5IGRlZmF1bHQuXG4gIC8vIFdoZXRoZXIgdG8gcmVtb3ZlIHVuZGVmaW5lZCB2YWx1ZXMgd2hpbGUgbWFyc2hhbGxpbmcuXG4gIHJlbW92ZVVuZGVmaW5lZFZhbHVlczogdHJ1ZSwgLy8gZmFsc2UsIGJ5IGRlZmF1bHQuXG4gIC8vIFdoZXRoZXIgdG8gY29udmVydCB0eXBlb2Ygb2JqZWN0IHRvIG1hcCBhdHRyaWJ1dGUuXG4gIGNvbnZlcnRDbGFzc0luc3RhbmNlVG9NYXA6IHRydWUsIC8vIGZhbHNlLCBieSBkZWZhdWx0LlxufTtcblxuY29uc3QgdW5tYXJzaGFsbE9wdGlvbnMgPSB7XG4gIC8vIFdoZXRoZXIgdG8gcmV0dXJuIG51bWJlcnMgYXMgYSBzdHJpbmcgaW5zdGVhZCBvZiBjb252ZXJ0aW5nIHRoZW0gdG8gbmF0aXZlIEphdmFTY3JpcHQgbnVtYmVycy5cbiAgd3JhcE51bWJlcnM6IGZhbHNlLCAvLyBmYWxzZSwgYnkgZGVmYXVsdC5cbn07XG5cbmNvbnN0IHRyYW5zbGF0ZUNvbmZpZyA9IHtcbiAgbWFyc2hhbGxPcHRpb25zLFxuICB1bm1hcnNoYWxsT3B0aW9ucyxcbn07XG5cbmNvbnN0IGNsaWVudCA9IG5ldyBEeW5hbW9EQkNsaWVudCh7XG59KTtcbmNvbnN0IGRkYkRvY0NsaWVudCA9IER5bmFtb0RCRG9jdW1lbnRDbGllbnQuZnJvbShjbGllbnQsIHRyYW5zbGF0ZUNvbmZpZyk7XG5jb25zdCBjZiA9IG5ldyBDbG91ZEZvcm1hdGlvbkNsaWVudCh7XG59KTtcblxuZXhwb3J0IGNvbnN0IGhhbmRsZXIgPSBhc3luYyAoXG4gIGV2ZW50OiBFdmVudEJyaWRnZUV2ZW50PHN0cmluZywgYW55Pixcbik6IFByb21pc2U8dm9pZD4gPT4ge1xuICBpZiAoIXByb2Nlc3MuZW52LkRFU1RST1lfVEFCTEVfTkFNRSkge1xuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCBTdGFja05hbWUgPSBldmVudC5kZXRhaWxbJ3N0YWNrLWlkJ107XG4gIGNvbnN0IGRlc2NyaWJlQ29tbWFuZCA9IG5ldyBEZXNjcmliZVN0YWNrc0NvbW1hbmQoe1xuICAgIFN0YWNrTmFtZSxcbiAgfSk7XG4gIGNvbnN0IHN0YWNrcyA9IGF3YWl0IGNmLnNlbmQoZGVzY3JpYmVDb21tYW5kKTtcblxuICBjb25zdCBzdGFjayA9IHN0YWNrcy5TdGFja3M/LlswXTtcblxuICBjb25zdCBzdGFja0xpZmUgPSBzdGFjaz8uVGFncz8uZmluZCgodGFnKSA9PiB0YWcuS2V5ID09PSAnU1RBQ0tfTElGRScpPy5WYWx1ZTtcbiAgaWYgKHN0YWNrTGlmZSkge1xuICAgIHRyeSB7XG4gICAgICBhd2FpdCBkZGJEb2NDbGllbnQuc2VuZChcbiAgICAgICAgbmV3IFB1dENvbW1hbmQoe1xuICAgICAgICAgIFRhYmxlTmFtZTogcHJvY2Vzcy5lbnYuREVTVFJPWV9UQUJMRV9OQU1FLFxuICAgICAgICAgIEl0ZW06IHtcbiAgICAgICAgICAgIHBrOiBzdGFjay5TdGFja05hbWUsXG4gICAgICAgICAgICB0dGw6IE1hdGguY2VpbChuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDAgKyBOdW1iZXIoc3RhY2tMaWZlKSksXG4gICAgICAgICAgfSxcbiAgICAgICAgfSksXG4gICAgICApO1xuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgIGNvbnNvbGUubG9nKGUpO1xuICAgIH1cbiAgfVxufTtcbiJdfQ==