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
JavaScript
;
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==