Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file removed .DS_Store
Binary file not shown.
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,8 @@ cdk.out
# Parcel build directories
.cache
.build

.idea
/powertuner_clone/

.DS_Store
6 changes: 3 additions & 3 deletions .jsii
Original file line number Diff line number Diff line change
Expand Up @@ -1238,7 +1238,7 @@
},
"locationInModule": {
"filename": "lib/cdk-lambda-powertuner/cdk-lambda-powertuner-construct.ts",
"line": 202
"line": 206
},
"name": "createLambda",
"parameters": [
Expand Down Expand Up @@ -1416,6 +1416,6 @@
]
}
},
"version": "0.2.2",
"fingerprint": "eqQT4S84NqDCshpTtzoHEsBhv1bmjanS3oXr/arh0dc="
"version": "0.2.3",
"fingerprint": "TFJLoSrmELsO2F002gQFmBn30ELbCSaRmFB/r08THJ8="
}
20 changes: 12 additions & 8 deletions lib/cdk-lambda-powertuner/cdk-lambda-powertuner-construct.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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/'
}

Expand All @@ -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
Expand Down Expand Up @@ -106,6 +109,7 @@ export class LambdaPowerTuner extends cdk.Construct {
"value.$": "$$.Map.Item.Value",
"lambdaARN.$": "$.lambdaARN",
"num.$": "$.num",
'input.$': '$',
"payload.$": "$.payload",
"parallelInvocation.$": "$.parallelInvocation"
},
Expand Down Expand Up @@ -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) {

Expand All @@ -219,4 +223,4 @@ export class LambdaPowerTuner extends cdk.Construct {
});

}
}
}
2 changes: 1 addition & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

105 changes: 67 additions & 38 deletions test/cdk-lambda-powertuner.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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/"
}
},
Expand All @@ -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/"
}
},
Expand All @@ -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/"
}
},
Expand All @@ -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/"
}
},
Expand All @@ -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/"
}
},
Expand All @@ -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\"}}}"
]
]
}
Expand All @@ -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
}));
Expand All @@ -200,7 +229,7 @@ test('State Machine Arn Export Output Enabled With No Name', () => {
exportStepFunction: true
});

// THEN
// THEN
expectCDK(stack).notTo(haveOutput({
exportName: exportName
}));
Expand All @@ -218,8 +247,8 @@ test('State Machine Arn Export Output Enabled With No Name', () => {
exportedStepFunctionName: exportName
});

// THEN
// THEN
expectCDK(stack).to(haveOutput({
exportName: exportName
}));
});
});