@cdklabs/aws-data-solutions-framework
Version:
L3 CDK Constructs used to build data solutions with AWS
54 lines • 8.31 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const cdk = require("aws-cdk-lib");
const aws_iam_1 = require("aws-cdk-lib/aws-iam");
const lib_1 = require("../lib");
const lambda_layer_kubectl_v33_1 = require("@aws-cdk/lambda-layer-kubectl-v33");
class ExampleSparkEmrContainersStack extends cdk.Stack {
constructor(scope, id) {
super(scope, id);
//Layer must be changed according to the Kubernetes version used
const kubectlLayer = new lambda_layer_kubectl_v33_1.KubectlV33Layer(this, 'kubectlLayer');
const emrEksCluster = lib_1.SparkEmrContainersRuntime.getOrCreate(this, {
eksAdminRole: aws_iam_1.Role.fromRoleArn(this, 'EksAdminRole', 'arn:aws:iam::12345678912:role/role-name-with-path'),
publicAccessCIDRs: ['10.0.0.0/32'], // The list of public IP addresses from which the cluster can be accessible
createEmrOnEksServiceLinkedRole: true, //if the the service linked role already exists set this to false
kubectlLambdaLayer: kubectlLayer,
});
const s3Read = new aws_iam_1.PolicyDocument({
statements: [new aws_iam_1.PolicyStatement({
actions: [
's3:GetObject',
],
resources: ['arn:aws:s3:::aws-data-analytics-workshops'],
})],
});
const s3ReadPolicy = new aws_iam_1.ManagedPolicy(this, 's3ReadPolicy', {
document: s3Read,
});
/// !show
const virtualCluster = emrEksCluster.addEmrVirtualCluster(this, {
name: 'dailyjob',
createNamespace: true,
eksNamespace: 'dailyjobns',
});
const execRole = emrEksCluster.createExecutionRole(this, 'ExecRole', s3ReadPolicy, 'dailyjobns', 's3ReadExecRole');
const interactiveSession = emrEksCluster.addInteractiveEndpoint(this, 'interactiveSession', {
virtualClusterId: virtualCluster.attrId,
managedEndpointName: 'interactiveSession',
executionRole: execRole,
});
//Virtual Cluster ARN
new cdk.CfnOutput(this, 'virtualClusterArn', {
value: virtualCluster.attrArn,
});
//Interactive session ARN
new cdk.CfnOutput(this, 'interactiveSessionArn', {
value: interactiveSession.getAttString('arn'),
});
/// !hide
}
}
const app = new cdk.App();
new ExampleSparkEmrContainersStack(app, 'ExampleSparkEmrServerlessStack');
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcmstZW1yLXJ1bnRpbWUtY29udGFpbmVycy1pbnRlcmFjdGl2ZS1lbmRwb2ludC5saXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvcHJvY2Vzc2luZy9leGFtcGxlcy9zcGFyay1lbXItcnVudGltZS1jb250YWluZXJzLWludGVyYWN0aXZlLWVuZHBvaW50LmxpdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLG1DQUFtQztBQUNuQyxpREFBMkY7QUFFM0YsZ0NBQW1EO0FBQ25ELGdGQUFvRTtBQUdwRSxNQUFNLDhCQUErQixTQUFRLEdBQUcsQ0FBQyxLQUFLO0lBQ2xELFlBQVksS0FBZ0IsRUFBRSxFQUFVO1FBQ3BDLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsZ0VBQWdFO1FBQ2hFLE1BQU0sWUFBWSxHQUFHLElBQUksMENBQWUsQ0FBQyxJQUFJLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFL0QsTUFBTSxhQUFhLEdBQUcsK0JBQXlCLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRTtZQUM5RCxZQUFZLEVBQUUsY0FBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUUsY0FBYyxFQUFHLG1EQUFtRCxDQUFDO1lBQzFHLGlCQUFpQixFQUFFLENBQUMsYUFBYSxDQUFDLEVBQUUsMkVBQTJFO1lBQy9HLCtCQUErQixFQUFFLElBQUksRUFBRSxpRUFBaUU7WUFDeEcsa0JBQWtCLEVBQUUsWUFBWTtTQUNuQyxDQUFDLENBQUM7UUFFSCxNQUFNLE1BQU0sR0FBRyxJQUFJLHdCQUFjLENBQUM7WUFDOUIsVUFBVSxFQUFFLENBQUMsSUFBSSx5QkFBZSxDQUFDO29CQUMvQixPQUFPLEVBQUU7d0JBQ1AsY0FBYztxQkFDZjtvQkFDRCxTQUFTLEVBQUUsQ0FBQywyQ0FBMkMsQ0FBQztpQkFDekQsQ0FBQyxDQUFDO1NBQ0osQ0FBQyxDQUFDO1FBRUgsTUFBTSxZQUFZLEdBQUcsSUFBSSx1QkFBYSxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUU7WUFDM0QsUUFBUSxFQUFFLE1BQU07U0FDakIsQ0FBQyxDQUFDO1FBQ0wsU0FBUztRQUNULE1BQU0sY0FBYyxHQUFHLGFBQWEsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLEVBQUU7WUFDNUQsSUFBSSxFQUFFLFVBQVU7WUFDaEIsZUFBZSxFQUFFLElBQUk7WUFDckIsWUFBWSxFQUFFLFlBQVk7U0FDN0IsQ0FBQyxDQUFDO1FBRUgsTUFBTSxRQUFRLEdBQUcsYUFBYSxDQUFDLG1CQUFtQixDQUFDLElBQUksRUFBRSxVQUFVLEVBQUUsWUFBWSxFQUFFLFlBQVksRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO1FBRW5ILE1BQU0sa0JBQWtCLEdBQUcsYUFBYSxDQUFDLHNCQUFzQixDQUFDLElBQUksRUFBRSxvQkFBb0IsRUFBRTtZQUN6RixnQkFBZ0IsRUFBRSxjQUFjLENBQUMsTUFBTTtZQUN2QyxtQkFBbUIsRUFBRSxvQkFBb0I7WUFDekMsYUFBYSxFQUFFLFFBQVE7U0FDeEIsQ0FBQyxDQUFDO1FBRUoscUJBQXFCO1FBQ3JCLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLEVBQUU7WUFDekMsS0FBSyxFQUFFLGNBQWMsQ0FBQyxPQUFPO1NBQ2hDLENBQUMsQ0FBQztRQUVILHlCQUF5QjtRQUN6QixJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLHVCQUF1QixFQUFFO1lBQzlDLEtBQUssRUFBRSxrQkFBa0IsQ0FBQyxZQUFZLENBQUMsS0FBSyxDQUFDO1NBQzlDLENBQUMsQ0FBQztRQUNKLFNBQVM7SUFDYixDQUFDO0NBQ0o7QUFHRCxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixJQUFJLDhCQUE4QixDQUFDLEdBQUcsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IE1hbmFnZWRQb2xpY3ksIFBvbGljeURvY3VtZW50LCBQb2xpY3lTdGF0ZW1lbnQsIFJvbGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgU3BhcmtFbXJDb250YWluZXJzUnVudGltZSB9IGZyb20gJy4uL2xpYic7XG5pbXBvcnQgeyBLdWJlY3RsVjMzTGF5ZXIgfSBmcm9tICdAYXdzLWNkay9sYW1iZGEtbGF5ZXIta3ViZWN0bC12MzMnO1xuXG5cbmNsYXNzIEV4YW1wbGVTcGFya0VtckNvbnRhaW5lcnNTdGFjayBleHRlbmRzIGNkay5TdGFjayB7XG4gICAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZykge1xuICAgICAgICBzdXBlcihzY29wZSwgaWQpO1xuXG4gICAgICAgIC8vTGF5ZXIgbXVzdCBiZSBjaGFuZ2VkIGFjY29yZGluZyB0byB0aGUgS3ViZXJuZXRlcyB2ZXJzaW9uIHVzZWRcbiAgICAgICAgY29uc3Qga3ViZWN0bExheWVyID0gbmV3IEt1YmVjdGxWMzNMYXllcih0aGlzLCAna3ViZWN0bExheWVyJyk7XG5cbiAgICAgICAgY29uc3QgZW1yRWtzQ2x1c3RlciA9IFNwYXJrRW1yQ29udGFpbmVyc1J1bnRpbWUuZ2V0T3JDcmVhdGUodGhpcywge1xuICAgICAgICAgICAgZWtzQWRtaW5Sb2xlOiBSb2xlLmZyb21Sb2xlQXJuKHRoaXMsICdFa3NBZG1pblJvbGUnICwgJ2Fybjphd3M6aWFtOjoxMjM0NTY3ODkxMjpyb2xlL3JvbGUtbmFtZS13aXRoLXBhdGgnKSxcbiAgICAgICAgICAgIHB1YmxpY0FjY2Vzc0NJRFJzOiBbJzEwLjAuMC4wLzMyJ10sIC8vIFRoZSBsaXN0IG9mIHB1YmxpYyBJUCBhZGRyZXNzZXMgZnJvbSB3aGljaCB0aGUgY2x1c3RlciBjYW4gYmUgYWNjZXNzaWJsZVxuICAgICAgICAgICAgY3JlYXRlRW1yT25Fa3NTZXJ2aWNlTGlua2VkUm9sZTogdHJ1ZSwgLy9pZiB0aGUgdGhlIHNlcnZpY2UgbGlua2VkIHJvbGUgYWxyZWFkeSBleGlzdHMgc2V0IHRoaXMgdG8gZmFsc2VcbiAgICAgICAgICAgIGt1YmVjdGxMYW1iZGFMYXllcjoga3ViZWN0bExheWVyLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBzM1JlYWQgPSBuZXcgUG9saWN5RG9jdW1lbnQoe1xuICAgICAgICAgICAgc3RhdGVtZW50czogW25ldyBQb2xpY3lTdGF0ZW1lbnQoe1xuICAgICAgICAgICAgICBhY3Rpb25zOiBbXG4gICAgICAgICAgICAgICAgJ3MzOkdldE9iamVjdCcsXG4gICAgICAgICAgICAgIF0sXG4gICAgICAgICAgICAgIHJlc291cmNlczogWydhcm46YXdzOnMzOjo6YXdzLWRhdGEtYW5hbHl0aWNzLXdvcmtzaG9wcyddLFxuICAgICAgICAgICAgfSldLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgY29uc3QgczNSZWFkUG9saWN5ID0gbmV3IE1hbmFnZWRQb2xpY3kodGhpcywgJ3MzUmVhZFBvbGljeScsIHtcbiAgICAgICAgICAgIGRvY3VtZW50OiBzM1JlYWQsXG4gICAgICAgICAgfSk7XG4gICAgICAgIC8vLyAhc2hvd1xuICAgICAgICBjb25zdCB2aXJ0dWFsQ2x1c3RlciA9IGVtckVrc0NsdXN0ZXIuYWRkRW1yVmlydHVhbENsdXN0ZXIodGhpcywge1xuICAgICAgICAgICAgbmFtZTogJ2RhaWx5am9iJyxcbiAgICAgICAgICAgIGNyZWF0ZU5hbWVzcGFjZTogdHJ1ZSxcbiAgICAgICAgICAgIGVrc05hbWVzcGFjZTogJ2RhaWx5am9ibnMnLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBleGVjUm9sZSA9IGVtckVrc0NsdXN0ZXIuY3JlYXRlRXhlY3V0aW9uUm9sZSh0aGlzLCAnRXhlY1JvbGUnLCBzM1JlYWRQb2xpY3ksICdkYWlseWpvYm5zJywgJ3MzUmVhZEV4ZWNSb2xlJyk7XG5cbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVTZXNzaW9uID0gZW1yRWtzQ2x1c3Rlci5hZGRJbnRlcmFjdGl2ZUVuZHBvaW50KHRoaXMsICdpbnRlcmFjdGl2ZVNlc3Npb24nLCB7XG4gICAgICAgICAgIHZpcnR1YWxDbHVzdGVySWQ6IHZpcnR1YWxDbHVzdGVyLmF0dHJJZCxcbiAgICAgICAgICAgbWFuYWdlZEVuZHBvaW50TmFtZTogJ2ludGVyYWN0aXZlU2Vzc2lvbicsXG4gICAgICAgICAgIGV4ZWN1dGlvblJvbGU6IGV4ZWNSb2xlLFxuICAgICAgICAgfSk7XG5cbiAgICAgICAgLy9WaXJ0dWFsIENsdXN0ZXIgQVJOXG4gICAgICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsICd2aXJ0dWFsQ2x1c3RlckFybicsIHtcbiAgICAgICAgICAgIHZhbHVlOiB2aXJ0dWFsQ2x1c3Rlci5hdHRyQXJuLFxuICAgICAgICB9KTtcblxuICAgICAgICAvL0ludGVyYWN0aXZlIHNlc3Npb24gQVJOXG4gICAgICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsICdpbnRlcmFjdGl2ZVNlc3Npb25Bcm4nLCB7XG4gICAgICAgICAgIHZhbHVlOiBpbnRlcmFjdGl2ZVNlc3Npb24uZ2V0QXR0U3RyaW5nKCdhcm4nKSxcbiAgICAgICAgIH0pO1xuICAgICAgICAvLy8gIWhpZGVcbiAgICB9XG59XG5cblxuY29uc3QgYXBwID0gbmV3IGNkay5BcHAoKTtcbm5ldyBFeGFtcGxlU3BhcmtFbXJDb250YWluZXJzU3RhY2soYXBwLCAnRXhhbXBsZVNwYXJrRW1yU2VydmVybGVzc1N0YWNrJyk7XG4iXX0=