in cdk/lib/partners/ACE.ts [82:174]
private createVideoConvertTaskAndRequiredResources(dependenices: lambda.LayerVersion) {
const mediaConvertRole = new iam.Role(this, "MediaConvertRole", {
roleName: "MediaConvertRole",
assumedBy: new iam.ServicePrincipal("mediaconvert.amazonaws.com")
});
mediaConvertRole.addToPolicy(new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
actions: ["s3:*"],
resources: [
this.sourceBucket.bucketArn, `${this.sourceBucket.bucketArn}/*`,
this.destinationBucket.bucketArn, `${this.destinationBucket.bucketArn}/*`
]
})
);
const mediaConvertQueue = new CfnQueue(this, "MediaConvertQueue", {
name: "SyndicationQueue",
pricingPlan: "ON_DEMAND",
status: "ACTIVE"
});
const jobTemplate = new CfnJobTemplate(this, "TranscodingJobTemplate", {
description: `Job Template to transcode videos for Partner ${this.providerIdentifier}`,
category: "GENERIC",
name: `${this.providerIdentifier}-TranscodingJobTemplate`,
settingsJson: {
OutputGroups: [
{
Name: "File Group",
Outputs: [
{
Preset: "System-Generic_Hd_Mp4_Hev1_Aac_16x9_Sdr_1280x720p_30Hz_4Mbps_Qvbr_Vq9",
Extension: "mp4",
NameModifier: "_720p"
}
],
OutputGroupSettings: {
Type: "FILE_GROUP_SETTINGS",
FileGroupSettings: {}
}
}
]
},
statusUpdateInterval: "SECONDS_10",
});
const videoLambda = new lambda.Function(this, "VideoLambdaFunction", {
runtime: lambda.Runtime.NODEJS_12_X,
timeout: Duration.seconds(30),
handler: "provider-ace.ProcessVideos",
layers: [dependenices],
code: lambda.Code.fromAsset(path.join(__dirname, "..", "..", "..", "src", "handlers")),
environment: {
JOB_TEMPLATE_NAME: jobTemplate.attrName,
OUTPUT_BUCKET_NAME: this.destinationBucket.bucketName,
MEDIA_CONVERT_ROLE_ARN: mediaConvertRole.roleArn,
MEDIA_CONVERT_QUEUE_ARN: mediaConvertQueue.attrArn,
MEDIA_CONVERT_ENDPOINT_URL: this.mediaConvertEndpointURL,
}
});
const videoLambdaTask = new tasks.LambdaInvoke(this, `${this.providerIdentifier}-Video`, {
lambdaFunction: videoLambda,
payload: TaskInput.fromObject({
"token": JsonPath.taskToken,
"bucketName.$": "$.Video.bucketName",
"objectKey.$": "$.Video.objectKey",
"assetId.$": "$.AssetId"
}),
integrationPattern: IntegrationPattern.WAIT_FOR_TASK_TOKEN
});
videoLambda.addToRolePolicy(new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
actions: ["iam:PassRole"],
resources: [mediaConvertRole.roleArn]
}));
videoLambda.addToRolePolicy(new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
actions: ["mediaconvert:CreateJob"],
resources: [mediaConvertQueue.attrArn, jobTemplate.attrArn]
}));
videoLambda.addToRolePolicy(new iam.PolicyStatement({
effect: iam.Effect.ALLOW,
actions: ["mediaconvert:DescribeEndpoints"],
resources: ["*"]
}));
return videoLambdaTask;
}