@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
JavaScript
"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