in packages/cdk/lib/stacks/engines/miniwdl-engine-construct.ts [28:91]
constructor(scope: Construct, id: string, props: EngineOptions) {
super(scope, id);
const { vpc, contextParameters } = props;
const params = props.contextParameters;
const rootDirS3Uri = params.getEngineBucketPath();
this.batchHead = this.renderBatch("HeadBatch", vpc, contextParameters, ComputeResourceType.FARGATE);
const workerComputeType = contextParameters.requestSpotInstances ? ComputeResourceType.SPOT : ComputeResourceType.ON_DEMAND;
this.batchWorkers = this.renderBatch("TaskBatch", vpc, contextParameters, workerComputeType);
this.batchHead.role.attachInlinePolicy(new HeadJobBatchPolicy(this, "HeadJobBatchPolicy"));
this.batchHead.role.addToPrincipalPolicy(
new PolicyStatement({
actions: ["batch:TagResource"],
resources: ["*"],
})
);
this.miniwdlEngine = new MiniWdlEngine(this, "MiniWdlEngine", {
vpc: props.vpc,
rootDirS3Uri: rootDirS3Uri,
engineBatch: this.batchHead,
workerBatch: this.batchWorkers,
});
const adapterRole = new Role(this, "MiniWdlAdapterRole", {
assumedBy: new ServicePrincipal("lambda.amazonaws.com"),
managedPolicies: [ManagedPolicy.fromAwsManagedPolicyName("service-role/AWSLambdaVPCAccessExecutionRole")],
inlinePolicies: {
MiniwdlAdapterPolicy: new PolicyDocument({
statements: [
BatchPolicies.listAndDescribe,
new PolicyStatement({
actions: ["tag:GetResources"],
resources: ["*"],
}),
],
}),
},
});
this.outputBucket = Bucket.fromBucketName(this, "OutputBucket", params.outputBucketName);
this.outputBucket.grantRead(adapterRole);
this.batchHead.grantJobAdministration(adapterRole);
this.batchWorkers.grantJobAdministration(this.batchHead.role);
this.grantS3Permissions(contextParameters);
const lambda = this.renderAdapterLambda({
vpc: props.vpc,
role: adapterRole,
jobQueueArn: this.batchHead.jobQueue.jobQueueArn,
jobDefinitionArn: this.miniwdlEngine.headJobDefinition.jobDefinitionArn,
rootDirS3Uri: rootDirS3Uri,
});
this.adapterLogGroup = lambda.logGroup;
this.apiProxy = new ApiProxy(this, {
apiName: `${params.projectName}${params.userId}${params.contextName}MiniWdlApiProxy`,
lambda,
allowedAccountIds: [Aws.ACCOUNT_ID],
});
}