@cdklabs/aws-data-solutions-framework
Version:
L3 CDK Constructs used to build data solutions with AWS
57 lines • 9.25 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,
});
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'),
});
/// !show
// IAM role that is used to start the execution and monitor its state
const startJobRole = aws_iam_1.Role.fromRoleName(this, 'StartJobRole', 'StartJobRole');
lib_1.SparkEmrContainersRuntime.grantStartJobExecution(startJobRole, [execRole.roleArn], virtualCluster.attrArn);
/// !hide
}
}
const app = new cdk.App();
new ExampleSparkEmrContainersStack(app, 'ExampleSparkEmrServerlessStack');
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcmstZW1yLXJ1bnRpbWUtY29udGFpbmVycy1ncmFudC1leGVjdXRpb24ubGl0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3Byb2Nlc3NpbmcvZXhhbXBsZXMvc3BhcmstZW1yLXJ1bnRpbWUtY29udGFpbmVycy1ncmFudC1leGVjdXRpb24ubGl0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbUNBQW1DO0FBQ25DLGlEQUFrRztBQUVsRyxnQ0FBbUQ7QUFDbkQsZ0ZBQW9FO0FBR3BFLE1BQU0sOEJBQStCLFNBQVEsR0FBRyxDQUFDLEtBQUs7SUFDbEQsWUFBWSxLQUFnQixFQUFFLEVBQVU7UUFDcEMsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVqQixnRUFBZ0U7UUFDaEUsTUFBTSxZQUFZLEdBQUcsSUFBSSwwQ0FBZSxDQUFDLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUUvRCxNQUFNLGFBQWEsR0FBRywrQkFBeUIsQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFO1lBQzlELFlBQVksRUFBRSxjQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxjQUFjLEVBQUcsbURBQW1ELENBQUM7WUFDMUcsaUJBQWlCLEVBQUUsQ0FBQyxhQUFhLENBQUMsRUFBRSwyRUFBMkU7WUFDL0csK0JBQStCLEVBQUUsSUFBSSxFQUFFLGlFQUFpRTtZQUN4RyxrQkFBa0IsRUFBRSxZQUFZO1NBQ25DLENBQUMsQ0FBQztRQUVILE1BQU0sTUFBTSxHQUFHLElBQUksd0JBQWMsQ0FBQztZQUM5QixVQUFVLEVBQUUsQ0FBQyxJQUFJLHlCQUFlLENBQUM7b0JBQy9CLE9BQU8sRUFBRTt3QkFDUCxjQUFjO3FCQUNmO29CQUNELFNBQVMsRUFBRSxDQUFDLDJDQUEyQyxDQUFDO2lCQUN6RCxDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7UUFFSCxNQUFNLFlBQVksR0FBRyxJQUFJLHVCQUFhLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUMzRCxRQUFRLEVBQUUsTUFBTTtTQUNqQixDQUFDLENBQUM7UUFHTCxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFO1lBQzVELElBQUksRUFBRSxVQUFVO1lBQ2hCLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLFlBQVksRUFBRSxZQUFZO1NBQzdCLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsVUFBVSxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztRQUVuSCxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxzQkFBc0IsQ0FBQyxJQUFJLEVBQUUsb0JBQW9CLEVBQUU7WUFDekYsZ0JBQWdCLEVBQUUsY0FBYyxDQUFDLE1BQU07WUFDdkMsbUJBQW1CLEVBQUUsb0JBQW9CO1lBQ3pDLGFBQWEsRUFBRSxRQUFRO1NBQ3hCLENBQUMsQ0FBQztRQUNKLHFCQUFxQjtRQUNyQixJQUFJLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLG1CQUFtQixFQUFFO1lBQ3pDLEtBQUssRUFBRSxjQUFjLENBQUMsT0FBTztTQUNoQyxDQUFDLENBQUM7UUFFSCx5QkFBeUI7UUFDekIsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSx1QkFBdUIsRUFBRTtZQUM5QyxLQUFLLEVBQUUsa0JBQWtCLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQztTQUM5QyxDQUFDLENBQUM7UUFDSixTQUFTO1FBQ1QscUVBQXFFO1FBQ3JFLE1BQU0sWUFBWSxHQUFVLGNBQUksQ0FBQyxZQUFZLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUVwRiwrQkFBeUIsQ0FBQyxzQkFBc0IsQ0FBQyxZQUFZLEVBQUUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzNHLFNBQVM7SUFDYixDQUFDO0NBQ0o7QUFHRCxNQUFNLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUMxQixJQUFJLDhCQUE4QixDQUFDLEdBQUcsRUFBRSxnQ0FBZ0MsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IElSb2xlLCBNYW5hZ2VkUG9saWN5LCBQb2xpY3lEb2N1bWVudCwgUG9saWN5U3RhdGVtZW50LCBSb2xlIH0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWlhbSc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IFNwYXJrRW1yQ29udGFpbmVyc1J1bnRpbWUgfSBmcm9tICcuLi9saWInO1xuaW1wb3J0IHsgS3ViZWN0bFYzM0xheWVyIH0gZnJvbSAnQGF3cy1jZGsvbGFtYmRhLWxheWVyLWt1YmVjdGwtdjMzJztcblxuXG5jbGFzcyBFeGFtcGxlU3BhcmtFbXJDb250YWluZXJzU3RhY2sgZXh0ZW5kcyBjZGsuU3RhY2sge1xuICAgIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgICAgICAvL0xheWVyIG11c3QgYmUgY2hhbmdlZCBhY2NvcmRpbmcgdG8gdGhlIEt1YmVybmV0ZXMgdmVyc2lvbiB1c2VkXG4gICAgICAgIGNvbnN0IGt1YmVjdGxMYXllciA9IG5ldyBLdWJlY3RsVjMzTGF5ZXIodGhpcywgJ2t1YmVjdGxMYXllcicpO1xuXG4gICAgICAgIGNvbnN0IGVtckVrc0NsdXN0ZXIgPSBTcGFya0VtckNvbnRhaW5lcnNSdW50aW1lLmdldE9yQ3JlYXRlKHRoaXMsIHtcbiAgICAgICAgICAgIGVrc0FkbWluUm9sZTogUm9sZS5mcm9tUm9sZUFybih0aGlzLCAnRWtzQWRtaW5Sb2xlJyAsICdhcm46YXdzOmlhbTo6MTIzNDU2Nzg5MTI6cm9sZS9yb2xlLW5hbWUtd2l0aC1wYXRoJyksXG4gICAgICAgICAgICBwdWJsaWNBY2Nlc3NDSURSczogWycxMC4wLjAuMC8zMiddLCAvLyBUaGUgbGlzdCBvZiBwdWJsaWMgSVAgYWRkcmVzc2VzIGZyb20gd2hpY2ggdGhlIGNsdXN0ZXIgY2FuIGJlIGFjY2Vzc2libGVcbiAgICAgICAgICAgIGNyZWF0ZUVtck9uRWtzU2VydmljZUxpbmtlZFJvbGU6IHRydWUsIC8vaWYgdGhlIHRoZSBzZXJ2aWNlIGxpbmtlZCByb2xlIGFscmVhZHkgZXhpc3RzIHNldCB0aGlzIHRvIGZhbHNlXG4gICAgICAgICAgICBrdWJlY3RsTGFtYmRhTGF5ZXI6IGt1YmVjdGxMYXllcixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgY29uc3QgczNSZWFkID0gbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgICAgICAgIHN0YXRlbWVudHM6IFtuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICAgICAgICdzMzpHZXRPYmplY3QnLFxuICAgICAgICAgICAgICBdLFxuICAgICAgICAgICAgICByZXNvdXJjZXM6IFsnYXJuOmF3czpzMzo6OmF3cy1kYXRhLWFuYWx5dGljcy13b3Jrc2hvcHMnXSxcbiAgICAgICAgICAgIH0pXSxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIGNvbnN0IHMzUmVhZFBvbGljeSA9IG5ldyBNYW5hZ2VkUG9saWN5KHRoaXMsICdzM1JlYWRQb2xpY3knLCB7XG4gICAgICAgICAgICBkb2N1bWVudDogczNSZWFkLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgIFxuICAgICAgICBjb25zdCB2aXJ0dWFsQ2x1c3RlciA9IGVtckVrc0NsdXN0ZXIuYWRkRW1yVmlydHVhbENsdXN0ZXIodGhpcywge1xuICAgICAgICAgICAgbmFtZTogJ2RhaWx5am9iJyxcbiAgICAgICAgICAgIGNyZWF0ZU5hbWVzcGFjZTogdHJ1ZSxcbiAgICAgICAgICAgIGVrc05hbWVzcGFjZTogJ2RhaWx5am9ibnMnLFxuICAgICAgICB9KTtcblxuICAgICAgICBjb25zdCBleGVjUm9sZSA9IGVtckVrc0NsdXN0ZXIuY3JlYXRlRXhlY3V0aW9uUm9sZSh0aGlzLCAnRXhlY1JvbGUnLCBzM1JlYWRQb2xpY3ksICdkYWlseWpvYm5zJywgJ3MzUmVhZEV4ZWNSb2xlJyk7XG5cbiAgICAgICAgY29uc3QgaW50ZXJhY3RpdmVTZXNzaW9uID0gZW1yRWtzQ2x1c3Rlci5hZGRJbnRlcmFjdGl2ZUVuZHBvaW50KHRoaXMsICdpbnRlcmFjdGl2ZVNlc3Npb24nLCB7XG4gICAgICAgICAgIHZpcnR1YWxDbHVzdGVySWQ6IHZpcnR1YWxDbHVzdGVyLmF0dHJJZCxcbiAgICAgICAgICAgbWFuYWdlZEVuZHBvaW50TmFtZTogJ2ludGVyYWN0aXZlU2Vzc2lvbicsXG4gICAgICAgICAgIGV4ZWN1dGlvblJvbGU6IGV4ZWNSb2xlLFxuICAgICAgICAgfSk7XG4gICAgICAgIC8vVmlydHVhbCBDbHVzdGVyIEFSTlxuICAgICAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCAndmlydHVhbENsdXN0ZXJBcm4nLCB7XG4gICAgICAgICAgICB2YWx1ZTogdmlydHVhbENsdXN0ZXIuYXR0ckFybixcbiAgICAgICAgfSk7XG5cbiAgICAgICAgLy9JbnRlcmFjdGl2ZSBzZXNzaW9uIEFSTlxuICAgICAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCAnaW50ZXJhY3RpdmVTZXNzaW9uQXJuJywge1xuICAgICAgICAgICB2YWx1ZTogaW50ZXJhY3RpdmVTZXNzaW9uLmdldEF0dFN0cmluZygnYXJuJyksXG4gICAgICAgICB9KTtcbiAgICAgICAgLy8vICFzaG93XG4gICAgICAgIC8vIElBTSByb2xlIHRoYXQgaXMgdXNlZCB0byBzdGFydCB0aGUgZXhlY3V0aW9uIGFuZCBtb25pdG9yIGl0cyBzdGF0ZVxuICAgICAgICBjb25zdCBzdGFydEpvYlJvbGU6IElSb2xlID0gUm9sZS5mcm9tUm9sZU5hbWUodGhpcywgJ1N0YXJ0Sm9iUm9sZScsICdTdGFydEpvYlJvbGUnKTsgXG5cbiAgICAgICAgU3BhcmtFbXJDb250YWluZXJzUnVudGltZS5ncmFudFN0YXJ0Sm9iRXhlY3V0aW9uKHN0YXJ0Sm9iUm9sZSwgW2V4ZWNSb2xlLnJvbGVBcm5dLCB2aXJ0dWFsQ2x1c3Rlci5hdHRyQXJuKTtcbiAgICAgICAgLy8vICFoaWRlXG4gICAgfVxufVxuXG5cbmNvbnN0IGFwcCA9IG5ldyBjZGsuQXBwKCk7XG5uZXcgRXhhbXBsZVNwYXJrRW1yQ29udGFpbmVyc1N0YWNrKGFwcCwgJ0V4YW1wbGVTcGFya0VtclNlcnZlcmxlc3NTdGFjaycpO1xuIl19