UNPKG

@aws-community/self-destruct

Version:

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

116 lines 15.9 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.SelfDestructConstruct = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const aws_stepfunctions_tasks_1 = require("aws-cdk-lib/aws-stepfunctions-tasks"); const aws_stepfunctions_1 = require("aws-cdk-lib/aws-stepfunctions"); const constructs_1 = require("constructs"); const aws_cdk_lib_1 = require("aws-cdk-lib"); const custom_resources_1 = require("aws-cdk-lib/custom-resources"); const self_destruct_aspect_1 = require("./self-destruct-aspect"); class SelfDestructConstruct extends constructs_1.Construct { constructor(scope, id, props = {}) { super(scope, id); const { duration } = props; const listExecutions = new aws_stepfunctions_tasks_1.CallAwsService(this, 'ListExecutions', { action: 'listExecutions', iamAction: 'states:ListExecutions', iamResources: ['*'], parameters: { 'StateMachineArn.$': '$$.StateMachine.Id', StatusFilter: 'RUNNING', }, service: 'sfn', }); const executionsMap = new aws_stepfunctions_1.Map(this, 'ExecutionsMap', { inputPath: '$.Executions', }); const stopExecution = new aws_stepfunctions_tasks_1.CallAwsService(this, 'StopExecution', { action: 'stopExecution', iamAction: 'states:StopExecution', iamResources: ['*'], parameters: { Cause: 'Superceded', 'ExecutionArn.$': '$.ExecutionArn', }, service: 'sfn', }); executionsMap.iterator(new aws_stepfunctions_1.Choice(this, 'NotSelf?') .when(aws_stepfunctions_1.Condition.not(aws_stepfunctions_1.Condition.stringEqualsJsonPath('$.ExecutionArn', '$$.Execution.Id')), stopExecution) .otherwise(new aws_stepfunctions_1.Pass(this, 'self'))); const wait = new aws_stepfunctions_1.Wait(this, 'Wait', { time: aws_stepfunctions_1.WaitTime.duration(duration), }); const wasDelete = new aws_stepfunctions_1.Choice(this, 'WasDelete?') .when(aws_stepfunctions_1.Condition.stringEquals('$$.Execution.Input.Action', 'Delete'), new aws_stepfunctions_1.Succeed(this, 'DeleteSuccess')) .otherwise(wait); const deleteStack = new aws_stepfunctions_tasks_1.CallAwsService(this, 'DeleteStack', { action: 'deleteStack', iamAction: 'cloudformation:DeleteStack', iamResources: ['*'], parameters: { 'StackName.$': '$$.Execution.Input.StackName', }, service: 'cloudformation', }); const finished = new aws_stepfunctions_1.Succeed(this, 'Finished'); listExecutions.next(executionsMap); executionsMap.next(wasDelete); wait.next(deleteStack); deleteStack.next(finished); const sm = new aws_stepfunctions_1.StateMachine(this, 'SelfDestructMachine', { definition: listExecutions, }); new custom_resources_1.AwsCustomResource(this, 'SelfDestructCR', { onCreate: { action: 'startExecution', parameters: { input: JSON.stringify({ Action: 'Create', StackArn: aws_cdk_lib_1.Stack.of(this).stackId, StackName: aws_cdk_lib_1.Stack.of(this).stackName, }), stateMachineArn: sm.stateMachineArn, }, physicalResourceId: custom_resources_1.PhysicalResourceId.of('SelfDestructCR'), service: 'StepFunctions', }, onDelete: { action: 'startExecution', parameters: { input: JSON.stringify({ Action: 'Delete', StackArn: aws_cdk_lib_1.Stack.of(this).stackId, StackName: aws_cdk_lib_1.Stack.of(this).stackName, }), stateMachineArn: sm.stateMachineArn, }, physicalResourceId: custom_resources_1.PhysicalResourceId.of('SelfDestructCR'), service: 'StepFunctions', }, onUpdate: { action: 'startExecution', parameters: { input: JSON.stringify({ Action: 'Update', Version: `${Date.now()}`, StackArn: aws_cdk_lib_1.Stack.of(this).stackId, StackName: aws_cdk_lib_1.Stack.of(this).stackName, }), stateMachineArn: sm.stateMachineArn, }, physicalResourceId: custom_resources_1.PhysicalResourceId.of('SelfDestructCR'), service: 'StepFunctions', }, policy: custom_resources_1.AwsCustomResourcePolicy.fromSdkCalls({ resources: [sm.stateMachineArn], }), }); aws_cdk_lib_1.Aspects.of(aws_cdk_lib_1.Stack.of(this)).add(new self_destruct_aspect_1.SelfDestructAspect()); } } _a = JSII_RTTI_SYMBOL_1; SelfDestructConstruct[_a] = { fqn: "@aws-community/self-destruct.SelfDestructConstruct", version: "1.1.0" }; exports.SelfDestructConstruct = SelfDestructConstruct; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VsZi1kZXN0cnVjdC1jb25zdHJ1Y3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvc2VsZi1kZXN0cnVjdC1jb25zdHJ1Y3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxpRkFBcUU7QUFDckUscUVBT2tEO0FBQ2xELDJDQUF1QztBQUN2Qyw2Q0FBdUQ7QUFDdkQsbUVBRTJEO0FBQzNELGlFQUE0RDtBQU01RCxNQUFhLHFCQUFzQixTQUFRLHNCQUFTO0lBQ2xELFlBQWEsS0FBZ0IsRUFBRSxFQUFVLEVBQUUsUUFBb0MsRUFDaEQ7UUFDN0IsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixNQUFNLEVBQUUsUUFBUSxFQUFFLEdBQUcsS0FBSyxDQUFDO1FBRTNCLE1BQU0sY0FBYyxHQUFHLElBQUksd0NBQWMsQ0FBQyxJQUFJLEVBQUUsZ0JBQWdCLEVBQUU7WUFDaEUsTUFBTSxFQUFFLGdCQUFnQjtZQUN4QixTQUFTLEVBQUUsdUJBQXVCO1lBQ2xDLFlBQVksRUFBRSxDQUFDLEdBQUcsQ0FBQztZQUNuQixVQUFVLEVBQUU7Z0JBQ1YsbUJBQW1CLEVBQUUsb0JBQW9CO2dCQUN6QyxZQUFZLEVBQUUsU0FBUzthQUN4QjtZQUNELE9BQU8sRUFBRSxLQUFLO1NBQ2YsQ0FBQyxDQUFDO1FBRUgsTUFBTSxhQUFhLEdBQUcsSUFBSSx1QkFBRyxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7WUFDbkQsU0FBUyxFQUFFLGNBQWM7U0FDMUIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxhQUFhLEdBQUcsSUFBSSx3Q0FBYyxDQUFDLElBQUksRUFBRSxlQUFlLEVBQUU7WUFDOUQsTUFBTSxFQUFFLGVBQWU7WUFDdkIsU0FBUyxFQUFFLHNCQUFzQjtZQUNqQyxZQUFZLEVBQUUsQ0FBQyxHQUFHLENBQUM7WUFDbkIsVUFBVSxFQUFFO2dCQUNWLEtBQUssRUFBRSxZQUFZO2dCQUNuQixnQkFBZ0IsRUFBRSxnQkFBZ0I7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QkFDcEM7Z0JBQ0Qsa0JBQWtCLEVBQUUscUNBQWtCLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDO2dCQUMzRCxPQUFPLEVBQUUsZUFBZTthQUN6QjtZQUNELFFBQVEsRUFBRTtnQkFDUixNQUFNLEVBQUUsZ0JBQWdCO2dCQUN4QixVQUFVLEVBQUU7b0JBQ1YsS0FBSyxFQUFFLElBQUksQ0FBQyxTQUFTLENBQUM7d0JBQ3BCLE1BQU0sRUFBRSxRQUFRO3dCQUNoQixPQUFPLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7d0JBQ3hCLFFBQVEsRUFBRSxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxPQUFPO3dCQUNoQyxTQUFTLEVBQUUsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsU0FBUztxQkFDcEMsQ0FBQztvQkFDRixlQUFlLEVBQUUsRUFBRSxDQUFDLGVBQWU7aUJBQ3BDO2dCQUNELGtCQUFrQixFQUFFLHFDQUFrQixDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztnQkFDM0QsT0FBTyxFQUFFLGVBQWU7YUFDekI7WUFDRCxNQUFNLEVBQUUsMENBQXVCLENBQUMsWUFBWSxDQUFDO2dCQUMzQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLENBQUMsZUFBZSxDQUFDO2FBQ2hDLENBQUM7U0FDSCxDQUFDLENBQUM7UUFFSCxxQkFBTyxDQUFDLEVBQUUsQ0FBQyxtQkFBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLHlDQUFrQixFQUFFLENBQUMsQ0FBQztJQUMzRCxDQUFDOzs7O0FBMUhVLHNEQUFxQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhbGxBd3NTZXJ2aWNlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMtdGFza3MnO1xuaW1wb3J0IHsgQ2hvaWNlLFxuICBDb25kaXRpb24sXG4gIE1hcCxcbiAgUGFzcyxcbiAgU3RhdGVNYWNoaW5lLFxuICBTdWNjZWVkLFxuICBXYWl0LFxuICBXYWl0VGltZSB9IGZyb20gJ2F3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgQXNwZWN0cywgRHVyYXRpb24sIFN0YWNrIH0gZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgQXdzQ3VzdG9tUmVzb3VyY2UsXG4gIEF3c0N1c3RvbVJlc291cmNlUG9saWN5LFxuICBQaHlzaWNhbFJlc291cmNlSWQgfSBmcm9tICdhd3MtY2RrLWxpYi9jdXN0b20tcmVzb3VyY2VzJztcbmltcG9ydCB7IFNlbGZEZXN0cnVjdEFzcGVjdCB9IGZyb20gJy4vc2VsZi1kZXN0cnVjdC1hc3BlY3QnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFNlbGZEZXN0cnVjdENvbnN0cnVjdFByb3BzIHtcbiAgcmVhZG9ubHkgZHVyYXRpb246IER1cmF0aW9uXG59XG5cbmV4cG9ydCBjbGFzcyBTZWxmRGVzdHJ1Y3RDb25zdHJ1Y3QgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuICBjb25zdHJ1Y3RvciAoc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IFNlbGZEZXN0cnVjdENvbnN0cnVjdFByb3BzID0ge1xuICB9IGFzIFNlbGZEZXN0cnVjdENvbnN0cnVjdFByb3BzKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIGNvbnN0IHsgZHVyYXRpb24gfSA9IHByb3BzO1xuXG4gICAgY29uc3QgbGlzdEV4ZWN1dGlvbnMgPSBuZXcgQ2FsbEF3c1NlcnZpY2UodGhpcywgJ0xpc3RFeGVjdXRpb25zJywge1xuICAgICAgYWN0aW9uOiAnbGlzdEV4ZWN1dGlvbnMnLFxuICAgICAgaWFtQWN0aW9uOiAnc3RhdGVzOkxpc3RFeGVjdXRpb25zJyxcbiAgICAgIGlhbVJlc291cmNlczogWycqJ10sXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICdTdGF0ZU1hY2hpbmVBcm4uJCc6ICckJC5TdGF0ZU1hY2hpbmUuSWQnLFxuICAgICAgICBTdGF0dXNGaWx0ZXI6ICdSVU5OSU5HJyxcbiAgICAgIH0sXG4gICAgICBzZXJ2aWNlOiAnc2ZuJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGV4ZWN1dGlvbnNNYXAgPSBuZXcgTWFwKHRoaXMsICdFeGVjdXRpb25zTWFwJywge1xuICAgICAgaW5wdXRQYXRoOiAnJC5FeGVjdXRpb25zJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IHN0b3BFeGVjdXRpb24gPSBuZXcgQ2FsbEF3c1NlcnZpY2UodGhpcywgJ1N0b3BFeGVjdXRpb24nLCB7XG4gICAgICBhY3Rpb246ICdzdG9wRXhlY3V0aW9uJyxcbiAgICAgIGlhbUFjdGlvbjogJ3N0YXRlczpTdG9wRXhlY3V0aW9uJyxcbiAgICAgIGlhbVJlc291cmNlczogWycqJ10sXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIENhdXNlOiAnU3VwZXJjZWRlZCcsXG4gICAgICAgICdFeGVjdXRpb25Bcm4uJCc6ICckLkV4ZWN1dGlvbkFybicsXG4gICAgICB9LFxuICAgICAgc2VydmljZTogJ3NmbicsXG4gICAgfSk7XG5cbiAgICBleGVjdXRpb25zTWFwLml0ZXJhdG9yKFxuICAgICAgbmV3IENob2ljZSh0aGlzLCAnTm90U2VsZj8nKVxuICAgICAgICAud2hlbihcbiAgICAgICAgICBDb25kaXRpb24ubm90KFxuICAgICAgICAgICAgQ29uZGl0aW9uLnN0cmluZ0VxdWFsc0pzb25QYXRoKCckLkV4ZWN1dGlvbkFybicsICckJC5FeGVjdXRpb24uSWQnKSxcbiAgICAgICAgICApLFxuICAgICAgICAgIHN0b3BFeGVjdXRpb24sXG4gICAgICAgIClcbiAgICAgICAgLm90aGVyd2lzZShuZXcgUGFzcyh0aGlzLCAnc2VsZicpKSxcbiAgICApO1xuXG4gICAgY29uc3Qgd2FpdCA9IG5ldyBXYWl0KHRoaXMsICdXYWl0Jywge1xuICAgICAgdGltZTogV2FpdFRpbWUuZHVyYXRpb24oZHVyYXRpb24pLFxuICAgIH0pO1xuICAgIGNvbnN0IHdhc0RlbGV0ZSA9IG5ldyBDaG9pY2UodGhpcywgJ1dhc0RlbGV0ZT8nKVxuICAgICAgLndoZW4oXG4gICAgICAgIENvbmRpdGlvbi5zdHJpbmdFcXVhbHMoJyQkLkV4ZWN1dGlvbi5JbnB1dC5BY3Rpb24nLCAnRGVsZXRlJyksXG4gICAgICAgIG5ldyBTdWNjZWVkKHRoaXMsICdEZWxldGVTdWNjZXNzJyksXG4gICAgICApXG4gICAgICAub3RoZXJ3aXNlKHdhaXQpO1xuXG4gICAgY29uc3QgZGVsZXRlU3RhY2sgPSBuZXcgQ2FsbEF3c1NlcnZpY2UodGhpcywgJ0RlbGV0ZVN0YWNrJywge1xuICAgICAgYWN0aW9uOiAnZGVsZXRlU3RhY2snLFxuICAgICAgaWFtQWN0aW9uOiAnY2xvdWRmb3JtYXRpb246RGVsZXRlU3RhY2snLFxuICAgICAgaWFtUmVzb3VyY2VzOiBbJyonXSxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgJ1N0YWNrTmFtZS4kJzogJyQkLkV4ZWN1dGlvbi5JbnB1dC5TdGFja05hbWUnLFxuICAgICAgfSxcbiAgICAgIHNlcnZpY2U6ICdjbG91ZGZvcm1hdGlvbicsXG4gICAgfSk7XG5cbiAgICBjb25zdCBmaW5pc2hlZCA9IG5ldyBTdWNjZWVkKHRoaXMsICdGaW5pc2hlZCcpO1xuXG4gICAgbGlzdEV4ZWN1dGlvbnMubmV4dChleGVjdXRpb25zTWFwKTtcbiAgICBleGVjdXRpb25zTWFwLm5leHQod2FzRGVsZXRlKTtcbiAgICB3YWl0Lm5leHQoZGVsZXRlU3RhY2spO1xuICAgIGRlbGV0ZVN0YWNrLm5leHQoZmluaXNoZWQpO1xuXG4gICAgY29uc3Qgc20gPSBuZXcgU3RhdGVNYWNoaW5lKHRoaXMsICdTZWxmRGVzdHJ1Y3RNYWNoaW5lJywge1xuICAgICAgZGVmaW5pdGlvbjogbGlzdEV4ZWN1dGlvbnMsXG4gICAgfSk7XG5cbiAgICBuZXcgQXdzQ3VzdG9tUmVzb3VyY2UodGhpcywgJ1NlbGZEZXN0cnVjdENSJywge1xuICAgICAgb25DcmVhdGU6IHtcbiAgICAgICAgYWN0aW9uOiAnc3RhcnRFeGVjdXRpb24nLFxuICAgICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgICAgaW5wdXQ6IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgICAgICAgIEFjdGlvbjogJ0NyZWF0ZScsXG4gICAgICAgICAgICBTdGFja0FybjogU3RhY2sub2YodGhpcykuc3RhY2tJZCxcbiAgICAgICAgICAgIFN0YWNrTmFtZTogU3RhY2sub2YodGhpcykuc3RhY2tOYW1lLFxuICAgICAgICAgIH0pLFxuICAgICAgICAgIHN0YXRlTWFjaGluZUFybjogc20uc3RhdGVNYWNoaW5lQXJuLFxuICAgICAgICB9LFxuICAgICAgICBwaHlzaWNhbFJlc291cmNlSWQ6IFBoeXNpY2FsUmVzb3VyY2VJZC5vZignU2VsZkRlc3RydWN0Q1InKSxcbiAgICAgICAgc2VydmljZTogJ1N0ZXBGdW5jdGlvbnMnLFxuICAgICAgfSxcbiAgICAgIG9uRGVsZXRlOiB7XG4gICAgICAgIGFjdGlvbjogJ3N0YXJ0RXhlY3V0aW9uJyxcbiAgICAgICAgcGFyYW1ldGVyczoge1xuICAgICAgICAgIGlucHV0OiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICBBY3Rpb246ICdEZWxldGUnLFxuICAgICAgICAgICAgU3RhY2tBcm46IFN0YWNrLm9mKHRoaXMpLnN0YWNrSWQsXG4gICAgICAgICAgICBTdGFja05hbWU6IFN0YWNrLm9mKHRoaXMpLnN0YWNrTmFtZSxcbiAgICAgICAgICB9KSxcbiAgICAgICAgICBzdGF0ZU1hY2hpbmVBcm46IHNtLnN0YXRlTWFjaGluZUFybixcbiAgICAgICAgfSxcbiAgICAgICAgcGh5c2ljYWxSZXNvdXJjZUlkOiBQaHlzaWNhbFJlc291cmNlSWQub2YoJ1NlbGZEZXN0cnVjdENSJyksXG4gICAgICAgIHNlcnZpY2U6ICdTdGVwRnVuY3Rpb25zJyxcbiAgICAgIH0sXG4gICAgICBvblVwZGF0ZToge1xuICAgICAgICBhY3Rpb246ICdzdGFydEV4ZWN1dGlvbicsXG4gICAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgICBpbnB1dDogSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgQWN0aW9uOiAnVXBkYXRlJyxcbiAgICAgICAgICAgIFZlcnNpb246IGAke0RhdGUubm93KCl9YCxcbiAgICAgICAgICAgIFN0YWNrQXJuOiBTdGFjay5vZih0aGlzKS5zdGFja0lkLFxuICAgICAgICAgICAgU3RhY2tOYW1lOiBTdGFjay5vZih0aGlzKS5zdGFja05hbWUsXG4gICAgICAgICAgfSksXG4gICAgICAgICAgc3RhdGVNYWNoaW5lQXJuOiBzbS5zdGF0ZU1hY2hpbmVBcm4sXG4gICAgICAgIH0sXG4gICAgICAgIHBoeXNpY2FsUmVzb3VyY2VJZDogUGh5c2ljYWxSZXNvdXJjZUlkLm9mKCdTZWxmRGVzdHJ1Y3RDUicpLFxuICAgICAgICBzZXJ2aWNlOiAnU3RlcEZ1bmN0aW9ucycsXG4gICAgICB9LFxuICAgICAgcG9saWN5OiBBd3NDdXN0b21SZXNvdXJjZVBvbGljeS5mcm9tU2RrQ2FsbHMoe1xuICAgICAgICByZXNvdXJjZXM6IFtzbS5zdGF0ZU1hY2hpbmVBcm5dLFxuICAgICAgfSksXG4gICAgfSk7XG5cbiAgICBBc3BlY3RzLm9mKFN0YWNrLm9mKHRoaXMpKS5hZGQobmV3IFNlbGZEZXN0cnVjdEFzcGVjdCgpKTtcbiAgfVxufVxuIl19