@cdklabs/aws-data-solutions-framework
Version:
L3 CDK Constructs used to build data solutions with AWS
89 lines • 12.6 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const aws_cdk_lib_1 = require("aws-cdk-lib");
const lib_1 = require("../lib");
const aws_ec2_1 = require("aws-cdk-lib/aws-ec2");
const aws_secretsmanager_1 = require("aws-cdk-lib/aws-secretsmanager");
/// !show
class ExampleRedshiftDataSharingCrossAccountAStack extends aws_cdk_lib_1.Stack {
constructor(scope, id) {
super(scope, id);
const redshiftAdminSecret = aws_secretsmanager_1.Secret.fromSecretPartialArn(this, 'RedshiftAdminCredentials', 'arn:aws:secretsmanager:us-east-1:XXXXXXXX:secret:YYYYYYYY');
const redshiftVpc = aws_ec2_1.Vpc.fromLookup(this, 'RedshiftVpc', {
vpcId: 'XXXXXXXX',
});
const dataAccess = new lib_1.RedshiftData(this, 'RedshiftDataAccess', {
workgroupId: 'XXXXXXXXXXXXXXX',
secret: redshiftAdminSecret,
vpc: redshiftVpc,
subnets: redshiftVpc.selectSubnets({
subnetGroupName: 'YYYYYYYY'
}),
createInterfaceVpcEndpoint: true,
executionTimeout: aws_cdk_lib_1.Duration.minutes(10),
});
const dataShare = new lib_1.RedshiftDataSharing(this, 'RedshiftDataShare', {
redshiftData: dataAccess,
workgroupId: 'XXXXXXXXXXXXXXX',
secret: redshiftAdminSecret,
vpc: redshiftVpc,
subnets: redshiftVpc.selectSubnets({
subnetGroupName: 'YYYYYYYY'
}),
createInterfaceVpcEndpoint: true,
executionTimeout: aws_cdk_lib_1.Duration.minutes(10),
});
const share = dataShare.createShare('ProducerShare', 'default', 'example_share', 'public', ['public.customers']);
const grantToConsumer = dataShare.grant('GrantToConsumer', {
dataShareName: 'example_share',
databaseName: 'default',
autoAuthorized: true,
accountId: "<CONSUMER_ACCOUNT_ID>",
dataShareArn: '<DATASHARE_ARN>',
});
grantToConsumer.resource.node.addDependency(share);
}
}
class ExampleRedshiftDataSharingCrossAccountBStack extends aws_cdk_lib_1.Stack {
constructor(scope, id) {
super(scope, id);
const redshiftAdminSecret = aws_secretsmanager_1.Secret.fromSecretPartialArn(this, 'RedshiftAdminCredentials', 'arn:aws:secretsmanager:us-east-1:XXXXXXXX:secret:YYYYYYYY');
const redshiftVpc = aws_ec2_1.Vpc.fromLookup(this, 'RedshiftVpc', {
vpcId: 'XXXXXXXX',
});
const dataAccess = new lib_1.RedshiftData(this, 'RedshiftDataAccess', {
workgroupId: 'XXXXXXXXXXXXXXX',
secret: redshiftAdminSecret,
vpc: redshiftVpc,
subnets: redshiftVpc.selectSubnets({
subnetGroupName: 'YYYYYYYY'
}),
createInterfaceVpcEndpoint: true,
executionTimeout: aws_cdk_lib_1.Duration.minutes(10),
});
const dataShare = new lib_1.RedshiftDataSharing(this, 'RedshiftDataShare', {
redshiftData: dataAccess,
workgroupId: 'XXXXXXXXXXXXXXX',
secret: redshiftAdminSecret,
vpc: redshiftVpc,
subnets: redshiftVpc.selectSubnets({
subnetGroupName: 'YYYYYYYY'
}),
createInterfaceVpcEndpoint: true,
executionTimeout: aws_cdk_lib_1.Duration.minutes(10),
});
dataShare.createDatabaseFromShare('ProducerShare', {
consumerNamespaceArn: '',
newDatabaseName: 'db_from_share',
databaseName: 'default',
dataShareName: 'example_share',
dataShareArn: '<DATASHARE_ARN>',
accountId: "<PRODUCER_ACCOUNT_ID>",
});
}
}
/// !hide
const app = new aws_cdk_lib_1.App();
new ExampleRedshiftDataSharingCrossAccountAStack(app, "ExampleRedshiftDataSharingCrossAccountAStack");
new ExampleRedshiftDataSharingCrossAccountBStack(app, "ExampleRedshiftDataSharingCrossAccountBStack");
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkc2hpZnQtZGF0YS1zaGFyaW5nLWJ5b2MubGl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbnN1bXB0aW9uL2V4YW1wbGVzL3JlZHNoaWZ0LWRhdGEtc2hhcmluZy1ieW9jLmxpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLDZDQUFtRDtBQUVuRCxnQ0FBMkQ7QUFDM0QsaURBQTBDO0FBQzFDLHVFQUF3RDtBQUN4RCxTQUFTO0FBQ1QsTUFBTSw0Q0FBNkMsU0FBUSxtQkFBSztJQUM5RCxZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUN0QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFBO1FBRWhCLE1BQU0sbUJBQW1CLEdBQUcsMkJBQU0sQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUUsMEJBQTBCLEVBQUUsMkRBQTJELENBQUMsQ0FBQztRQUV2SixNQUFNLFdBQVcsR0FBRyxhQUFHLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUU7WUFDdEQsS0FBSyxFQUFFLFVBQVU7U0FDbEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxVQUFVLEdBQUcsSUFBSSxrQkFBWSxDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRTtZQUM5RCxXQUFXLEVBQUUsaUJBQWlCO1lBQzlCLE1BQU0sRUFBRSxtQkFBbUI7WUFDM0IsR0FBRyxFQUFFLFdBQVc7WUFDaEIsT0FBTyxFQUFFLFdBQVcsQ0FBQyxhQUFhLENBQUM7Z0JBQ2pDLGVBQWUsRUFBRSxVQUFVO2FBQzVCLENBQUM7WUFDRiwwQkFBMEIsRUFBRSxJQUFJO1lBQ2hDLGdCQUFnQixFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUN2QyxDQUFDLENBQUM7UUFFSCxNQUFNLFNBQVMsR0FBRyxJQUFJLHlCQUFtQixDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRTtZQUNuRSxZQUFZLEVBQUUsVUFBVTtZQUN4QixXQUFXLEVBQUUsaUJB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bXBvcnQgeyBBcHAsIER1cmF0aW9uLCBTdGFjayB9IGZyb20gXCJhd3MtY2RrLWxpYlwiO1xuaW1wb3J0IHsgQ29uc3RydWN0IH0gZnJvbSBcImNvbnN0cnVjdHNcIjtcbmltcG9ydCB7IFJlZHNoaWZ0RGF0YSwgUmVkc2hpZnREYXRhU2hhcmluZyB9IGZyb20gXCIuLi9saWJcIjtcbmltcG9ydCB7IFZwYyB9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtZWMyXCI7XG5pbXBvcnQgeyBTZWNyZXQgfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLXNlY3JldHNtYW5hZ2VyXCI7XG4vLy8gIXNob3dcbmNsYXNzIEV4YW1wbGVSZWRzaGlmdERhdGFTaGFyaW5nQ3Jvc3NBY2NvdW50QVN0YWNrIGV4dGVuZHMgU3RhY2sge1xuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nKSB7XG4gICAgc3VwZXIoc2NvcGUsIGlkKVxuXG4gICAgY29uc3QgcmVkc2hpZnRBZG1pblNlY3JldCA9IFNlY3JldC5mcm9tU2VjcmV0UGFydGlhbEFybih0aGlzLCAnUmVkc2hpZnRBZG1pbkNyZWRlbnRpYWxzJywgJ2Fybjphd3M6c2VjcmV0c21hbmFnZXI6dXMtZWFzdC0xOlhYWFhYWFhYOnNlY3JldDpZWVlZWVlZWScpO1xuXG4gICAgY29uc3QgcmVkc2hpZnRWcGMgPSBWcGMuZnJvbUxvb2t1cCh0aGlzLCAnUmVkc2hpZnRWcGMnLCB7XG4gICAgICB2cGNJZDogJ1hYWFhYWFhYJyxcbiAgICB9KTtcblxuICAgIGNvbnN0IGRhdGFBY2Nlc3MgPSBuZXcgUmVkc2hpZnREYXRhKHRoaXMsICdSZWRzaGlmdERhdGFBY2Nlc3MnLCB7XG4gICAgICB3b3JrZ3JvdXBJZDogJ1hYWFhYWFhYWFhYWFhYWCcsXG4gICAgICBzZWNyZXQ6IHJlZHNoaWZ0QWRtaW5TZWNyZXQsXG4gICAgICB2cGM6IHJlZHNoaWZ0VnBjLFxuICAgICAgc3VibmV0czogcmVkc2hpZnRWcGMuc2VsZWN0U3VibmV0cyh7XG4gICAgICAgIHN1Ym5ldEdyb3VwTmFtZTogJ1lZWVlZWVlZJ1xuICAgICAgfSksXG4gICAgICBjcmVhdGVJbnRlcmZhY2VWcGNFbmRwb2ludDogdHJ1ZSxcbiAgICAgIGV4ZWN1dGlvblRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTApLFxuICAgIH0pO1xuXG4gICAgY29uc3QgZGF0YVNoYXJlID0gbmV3IFJlZHNoaWZ0RGF0YVNoYXJpbmcodGhpcywgJ1JlZHNoaWZ0RGF0YVNoYXJlJywge1xuICAgICAgcmVkc2hpZnREYXRhOiBkYXRhQWNjZXNzLFxuICAgICAgd29ya2dyb3VwSWQ6ICdYWFhYWFhYWFhYWFhYWFgnLFxuICAgICAgc2VjcmV0OiByZWRzaGlmdEFkbWluU2VjcmV0LFxuICAgICAgdnBjOiByZWRzaGlmdFZwYyxcbiAgICAgIHN1Ym5ldHM6IHJlZHNoaWZ0VnBjLnNlbGVjdFN1Ym5ldHMoe1xuICAgICAgICBzdWJuZXRHcm91cE5hbWU6ICdZWVlZWVlZWSdcbiAgICAgIH0pLFxuICAgICAgY3JlYXRlSW50ZXJmYWNlVnBjRW5kcG9pbnQ6IHRydWUsXG4gICAgICBleGVjdXRpb25UaW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDEwKSxcbiAgICB9KTtcblxuICAgIGNvbnN0IHNoYXJlID0gZGF0YVNoYXJlLmNyZWF0ZVNoYXJlKCdQcm9kdWNlclNoYXJlJywgJ2RlZmF1bHQnLCAnZXhhbXBsZV9zaGFyZScsICdwdWJsaWMnLCBbJ3B1YmxpYy5jdXN0b21lcnMnXSk7XG4gICAgXG4gICAgY29uc3QgZ3JhbnRUb0NvbnN1bWVyID0gZGF0YVNoYXJlLmdyYW50KCdHcmFudFRvQ29uc3VtZXInLCB7XG4gICAgICBkYXRhU2hhcmVOYW1lOiAnZXhhbXBsZV9zaGFyZScsIFxuICAgICAgZGF0YWJhc2VOYW1lOiAnZGVmYXVsdCcsXG4gICAgICBhdXRvQXV0aG9yaXplZDogdHJ1ZSxcbiAgICAgIGFjY291bnRJZDogXCI8Q09OU1VNRVJfQUNDT1VOVF9JRD5cIixcbiAgICAgIGRhdGFTaGFyZUFybjogJzxEQVRBU0hBUkVfQVJOPicsXG4gICAgfSk7XG4gICAgXG4gICAgZ3JhbnRUb0NvbnN1bWVyLnJlc291cmNlLm5vZGUuYWRkRGVwZW5kZW5jeShzaGFyZSk7XG4gIH1cbn1cblxuY2xhc3MgRXhhbXBsZVJlZHNoaWZ0RGF0YVNoYXJpbmdDcm9zc0FjY291bnRCU3RhY2sgZXh0ZW5kcyBTdGFjayB7XG4gICAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZykge1xuICAgICAgc3VwZXIoc2NvcGUsIGlkKVxuICBcbiAgICAgIGNvbnN0IHJlZHNoaWZ0QWRtaW5TZWNyZXQgPSBTZWNyZXQuZnJvbVNlY3JldFBhcnRpYWxBcm4odGhpcywgJ1JlZHNoaWZ0QWRtaW5DcmVkZW50aWFscycsICdhcm46YXdzOnNlY3JldHNtYW5hZ2VyOnVzLWVhc3QtMTpYWFhYWFhYWDpzZWNyZXQ6WVlZWVlZWVknKTtcblxuICAgICAgY29uc3QgcmVkc2hpZnRWcGMgPSBWcGMuZnJvbUxvb2t1cCh0aGlzLCAnUmVkc2hpZnRWcGMnLCB7XG4gICAgICAgIHZwY0lkOiAnWFhYWFhYWFgnLFxuICAgICAgfSk7XG4gIFxuICAgICAgY29uc3QgZGF0YUFjY2VzcyA9IG5ldyBSZWRzaGlmdERhdGEodGhpcywgJ1JlZHNoaWZ0RGF0YUFjY2VzcycsIHtcbiAgICAgICAgd29ya2dyb3VwSWQ6ICdYWFhYWFhYWFhYWFhYWFgnLFxuICAgICAgICBzZWNyZXQ6IHJlZHNoaWZ0QWRtaW5TZWNyZXQsXG4gICAgICAgIHZwYzogcmVkc2hpZnRWcGMsXG4gICAgICAgIHN1Ym5ldHM6IHJlZHNoaWZ0VnBjLnNlbGVjdFN1Ym5ldHMoe1xuICAgICAgICAgIHN1Ym5ldEdyb3VwTmFtZTogJ1lZWVlZWVlZJ1xuICAgICAgICB9KSxcbiAgICAgICAgY3JlYXRlSW50ZXJmYWNlVnBjRW5kcG9pbnQ6IHRydWUsXG4gICAgICAgIGV4ZWN1dGlvblRpbWVvdXQ6IER1cmF0aW9uLm1pbnV0ZXMoMTApLFxuICAgICAgfSk7XG4gIFxuICAgICAgY29uc3QgZGF0YVNoYXJlID0gbmV3IFJlZHNoaWZ0RGF0YVNoYXJpbmcodGhpcywgJ1JlZHNoaWZ0RGF0YVNoYXJlJywge1xuICAgICAgICByZWRzaGlmdERhdGE6IGRhdGFBY2Nlc3MsXG4gICAgICAgIHdvcmtncm91cElkOiAnWFhYWFhYWFhYWFhYWFhYJyxcbiAgICAgICAgc2VjcmV0OiByZWRzaGlmdEFkbWluU2VjcmV0LFxuICAgICAgICB2cGM6IHJlZHNoaWZ0VnBjLFxuICAgICAgICBzdWJuZXRzOiByZWRzaGlmdFZwYy5zZWxlY3RTdWJuZXRzKHtcbiAgICAgICAgICBzdWJuZXRHcm91cE5hbWU6ICdZWVlZWVlZWSdcbiAgICAgICAgfSksXG4gICAgICAgIGNyZWF0ZUludGVyZmFjZVZwY0VuZHBvaW50OiB0cnVlLFxuICAgICAgICBleGVjdXRpb25UaW1lb3V0OiBEdXJhdGlvbi5taW51dGVzKDEwKSxcbiAgICAgIH0pO1xuICBcbiAgICAgIGRhdGFTaGFyZS5jcmVhdGVEYXRhYmFzZUZyb21TaGFyZSgnUHJvZHVjZXJTaGFyZScsIHtcbiAgICAgICAgY29uc3VtZXJOYW1lc3BhY2VBcm46ICcnLFxuICAgICAgICBuZXdEYXRhYmFzZU5hbWU6ICdkYl9mcm9tX3NoYXJlJyxcbiAgICAgICAgZGF0YWJhc2VOYW1lOiAnZGVmYXVsdCcsXG4gICAgICAgIGRhdGFTaGFyZU5hbWU6ICdleGFtcGxlX3NoYXJlJyxcbiAgICAgICAgZGF0YVNoYXJlQXJuOiAnPERBVEFTSEFSRV9BUk4+JyxcbiAgICAgICAgYWNjb3VudElkOiBcIjxQUk9EVUNFUl9BQ0NPVU5UX0lEPlwiLFxuICAgICAgfSk7XG4gICAgfVxuICB9XG4vLy8gIWhpZGVcbmNvbnN0IGFwcCA9IG5ldyBBcHAoKTtcbm5ldyBFeGFtcGxlUmVkc2hpZnREYXRhU2hhcmluZ0Nyb3NzQWNjb3VudEFTdGFjayhhcHAsIFwiRXhhbXBsZVJlZHNoaWZ0RGF0YVNoYXJpbmdDcm9zc0FjY291bnRBU3RhY2tcIik7XG5uZXcgRXhhbXBsZVJlZHNoaWZ0RGF0YVNoYXJpbmdDcm9zc0FjY291bnRCU3RhY2soYXBwLCBcIkV4YW1wbGVSZWRzaGlmdERhdGFTaGFyaW5nQ3Jvc3NBY2NvdW50QlN0YWNrXCIpOyJdfQ==