UNPKG

awscdk-construct-ad-decision-server

Version:

AWS CDK Construct to upload local files to S3 and make them publicly available via CloudFront

79 lines 9.94 kB
"use strict"; var _a; Object.defineProperty(exports, "__esModule", { value: true }); exports.AdDecisionServer = void 0; const JSII_RTTI_SYMBOL_1 = Symbol.for("jsii.rtti"); const aws_cdk_lib_1 = require("aws-cdk-lib"); const aws_apigateway_1 = require("aws-cdk-lib/aws-apigateway"); const iam = require("aws-cdk-lib/aws-iam"); const aws_logs_1 = require("aws-cdk-lib/aws-logs"); const constructs_1 = require("constructs"); const Lambda_1 = require("./Lambda"); class AdDecisionServer extends constructs_1.Construct { constructor(scope, id, { creatives, clearanceRule = 'LONGEST_FIRST', }) { super(scope, id); // Create IAM role for API Gateway const executeRole = new iam.Role(this, 'role', { assumedBy: new iam.ServicePrincipal('apigateway.amazonaws.com'), managedPolicies: [ iam.ManagedPolicy.fromAwsManagedPolicyName('CloudWatchLogsFullAccess'), ], }); // Create a CloudWatch log group const logGroup = new aws_logs_1.LogGroup(this, 'ApiGatewayLogGroup', { logGroupName: `/aws/apigateway/ads-logs-${aws_cdk_lib_1.Stack.of(this)}`, removalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY, }); logGroup.grantWrite(executeRole); // Set up vast endpoint const vastEndpoint = new aws_apigateway_1.RestApi(this, 'VAST-Endpoint', { binaryMediaTypes: ['application/xml'], deployOptions: { loggingLevel: aws_apigateway_1.MethodLoggingLevel.INFO, dataTraceEnabled: true, accessLogDestination: new aws_apigateway_1.LogGroupLogDestination(logGroup), accessLogFormat: aws_apigateway_1.AccessLogFormat.jsonWithStandardFields(), }, cloudWatchRole: true, cloudWatchRoleRemovalPolicy: aws_cdk_lib_1.RemovalPolicy.DESTROY, }); const lambda = new Lambda_1.Lambda(this, 'GetVAST', { creatives, clearanceRule, }); vastEndpoint.root.addResource('vast').addMethod('GET', new aws_apigateway_1.LambdaIntegration(lambda.func, { proxy: false, requestTemplates: { 'application/json': '{"duration": "$input.params(\'duration\')"}', }, integrationResponses: [ { statusCode: '200', responseParameters: { 'method.response.header.Content-Type': "\'application/xml\'", }, responseTemplates: { 'application/xml': '#set($inputRoot = $input.path(\'$\'))$inputRoot.body', }, }, ], }), { requestParameters: { 'method.request.querystring.duration': true, }, methodResponses: [ { statusCode: '200', responseParameters: { 'method.response.header.Content-Type': true, }, }, ], }); this.url = `${vastEndpoint.url}vast`; } } exports.AdDecisionServer = AdDecisionServer; _a = JSII_RTTI_SYMBOL_1; AdDecisionServer[_a] = { fqn: "awscdk-construct-ad-decision-server.AdDecisionServer", version: "0.0.6" }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQWREZWNpc2lvblNlcnZlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9BZERlY2lzaW9uU2VydmVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQW1EO0FBQ25ELCtEQU1vQztBQUNwQywyQ0FBMkM7QUFDM0MsbURBQWdEO0FBQ2hELDJDQUF1QztBQUN2QyxxQ0FBNEM7QUFRNUMsTUFBYSxnQkFBaUIsU0FBUSxzQkFBUztJQUk3QyxZQUFZLEtBQWdCLEVBQUUsRUFBVSxFQUFFLEVBQ3hDLFNBQVMsRUFDVCxhQUFhLEdBQUcsZUFBZSxHQUNUO1FBRXRCLEtBQUssQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFakIsa0NBQWtDO1FBQ2xDLE1BQU0sV0FBVyxHQUFHLElBQUksR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFO1lBQzdDLFNBQVMsRUFBRSxJQUFJLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQywwQkFBMEIsQ0FBQztZQUMvRCxlQUFlLEVBQUU7Z0JBQ2YsR0FBRyxDQUFDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQywwQkFBMEIsQ0FBQzthQUN2RTtTQUNGLENBQUMsQ0FBQztRQUVILGdDQUFnQztRQUNoQyxNQUFNLFFBQVEsR0FBRyxJQUFJLG1CQUFRLENBQUMsSUFBSSxFQUFFLG9CQUFvQixFQUFFO1lBQ3hELFlBQVksRUFBRSw0QkFBNEIsbUJBQUssQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEVBQUU7WUFDMUQsYUFBYSxFQUFFLDJCQUFhLENBQUMsT0FBTztTQUNyQyxDQUFDLENBQUM7UUFDSCxRQUFRLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRWpDLHVCQUF1QjtRQUN2QixNQUFNLFlBQVksR0FBRyxJQUFJLHdCQUFPLENBQUMsSUFBSSxFQUFFLGVBQWUsRUFBRTtZQUN0RCxnQkFBZ0IsRUFBRSxDQUFDLGlCQUFpQixDQUFDO1lBQ3JDLGFBQWEsRUFBRTtnQkFDYixZQUFZLEVBQUUsbUNBQWtCLENBQUMsSUFBSTtnQkFDckMsZ0JBQWdCLEVBQUUsSUFBSTtnQkFDdEIsb0JBQW9CLEVBQUUsSUFBSSx1Q0FBc0IsQ0FBQyxRQUFRLENBQUM7Z0JBQzFELGVBQWUsRUFBRSxnQ0FBZSxDQUFDLHNCQUFzQixFQUFFO2FBQzFEO1lBQ0QsY0FBYyxFQUFFLElBQUk7WUFDcEIsMkJBQTJCLEVBQUUsMkJBQWEsQ0FBQyxPQUFPO1NBQ25ELENBQUMsQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLElBQUksZUFBTSxDQUFDLElBQUksRUFBRSxTQUFTLEVBQUU7WUFDekMsU0FBUztZQUNULGFBQWE7U0FDZCxDQUFDLENBQUM7UUFDSCxZQUFZLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUNuRCxJQUFJLGtDQUFpQixDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUU7WUFDakMsS0FBSyxFQUFFLEtBQUs7WUFDWixnQkFBZ0IsRUFBRTtnQkFDaEIsa0JBQWtCLEVBQUUsNkNBQTZDO2FBQ2xFO1lBQ0Qsb0JBQW9CLEVBQUU7Z0JBQ3BCO29CQUNFLFVBQVUsRUFBRSxLQUFLO29CQUNqQixrQkFBa0IsRUFBRTt3QkFDbEIscUNBQXFDLEVBQUUscUJBQXFCO3FCQUM3RDtvQkFDRCxpQkFBaUIsRUFBRTt3QkFDakIsaUJBQWlCLEVBQUUsc0RBQXNEO3FCQUMxRTtpQkFDRjthQUNGO1NBQ0YsQ0FBQyxFQUNGO1lBQ0UsaUJBQWlCLEVBQUU7Z0JBQ2pCLHFDQUFxQyxFQUFFLElBQUk7YUFDNUM7WUFDRCxlQUFlLEVBQUU7Z0JBQ2Y7b0JBQ0UsVUFBVSxFQUFFLEtBQUs7b0JBQ2pCLGtCQUFrQixFQUFFO3dCQUNsQixxQ0FBcUMsRUFBRSxJQUFJO3FCQUM1QztpQkFDRjthQUNGO1NBQ0YsQ0FDRixDQUFDO1FBQ0YsSUFBSSxDQUFDLEdBQUcsR0FBRyxHQUFHLFlBQVksQ0FBQyxHQUFHLE1BQU0sQ0FBQztJQUN2QyxDQUFDOztBQTNFSCw0Q0E0RUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBSZW1vdmFsUG9saWN5LCBTdGFjayB9IGZyb20gJ2F3cy1jZGstbGliJztcbmltcG9ydCB7XG4gIFJlc3RBcGksXG4gIExhbWJkYUludGVncmF0aW9uLFxuICBMb2dHcm91cExvZ0Rlc3RpbmF0aW9uLFxuICBBY2Nlc3NMb2dGb3JtYXQsXG4gIE1ldGhvZExvZ2dpbmdMZXZlbCxcbn0gZnJvbSAnYXdzLWNkay1saWIvYXdzLWFwaWdhdGV3YXknO1xuaW1wb3J0ICogYXMgaWFtIGZyb20gJ2F3cy1jZGstbGliL2F3cy1pYW0nO1xuaW1wb3J0IHsgTG9nR3JvdXAgfSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtbG9ncyc7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7IExhbWJkYSwgQ3JlYXRpdmUgfSBmcm9tICcuL0xhbWJkYSc7XG5leHBvcnQgeyBDcmVhdGl2ZSB9IGZyb20gJy4vTGFtYmRhJztcblxuZXhwb3J0IGludGVyZmFjZSBBZERlY2lzaW9uU2VydmVyUHJvcHMge1xuICByZWFkb25seSBjcmVhdGl2ZXM6IENyZWF0aXZlW107IC8vIEEgbGlzdCBvZiBhZCBjcmVhdGl2ZXMuXG4gIHJlYWRvbmx5IGNsZWFyYW5jZVJ1bGU/OiAnTE9OR0VTVF9GSVJTVCcgfCAnU0VRVUVOQ0lBTCc7IC8vIE9wdGlvbmFsIGNsZWFyYW5jZSBwb2xpY3kgKGRlZmF1bHQgPSBMT05HRVNUX0ZJUlNULilcbn1cblxuZXhwb3J0IGNsYXNzIEFkRGVjaXNpb25TZXJ2ZXIgZXh0ZW5kcyBDb25zdHJ1Y3Qge1xuXG4gIHB1YmxpYyByZWFkb25seSB1cmw6IHN0cmluZztcblxuICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCB7XG4gICAgY3JlYXRpdmVzLFxuICAgIGNsZWFyYW5jZVJ1bGUgPSAnTE9OR0VTVF9GSVJTVCcsXG4gIH06IEFkRGVjaXNpb25TZXJ2ZXJQcm9wcykge1xuXG4gICAgc3VwZXIoc2NvcGUsIGlkKTtcblxuICAgIC8vIENyZWF0ZSBJQU0gcm9sZSBmb3IgQVBJIEdhdGV3YXlcbiAgICBjb25zdCBleGVjdXRlUm9sZSA9IG5ldyBpYW0uUm9sZSh0aGlzLCAncm9sZScsIHtcbiAgICAgIGFzc3VtZWRCeTogbmV3IGlhbS5TZXJ2aWNlUHJpbmNpcGFsKCdhcGlnYXRld2F5LmFtYXpvbmF3cy5jb20nKSxcbiAgICAgIG1hbmFnZWRQb2xpY2llczogW1xuICAgICAgICBpYW0uTWFuYWdlZFBvbGljeS5mcm9tQXdzTWFuYWdlZFBvbGljeU5hbWUoJ0Nsb3VkV2F0Y2hMb2dzRnVsbEFjY2VzcycpLFxuICAgICAgXSxcbiAgICB9KTtcblxuICAgIC8vIENyZWF0ZSBhIENsb3VkV2F0Y2ggbG9nIGdyb3VwXG4gICAgY29uc3QgbG9nR3JvdXAgPSBuZXcgTG9nR3JvdXAodGhpcywgJ0FwaUdhdGV3YXlMb2dHcm91cCcsIHtcbiAgICAgIGxvZ0dyb3VwTmFtZTogYC9hd3MvYXBpZ2F0ZXdheS9hZHMtbG9ncy0ke1N0YWNrLm9mKHRoaXMpfWAsXG4gICAgICByZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgfSk7XG4gICAgbG9nR3JvdXAuZ3JhbnRXcml0ZShleGVjdXRlUm9sZSk7XG5cbiAgICAvLyBTZXQgdXAgdmFzdCBlbmRwb2ludFxuICAgIGNvbnN0IHZhc3RFbmRwb2ludCA9IG5ldyBSZXN0QXBpKHRoaXMsICdWQVNULUVuZHBvaW50Jywge1xuICAgICAgYmluYXJ5TWVkaWFUeXBlczogWydhcHBsaWNhdGlvbi94bWwnXSxcbiAgICAgIGRlcGxveU9wdGlvbnM6IHtcbiAgICAgICAgbG9nZ2luZ0xldmVsOiBNZXRob2RMb2dnaW5nTGV2ZWwuSU5GTyxcbiAgICAgICAgZGF0YVRyYWNlRW5hYmxlZDogdHJ1ZSxcbiAgICAgICAgYWNjZXNzTG9nRGVzdGluYXRpb246IG5ldyBMb2dHcm91cExvZ0Rlc3RpbmF0aW9uKGxvZ0dyb3VwKSxcbiAgICAgICAgYWNjZXNzTG9nRm9ybWF0OiBBY2Nlc3NMb2dGb3JtYXQuanNvbldpdGhTdGFuZGFyZEZpZWxkcygpLFxuICAgICAgfSxcbiAgICAgIGNsb3VkV2F0Y2hSb2xlOiB0cnVlLFxuICAgICAgY2xvdWRXYXRjaFJvbGVSZW1vdmFsUG9saWN5OiBSZW1vdmFsUG9saWN5LkRFU1RST1ksXG4gICAgfSk7XG4gICAgY29uc3QgbGFtYmRhID0gbmV3IExhbWJkYSh0aGlzLCAnR2V0VkFTVCcsIHtcbiAgICAgIGNyZWF0aXZlcyxcbiAgICAgIGNsZWFyYW5jZVJ1bGUsXG4gICAgfSk7XG4gICAgdmFzdEVuZHBvaW50LnJvb3QuYWRkUmVzb3VyY2UoJ3Zhc3QnKS5hZGRNZXRob2QoJ0dFVCcsXG4gICAgICBuZXcgTGFtYmRhSW50ZWdyYXRpb24obGFtYmRhLmZ1bmMsIHtcbiAgICAgICAgcHJveHk6IGZhbHNlLFxuICAgICAgICByZXF1ZXN0VGVtcGxhdGVzOiB7XG4gICAgICAgICAgJ2FwcGxpY2F0aW9uL2pzb24nOiAne1wiZHVyYXRpb25cIjogXCIkaW5wdXQucGFyYW1zKFxcJ2R1cmF0aW9uXFwnKVwifScsXG4gICAgICAgIH0sXG4gICAgICAgIGludGVncmF0aW9uUmVzcG9uc2VzOiBbXG4gICAgICAgICAge1xuICAgICAgICAgICAgc3RhdHVzQ29kZTogJzIwMCcsXG4gICAgICAgICAgICByZXNwb25zZVBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAgICAgJ21ldGhvZC5yZXNwb25zZS5oZWFkZXIuQ29udGVudC1UeXBlJzogXCJcXCdhcHBsaWNhdGlvbi94bWxcXCdcIixcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICByZXNwb25zZVRlbXBsYXRlczoge1xuICAgICAgICAgICAgICAnYXBwbGljYXRpb24veG1sJzogJyNzZXQoJGlucHV0Um9vdCA9ICRpbnB1dC5wYXRoKFxcJyRcXCcpKSRpbnB1dFJvb3QuYm9keScsXG4gICAgICAgICAgICB9LFxuICAgICAgICAgIH0sXG4gICAgICAgIF0sXG4gICAgICB9KSxcbiAgICAgIHtcbiAgICAgICAgcmVxdWVzdFBhcmFtZXRlcnM6IHtcbiAgICAgICAgICAnbWV0aG9kLnJlcXVlc3QucXVlcnlzdHJpbmcuZHVyYXRpb24nOiB0cnVlLFxuICAgICAgICB9LFxuICAgICAgICBtZXRob2RSZXNwb25zZXM6IFtcbiAgICAgICAgICB7XG4gICAgICAgICAgICBzdGF0dXNDb2RlOiAnMjAwJyxcbiAgICAgICAgICAgIHJlc3BvbnNlUGFyYW1ldGVyczoge1xuICAgICAgICAgICAgICAnbWV0aG9kLnJlc3BvbnNlLmhlYWRlci5Db250ZW50LVR5cGUnOiB0cnVlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9LFxuICAgICAgICBdLFxuICAgICAgfSxcbiAgICApO1xuICAgIHRoaXMudXJsID0gYCR7dmFzdEVuZHBvaW50LnVybH12YXN0YDtcbiAgfVxufSJdfQ==