@cdklabs/aws-data-solutions-framework
Version:
L3 CDK Constructs used to build data solutions with AWS
61 lines • 8.98 kB
JavaScript
;
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
// SPDX-License-Identifier: Apache-2.0
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");
/// !show
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',
'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', // the namespace of the virtual cluster
's3ReadExecRole'); //the IAM role name
new cdk.CfnOutput(this, 'virtualClusterArn', {
value: virtualCluster.attrArn,
});
new cdk.CfnOutput(this, 'execRoleArn', {
value: execRole.roleArn,
});
//Driver pod template
new cdk.CfnOutput(this, 'driverPodTemplate', {
value: emrEksCluster.podTemplateS3LocationCriticalDriver,
});
//Executor pod template
new cdk.CfnOutput(this, 'executorPodTemplate', {
value: emrEksCluster.podTemplateS3LocationCriticalExecutor,
});
}
}
/// !hide
const app = new cdk.App();
new ExampleSparkEmrContainersStack(app, 'ExampleSparkEmrServerlessStack');
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BhcmstZW1yLXJ1bnRpbWUtY29udGFpbmVycy1kZWZhdWx0LmxpdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9wcm9jZXNzaW5nL2V4YW1wbGVzL3NwYXJrLWVtci1ydW50aW1lLWNvbnRhaW5lcnMtZGVmYXVsdC5saXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLHFFQUFxRTtBQUNyRSxzQ0FBc0M7O0FBRXRDLG1DQUFtQztBQUNuQyxpREFBMkY7QUFFM0YsZ0NBQW1EO0FBQ25ELGdGQUFvRTtBQUVwRSxTQUFTO0FBQ1QsTUFBTSw4QkFBK0IsU0FBUSxHQUFHLENBQUMsS0FBSztJQUNwRCxZQUFZLEtBQWdCLEVBQUUsRUFBVTtRQUN0QyxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBRWpCLGdFQUFnRTtRQUNoRSxNQUFNLFlBQVksR0FBRyxJQUFJLDBDQUFlLENBQUMsSUFBSSxFQUFFLGNBQWMsQ0FBQyxDQUFDO1FBRS9ELE1BQU0sYUFBYSxHQUFHLCtCQUF5QixDQUFDLFdBQVcsQ0FBQyxJQUFJLEVBQUU7WUFDaEUsWUFBWSxFQUFFLGNBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRyxtREFBbUQsQ0FBQztZQUMxRyxpQkFBaUIsRUFBRSxDQUFDLGFBQWEsQ0FBQyxFQUFFLDJFQUEyRTtZQUMvRywrQkFBK0IsRUFBRSxJQUFJLEVBQUUsaUVBQWlFO1lBQ3hHLGtCQUFrQixFQUFFLFlBQVk7U0FDakMsQ0FBQyxDQUFDO1FBRUgsTUFBTSxNQUFNLEdBQUcsSUFBSSx3QkFBYyxDQUFDO1lBQ2hDLFVBQVUsRUFBRSxDQUFDLElBQUkseUJBQWUsQ0FBQztvQkFDL0IsT0FBTyxFQUFFO3dCQUNQLGNBQWM7cUJBQ2Y7b0JBQ0QsU0FBUyxFQUFFO3dCQUNULDJDQUEyQzt3QkFDM0MsNkNBQTZDO3FCQUFDO2lCQUMvQyxDQUFDLENBQUM7U0FDSixDQUFDLENBQUM7UUFFSCxNQUFNLFlBQVksR0FBRyxJQUFJLHVCQUFhLENBQUMsSUFBSSxFQUFFLGNBQWMsRUFBRTtZQUMzRCxRQUFRLEVBQUUsTUFBTTtTQUNqQixDQUFDLENBQUM7UUFFSCxNQUFNLGNBQWMsR0FBRyxhQUFhLENBQUMsb0JBQW9CLENBQUMsSUFBSSxFQUFFO1lBQzlELElBQUksRUFBRSxVQUFVO1lBQ2hCLGVBQWUsRUFBRSxJQUFJO1lBQ3JCLFlBQVksRUFBRSxZQUFZO1NBQzNCLENBQUMsQ0FBQztRQUVILE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxtQkFBbUIsQ0FDaEQsSUFBSSxFQUNKLFVBQVUsRUFDVixZQUFZLEVBQ1osWUFBWSxFQUFFLHdDQUF3QztRQUN0RCxnQkFBZ0IsQ0FBQyxDQUFDLENBQUMsbUJBQW1CO1FBRXRDLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsbUJBQW1CLEVBQUU7WUFDM0MsS0FBSyxFQUFFLGNBQWMsQ0FBQyxPQUFPO1NBQzlCLENBQUMsQ0FBQztRQUVILElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFO1lBQ3JDLEtBQUssRUFBRSxRQUFRLENBQUMsT0FBTztTQUN4QixDQUFDLENBQUM7UUFFSCxxQkFBcUI7UUFDckIsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxtQkFBbUIsRUFBRTtZQUMzQyxLQUFLLEVBQUUsYUFBYSxDQUFDLG1DQUFvQztTQUMxRCxDQUFDLENBQUM7UUFFSCx1QkFBdUI7UUFDdkIsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxxQkFBcUIsRUFBRTtZQUM3QyxLQUFLLEVBQUUsYUFBYSxDQUFDLHFDQUFzQztTQUM1RCxDQUFDLENBQUM7SUFFTCxDQUFDO0NBQ0Y7QUFDRCxTQUFTO0FBRVQsTUFBTSxHQUFHLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDMUIsSUFBSSw4QkFBOEIsQ0FBQyxHQUFHLEVBQUUsZ0NBQWdDLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8vIENvcHlyaWdodCBBbWF6b24uY29tLCBJbmMuIG9yIGl0cyBhZmZpbGlhdGVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjBcblxuaW1wb3J0ICogYXMgY2RrIGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7IE1hbmFnZWRQb2xpY3ksIFBvbGljeURvY3VtZW50LCBQb2xpY3lTdGF0ZW1lbnQsIFJvbGUgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtaWFtJztcbmltcG9ydCB7IENvbnN0cnVjdCB9IGZyb20gJ2NvbnN0cnVjdHMnO1xuaW1wb3J0IHsgU3BhcmtFbXJDb250YWluZXJzUnVudGltZSB9IGZyb20gJy4uL2xpYic7XG5pbXBvcnQgeyBLdWJlY3RsVjMzTGF5ZXIgfSBmcm9tICdAYXdzLWNkay9sYW1iZGEtbGF5ZXIta3ViZWN0bC12MzMnO1xuXG4vLy8gIXNob3dcbmNsYXNzIEV4YW1wbGVTcGFya0VtckNvbnRhaW5lcnNTdGFjayBleHRlbmRzIGNkay5TdGFjayB7XG4gIGNvbnN0cnVjdG9yKHNjb3BlOiBDb25zdHJ1Y3QsIGlkOiBzdHJpbmcpIHtcbiAgICBzdXBlcihzY29wZSwgaWQpO1xuICAgIFxuICAgIC8vTGF5ZXIgbXVzdCBiZSBjaGFuZ2VkIGFjY29yZGluZyB0byB0aGUgS3ViZXJuZXRlcyB2ZXJzaW9uIHVzZWRcbiAgICBjb25zdCBrdWJlY3RsTGF5ZXIgPSBuZXcgS3ViZWN0bFYzM0xheWVyKHRoaXMsICdrdWJlY3RsTGF5ZXInKTtcbiAgICBcbiAgICBjb25zdCBlbXJFa3NDbHVzdGVyID0gU3BhcmtFbXJDb250YWluZXJzUnVudGltZS5nZXRPckNyZWF0ZSh0aGlzLCB7XG4gICAgICBla3NBZG1pblJvbGU6IFJvbGUuZnJvbVJvbGVBcm4odGhpcywgJ0Vrc0FkbWluUm9sZScgLCAnYXJuOmF3czppYW06OjEyMzQ1Njc4OTEyOnJvbGUvcm9sZS1uYW1lLXdpdGgtcGF0aCcpLFxuICAgICAgcHVibGljQWNjZXNzQ0lEUnM6IFsnMTAuMC4wLjAvMzInXSwgLy8gVGhlIGxpc3Qgb2YgcHVibGljIElQIGFkZHJlc3NlcyBmcm9tIHdoaWNoIHRoZSBjbHVzdGVyIGNhbiBiZSBhY2Nlc3NpYmxlXG4gICAgICBjcmVhdGVFbXJPbkVrc1NlcnZpY2VMaW5rZWRSb2xlOiB0cnVlLCAvL2lmIHRoZSB0aGUgc2VydmljZSBsaW5rZWQgcm9sZSBhbHJlYWR5IGV4aXN0cyBzZXQgdGhpcyB0byBmYWxzZVxuICAgICAga3ViZWN0bExhbWJkYUxheWVyOiBrdWJlY3RsTGF5ZXIsXG4gICAgfSk7XG4gICAgXG4gICAgY29uc3QgczNSZWFkID0gbmV3IFBvbGljeURvY3VtZW50KHtcbiAgICAgIHN0YXRlbWVudHM6IFtuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgYWN0aW9uczogW1xuICAgICAgICAgICdzMzpHZXRPYmplY3QnLFxuICAgICAgICBdLFxuICAgICAgICByZXNvdXJjZXM6IFtcbiAgICAgICAgICAnYXJuOmF3czpzMzo6OmF3cy1kYXRhLWFuYWx5dGljcy13b3Jrc2hvcHMnLFxuICAgICAgICAgICdhcm46YXdzOnMzOjo6YXdzLWRhdGEtYW5hbHl0aWNzLXdvcmtzaG9wcy8qJ10sXG4gICAgICAgIH0pXSxcbiAgICAgIH0pO1xuICAgICAgXG4gICAgICBjb25zdCBzM1JlYWRQb2xpY3kgPSBuZXcgTWFuYWdlZFBvbGljeSh0aGlzLCAnczNSZWFkUG9saWN5Jywge1xuICAgICAgICBkb2N1bWVudDogczNSZWFkLFxuICAgICAgfSk7XG4gICAgICBcbiAgICAgIGNvbnN0IHZpcnR1YWxDbHVzdGVyID0gZW1yRWtzQ2x1c3Rlci5hZGRFbXJWaXJ0dWFsQ2x1c3Rlcih0aGlzLCB7XG4gICAgICAgIG5hbWU6ICdkYWlseWpvYicsXG4gICAgICAgIGNyZWF0ZU5hbWVzcGFjZTogdHJ1ZSxcbiAgICAgICAgZWtzTmFtZXNwYWNlOiAnZGFpbHlqb2JucycsXG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgY29uc3QgZXhlY1JvbGUgPSBlbXJFa3NDbHVzdGVyLmNyZWF0ZUV4ZWN1dGlvblJvbGUoXG4gICAgICAgIHRoaXMsIFxuICAgICAgICAnRXhlY1JvbGUnLCBcbiAgICAgICAgczNSZWFkUG9saWN5LCBcbiAgICAgICAgJ2RhaWx5am9ibnMnLCAvLyB0aGUgbmFtZXNwYWNlIG9mIHRoZSB2aXJ0dWFsIGNsdXN0ZXIgXG4gICAgICAgICdzM1JlYWRFeGVjUm9sZScpOyAvL3RoZSBJQU0gcm9sZSBuYW1lXG4gICAgICAgIFxuICAgICAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCAndmlydHVhbENsdXN0ZXJBcm4nLCB7XG4gICAgICAgICAgdmFsdWU6IHZpcnR1YWxDbHVzdGVyLmF0dHJBcm4sXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgbmV3IGNkay5DZm5PdXRwdXQodGhpcywgJ2V4ZWNSb2xlQXJuJywge1xuICAgICAgICAgIHZhbHVlOiBleGVjUm9sZS5yb2xlQXJuLFxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vRHJpdmVyIHBvZCB0ZW1wbGF0ZVxuICAgICAgICBuZXcgY2RrLkNmbk91dHB1dCh0aGlzLCAnZHJpdmVyUG9kVGVtcGxhdGUnLCB7XG4gICAgICAgICAgdmFsdWU6IGVtckVrc0NsdXN0ZXIucG9kVGVtcGxhdGVTM0xvY2F0aW9uQ3JpdGljYWxEcml2ZXIhLFxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICAgIC8vRXhlY3V0b3IgcG9kIHRlbXBsYXRlXG4gICAgICAgIG5ldyBjZGsuQ2ZuT3V0cHV0KHRoaXMsICdleGVjdXRvclBvZFRlbXBsYXRlJywge1xuICAgICAgICAgIHZhbHVlOiBlbXJFa3NDbHVzdGVyLnBvZFRlbXBsYXRlUzNMb2NhdGlvbkNyaXRpY2FsRXhlY3V0b3IhLFxuICAgICAgICB9KTtcbiAgICAgICAgXG4gICAgICB9XG4gICAgfVxuICAgIC8vLyAhaGlkZVxuICAgIFxuICAgIGNvbnN0IGFwcCA9IG5ldyBjZGsuQXBwKCk7XG4gICAgbmV3IEV4YW1wbGVTcGFya0VtckNvbnRhaW5lcnNTdGFjayhhcHAsICdFeGFtcGxlU3BhcmtFbXJTZXJ2ZXJsZXNzU3RhY2snKTtcbiJdfQ==