UNPKG

@cdklabs/aws-data-solutions-framework

Version:
53 lines 8.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const aws_cdk_lib_1 = require("aws-cdk-lib"); const dsf = require("../../index"); const aws_s3_1 = require("aws-cdk-lib/aws-s3"); const aws_iam_1 = require("aws-cdk-lib/aws-iam"); class ExampleRedshiftServerlessWorkgroupBootstrapStack extends aws_cdk_lib_1.Stack { constructor(scope, id) { super(scope, id); const bucket = new aws_s3_1.Bucket(this, "ExampleDataBucket"); const ingestionRole = new aws_iam_1.Role(this, "IngestionRole", { assumedBy: new aws_iam_1.ServicePrincipal("redshift.amazonaws.com"), managedPolicies: [ aws_iam_1.ManagedPolicy.fromAwsManagedPolicyName("AmazonRedshiftAllCommandsFullAccess") ] }); bucket.grantRead(ingestionRole); const namespace = new dsf.consumption.RedshiftServerlessNamespace(this, 'DefaultRedshiftServerlessNamespace', { name: "default", dbName: 'defaultdb', }); /// !show const workgroup = new dsf.consumption.RedshiftServerlessWorkgroup(this, "DefaultRedshiftServerlessWorkgroup", { name: "default", namespace: namespace, }); // Run a custom SQL to create a customer table const createTable = workgroup.runCustomSQL('CreateCustomerTable', "defaultdb", ` CREATE TABLE customer( customer_id varchar(50), salutation varchar(5), first_name varchar(50), last_name varchar(50), email_address varchar(100) ) diststyle even `, "drop table customer"); // Run a COPY command to load data into the customer table const ingestion = workgroup.ingestData('ExampleCopy', "defaultdb", "customer", bucket, "data-products/customer/", "csv ignoreheader 1"); // Add dependencies between Redshift Data API commands because CDK cannot infer them ingestion.node.addDependency(createTable); // Create an engineering role in the defaultdb const dbRole = workgroup.createDbRole('EngineeringRole', 'defaultdb', 'engineering'); // Grant the engineering role full access to the public schema in the defaultdb const dbSchema = workgroup.grantDbSchemaToRole('EngineeringGrant', 'defaultdb', 'public', 'engineering'); // Enforce dependencies dbSchema.node.addDependency(dbRole); /// !hide } } const app = new aws_cdk_lib_1.App(); new ExampleRedshiftServerlessWorkgroupBootstrapStack(app, "ExampleRedshiftServerlessWorkgroupBootstrapStack"); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkc2hpZnQtc2VydmVybGVzcy13b3JrZ3JvdXAtYm9vdHN0cmFwLmxpdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb25zdW1wdGlvbi9leGFtcGxlcy9yZWRzaGlmdC1zZXJ2ZXJsZXNzLXdvcmtncm91cC1ib290c3RyYXAubGl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsNkNBQXlDO0FBRXpDLG1DQUFtQztBQUNuQywrQ0FBNEM7QUFDNUMsaURBQTRFO0FBRTVFLE1BQU0sZ0RBQWlELFNBQVEsbUJBQUs7SUFDbEUsWUFBWSxLQUFnQixFQUFFLEVBQVU7UUFDdEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQTtRQUVoQixNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQU0sQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLENBQUMsQ0FBQTtRQUVwRCxNQUFNLGFBQWEsR0FBRyxJQUFJLGNBQUksQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFO1lBQ3BELFNBQVMsRUFBRSxJQUFJLDBCQUFnQixDQUFDLHdCQUF3QixDQUFDO1lBQ3pELGVBQWUsRUFBRTtnQkFDZix1QkFBYSxDQUFDLHdCQUF3QixDQUFDLHFDQUFxQyxDQUFDO2FBQzlFO1NBQ0YsQ0FBQyxDQUFBO1FBRUYsTUFBTSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQTtRQUUvQixNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxXQUFXLENBQUMsMkJBQTJCLENBQUMsSUFBSSxFQUFFLG9DQUFvQyxFQUFFO1lBQzVHLElBQUksRUFBRSxTQUFTO1lBQ2YsTUFBTSxFQUFFLFdBQVc7U0FDcEIsQ0FBQyxDQUFBO1FBQ0YsU0FBUztRQUNULE1BQU0sU0FBUyxHQUFHLElBQUksR0FBRyxDQUFDLFdBQVcsQ0FBQywyQkFBMkIsQ0FBQyxJQUFJLEVBQUUsb0NBQW9DLEVBQUU7WUFDNUcsSUFBSSxFQUFFLFNBQVM7WUFDZixTQUFTLEVBQUUsU0FBUztTQUNyQixDQUFDLENBQUE7UUFFRiw4Q0FBOEM7UUFDOUMsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLFlBQVksQ0FBQyxxQkFBcUIsRUFBRSxXQUFXLEVBQzNFOzs7Ozs7Ozs7T0FTQyxFQUNELHFCQUFxQixDQUN0QixDQUFDO1FBRUYsMERBQTBEO1FBQzFELE1BQU0sU0FBUyxHQUFHLFNBQVMsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLHlCQUF5QixFQUFFLG9CQUFvQixDQUFDLENBQUM7UUFFeEksb0ZBQW9GO1FBQ3BGLFNBQVMsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTFDLDhDQUE4QztRQUM5QyxNQUFNLE1BQU0sR0FBRyxTQUFTLENBQUMsWUFBWSxDQUFDLGlCQUFpQixFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUVyRiwrRUFBK0U7UUFDL0UsTUFBTSxRQUFRLEdBQUcsU0FBUyxDQUFDLG1CQUFtQixDQUFDLGtCQUFrQixFQUFFLFdBQVcsRUFBRSxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFekcsdUJBQXVCO1FBQ3ZCLFFBQVEsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ3BDLFNBQVM7SUFDWCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLGlCQUFHLEVBQUUsQ0FBQTtBQUNyQixJQUFJLGdEQUFnRCxDQUFDLEdBQUcsRUFBRSxrREFBa0QsQ0FBQyxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQXBwLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCAqIGFzIGRzZiBmcm9tICcuLi8uLi9pbmRleCc7XG5pbXBvcnQgeyBCdWNrZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXMzXCI7XG5pbXBvcnQgeyBNYW5hZ2VkUG9saWN5LCBSb2xlLCBTZXJ2aWNlUHJpbmNpcGFsIH0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1pYW1cIjtcblxuY2xhc3MgRXhhbXBsZVJlZHNoaWZ0U2VydmVybGVzc1dvcmtncm91cEJvb3RzdHJhcFN0YWNrIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuICAgIFxuICAgIGNvbnN0IGJ1Y2tldCA9IG5ldyBCdWNrZXQodGhpcywgXCJFeGFtcGxlRGF0YUJ1Y2tldFwiKVxuICAgIFxuICAgIGNvbnN0IGluZ2VzdGlvblJvbGUgPSBuZXcgUm9sZSh0aGlzLCBcIkluZ2VzdGlvblJvbGVcIiwge1xuICAgICAgYXNzdW1lZEJ5OiBuZXcgU2VydmljZVByaW5jaXBhbChcInJlZHNoaWZ0LmFtYXpvbmF3cy5jb21cIiksXG4gICAgICBtYW5hZ2VkUG9saWNpZXM6IFtcbiAgICAgICAgTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoXCJBbWF6b25SZWRzaGlmdEFsbENvbW1hbmRzRnVsbEFjY2Vzc1wiKVxuICAgICAgXVxuICAgIH0pXG4gICAgXG4gICAgYnVja2V0LmdyYW50UmVhZChpbmdlc3Rpb25Sb2xlKVxuICAgIFxuICAgIGNvbnN0IG5hbWVzcGFjZSA9IG5ldyBkc2YuY29uc3VtcHRpb24uUmVkc2hpZnRTZXJ2ZXJsZXNzTmFtZXNwYWNlKHRoaXMsICdEZWZhdWx0UmVkc2hpZnRTZXJ2ZXJsZXNzTmFtZXNwYWNlJywge1xuICAgICAgbmFtZTogXCJkZWZhdWx0XCIsXG4gICAgICBkYk5hbWU6ICdkZWZhdWx0ZGInLFxuICAgIH0pXG4gICAgLy8vICFzaG93XG4gICAgY29uc3Qgd29ya2dyb3VwID0gbmV3IGRzZi5jb25zdW1wdGlvbi5SZWRzaGlmdFNlcnZlcmxlc3NXb3JrZ3JvdXAodGhpcywgXCJEZWZhdWx0UmVkc2hpZnRTZXJ2ZXJsZXNzV29ya2dyb3VwXCIsIHtcbiAgICAgIG5hbWU6IFwiZGVmYXVsdFwiLFxuICAgICAgbmFtZXNwYWNlOiBuYW1lc3BhY2UsXG4gICAgfSlcblxuICAgIC8vIFJ1biBhIGN1c3RvbSBTUUwgdG8gY3JlYXRlIGEgY3VzdG9tZXIgdGFibGVcbiAgICBjb25zdCBjcmVhdGVUYWJsZSA9IHdvcmtncm91cC5ydW5DdXN0b21TUUwoJ0NyZWF0ZUN1c3RvbWVyVGFibGUnLCBcImRlZmF1bHRkYlwiLCBcbiAgICAgIGBcbiAgICAgIENSRUFURSBUQUJMRSBjdXN0b21lcihcbiAgICAgICAgY3VzdG9tZXJfaWQgdmFyY2hhcig1MCksIFxuICAgICAgICBzYWx1dGF0aW9uIHZhcmNoYXIoNSksIFxuICAgICAgICBmaXJzdF9uYW1lIHZhcmNoYXIoNTApLCBcbiAgICAgICAgbGFzdF9uYW1lIHZhcmNoYXIoNTApLCBcbiAgICAgICAgZW1haWxfYWRkcmVzcyB2YXJjaGFyKDEwMClcbiAgICAgICkgXG4gICAgICBkaXN0c3R5bGUgZXZlblxuICAgICAgYCwgXG4gICAgICBcImRyb3AgdGFibGUgY3VzdG9tZXJcIlxuICAgICk7XG5cbiAgICAvLyBSdW4gYSBDT1BZIGNvbW1hbmQgdG8gbG9hZCBkYXRhIGludG8gdGhlIGN1c3RvbWVyIHRhYmxlXG4gICAgY29uc3QgaW5nZXN0aW9uID0gd29ya2dyb3VwLmluZ2VzdERhdGEoJ0V4YW1wbGVDb3B5JywgXCJkZWZhdWx0ZGJcIiwgXCJjdXN0b21lclwiLCBidWNrZXQsIFwiZGF0YS1wcm9kdWN0cy9jdXN0b21lci9cIiwgXCJjc3YgaWdub3JlaGVhZGVyIDFcIik7XG5cbiAgICAvLyBBZGQgZGVwZW5kZW5jaWVzIGJldHdlZW4gUmVkc2hpZnQgRGF0YSBBUEkgY29tbWFuZHMgYmVjYXVzZSBDREsgY2Fubm90IGluZmVyIHRoZW1cbiAgICBpbmdlc3Rpb24ubm9kZS5hZGREZXBlbmRlbmN5KGNyZWF0ZVRhYmxlKTtcblxuICAgIC8vIENyZWF0ZSBhbiBlbmdpbmVlcmluZyByb2xlIGluIHRoZSBkZWZhdWx0ZGJcbiAgICBjb25zdCBkYlJvbGUgPSB3b3JrZ3JvdXAuY3JlYXRlRGJSb2xlKCdFbmdpbmVlcmluZ1JvbGUnLCAnZGVmYXVsdGRiJywgJ2VuZ2luZWVyaW5nJyk7XG5cbiAgICAvLyBHcmFudCB0aGUgZW5naW5lZXJpbmcgcm9sZSBmdWxsIGFjY2VzcyB0byB0aGUgcHVibGljIHNjaGVtYSBpbiB0aGUgZGVmYXVsdGRiXG4gICAgY29uc3QgZGJTY2hlbWEgPSB3b3JrZ3JvdXAuZ3JhbnREYlNjaGVtYVRvUm9sZSgnRW5naW5lZXJpbmdHcmFudCcsICdkZWZhdWx0ZGInLCAncHVibGljJywgJ2VuZ2luZWVyaW5nJyk7XG5cbiAgICAvLyBFbmZvcmNlIGRlcGVuZGVuY2llc1xuICAgIGRiU2NoZW1hLm5vZGUuYWRkRGVwZW5kZW5jeShkYlJvbGUpO1xuICAgIC8vLyAhaGlkZVxuICB9XG59XG5cbmNvbnN0IGFwcCA9IG5ldyBBcHAoKVxubmV3IEV4YW1wbGVSZWRzaGlmdFNlcnZlcmxlc3NXb3JrZ3JvdXBCb290c3RyYXBTdGFjayhhcHAsIFwiRXhhbXBsZVJlZHNoaWZ0U2VydmVybGVzc1dvcmtncm91cEJvb3RzdHJhcFN0YWNrXCIpIl19