diff --git a/src/tasks/LambdaInvokeFunction/TaskOperations.ts b/src/tasks/LambdaInvokeFunction/TaskOperations.ts index 1bd51921..70d6de55 100644 --- a/src/tasks/LambdaInvokeFunction/TaskOperations.ts +++ b/src/tasks/LambdaInvokeFunction/TaskOperations.ts @@ -34,10 +34,15 @@ export class TaskOperations { try { const data: Lambda.InvocationResponse = await this.lambdaClient.invoke(params).promise() let outValue = '' + let outLogsValue = '' if (data.Payload) { outValue = data.Payload.toString() } + if (data.LogResult) { + outLogsValue = data.LogResult + } + // don't echo the value into the normal logs in case it contains sensitive data tl.debug(tl.loc('ReceivedOutput', outValue)) @@ -46,6 +51,11 @@ export class TaskOperations { tl.setVariable(this.taskParameters.outputVariable, outValue) } + if (this.taskParameters.outputLogsVariable) { + console.log(tl.loc('SettingOutputLogsVariable', this.taskParameters.outputLogsVariable)) + tl.setVariable(this.taskParameters.outputLogsVariable, outLogsValue) + } + console.log(tl.loc('TaskCompleted', this.taskParameters.functionName)) } catch (err) { console.error(tl.loc('FunctionInvokeFailed'), err) diff --git a/src/tasks/LambdaInvokeFunction/TaskParameters.ts b/src/tasks/LambdaInvokeFunction/TaskParameters.ts index 16cb214c..06dc9e6a 100644 --- a/src/tasks/LambdaInvokeFunction/TaskParameters.ts +++ b/src/tasks/LambdaInvokeFunction/TaskParameters.ts @@ -13,6 +13,7 @@ export interface TaskParameters { invocationType: string logType: string outputVariable: string + outputLogsVariable: string } export function buildTaskParameters(): TaskParameters { @@ -22,6 +23,7 @@ export function buildTaskParameters(): TaskParameters { payload: getInputOrEmpty('payload'), invocationType: getInputOrEmpty('invocationType'), logType: getInputOrEmpty('logType'), - outputVariable: getInputOrEmpty('outputVariable') + outputVariable: getInputOrEmpty('outputVariable'), + outputLogsVariable: getInputOrEmpty('outputLogsVariable') } } diff --git a/src/tasks/LambdaInvokeFunction/task.json b/src/tasks/LambdaInvokeFunction/task.json index 0b9307ce..d1f04677 100644 --- a/src/tasks/LambdaInvokeFunction/task.json +++ b/src/tasks/LambdaInvokeFunction/task.json @@ -78,6 +78,15 @@ "helpMarkDown": "The name of the variable that will contain the function output on task completion. The variable can be used as $(variableName) to refer to the function result in subsequent tasks.", "required": false }, + { + "name": "outputLogsVariable", + "type": "string", + "label": "Output Logs Variable", + "defaultValue": "", + "groupName": "OutputOptions", + "helpMarkDown": "The name of the variable that will contain the last 4 KB of log data produced by your Lambda function. The variable can be used as $(variableName) to refer to the function result in subsequent tasks.", + "required": false + }, { "name": "logType", "type": "pickList", @@ -119,6 +128,7 @@ "InvokingFunction": "Invoking function %s", "FunctionInvokeFailed": "Error invoking function", "SettingOutputVariable": "Setting output variable %s with the function output", + "SettingOutputLogsVariable": "Setting output logs variable %s with the function output logs", "ReceivedOutput": "Received output %s from function", "FunctionDoesNotExist": "Function %s does not exist", "TaskCompleted": "Completed invocation of Lambda function %s" diff --git a/tests/taskTests/lambdaInvoke/lambdaInvoke-test.ts b/tests/taskTests/lambdaInvoke/lambdaInvoke-test.ts index ca0abfd9..43e62908 100644 --- a/tests/taskTests/lambdaInvoke/lambdaInvoke-test.ts +++ b/tests/taskTests/lambdaInvoke/lambdaInvoke-test.ts @@ -17,7 +17,8 @@ const baseTaskParameters: TaskParameters = { payload: '', invocationType: '', logType: '', - outputVariable: '' + outputVariable: '', + outputLogsVariable: '' } const awsResponseThrows = { @@ -60,6 +61,7 @@ describe('Lambda Invoke', () => { expect.assertions(3) const taskParameters = { ...baseTaskParameters } taskParameters.outputVariable = 'something' + taskParameters.outputLogsVariable = 'something' await assertPayloadCorrect( taskParameters, jest.fn(() => {