diff --git a/lib/workload/stateful/cttso_v2_pipeline_dynamo_db/deploy/constants.ts b/lib/workload/stateful/cttso_v2_pipeline_dynamo_db/deploy/constants.ts index 1657217c4..75e494b45 100644 --- a/lib/workload/stateful/cttso_v2_pipeline_dynamo_db/deploy/constants.ts +++ b/lib/workload/stateful/cttso_v2_pipeline_dynamo_db/deploy/constants.ts @@ -1,5 +1,4 @@ - -const ROOT_SSM_PARAMETER_PATH = "/umccr/orcabus/stateful/cttso_v2_pipeline_dynamo_db"; +const ROOT_SSM_PARAMETER_PATH = '/umccr/orcabus/stateful/cttso_v2_pipeline_dynamo_db'; export const DYNAMODB_TABLE_ARN_SSM_PARAMETER_PATH = `${ROOT_SSM_PARAMETER_PATH}/analysis_table_arn`; export const DYNAMODB_TABLE_NAME_SSM_PARAMETER_PATH = `${ROOT_SSM_PARAMETER_PATH}/analysis_table_name`; diff --git a/lib/workload/stateful/cttso_v2_pipeline_dynamo_db/deploy/jest.config.js b/lib/workload/stateful/cttso_v2_pipeline_dynamo_db/deploy/jest.config.js index 08263b895..44ead8540 100644 --- a/lib/workload/stateful/cttso_v2_pipeline_dynamo_db/deploy/jest.config.js +++ b/lib/workload/stateful/cttso_v2_pipeline_dynamo_db/deploy/jest.config.js @@ -3,6 +3,6 @@ module.exports = { roots: ['/test'], testMatch: ['**/*.test.ts'], transform: { - '^.+\\.tsx?$': 'ts-jest' - } + '^.+\\.tsx?$': 'ts-jest', + }, }; diff --git a/lib/workload/stateful/cttso_v2_pipeline_dynamo_db/deploy/package.json b/lib/workload/stateful/cttso_v2_pipeline_dynamo_db/deploy/package.json index c6928fbd0..f5839b2f0 100644 --- a/lib/workload/stateful/cttso_v2_pipeline_dynamo_db/deploy/package.json +++ b/lib/workload/stateful/cttso_v2_pipeline_dynamo_db/deploy/package.json @@ -24,4 +24,4 @@ "constructs": "^10.0.0", "source-map-support": "^0.5.21" } -} \ No newline at end of file +} diff --git a/lib/workload/stateful/cttso_v2_pipeline_dynamo_db/deploy/test/deploy.test.ts b/lib/workload/stateful/cttso_v2_pipeline_dynamo_db/deploy/test/deploy.test.ts index d3f2e9b24..e54577d6c 100644 --- a/lib/workload/stateful/cttso_v2_pipeline_dynamo_db/deploy/test/deploy.test.ts +++ b/lib/workload/stateful/cttso_v2_pipeline_dynamo_db/deploy/test/deploy.test.ts @@ -5,13 +5,12 @@ // example test. To run these tests, uncomment this file along with the // example resource in lib/cttso_v2_launch_stack.ts test('SQS Queue Created', () => { -// const app = new cdk.App(); -// // WHEN -// const stack = new Deploy.DeployStack(app, 'MyTestStack'); -// // THEN -// const template = Template.fromStack(stack); - -// template.hasResourceProperties('AWS::SQS::Queue', { -// VisibilityTimeout: 300 -// }); + // const app = new cdk.App(); + // // WHEN + // const stack = new Deploy.DeployStack(app, 'MyTestStack'); + // // THEN + // const template = Template.fromStack(stack); + // template.hasResourceProperties('AWS::SQS::Queue', { + // VisibilityTimeout: 300 + // }); }); diff --git a/lib/workload/stateless/cttso_v2_pipeline_manager/Readme.md b/lib/workload/stateless/cttso_v2_pipeline_manager/Readme.md index 877e45ceb..bb0f5dad1 100644 --- a/lib/workload/stateless/cttso_v2_pipeline_manager/Readme.md +++ b/lib/workload/stateless/cttso_v2_pipeline_manager/Readme.md @@ -43,6 +43,8 @@ The AWS Step functions takes in the following parameters: * samplesheet_b64gz: (a base64 encoded and gzipped samplesheet as a dictionary, this can be found as an output of the bssh_icav2_fastq_copy_manager step functions) * fastq_list_rows_b64gz: (a base64 encoded and gzipped list of fastq rows as a dictionary, this can be found as an output of the bssh_icav2_fastq_copy_manager step functions) * This will use only the fastq files whose RGSM attribute match the sample id +* cache_uri: Uri to the cache directory (where the fastq files are copied over to) +* output_uri: Uri to the output directory ### Example Input @@ -60,7 +62,9 @@ The AWS Step functions takes in the following parameters: "project_name": "testing" }, "samplesheet_b64gz": "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", /* pragma: allowlist secret */ - "fastq_list_rows_b64gz": "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" /* pragma: allowlist secret */ + "fastq_list_rows_b64gz": "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", /* pragma: allowlist secret */ + "cache_uri": "icav2://7595e8f2-32d3-4c76-a324-c6a85dae87b5/ilmn_cttso_fastq_cache/20240308abcd1234/L2301368_run_cache/", + "output_uri": "icav2://7595e8f2-32d3-4c76-a324-c6a85dae87b5/ilmn_cttso_outputs/v2_1_1/20240308abcd1234/" } ``` @@ -162,9 +166,6 @@ Take the fastq output locations, samplesheet location and metadata generated in ### External Parameters required by CDK ``` -/icav2/umccr-prod/service-user-trial-jwt-token-secret-arn /icav2_copy_batch_utility/state_machine_arn_batch -/icav2/umccr-prod/cache_project_cttso_fastq_path -/icav2/umccr-prod/output_project_cttso_fastq_path /icav2/umccr-prod/tso500_ctdna_2.1_pipeline_id -``` \ No newline at end of file +``` diff --git a/lib/workload/stateless/cttso_v2_pipeline_manager/deploy/bin/deploy.ts b/lib/workload/stateless/cttso_v2_pipeline_manager/deploy/bin/deploy.ts index 459072f6e..0ebfe4736 100644 --- a/lib/workload/stateless/cttso_v2_pipeline_manager/deploy/bin/deploy.ts +++ b/lib/workload/stateless/cttso_v2_pipeline_manager/deploy/bin/deploy.ts @@ -7,7 +7,7 @@ import { CTTSO_V2_LAUNCH_STATE_MACHINE_NAME_SSM_PARAMETER_PATH, DYNAMODB_TABLE_NAME_SSM_PARAMETER_PATH, ICAV2_ACCESS_TOKEN_SECRET_ID, - ICAV2_COPY_BATCH_UTILITY_STATE_MACHINE_NAME_SSM_PARAMETER_PATH, + ICAV2_COPY_BATCH_UTILITY_STATE_MACHINE_NAME_SSM_PARAMETER_PATH, ORCABUS_EVENT_NAME, SSM_PARAMETER_LIST_FOR_CTTSO_LAUNCH_LAMBDAS, } from '../constants'; @@ -19,6 +19,7 @@ new ctTSOV2LaunchStateMachineStack(app, 'ctTSOv2LaunchStatemachineStack', { cttso_v2_launch_state_machine_arn_ssm_parameter_path: CTTSO_V2_LAUNCH_STATE_MACHINE_ARN_SSM_PARAMETER_PATH, cttso_v2_launch_state_machine_name_ssm_parameter_path: CTTSO_V2_LAUNCH_STATE_MACHINE_NAME_SSM_PARAMETER_PATH, dynamodb_table_ssm_parameter_path: DYNAMODB_TABLE_NAME_SSM_PARAMETER_PATH, + eventbus_name: ORCABUS_EVENT_NAME, env: { account: process.env.CDK_DEFAULT_ACCOUNT, region: process.env.CDK_DEFAULT_REGION diff --git a/lib/workload/stateless/cttso_v2_pipeline_manager/deploy/constants.ts b/lib/workload/stateless/cttso_v2_pipeline_manager/deploy/constants.ts index 5f2c2ae43..622258af6 100644 --- a/lib/workload/stateless/cttso_v2_pipeline_manager/deploy/constants.ts +++ b/lib/workload/stateless/cttso_v2_pipeline_manager/deploy/constants.ts @@ -8,7 +8,7 @@ export const ICAV2_COPY_BATCH_UTILITY_STATE_MACHINE_NAME_SSM_PARAMETER_PATH = "/ export const PIPELINE_ID_SSM_PARAMETER_PATH = "/icav2/umccr-prod/tso500_ctdna_2.1_pipeline_id" export const CTTSO_V2_LAUNCH_STATE_MACHINE_ARN_SSM_PARAMETER_PATH = "/icav2/umccr-prod/cttso_launch_state_machine_arn" export const CTTSO_V2_LAUNCH_STATE_MACHINE_NAME_SSM_PARAMETER_PATH = "/icav2/umccr-prod/cttso_launch_state_machine_name" - +export const ORCABUS_EVENT_NAME = "OrcaBusMain" export const SSM_PARAMETER_LIST_FOR_CTTSO_LAUNCH_LAMBDAS = [ PIPELINE_ID_SSM_PARAMETER_PATH diff --git a/lib/workload/stateless/cttso_v2_pipeline_manager/deploy/lib/constructs/cttso_v2_launch_step_function.ts b/lib/workload/stateless/cttso_v2_pipeline_manager/deploy/lib/constructs/cttso_v2_launch_step_function.ts index e77795651..72bf8479d 100644 --- a/lib/workload/stateless/cttso_v2_pipeline_manager/deploy/lib/constructs/cttso_v2_launch_step_function.ts +++ b/lib/workload/stateless/cttso_v2_pipeline_manager/deploy/lib/constructs/cttso_v2_launch_step_function.ts @@ -7,6 +7,8 @@ import * as sfn from 'aws-cdk-lib/aws-stepfunctions'; import * as ssm from 'aws-cdk-lib/aws-ssm'; import * as dynamodb from 'aws-cdk-lib/aws-dynamodb'; import * as secretsManager from 'aws-cdk-lib/aws-secretsmanager' +import * as events from 'aws-cdk-lib/aws-events'; +import * as events_targets from 'aws-cdk-lib/aws-events-targets'; import { DefinitionBody } from 'aws-cdk-lib/aws-stepfunctions'; import { PythonFunction } from '@aws-cdk/aws-lambda-python-alpha'; @@ -19,6 +21,7 @@ interface ctTSOv2LaunchStepFunctionConstructProps { lambda_layer_obj: LambdaLayerConstruct, icav2_copy_batch_state_machine_obj: sfn.IStateMachine, ssm_parameter_obj_list: ssm.IStringParameter[]; // List of parameters the workflow session state machine will need access to + eventbus_obj: events.IEventBus; /* Lambdas paths */ generate_db_uuid_lambda_path: string; // __dirname + '/../../../lambdas/generate_db_uuid' generate_trimmed_samplesheet_lambda_path: string; // __dirname + '/../../../lambdas/generate_trimmed_samplesheet_lambda_path' @@ -169,13 +172,18 @@ export class ctTSOv2LaunchStepFunctionStateMachineConstruct extends Construct { definitionBody: DefinitionBody.fromFile(props.workflow_definition_body_path), // definitionSubstitutions definitionSubstitutions: { + /* Lambda arns */ '__generate_db_uuid__': generate_db_uuid_lambda_obj.functionArn, '__launch_cttso_nextflow_pipeline__': launch_cttso_nextflow_pipeline_lambda_obj.functionArn, '__generate_copy_manifest_dict__': generate_copy_manifest_dict_lambda_obj.functionArn, '__generate_trimmed_samplesheet__': generate_trimmed_samplesheet_lambda_obj.functionArn, '__upload_samplesheet_to_cache_dir__': upload_samplesheet_to_cache_dir_lambda_obj.functionArn, + /* Subfunction state machines */ '__copy_batch_data_state_machine_arn__': props.icav2_copy_batch_state_machine_obj.stateMachineArn, - '__table_name__': props.dynamodb_table_obj.tableName + /* Dynamodb tables */ + '__table_name__': props.dynamodb_table_obj.tableName, + /* Event bus to push to */ + '__eventbus_name__': props.eventbus_obj.eventBusName }, }); @@ -222,6 +230,32 @@ export class ctTSOv2LaunchStepFunctionStateMachineConstruct extends Construct { stateMachine.role ) + // Trigger state machine on event + const rule = new events.Rule(this, 'cttso_v2_launch_step_function_rule', { + eventBus: props.eventbus_obj, + eventPattern: { + source: ['orcabus.wfm'], + detailType: ['WorkflowRunStateChange'], + /* + FIXME - nothing is set in stone yet + */ + detail: { + status: ['ready_to_run'], + workflow: ['cttso_v2_launch'], + }, + }, + }); + + // Add target of event to be the state machine + rule.addTarget( + new events_targets.SfnStateMachine(stateMachine, { + input: events.RuleTargetInput.fromEventPath('$.detail'), + }) + ); + + props.eventbus_obj.grantPutEventsTo(stateMachine.role); + + // Set outputs this.cttso_v2_launch_state_machine_name = stateMachine.stateMachineName; this.cttso_v2_launch_state_machine_arn = stateMachine.stateMachineArn; diff --git a/lib/workload/stateless/cttso_v2_pipeline_manager/deploy/lib/stacks/cttso_v2_launch_stack.ts b/lib/workload/stateless/cttso_v2_pipeline_manager/deploy/lib/stacks/cttso_v2_launch_stack.ts index 1e72cc4e7..06513f75b 100644 --- a/lib/workload/stateless/cttso_v2_pipeline_manager/deploy/lib/stacks/cttso_v2_launch_stack.ts +++ b/lib/workload/stateless/cttso_v2_pipeline_manager/deploy/lib/stacks/cttso_v2_launch_stack.ts @@ -4,6 +4,7 @@ import * as ssm from 'aws-cdk-lib/aws-ssm'; import * as sfn from 'aws-cdk-lib/aws-stepfunctions'; import * as dynamodb from 'aws-cdk-lib/aws-dynamodb'; import * as secretsManager from 'aws-cdk-lib/aws-secretsmanager'; +import * as events from 'aws-cdk-lib/aws-events'; import { ctTSOv2LaunchStepFunctionStateMachineConstruct } from '../constructs/cttso_v2_launch_step_function'; import { LambdaLayerConstruct } from '../constructs/lambda_layer'; @@ -14,6 +15,7 @@ interface ctTSOV2LaunchStateMachineStackProps extends cdk.StackProps { cttso_v2_launch_state_machine_arn_ssm_parameter_path: string; cttso_v2_launch_state_machine_name_ssm_parameter_path: string; dynamodb_table_ssm_parameter_path: string; + eventbus_name: string; } export class ctTSOV2LaunchStateMachineStack extends cdk.Stack { @@ -73,6 +75,13 @@ export class ctTSOV2LaunchStateMachineStack extends cdk.Stack { ), ); + // Get event bus + const eventbus_obj = events.EventBus.fromEventBusName( + this, + 'eventbus', + props.eventbus_name, + ); + const cttso_v2_launch_state_machine = new ctTSOv2LaunchStepFunctionStateMachineConstruct( this, id, @@ -83,6 +92,7 @@ export class ctTSOV2LaunchStateMachineStack extends cdk.Stack { lambda_layer_obj: lambda_layer_obj, icav2_copy_batch_state_machine_obj: icav2_copy_batch_stack_state_machine_obj, ssm_parameter_obj_list: ssm_parameter_obj_list, + eventbus_obj: eventbus_obj, /* Lambdas paths */ generate_db_uuid_lambda_path: __dirname + '/../../../lambdas/generate_db_uuid', // __dirname + '/../../../lambdas/generate_uuid' generate_trimmed_samplesheet_lambda_path: __dirname + '/../../../lambdas/generate_and_trim_cttso_samplesheet_dict', // __dirname + '/../../../lambdas/generate_and_trim_cttso_samplesheet_dict' @@ -90,7 +100,7 @@ export class ctTSOV2LaunchStateMachineStack extends cdk.Stack { generate_copy_manifest_dict_lambda_path: __dirname + '/../../../lambdas/generate_copy_manifest_dict', // __dirname + '/../../../lambdas/generate_copy_manifest_dict' launch_cttso_nextflow_pipeline_lambda_path: __dirname + '/../../../lambdas/launch_cttso_nextflow_pipeline', // __dirname + '../launch_cttso_nextflow_pipeline' /* Step function templates */ - workflow_definition_body_path: __dirname + '/../../../step_functions_templates/cttso_v2_launch_workflow_state_machine.json', // __dirname + '/../../../step_functions_templates/cttso_v2_launch_workflow_state_machine.json' + workflow_definition_body_path: __dirname + '/../../../step_functions_templates/cttso_v2_launch_workflow_state_machine.asl.json', // __dirname + '/../../../step_functions_templates/cttso_v2_launch_workflow_state_machine.asl.json' }, ); diff --git a/lib/workload/stateless/cttso_v2_pipeline_manager/step_functions_templates/cttso_v2_launch_workflow_state_machine.json b/lib/workload/stateless/cttso_v2_pipeline_manager/step_functions_templates/cttso_v2_launch_workflow_state_machine.asl.json similarity index 99% rename from lib/workload/stateless/cttso_v2_pipeline_manager/step_functions_templates/cttso_v2_launch_workflow_state_machine.json rename to lib/workload/stateless/cttso_v2_pipeline_manager/step_functions_templates/cttso_v2_launch_workflow_state_machine.asl.json index 351619620..9a04272b5 100644 --- a/lib/workload/stateless/cttso_v2_pipeline_manager/step_functions_templates/cttso_v2_launch_workflow_state_machine.json +++ b/lib/workload/stateless/cttso_v2_pipeline_manager/step_functions_templates/cttso_v2_launch_workflow_state_machine.asl.json @@ -409,7 +409,7 @@ { "Detail.$": "$.database_event_data", "DetailType": "ctTSOv2StateChange", - "EventBusName": "OrcaBus", + "EventBusName": "${__eventbus_name__}", "Source": "orcabus.cttso_v2", "Resources": [] }