UNPKG

aws-ddk-core

Version:

The AWS DataOps Development Kit is an open source development framework for customers that build data workflows and modern data architecture on AWS.

87 lines 14.1 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.RedshiftDataApiStage = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const cdk = require("aws-cdk-lib"); const iam = require("aws-cdk-lib/aws-iam"); const sfn = require("aws-cdk-lib/aws-stepfunctions"); const tasks = require("aws-cdk-lib/aws-stepfunctions-tasks"); const stage_1 = require("../pipelines/stage"); /** * Stage that contains a step function that executes Redshift Data API statements. */ class RedshiftDataApiStage extends stage_1.StateMachineStage { /** * Constructs `RedshiftDataApiStage`. * @param scope Scope within which this construct is defined. * @param id Identifier of the stage. * @param props Properties for the stage. */ constructor(scope, id, props) { super(scope, id, props); this.stateMachineInput = props.stateMachineInput; const stack = cdk.Stack.of(this); const databaseName = props.databaseName ?? "dev"; const databaseUser = props.databaseUser ?? "awsuser"; const redshiftClusterArn = `arn:aws:redshift:${stack.region}:${stack.account}:cluster:${props.redshiftClusterIdentifier}`; const redshiftDatabaseArn = `arn:aws:redshift:${stack.region}:${stack.account}:dbname:${props.redshiftClusterIdentifier}/${databaseName}`; const redshiftUserArn = `arn:aws:redshift:${stack.region}:${stack.account}:dbuser:${props.redshiftClusterIdentifier}/${databaseUser}`; const pollingTime = props.pollingTime ?? cdk.Duration.seconds(15); const batchExecuteStatement = new tasks.CallAwsService(this, `${id} Execute Statement on Redshift`, { service: "redshiftdata", action: "batchExecuteStatement", iamResources: [redshiftClusterArn], parameters: { ClusterIdentifier: props.redshiftClusterIdentifier, Database: databaseName, Sqls: props.sqlStatements, DbUser: databaseUser, }, resultPath: "$.sql_output", }); const wait = new sfn.Wait(this, "wait", { time: sfn.WaitTime.duration(pollingTime), }); const describeStatement = new tasks.CallAwsService(this, `${id} Describe Statement on Redshift`, { service: "redshiftdata", action: "describeStatement", iamResources: [redshiftClusterArn], parameters: { "Id.$": "$.sql_output.Id", }, resultPath: "$.sql_output", }); const definition = batchExecuteStatement .next(wait) .next(describeStatement) .next(new sfn.Choice(this, "check status") .when(sfn.Condition.stringEquals("$.sql_output.Status", "FAILED"), new sfn.Fail(this, "failure")) .when(sfn.Condition.stringEquals("$.sql_output.Status", "FINISHED"), new sfn.Succeed(this, "success")) .otherwise(wait)); ({ eventPattern: this.eventPattern, stateMachine: this.stateMachine } = this.createStateMachine({ definition: definition, ...props, })); this.stateMachine.addToRolePolicy(new iam.PolicyStatement({ effect: iam.Effect.ALLOW, actions: [ "redshift-data:BatchExecuteStatement", "redshift-data:ListStatements", "redshift-data:GetStatementResult", "redshift-data:DescribeStatement", "redshift-data:ExecuteStatement", ], resources: ["*"], })); this.stateMachine.addToRolePolicy(new iam.PolicyStatement({ effect: iam.Effect.ALLOW, actions: ["redshift:GetClusterCredentials"], resources: [redshiftClusterArn, redshiftDatabaseArn, redshiftUserArn], })); } } exports.RedshiftDataApiStage = RedshiftDataApiStage; _a = JSII_RTTI_SYMBOL_1; RedshiftDataApiStage[_a] = { fqn: "aws-ddk-core.RedshiftDataApiStage", version: "1.4.1" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkc2hpZnQtZGF0YS1hcGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvc3RhZ2VzL3JlZHNoaWZ0LWRhdGEtYXBpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsbUNBQW1DO0FBRW5DLDJDQUEyQztBQUMzQyxxREFBcUQ7QUFDckQsNkRBQTZEO0FBRTdELDhDQUErRTtBQWtDL0U7O0dBRUc7QUFDSCxNQUFhLG9CQUFxQixTQUFRLHlCQUFpQjtJQU96RDs7Ozs7T0FLRztJQUNILFlBQVksS0FBZ0IsRUFBRSxFQUFVLEVBQUUsS0FBZ0M7UUFDeEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsSUFBSSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztRQUNqRCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNqQyxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLEtBQUssQ0FBQztRQUNqRCxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsWUFBWSxJQUFJLFNBQVMsQ0FBQztRQUNyRCxNQUFNLGtCQUFrQixHQUFHLG9CQUFvQixLQUFLLENBQUMsTUFBTSxJQUFJLEtBQUssQ0FBQyxPQUFPLFlBQVksS0FBSyxDQUFDLHlCQUF5QixFQUFFLENBQUM7UUFDMUgsTUFBTSxtQkFBbUIsR0FBRyxvQkFBb0IsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxXQUFXLEtBQUssQ0FBQyx5QkFBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUMxSSxNQUFNLGVBQWUsR0FBRyxvQkFBb0IsS0FBSyxDQUFDLE1BQU0sSUFBSSxLQUFLLENBQUMsT0FBTyxXQUFXLEtBQUssQ0FBQyx5QkFBeUIsSUFBSSxZQUFZLEVBQUUsQ0FBQztRQUN0SSxNQUFNLFdBQVcsR0FBRyxLQUFL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QUNKLENBQUM7O0FBckZILG9EQXNGQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCAqIGFzIGNkayBmcm9tIFwiYXdzLWNkay1saWJcIjtcbmltcG9ydCAqIGFzIGV2ZW50cyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50c1wiO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5pbXBvcnQgKiBhcyBzZm4gZnJvbSBcImF3cy1jZGstbGliL2F3cy1zdGVwZnVuY3Rpb25zXCI7XG5pbXBvcnQgKiBhcyB0YXNrcyBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXN0ZXBmdW5jdGlvbnMtdGFza3NcIjtcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gXCJjb25zdHJ1Y3RzXCI7XG5pbXBvcnQgeyBTdGF0ZU1hY2hpbmVTdGFnZSwgU3RhdGVNYWNoaW5lU3RhZ2VQcm9wcyB9IGZyb20gXCIuLi9waXBlbGluZXMvc3RhZ2VcIjtcblxuLyoqXG4gKiBQcm9wZXJ0aWVzIGZvciBgUmVkc2hpZnREYXRhQXBpU3RhZ2VgLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIFJlZHNoaWZ0RGF0YUFwaVN0YWdlUHJvcHMgZXh0ZW5kcyBTdGF0ZU1hY2hpbmVTdGFnZVByb3BzIHtcbiAgLyoqXG4gICAqIElkZW50aWZpZXIgb2YgdGhlIFJlZHNoaWZ0IGNsdXN0ZXIuXG4gICAqL1xuICByZWFkb25seSByZWRzaGlmdENsdXN0ZXJJZGVudGlmaWVyOiBzdHJpbmc7XG4gIC8qKlxuICAgKiBMaXN0IG9mIFNRTCBzdGF0ZW1lbnRzIHRvIGV4ZWN1dGUuXG4gICAqL1xuICByZWFkb25seSBzcWxTdGF0ZW1lbnRzOiBzdHJpbmdbXTtcbiAgLyoqXG4gICAqIE5hbWUgb2YgdGhlIGRhdGFiYXNlIGluIFJlZHNoaWZ0LlxuICAgKlxuICAgKiBAZGVmYXVsdCBcImRldlwiXG4gICAqL1xuICByZWFkb25seSBkYXRhYmFzZU5hbWU/OiBzdHJpbmc7XG4gIC8qKlxuICAgKiBEYXRhYmFzZSB1c2VyLlxuICAgKlxuICAgKiBAZGVmYXVsdCBcImF3c3VzZXJcIlxuICAgKi9cbiAgcmVhZG9ubHkgZGF0YWJhc2VVc2VyPzogc3RyaW5nO1xuICAvKipcbiAgICogV2FpdGluZyB0aW1lIGJldHdlZW4gY2hlY2tpbmcgd2hldGhlciB0aGUgc3RhdGVtZW50cyBoYXZlIGZpbmlzaGVkIGV4ZWN1dGluZy5cbiAgICpcbiAgICogQGRlZmF1bHQgY2RrLkR1cmF0aW9uLnNlY29uZHMoMTUpXG4gICAqL1xuICByZWFkb25seSBwb2xsaW5nVGltZT86IGNkay5EdXJhdGlvbjtcbn1cblxuLyoqXG4gKiBTdGFnZSB0aGF0IGNvbnRhaW5zIGEgc3RlcCBmdW5jdGlvbiB0aGF0IGV4ZWN1dGVzIFJlZHNoaWZ0IERhdGEgQVBJIHN0YXRlbWVudHMuXG4gKi9cbmV4cG9ydCBjbGFzcyBSZWRzaGlmdERhdGFBcGlTdGFnZSBleHRlbmRzIFN0YXRlTWFjaGluZVN0YWdlIHtcbiAgcmVhZG9ubHkgdGFyZ2V0cz86IGV2ZW50cy5JUnVsZVRhcmdldFtdO1xuICByZWFkb25seSBldmVudFBhdHRlcm4/OiBldmVudHMuRXZlbnRQYXR0ZXJuO1xuICByZWFkb25seSBzdGF0ZU1hY2hpbmU6IHNmbi5TdGF0ZU1hY2hpbmU7XG4gIHJlYWRvbmx5IHN0YXRlTWFjaGluZUlucHV0PzogeyBba2V5OiBzdHJpbmddOiBhbnkgfTtcbiAgcmVhZG9ubHkgZXZlbnRCcmlkZ2VFdmVudFBhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIENvbnN0cnVjdHMgYFJlZHNoaWZ0RGF0YUFwaVN0YWdlYC5cbiAgICogQHBhcmFtIHNjb3BlIFNjb3BlIHdpdGhpbiB3aGljaCB0aGlzIGNvbnN0cnVjdCBpcyBkZWZpbmVkLlxuICAgKiBAcGFyYW0gaWQgSWRlbnRpZmllciBvZiB0aGUgc3RhZ2UuXG4gICAqIEBwYXJhbSBwcm9wcyBQcm9wZXJ0aWVzIGZvciB0aGUgc3RhZ2UuXG4gICAqL1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogUmVkc2hpZnREYXRhQXBpU3RhZ2VQcm9wcykge1xuICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgdGhpcy5zdGF0ZU1hY2hpbmVJbnB1dCA9IHByb3BzLnN0YXRlTWFjaGluZUlucHV0O1xuICAgIGNvbnN0IHN0YWNrID0gY2RrLlN0YWNrLm9mKHRoaXMpO1xuICAgIGNvbnN0IGRhdGFiYXNlTmFtZSA9IHByb3BzLmRhdGFiYXNlTmFtZSA/PyBcImRldlwiO1xuICAgIGNvbnN0IGRhdGFiYXNlVXNlciA9IHByb3BzLmRhdGFiYXNlVXNlciA/PyBcImF3c3VzZXJcIjtcbiAgICBjb25zdCByZWRzaGlmdENsdXN0ZXJBcm4gPSBgYXJuOmF3czpyZWRzaGlmdDoke3N0YWNrLnJlZ2lvbn06JHtzdGFjay5hY2NvdW50fTpjbHVzdGVyOiR7cHJvcHMucmVkc2hpZnRDbHVzdGVySWRlbnRpZmllcn1gO1xuICAgIGNvbnN0IHJlZHNoaWZ0RGF0YWJhc2VBcm4gPSBgYXJuOmF3czpyZWRzaGlmdDoke3N0YWNrLnJlZ2lvbn06JHtzdGFjay5hY2NvdW50fTpkYm5hbWU6JHtwcm9wcy5yZWRzaGlmdENsdXN0ZXJJZGVudGlmaWVyfS8ke2RhdGFiYXNlTmFtZX1gO1xuICAgIGNvbnN0IHJlZHNoaWZ0VXNlckFybiA9IGBhcm46YXdzOnJlZHNoaWZ0OiR7c3RhY2sucmVnaW9ufToke3N0YWNrLmFjY291bnR9OmRidXNlcjoke3Byb3BzLnJlZHNoaWZ0Q2x1c3RlcklkZW50aWZpZXJ9LyR7ZGF0YWJhc2VVc2VyfWA7XG4gICAgY29uc3QgcG9sbGluZ1RpbWUgPSBwcm9wcy5wb2xsaW5nVGltZSA/PyBjZGsuRHVyYXRpb24uc2Vjb25kcygxNSk7XG5cbiAgICBjb25zdCBiYXRjaEV4ZWN1dGVTdGF0ZW1lbnQgPSBuZXcgdGFza3MuQ2FsbEF3c1NlcnZpY2UodGhpcywgYCR7aWR9IEV4ZWN1dGUgU3RhdGVtZW50IG9uIFJlZHNoaWZ0YCwge1xuICAgICAgc2VydmljZTogXCJyZWRzaGlmdGRhdGFcIixcbiAgICAgIGFjdGlvbjogXCJiYXRjaEV4ZWN1dGVTdGF0ZW1lbnRcIixcbiAgICAgIGlhbVJlc291cmNlczogW3JlZHNoaWZ0Q2x1c3RlckFybl0sXG4gICAgICBwYXJhbWV0ZXJzOiB7XG4gICAgICAgIENsdXN0ZXJJZGVudGlmaWVyOiBwcm9wcy5yZWRzaGlmdENsdXN0ZXJJZGVudGlmaWVyLFxuICAgICAgICBEYXRhYmFzZTogZGF0YWJhc2VOYW1lLFxuICAgICAgICBTcWxzOiBwcm9wcy5zcWxTdGF0ZW1lbnRzLFxuICAgICAgICBEYlVzZXI6IGRhdGFiYXNlVXNlcixcbiAgICAgIH0sXG4gICAgICByZXN1bHRQYXRoOiBcIiQuc3FsX291dHB1dFwiLFxuICAgIH0pO1xuICAgIGNvbnN0IHdhaXQgPSBuZXcgc2ZuLldhaXQodGhpcywgXCJ3YWl0XCIsIHtcbiAgICAgIHRpbWU6IHNmbi5XYWl0VGltZS5kdXJhdGlvbihwb2xsaW5nVGltZSksXG4gICAgfSk7XG5cbiAgICBjb25zdCBkZXNjcmliZVN0YXRlbWVudCA9IG5ldyB0YXNrcy5DYWxsQXdzU2VydmljZSh0aGlzLCBgJHtpZH0gRGVzY3JpYmUgU3RhdGVtZW50IG9uIFJlZHNoaWZ0YCwge1xuICAgICAgc2VydmljZTogXCJyZWRzaGlmdGRhdGFcIixcbiAgICAgIGFjdGlvbjogXCJkZXNjcmliZVN0YXRlbWVudFwiLFxuICAgICAgaWFtUmVzb3VyY2VzOiBbcmVkc2hpZnRDbHVzdGVyQXJuXSxcbiAgICAgIHBhcmFtZXRlcnM6IHtcbiAgICAgICAgXCJJZC4kXCI6IFwiJC5zcWxfb3V0cHV0LklkXCIsXG4gICAgICB9LFxuICAgICAgcmVzdWx0UGF0aDogXCIkLnNxbF9vdXRwdXRcIixcbiAgICB9KTtcblxuICAgIGNvbnN0IGRlZmluaXRpb24gPSBiYXRjaEV4ZWN1dGVTdGF0ZW1lbnRcbiAgICAgIC5uZXh0KHdhaXQpXG4gICAgICAubmV4dChkZXNjcmliZVN0YXRlbWVudClcbiAgICAgIC5uZXh0KFxuICAgICAgICBuZXcgc2ZuLkNob2ljZSh0aGlzLCBcImNoZWNrIHN0YXR1c1wiKVxuICAgICAgICAgIC53aGVuKHNmbi5Db25kaXRpb24uc3RyaW5nRXF1YWxzKFwiJC5zcWxfb3V0cHV0LlN0YXR1c1wiLCBcIkZBSUxFRFwiKSwgbmV3IHNmbi5GYWlsKHRoaXMsIFwiZmFpbHVyZVwiKSlcbiAgICAgICAgICAud2hlbihzZm4uQ29uZGl0aW9uLnN0cmluZ0VxdWFscyhcIiQuc3FsX291dHB1dC5TdGF0dXNcIiwgXCJGSU5JU0hFRFwiKSwgbmV3IHNmbi5TdWNjZWVkKHRoaXMsIFwic3VjY2Vzc1wiKSlcbiAgICAgICAgICAub3RoZXJ3aXNlKHdhaXQpLFxuICAgICAgKTtcblxuICAgICh7IGV2ZW50UGF0dGVybjogdGhpcy5ldmVudFBhdHRlcm4sIHN0YXRlTWFjaGluZTogdGhpcy5zdGF0ZU1hY2hpbmUgfSA9IHRoaXMuY3JlYXRlU3RhdGVNYWNoaW5lKHtcbiAgICAgIGRlZmluaXRpb246IGRlZmluaXRpb24sXG4gICAgICAuLi5wcm9wcyxcbiAgICB9KSk7XG4gICAgdGhpcy5zdGF0ZU1hY2hpbmUuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcbiAgICAgICAgICBcInJlZHNoaWZ0LWRhdGE6QmF0Y2hFeGVjdXRlU3RhdGVtZW50XCIsXG4gICAgICAgICAgXCJyZWRzaGlmdC1kYXRhOkxpc3RTdGF0ZW1lbnRzXCIsXG4gICAgICAgICAgXCJyZWRzaGlmdC1kYXRhOkdldFN0YXRlbWVudFJlc3VsdFwiLFxuICAgICAgICAgIFwicmVkc2hpZnQtZGF0YTpEZXNjcmliZVN0YXRlbWVudFwiLFxuICAgICAgICAgIFwicmVkc2hpZnQtZGF0YTpFeGVjdXRlU3RhdGVtZW50XCIsXG4gICAgICAgIF0sXG4gICAgICAgIHJlc291cmNlczogW1wiKlwiXSxcbiAgICAgIH0pLFxuICAgICk7XG4gICAgdGhpcy5zdGF0ZU1hY2hpbmUuYWRkVG9Sb2xlUG9saWN5KFxuICAgICAgbmV3IGlhbS5Qb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICBlZmZlY3Q6IGlhbS5FZmZlY3QuQUxMT1csXG4gICAgICAgIGFjdGlvbnM6IFtcInJlZHNoaWZ0OkdldENsdXN0ZXJDcmVkZW50aWFsc1wiXSxcbiAgICAgICAgcmVzb3VyY2VzOiBbcmVkc2hpZnRDbHVzdGVyQXJuLCByZWRzaGlmdERhdGFiYXNlQXJuLCByZWRzaGlmdFVzZXJBcm5dLFxuICAgICAgfSksXG4gICAgKTtcbiAgfVxufVxuIl19