diff --git a/.DS_Store b/.DS_Store deleted file mode 100644 index 50be887..0000000 Binary files a/.DS_Store and /dev/null differ diff --git a/.gitignore b/.gitignore index 96eba04..ab67354 100644 --- a/.gitignore +++ b/.gitignore @@ -10,3 +10,8 @@ cdk.out # Parcel build directories .cache .build + +.idea +/powertuner_clone/ + +.DS_Store diff --git a/.jsii b/.jsii index e535204..c0834a9 100644 --- a/.jsii +++ b/.jsii @@ -1238,7 +1238,7 @@ }, "locationInModule": { "filename": "lib/cdk-lambda-powertuner/cdk-lambda-powertuner-construct.ts", - "line": 202 + "line": 206 }, "name": "createLambda", "parameters": [ @@ -1416,6 +1416,6 @@ ] } }, - "version": "0.2.2", - "fingerprint": "eqQT4S84NqDCshpTtzoHEsBhv1bmjanS3oXr/arh0dc=" + "version": "0.2.3", + "fingerprint": "TFJLoSrmELsO2F002gQFmBn30ELbCSaRmFB/r08THJ8=" } diff --git a/lib/cdk-lambda-powertuner/cdk-lambda-powertuner-construct.ts b/lib/cdk-lambda-powertuner/cdk-lambda-powertuner-construct.ts index d175f73..dd44171 100644 --- a/lib/cdk-lambda-powertuner/cdk-lambda-powertuner-construct.ts +++ b/lib/cdk-lambda-powertuner/cdk-lambda-powertuner-construct.ts @@ -27,7 +27,10 @@ export class LambdaPowerTuner extends cdk.Construct { let shared_env = { defaultPowerValues: powerValues.join(','), minRAM: '128', - baseCosts: '{"ap-east-1":2.865e-7,"af-south-1":2.763e-7,"me-south-1":2.583e-7,"eu-south-1":2.440e-7,"default":2.083e-7}', + baseCosts: + '{"x86_64": {"ap-east-1":2.9e-9,"af-south-1":2.8e-9,"me-south-1":2.6e-9,"eu-south-1":2.4e-9,"ap-northeast-3":2.7e-9,"default":2.1e-9}, "arm64": {"default":1.7e-9}}', + sfCosts: + '{"default": 0.000025,"us-gov-west-1": 0.00003,"ap-northeast-2": 0.0000271,"eu-south-1": 0.00002625,"af-south-1": 0.00002975,"us-west-1": 0.0000279,"eu-west-3": 0.0000297,"ap-east-1": 0.0000275,"me-south-1": 0.0000275,"ap-south-1": 0.0000285,"us-gov-east-1": 0.00003,"sa-east-1": 0.0000375}', visualizationURL: config.visualizationURL ?? 'https://lambda-power-tuning.show/' } @@ -53,7 +56,7 @@ export class LambdaPowerTuner extends cdk.Construct { executor.addToRolePolicy(new iam.PolicyStatement({ effect: iam.Effect.ALLOW, resources: [config.lambdaResource], - actions: ['lambda:InvokeFunction'] + actions: ['lambda:InvokeFunction', 'lambda:GetFunctionConfiguration'] })); // Cleaner @@ -106,6 +109,7 @@ export class LambdaPowerTuner extends cdk.Construct { "value.$": "$$.Map.Item.Value", "lambdaARN.$": "$.lambdaARN", "num.$": "$.num", + 'input.$': '$', "payload.$": "$.payload", "parallelInvocation.$": "$.parallelInvocation" }, @@ -193,11 +197,11 @@ export class LambdaPowerTuner extends cdk.Construct { /** * All the lambdas have the same config, so this method saves typing - * @param scope - * @param id - * @param handler - * @param env - * @param timeout + * @param scope + * @param id + * @param handler + * @param env + * @param timeout */ createLambda(scope: cdk.Construct, id: string, handler: string, env: any, timeout?: number) { @@ -219,4 +223,4 @@ export class LambdaPowerTuner extends cdk.Construct { }); } -} \ No newline at end of file +} diff --git a/package-lock.json b/package-lock.json index ba47399..a57eee1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,6 +1,6 @@ { "name": "cdk-lambda-powertuner", - "version": "0.2.1", + "version": "0.2.2", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/test/cdk-lambda-powertuner.test.ts b/test/cdk-lambda-powertuner.test.ts index 7715141..9c0661d 100644 --- a/test/cdk-lambda-powertuner.test.ts +++ b/test/cdk-lambda-powertuner.test.ts @@ -18,7 +18,8 @@ test('initializer Lambda Created', () => { "Variables": { "defaultPowerValues": "128,256,512,1024,1536,3008", "minRAM": "128", - "baseCosts": "{\"ap-east-1\":2.865e-7,\"af-south-1\":2.763e-7,\"me-south-1\":2.583e-7,\"eu-south-1\":2.440e-7,\"default\":2.083e-7}", + "baseCosts": '{"x86_64": {"ap-east-1":2.9e-9,"af-south-1":2.8e-9,"me-south-1":2.6e-9,"eu-south-1":2.4e-9,"ap-northeast-3":2.7e-9,"default":2.1e-9}, "arm64": {"default":1.7e-9}}', + "sfCosts": '{"default": 0.000025,"us-gov-west-1": 0.00003,"ap-northeast-2": 0.0000271,"eu-south-1": 0.00002625,"af-south-1": 0.00002975,"us-west-1": 0.0000279,"eu-west-3": 0.0000297,"ap-east-1": 0.0000275,"me-south-1": 0.0000275,"ap-south-1": 0.0000285,"us-gov-east-1": 0.00003,"sa-east-1": 0.0000375}', "visualizationURL": "https://lambda-power-tuning.show/" } }, @@ -43,7 +44,8 @@ test('executor Lambda Created', () => { "Variables": { "defaultPowerValues": "128,256,512,1024,1536,3008", "minRAM": "128", - "baseCosts": "{\"ap-east-1\":2.865e-7,\"af-south-1\":2.763e-7,\"me-south-1\":2.583e-7,\"eu-south-1\":2.440e-7,\"default\":2.083e-7}", + "baseCosts": "{\"x86_64\": {\"ap-east-1\":2.9e-9,\"af-south-1\":2.8e-9,\"me-south-1\":2.6e-9,\"eu-south-1\":2.4e-9,\"ap-northeast-3\":2.7e-9,\"default\":2.1e-9}, \"arm64\": {\"default\":1.7e-9}}", + "sfCosts": "{\"default\": 0.000025,\"us-gov-west-1\": 0.00003,\"ap-northeast-2\": 0.0000271,\"eu-south-1\": 0.00002625,\"af-south-1\": 0.00002975,\"us-west-1\": 0.0000279,\"eu-west-3\": 0.0000297,\"ap-east-1\": 0.0000275,\"me-south-1\": 0.0000275,\"ap-south-1\": 0.0000285,\"us-gov-east-1\": 0.00003,\"sa-east-1\": 0.0000375}", "visualizationURL": "https://lambda-power-tuning.show/" } }, @@ -68,7 +70,8 @@ test('cleaner Lambda Created', () => { "Variables": { "defaultPowerValues": "128,256,512,1024,1536,3008", "minRAM": "128", - "baseCosts": "{\"ap-east-1\":2.865e-7,\"af-south-1\":2.763e-7,\"me-south-1\":2.583e-7,\"eu-south-1\":2.440e-7,\"default\":2.083e-7}", + "baseCosts": "{\"x86_64\": {\"ap-east-1\":2.9e-9,\"af-south-1\":2.8e-9,\"me-south-1\":2.6e-9,\"eu-south-1\":2.4e-9,\"ap-northeast-3\":2.7e-9,\"default\":2.1e-9}, \"arm64\": {\"default\":1.7e-9}}", + "sfCosts": "{\"default\": 0.000025,\"us-gov-west-1\": 0.00003,\"ap-northeast-2\": 0.0000271,\"eu-south-1\": 0.00002625,\"af-south-1\": 0.00002975,\"us-west-1\": 0.0000279,\"eu-west-3\": 0.0000297,\"ap-east-1\": 0.0000275,\"me-south-1\": 0.0000275,\"ap-south-1\": 0.0000285,\"us-gov-east-1\": 0.00003,\"sa-east-1\": 0.0000375}", "visualizationURL": "https://lambda-power-tuning.show/" } }, @@ -93,7 +96,8 @@ test('analyzer Lambda Created', () => { "Variables": { "defaultPowerValues": "128,256,512,1024,1536,3008", "minRAM": "128", - "baseCosts": "{\"ap-east-1\":2.865e-7,\"af-south-1\":2.763e-7,\"me-south-1\":2.583e-7,\"eu-south-1\":2.440e-7,\"default\":2.083e-7}", + "baseCosts": "{\"x86_64\": {\"ap-east-1\":2.9e-9,\"af-south-1\":2.8e-9,\"me-south-1\":2.6e-9,\"eu-south-1\":2.4e-9,\"ap-northeast-3\":2.7e-9,\"default\":2.1e-9}, \"arm64\": {\"default\":1.7e-9}}", + "sfCosts": "{\"default\": 0.000025,\"us-gov-west-1\": 0.00003,\"ap-northeast-2\": 0.0000271,\"eu-south-1\": 0.00002625,\"af-south-1\": 0.00002975,\"us-west-1\": 0.0000279,\"eu-west-3\": 0.0000297,\"ap-east-1\": 0.0000275,\"me-south-1\": 0.0000275,\"ap-south-1\": 0.0000285,\"us-gov-east-1\": 0.00003,\"sa-east-1\": 0.0000375}", "visualizationURL": "https://lambda-power-tuning.show/" } }, @@ -118,7 +122,8 @@ test('optimizer Lambda Created', () => { "Variables": { "defaultPowerValues": "128,256,512,1024,1536,3008", "minRAM": "128", - "baseCosts": "{\"ap-east-1\":2.865e-7,\"af-south-1\":2.763e-7,\"me-south-1\":2.583e-7,\"eu-south-1\":2.440e-7,\"default\":2.083e-7}", + "baseCosts": "{\"x86_64\": {\"ap-east-1\":2.9e-9,\"af-south-1\":2.8e-9,\"me-south-1\":2.6e-9,\"eu-south-1\":2.4e-9,\"ap-northeast-3\":2.7e-9,\"default\":2.1e-9}, \"arm64\": {\"default\":1.7e-9}}", + "sfCosts": "{\"default\": 0.000025,\"us-gov-west-1\": 0.00003,\"ap-northeast-2\": 0.0000271,\"eu-south-1\": 0.00002625,\"af-south-1\": 0.00002975,\"us-west-1\": 0.0000279,\"eu-west-3\": 0.0000297,\"ap-east-1\": 0.0000275,\"me-south-1\": 0.0000275,\"ap-south-1\": 0.0000285,\"us-gov-east-1\": 0.00003,\"sa-east-1\": 0.0000375}", "visualizationURL": "https://lambda-power-tuning.show/" } }, @@ -137,35 +142,59 @@ test('State Machine Created', () => { }) // THEN expectCDK(stack).to(haveResourceLike("AWS::StepFunctions::StateMachine", { - "DefinitionString": { - "Fn::Join": [ - "", - [ - "{\"StartAt\":\"Initializer\",\"States\":{\"Initializer\":{\"Next\":\"cleanup $.powerValues\",\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.error\",\"Next\":\"CleanUpOnError\"}],\"Parameters\":{\"FunctionName\":\"", - {}, - "\",\"Payload.$\":\"$\"},\"Type\":\"Task\",\"Resource\":\"arn:", - {}, - ":states:::lambda:invoke\",\"ResultPath\":\"$.powerValues\"},\"cleanup $.powerValues\":{\"Type\":\"Pass\",\"ResultPath\":\"$.powerValues\",\"InputPath\":\"$.powerValues.Payload\",\"Next\":\"Branching\"},\"Branching\":{\"Type\":\"Map\",\"ResultPath\":\"$.stats\",\"Next\":\"cleanup $.stats array\",\"Parameters\":{\"value.$\":\"$$.Map.Item.Value\",\"lambdaARN.$\":\"$.lambdaARN\",\"num.$\":\"$.num\",\"payload.$\":\"$.payload\",\"parallelInvocation.$\":\"$.parallelInvocation\"},\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.error\",\"Next\":\"CleanUpOnError\"}],\"Iterator\":{\"StartAt\":\"Iterator\",\"States\":{\"Iterator\":{\"End\":true,\"Retry\":[{\"ErrorEquals\":[\"States.ALL\"],\"IntervalSeconds\":3,\"MaxAttempts\":2}],\"Parameters\":{\"FunctionName\":\"", - {}, - "\",\"Payload.$\":\"$\"},\"Type\":\"Task\",\"Resource\":\"arn:", - {}, - ":states:::lambda:invoke\"}}},\"ItemsPath\":\"$.powerValues\",\"MaxConcurrency\":0},\"cleanup $.stats array\":{\"Type\":\"Pass\",\"ResultPath\":\"$.stats\",\"InputPath\":\"$.stats[*].Payload\",\"Next\":\"Cleaner\"},\"Cleaner\":{\"Next\":\"Analyzer\",\"Parameters\":{\"FunctionName\":\"", - {}, - "\",\"Payload.$\":\"$\"},\"Type\":\"Task\",\"Resource\":\"arn:", - {}, - ":states:::lambda:invoke\",\"ResultPath\":\"$.cleaner\"},\"Analyzer\":{\"Next\":\"cleanup $.analysis\",\"Parameters\":{\"FunctionName\":\"", - {}, - "\",\"Payload.$\":\"$\"},\"Type\":\"Task\",\"Resource\":\"arn:", - {}, - ":states:::lambda:invoke\",\"ResultPath\":\"$.analysis\"},\"cleanup $.analysis\":{\"Type\":\"Pass\",\"ResultPath\":\"$.analysis\",\"InputPath\":\"$.analysis.Payload\",\"Next\":\"Optimizer\"},\"Optimizer\":{\"End\":true,\"Parameters\":{\"FunctionName\":\"", - {}, - "\",\"Payload.$\":\"$\"},\"OutputPath\":\"$.analysis\",\"Type\":\"Task\",\"Resource\":\"arn:", - {}, - ":states:::lambda:invoke\",\"ResultPath\":\"$.optimizer\"},\"CleanUpOnError\":{\"End\":true,\"Parameters\":{\"FunctionName\":\"", - {}, - "\",\"Payload.$\":\"$\"},\"Type\":\"Task\",\"Resource\":\"arn:", - {}, - ":states:::lambda:invoke\"}}}" + "DefinitionString": { + "Fn::Join": [ + "", + [ + "{\"StartAt\":\"Initializer\",\"States\":{\"Initializer\":{\"Next\":\"cleanup $.powerValues\",\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.error\",\"Next\":\"CleanUpOnError\"}],\"Parameters\":{\"FunctionName\":\"", + { + "Ref": "powerTunerinitializerE42CBB83" + }, + "\",\"Payload.$\":\"$\"},\"Type\":\"Task\",\"Resource\":\"arn:", + { + "Ref": "AWS::Partition" + }, + ":states:::lambda:invoke\",\"ResultPath\":\"$.powerValues\"},\"cleanup $.powerValues\":{\"Type\":\"Pass\",\"ResultPath\":\"$.powerValues\",\"InputPath\":\"$.powerValues.Payload\",\"Next\":\"Branching\"},\"Branching\":{\"Type\":\"Map\",\"ResultPath\":\"$.stats\",\"Next\":\"cleanup $.stats array\",\"Parameters\":{\"value.$\":\"$$.Map.Item.Value\",\"lambdaARN.$\":\"$.lambdaARN\",\"num.$\":\"$.num\",\"input.$\":\"$\",\"payload.$\":\"$.payload\",\"parallelInvocation.$\":\"$.parallelInvocation\"},\"Catch\":[{\"ErrorEquals\":[\"States.ALL\"],\"ResultPath\":\"$.error\",\"Next\":\"CleanUpOnError\"}],\"Iterator\":{\"StartAt\":\"Iterator\",\"States\":{\"Iterator\":{\"End\":true,\"Retry\":[{\"ErrorEquals\":[\"States.ALL\"],\"IntervalSeconds\":3,\"MaxAttempts\":2}],\"Parameters\":{\"FunctionName\":\"", + { + "Ref": "powerTunerexecutorFAA55CAC" + }, + "\",\"Payload.$\":\"$\"},\"Type\":\"Task\",\"Resource\":\"arn:", + { + "Ref": "AWS::Partition" + }, + ":states:::lambda:invoke\"}}},\"ItemsPath\":\"$.powerValues\",\"MaxConcurrency\":0},\"cleanup $.stats array\":{\"Type\":\"Pass\",\"ResultPath\":\"$.stats\",\"InputPath\":\"$.stats[*].Payload\",\"Next\":\"Cleaner\"},\"Cleaner\":{\"Next\":\"Analyzer\",\"Parameters\":{\"FunctionName\":\"", + { + "Ref": "powerTunercleanerAB51CBF0" + }, + "\",\"Payload.$\":\"$\"},\"Type\":\"Task\",\"Resource\":\"arn:", + { + "Ref": "AWS::Partition" + }, + ":states:::lambda:invoke\",\"ResultPath\":\"$.cleaner\"},\"Analyzer\":{\"Next\":\"cleanup $.analysis\",\"Parameters\":{\"FunctionName\":\"", + { + "Ref": "powerTuneranalyzerDBE209DF" + }, + "\",\"Payload.$\":\"$\"},\"Type\":\"Task\",\"Resource\":\"arn:", + { + "Ref": "AWS::Partition" + }, + ":states:::lambda:invoke\",\"ResultPath\":\"$.analysis\"},\"cleanup $.analysis\":{\"Type\":\"Pass\",\"ResultPath\":\"$.analysis\",\"InputPath\":\"$.analysis.Payload\",\"Next\":\"Optimizer\"},\"Optimizer\":{\"End\":true,\"Parameters\":{\"FunctionName\":\"", + { + "Ref": "powerTuneroptimizer8E2EECDF" + }, + "\",\"Payload.$\":\"$\"},\"OutputPath\":\"$.analysis\",\"Type\":\"Task\",\"Resource\":\"arn:", + { + "Ref": "AWS::Partition" + }, + ":states:::lambda:invoke\",\"ResultPath\":\"$.optimizer\"},\"CleanUpOnError\":{\"End\":true,\"Parameters\":{\"FunctionName\":\"", + { + "Ref": "powerTunercleanerAB51CBF0" + }, + "\",\"Payload.$\":\"$\"},\"Type\":\"Task\",\"Resource\":\"arn:", + { + "Ref": "AWS::Partition" + }, + ":states:::lambda:invoke\"}}}" ] ] } @@ -183,7 +212,7 @@ test('State Machine Arn Export Output Not Enabled', () => { lambdaResource: 'arn:1234:1234:1234:1234:1234', }); - // THEN + // THEN expectCDK(stack).notTo(haveOutput({ exportName: exportName })); @@ -200,7 +229,7 @@ test('State Machine Arn Export Output Enabled With No Name', () => { exportStepFunction: true }); - // THEN + // THEN expectCDK(stack).notTo(haveOutput({ exportName: exportName })); @@ -218,8 +247,8 @@ test('State Machine Arn Export Output Enabled With No Name', () => { exportedStepFunctionName: exportName }); - // THEN + // THEN expectCDK(stack).to(haveOutput({ exportName: exportName })); -}); \ No newline at end of file +});