@ixor/aws-cdk-ixor-lambda 0.2.0 → 1.0.0-rc-1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -144,4 +144,16 @@ the prerequisite section) will invoke the function with a dummy event that looks
144
144
  }
145
145
  ```
146
146
 
147
- The Lambda function should check for the dummy event and _sleep_ the requested amount of time (in seconds).
147
+ The Lambda function should check for the dummy event and _sleep_ the requested amount of time (in seconds).
148
+
149
+ ### Testing
150
+
151
+ A test stack is added in `lib\test-aws-cdk-ixor-lambda-stack`. Created in this stack:
152
+ * `keepWarmLambda`: this lambda will send out a dummy event every 10 minutes.
153
+ * `lambdaToKeepWarm`: this is a lambda created through the `IxorFunction` and needs to be kept warm
154
+ * The appropriate permissions for the `keepWarmLambda` to invoke the `lambdaToKeepWarm`.
155
+
156
+ The code for both lambdas is situated in the `test_aws_cdk_ixor_lambda_handler` directory.
157
+
158
+ To test this stack, deploy the `test/test-aws-cdk-ixor-lambda` app to sandbox. Every 10 minutes, the keepWarm
159
+ lambda will trigger the lambdaToKeepWarm with a dummy event, both log this in CloudWatch.
@@ -0,0 +1,34 @@
1
+ image: node:14.16.0
2
+
3
+ pipelines:
4
+ branches:
5
+ '{feature/**,bugfix/**,hotfix/**}':
6
+ - step:
7
+ name: "Release patch version to npm"
8
+ script:
9
+ - git clone -b ${BB_AWS_UTILS_VERSION:-master} https://github.com/rik2803/bb-aws-utils.git /bb-aws-utils
10
+ - LIB_DIR=/bb-aws-utils/lib source /bb-aws-utils/lib/load.bash
11
+ - export NPM_TOKEN="$(aws_get_ssm_parameter_by_name NPM_TOKEN)"
12
+ - install_jq
13
+ - npm ci
14
+ - npm run build
15
+ - npm version "$(jq -r '.version' package.json)-rc-${BITBUCKET_BUILD_NUMBER}" -m "[skip ci] Upgrade to %s - $(git log -1 --pretty=%B | head -1)"
16
+ - pipe: atlassian/npm-publish:0.2.0
17
+ variables:
18
+ NPM_TOKEN: $NPM_TOKEN
19
+
20
+ 'master':
21
+ - step:
22
+ name: "Deploy IaC ixor.tcc2022-tst"
23
+ script:
24
+ - git clone -b ${BB_AWS_UTILS_VERSION:-master} https://github.com/rik2803/bb-aws-utils.git /bb-aws-utils
25
+ - LIB_DIR=/bb-aws-utils/lib source /bb-aws-utils/lib/load.bash
26
+ - export NPM_TOKEN="$(aws_get_ssm_parameter_by_name NPM_TOKEN)"
27
+ - npm ci
28
+ - npm run build
29
+ - npm version minor -m "[skip ci] Upgrade to %s - $(git log -1 --pretty=%B | head -1)"
30
+ - git push
31
+ - git push --tags
32
+ - pipe: atlassian/npm-publish:0.2.0
33
+ variables:
34
+ NPM_TOKEN: $NPM_TOKEN
package/cdk.json CHANGED
@@ -1,7 +1,3 @@
1
1
  {
2
- "app": "npx ts-node bin/aws-cdk-ixor-lambda.ts",
3
- "context": {
4
- "@aws-cdk/core:enableStackNameDuplicates": "true",
5
- "aws-cdk:enableDiffNoFail": "true"
6
- }
2
+ "app": "npx ts-node test/test-aws-cdk-ixor-lambda.ts"
7
3
  }
@@ -1,22 +1,13 @@
1
- import lambda = require('@aws-cdk/aws-lambda');
2
- import events = require('@aws-cdk/aws-events');
3
- import cdk = require('@aws-cdk/core');
4
- interface IxorLambdaFunctionProps extends lambda.FunctionProps {
1
+ import { FunctionProps, IFunction, Function } from 'aws-cdk-lib/aws-lambda';
2
+ import { Schedule } from 'aws-cdk-lib/aws-events';
3
+ import { Construct } from 'constructs';
4
+ interface IxorLambdaFunctionProps extends FunctionProps {
5
5
  keepWarm?: boolean;
6
- keepWarmEventSchedule?: events.Schedule;
7
- keepWarmLambdaFunction?: lambda.IFunction;
6
+ keepWarmEventSchedule?: Schedule;
7
+ keepWarmLambdaFunction?: IFunction;
8
8
  keepWarmCount?: number;
9
9
  }
10
- interface IxorDockerImageFunctionProps extends lambda.DockerImageFunctionProps {
11
- keepWarm?: boolean;
12
- keepWarmEventSchedule?: events.Schedule;
13
- keepWarmLambdaFunction?: lambda.IFunction;
14
- keepWarmCount?: number;
15
- }
16
- export declare class Function extends lambda.Function {
17
- constructor(scope: cdk.Construct, id: string, props: IxorLambdaFunctionProps);
18
- }
19
- export declare class DockerImageFunction extends lambda.DockerImageFunction {
20
- constructor(scope: cdk.Construct, id: string, props: IxorDockerImageFunctionProps);
10
+ export declare class IxorFunction extends Function {
11
+ constructor(scope: Construct, id: string, props: IxorLambdaFunctionProps);
21
12
  }
22
13
  export {};
@@ -1,52 +1,30 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- const lambda = require("@aws-cdk/aws-lambda");
4
- const events = require("@aws-cdk/aws-events");
5
- const eventsTargets = require("@aws-cdk/aws-events-targets");
6
- class Function extends lambda.Function {
3
+ exports.IxorFunction = void 0;
4
+ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
5
+ const aws_events_1 = require("aws-cdk-lib/aws-events");
6
+ const aws_events_targets_1 = require("aws-cdk-lib/aws-events-targets");
7
+ class IxorFunction extends aws_lambda_1.Function {
7
8
  constructor(scope, id, props) {
8
9
  var _a;
9
10
  super(scope, id, props);
10
- const keepWarmCount = (_a = props.keepWarmCount, (_a !== null && _a !== void 0 ? _a : 2));
11
+ const keepWarmCount = (_a = props.keepWarmCount) !== null && _a !== void 0 ? _a : 2;
11
12
  const event = {
12
13
  "count": keepWarmCount,
13
14
  "lambdaArn": this.functionArn
14
15
  };
15
16
  if (props.keepWarm && props.keepWarmLambdaFunction) {
16
17
  if (!props.keepWarmEventSchedule) {
17
- props.keepWarmEventSchedule = events.Schedule.cron({
18
+ props.keepWarmEventSchedule = aws_events_1.Schedule.cron({
18
19
  minute: '0/10',
19
20
  hour: '7-19',
20
21
  day: '*W'
21
22
  });
22
23
  }
23
- let rule = new events.Rule(scope, `keepWarm-${this.node.id}`, { schedule: props.keepWarmEventSchedule });
24
- rule.addTarget(new eventsTargets.LambdaFunction(props.keepWarmLambdaFunction, { event: events.RuleTargetInput.fromObject(event) }));
24
+ let rule = new aws_events_1.Rule(scope, `keepWarm-${this.node.id}`, { schedule: props.keepWarmEventSchedule });
25
+ rule.addTarget(new aws_events_targets_1.LambdaFunction(props.keepWarmLambdaFunction, { event: aws_events_1.RuleTargetInput.fromObject(event) }));
25
26
  }
26
27
  }
27
28
  }
28
- exports.Function = Function;
29
- class DockerImageFunction extends lambda.DockerImageFunction {
30
- constructor(scope, id, props) {
31
- var _a;
32
- super(scope, id, props);
33
- const keepWarmCount = (_a = props.keepWarmCount, (_a !== null && _a !== void 0 ? _a : 2));
34
- const event = {
35
- "count": keepWarmCount,
36
- "lambdaArn": this.functionArn
37
- };
38
- if (props.keepWarm && props.keepWarmLambdaFunction) {
39
- if (!props.keepWarmEventSchedule) {
40
- props.keepWarmEventSchedule = events.Schedule.cron({
41
- minute: '0/10',
42
- hour: '7-19',
43
- day: '*W'
44
- });
45
- }
46
- let rule = new events.Rule(scope, `keepWarm-${this.node.id}`, { schedule: props.keepWarmEventSchedule });
47
- rule.addTarget(new eventsTargets.LambdaFunction(props.keepWarmLambdaFunction, { event: events.RuleTargetInput.fromObject(event) }));
48
- }
49
- }
50
- }
51
- exports.DockerImageFunction = DockerImageFunction;
52
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWNkay1peG9yLWxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1jZGstaXhvci1sYW1iZGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw4Q0FBK0M7QUFDL0MsOENBQStDO0FBQy9DLDZEQUE4RDtBQWlCOUQsTUFBYSxRQUFTLFNBQVEsTUFBTSxDQUFDLFFBQVE7SUFDekMsWUFBWSxLQUFvQixFQUFFLEVBQVUsRUFBRSxLQUE4Qjs7UUFDeEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsTUFBTSxhQUFhLFNBQUcsS0FBSyxDQUFDLGFBQWEsdUNBQUksQ0FBQyxFQUFBLENBQUM7UUFDL0MsTUFBTSxLQUFLLEdBQUc7WUFDVixPQUFPLEVBQUUsYUFBYTtZQUN0QixXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7U0FDaEMsQ0FBQTtRQUVELElBQUksS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsc0JBQXNCLEVBQUU7WUFDaEQsSUFBSSxDQUFDLEtBQUssQ0FBQyxxQkFBcUIsRUFBRTtnQkFDOUIsS0FBSyxDQUFDLHFCQUFxQixHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO29CQUMvQyxNQUFNLEVBQUUsTUFBTTtvQkFDZCxJQUFJLEVBQUUsTUFBTTtvQkFDWixHQUFHLEVBQUUsSUFBSTtpQkFDWixDQUFDLENBQUE7YUFDTDtZQUNELElBQUksSUFBSSxHQUFHLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsWUFBWSxJQUFJLENBQUMsSUFBSSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUMsUUFBUSxFQUFFLEtBQUssQ0FBQyxxQkFBcUIsRUFBQyxDQUFDLENBQUM7WUFDdkcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLGFBQWEsQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLHNCQUFzQixFQUFFLEVBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxlQUFlLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFDLENBQUMsQ0FBQyxDQUFBO1NBQ3BJO0lBQ0wsQ0FBQztDQUNKO0FBdEJELDRCQXNCQztBQUVELE1BQWEsbUJBQW9CLFNBQVEsTUFBTSxDQUFDLG1CQUFtQjtJQUMvRCxZQUFZLEtBQW9CLEVBQUUsRUFBVSxFQUFFLEtBQW1DOztRQUM3RSxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixNQUFNLGFBQWEsU0FBRyxLQUFLLENBQUMsYUFBYSx1Q0FBSSxDQUFDLEVBQUEsQ0FBQztRQUMvQyxNQUFNLEtBQUssR0FBRztZQUNWLE9BQU8sRUFBRSxhQUFhO1lBQ3RCLFdBQVcsRUFBRSxJQUFJLENBQUMsV0FBVztTQUNoQyxDQUFBO1FBRUQsSUFBSSxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxzQkFBc0IsRUFBRTtZQUNoRCxJQUFJLENBQUMsS0FBSyxDQUFDLHFCQUFxQixFQUFFO2dCQUM5QixLQUFLLENBQUMscUJBQXFCLEdBQUcsTUFBTSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7b0JBQy9DLE1BQU0sRUFBRSxNQUFNO29CQUNkLElBQUksRUFBRSxNQUFNO29CQUNaLEdBQUcsRUFBRSxJQUFJO2lCQUNaLENBQUMsQ0FBQTthQUNMO1lBQ0QsSUFBSSxJQUFJLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssRUFBRSxZQUFZLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBQyxRQUFRLEVBQUUsS0FBSyxDQUFDLHFCQUFxQixFQUFDLENBQUMsQ0FBQztZQUN2RyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksYUFBYSxDQUFDLGNBQWMsQ0FBQyxLQUFLLENBQUMsc0JBQXNCLEVBQUUsRUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUMsQ0FBQyxDQUFDLENBQUE7U0FDcEk7SUFDTCxDQUFDO0NBQ0o7QUF0QkQsa0RBc0JDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IGxhbWJkYSA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2F3cy1sYW1iZGEnKTtcbmltcG9ydCBldmVudHMgPSByZXF1aXJlKCdAYXdzLWNkay9hd3MtZXZlbnRzJyk7XG5pbXBvcnQgZXZlbnRzVGFyZ2V0cyA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2F3cy1ldmVudHMtdGFyZ2V0cycpO1xuaW1wb3J0IGNkayA9IHJlcXVpcmUoJ0Bhd3MtY2RrL2NvcmUnKTtcblxuaW50ZXJmYWNlIEl4b3JMYW1iZGFGdW5jdGlvblByb3BzIGV4dGVuZHMgbGFtYmRhLkZ1bmN0aW9uUHJvcHMge1xuICAgIGtlZXBXYXJtPzogYm9vbGVhbixcbiAgICBrZWVwV2FybUV2ZW50U2NoZWR1bGU/OiBldmVudHMuU2NoZWR1bGUsXG4gICAga2VlcFdhcm1MYW1iZGFGdW5jdGlvbj86IGxhbWJkYS5JRnVuY3Rpb24sXG4gICAga2VlcFdhcm1Db3VudD86IG51bWJlclxufVxuXG5pbnRlcmZhY2UgSXhvckRvY2tlckltYWdlRnVuY3Rpb25Qcm9wcyBleHRlbmRzIGxhbWJkYS5Eb2NrZXJJbWFnZUZ1bmN0aW9uUHJvcHMge1xuICAgIGtlZXBXYXJtPzogYm9vbGVhbixcbiAgICBrZWVwV2FybUV2ZW50U2NoZWR1bGU/OiBldmVudHMuU2NoZWR1bGUsXG4gICAga2VlcFdhcm1MYW1iZGFGdW5jdGlvbj86IGxhbWJkYS5JRnVuY3Rpb24sXG4gICAga2VlcFdhcm1Db3VudD86IG51bWJlclxufVxuXG5leHBvcnQgY2xhc3MgRnVuY3Rpb24gZXh0ZW5kcyBsYW1iZGEuRnVuY3Rpb24ge1xuICAgIGNvbnN0cnVjdG9yKHNjb3BlOiBjZGsuQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wczogSXhvckxhbWJkYUZ1bmN0aW9uUHJvcHMpIHtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICAgICAgY29uc3Qga2VlcFdhcm1Db3VudCA9IHByb3BzLmtlZXBXYXJtQ291bnQgPz8gMjtcbiAgICAgICAgY29uc3QgZXZlbnQgPSB7XG4gICAgICAgICAgICBcImNvdW50XCI6IGtlZXBXYXJtQ291bnQsXG4gICAgICAgICAgICBcImxhbWJkYUFyblwiOiB0aGlzLmZ1bmN0aW9uQXJuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAocHJvcHMua2VlcFdhcm0gJiYgcHJvcHMua2VlcFdhcm1MYW1iZGFGdW5jdGlvbikge1xuICAgICAgICAgICAgaWYgKCFwcm9wcy5rZWVwV2FybUV2ZW50U2NoZWR1bGUpIHtcbiAgICAgICAgICAgICAgICBwcm9wcy5rZWVwV2FybUV2ZW50U2NoZWR1bGUgPSBldmVudHMuU2NoZWR1bGUuY3Jvbih7XG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZTogJzAvMTAnLFxuICAgICAgICAgICAgICAgICAgICBob3VyOiAnNy0xOScsXG4gICAgICAgICAgICAgICAgICAgIGRheTogJypXJ1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcnVsZSA9IG5ldyBldmVudHMuUnVsZShzY29wZSwgYGtlZXBXYXJtLSR7dGhpcy5ub2RlLmlkfWAsIHtzY2hlZHVsZTogcHJvcHMua2VlcFdhcm1FdmVudFNjaGVkdWxlfSk7XG4gICAgICAgICAgICBydWxlLmFkZFRhcmdldChuZXcgZXZlbnRzVGFyZ2V0cy5MYW1iZGFGdW5jdGlvbihwcm9wcy5rZWVwV2FybUxhbWJkYUZ1bmN0aW9uLCB7ZXZlbnQ6IGV2ZW50cy5SdWxlVGFyZ2V0SW5wdXQuZnJvbU9iamVjdChldmVudCl9KSlcbiAgICAgICAgfVxuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIERvY2tlckltYWdlRnVuY3Rpb24gZXh0ZW5kcyBsYW1iZGEuRG9ja2VySW1hZ2VGdW5jdGlvbiB7XG4gICAgY29uc3RydWN0b3Ioc2NvcGU6IGNkay5Db25zdHJ1Y3QsIGlkOiBzdHJpbmcsIHByb3BzOiBJeG9yRG9ja2VySW1hZ2VGdW5jdGlvblByb3BzKSB7XG4gICAgICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgICAgIGNvbnN0IGtlZXBXYXJtQ291bnQgPSBwcm9wcy5rZWVwV2FybUNvdW50ID8/IDI7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICAgICAgXCJjb3VudFwiOiBrZWVwV2FybUNvdW50LFxuICAgICAgICAgICAgXCJsYW1iZGFBcm5cIjogdGhpcy5mdW5jdGlvbkFyblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmtlZXBXYXJtICYmIHByb3BzLmtlZXBXYXJtTGFtYmRhRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICghcHJvcHMua2VlcFdhcm1FdmVudFNjaGVkdWxlKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMua2VlcFdhcm1FdmVudFNjaGVkdWxlID0gZXZlbnRzLlNjaGVkdWxlLmNyb24oe1xuICAgICAgICAgICAgICAgICAgICBtaW51dGU6ICcwLzEwJyxcbiAgICAgICAgICAgICAgICAgICAgaG91cjogJzctMTknLFxuICAgICAgICAgICAgICAgICAgICBkYXk6ICcqVydcbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgbGV0IHJ1bGUgPSBuZXcgZXZlbnRzLlJ1bGUoc2NvcGUsIGBrZWVwV2FybS0ke3RoaXMubm9kZS5pZH1gLCB7c2NoZWR1bGU6IHByb3BzLmtlZXBXYXJtRXZlbnRTY2hlZHVsZX0pO1xuICAgICAgICAgICAgcnVsZS5hZGRUYXJnZXQobmV3IGV2ZW50c1RhcmdldHMuTGFtYmRhRnVuY3Rpb24ocHJvcHMua2VlcFdhcm1MYW1iZGFGdW5jdGlvbiwge2V2ZW50OiBldmVudHMuUnVsZVRhcmdldElucHV0LmZyb21PYmplY3QoZXZlbnQpfSkpXG4gICAgICAgIH1cbiAgICB9XG59Il19
29
+ exports.IxorFunction = IxorFunction;
30
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXdzLWNkay1peG9yLWxhbWJkYS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbImF3cy1jZGstaXhvci1sYW1iZGEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsdURBQTBFO0FBQzFFLHVEQUF1RTtBQUN2RSx1RUFBNkQ7QUFVN0QsTUFBYSxZQUFhLFNBQVEscUJBQVE7SUFDdEMsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUE4Qjs7UUFDcEUsS0FBSyxDQUFDLEtBQUssRUFBRSxFQUFFLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFFeEIsTUFBTSxhQUFhLFNBQUcsS0FBSyxDQUFDLGFBQWEsbUNBQUksQ0FBQyxDQUFDO1FBQy9DLE1BQU0sS0FBSyxHQUFHO1lBQ1YsT0FBTyxFQUFFLGFBQWE7WUFDdEIsV0FBVyxFQUFFLElBQUksQ0FBQyxXQUFXO1NBQ2hDLENBQUE7UUFFRCxJQUFJLEtBQUssQ0FBQyxRQUFRLElBQUksS0FBSyxDQUFDLHNCQUFzQixFQUFFO1lBQ2hELElBQUksQ0FBQyxLQUFLLENBQUMscUJBQXFCLEVBQUU7Z0JBQzlCLEtBQUssQ0FBQyxxQkFBcUIsR0FBRyxxQkFBUSxDQUFDLElBQUksQ0FBQztvQkFDeEMsTUFBTSxFQUFFLE1BQU07b0JBQ2QsSUFBSSxFQUFFLE1BQU07b0JBQ1osR0FBRyxFQUFFLElBQUk7aUJBQ1osQ0FBQyxDQUFBO2FBQ0w7WUFDRCxJQUFJLElBQUksR0FBRyxJQUFJLGlCQUFJLENBQUMsS0FBSyxFQUFFLFlBQVksSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMscUJBQXFCLEVBQUMsQ0FBQyxDQUFDO1lBQ2hHLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxtQ0FBYyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsRUFBRSxFQUFDLEtBQUssRUFBRSw0QkFBZSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsRUFBQyxDQUFDLENBQUMsQ0FBQTtTQUMvRztJQUNMLENBQUM7Q0FDSjtBQXRCRCxvQ0FzQkMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge0Z1bmN0aW9uUHJvcHMsIElGdW5jdGlvbiwgRnVuY3Rpb259IGZyb20gJ2F3cy1jZGstbGliL2F3cy1sYW1iZGEnO1xuaW1wb3J0IHtTY2hlZHVsZSwgUnVsZSwgUnVsZVRhcmdldElucHV0fSBmcm9tICdhd3MtY2RrLWxpYi9hd3MtZXZlbnRzJztcbmltcG9ydCB7TGFtYmRhRnVuY3Rpb259IGZyb20gJ2F3cy1jZGstbGliL2F3cy1ldmVudHMtdGFyZ2V0cydcbmltcG9ydCB7Q29uc3RydWN0fSBmcm9tICdjb25zdHJ1Y3RzJ1xuXG5pbnRlcmZhY2UgSXhvckxhbWJkYUZ1bmN0aW9uUHJvcHMgZXh0ZW5kcyBGdW5jdGlvblByb3BzIHtcbiAgICBrZWVwV2FybT86IGJvb2xlYW4sXG4gICAga2VlcFdhcm1FdmVudFNjaGVkdWxlPzogU2NoZWR1bGUsXG4gICAga2VlcFdhcm1MYW1iZGFGdW5jdGlvbj86IElGdW5jdGlvbixcbiAgICBrZWVwV2FybUNvdW50PzogbnVtYmVyXG59XG5cbmV4cG9ydCBjbGFzcyBJeG9yRnVuY3Rpb24gZXh0ZW5kcyBGdW5jdGlvbiB7XG4gICAgY29uc3RydWN0b3Ioc2NvcGU6IENvbnN0cnVjdCwgaWQ6IHN0cmluZywgcHJvcHM6IEl4b3JMYW1iZGFGdW5jdGlvblByb3BzKSB7XG4gICAgICAgIHN1cGVyKHNjb3BlLCBpZCwgcHJvcHMpO1xuXG4gICAgICAgIGNvbnN0IGtlZXBXYXJtQ291bnQgPSBwcm9wcy5rZWVwV2FybUNvdW50ID8/IDI7XG4gICAgICAgIGNvbnN0IGV2ZW50ID0ge1xuICAgICAgICAgICAgXCJjb3VudFwiOiBrZWVwV2FybUNvdW50LFxuICAgICAgICAgICAgXCJsYW1iZGFBcm5cIjogdGhpcy5mdW5jdGlvbkFyblxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb3BzLmtlZXBXYXJtICYmIHByb3BzLmtlZXBXYXJtTGFtYmRhRnVuY3Rpb24pIHtcbiAgICAgICAgICAgIGlmICghcHJvcHMua2VlcFdhcm1FdmVudFNjaGVkdWxlKSB7XG4gICAgICAgICAgICAgICAgcHJvcHMua2VlcFdhcm1FdmVudFNjaGVkdWxlID0gU2NoZWR1bGUuY3Jvbih7XG4gICAgICAgICAgICAgICAgICAgIG1pbnV0ZTogJzAvMTAnLFxuICAgICAgICAgICAgICAgICAgICBob3VyOiAnNy0xOScsXG4gICAgICAgICAgICAgICAgICAgIGRheTogJypXJ1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBsZXQgcnVsZSA9IG5ldyBSdWxlKHNjb3BlLCBga2VlcFdhcm0tJHt0aGlzLm5vZGUuaWR9YCwge3NjaGVkdWxlOiBwcm9wcy5rZWVwV2FybUV2ZW50U2NoZWR1bGV9KTtcbiAgICAgICAgICAgIHJ1bGUuYWRkVGFyZ2V0KG5ldyBMYW1iZGFGdW5jdGlvbihwcm9wcy5rZWVwV2FybUxhbWJkYUZ1bmN0aW9uLCB7ZXZlbnQ6IFJ1bGVUYXJnZXRJbnB1dC5mcm9tT2JqZWN0KGV2ZW50KX0pKVxuICAgICAgICB9XG4gICAgfVxufSJdfQ==
@@ -0,0 +1,7 @@
1
+ import { Stack, StackProps } from 'aws-cdk-lib';
2
+ import { Construct } from 'constructs';
3
+ export declare class TestAwsCdkIxorLambdaStack extends Stack {
4
+ private keepWarmLambda;
5
+ private lambdaToKeepWarm;
6
+ constructor(scope: Construct, id: string, props?: StackProps);
7
+ }
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.TestAwsCdkIxorLambdaStack = void 0;
4
+ const aws_cdk_lib_1 = require("aws-cdk-lib");
5
+ const aws_lambda_1 = require("aws-cdk-lib/aws-lambda");
6
+ const aws_cdk_ixor_lambda_1 = require("./aws-cdk-ixor-lambda");
7
+ const path = require("path");
8
+ const aws_events_1 = require("aws-cdk-lib/aws-events");
9
+ const aws_iam_1 = require("aws-cdk-lib/aws-iam");
10
+ class TestAwsCdkIxorLambdaStack extends aws_cdk_lib_1.Stack {
11
+ constructor(scope, id, props) {
12
+ super(scope, id, props);
13
+ this.keepWarmLambda = new aws_lambda_1.Function(this, 'ixor-lambda-keep-warm-lambda', {
14
+ functionName: 'keepWarmLambda',
15
+ code: aws_lambda_1.Code.fromAsset(path.join(__dirname, '../test_aws_cdk_ixor_lambda_handler')),
16
+ handler: "test_aws_cdk_ixor_lambda_keepwarm.lambda_handler",
17
+ runtime: aws_lambda_1.Runtime.PYTHON_3_8,
18
+ timeout: aws_cdk_lib_1.Duration.seconds(30)
19
+ });
20
+ this.lambdaToKeepWarm = new aws_cdk_ixor_lambda_1.IxorFunction(this, 'ixor-lambda-lambda-to-keep-warm', {
21
+ functionName: 'lambdaToKeepWarm',
22
+ code: aws_lambda_1.Code.fromAsset(path.join(__dirname, '../test_aws_cdk_ixor_lambda_handler')),
23
+ handler: "test_aws_cdk_ixor_lambda_warmed_lambda.lambda_handler",
24
+ runtime: aws_lambda_1.Runtime.PYTHON_3_8,
25
+ timeout: aws_cdk_lib_1.Duration.seconds(30),
26
+ keepWarm: true,
27
+ keepWarmCount: 2,
28
+ keepWarmLambdaFunction: this.keepWarmLambda,
29
+ keepWarmEventSchedule: aws_events_1.Schedule.cron({
30
+ minute: '0/10',
31
+ hour: '7-19',
32
+ day: '*W'
33
+ })
34
+ });
35
+ this.keepWarmLambda.addToRolePolicy(new aws_iam_1.PolicyStatement({
36
+ resources: [this.lambdaToKeepWarm.functionArn],
37
+ actions: ['lambda:InvokeFunction', 'lambda:InvokeAsync']
38
+ }));
39
+ }
40
+ }
41
+ exports.TestAwsCdkIxorLambdaStack = TestAwsCdkIxorLambdaStack;
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1hd3MtY2RrLWl4b3ItbGFtYmRhLXN0YWNrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC1hd3MtY2RrLWl4b3ItbGFtYmRhLXN0YWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLDZDQUF3RDtBQUV4RCx1REFBMEU7QUFDMUUsK0RBQW1EO0FBQ25ELDZCQUE2QjtBQUM3Qix1REFBZ0Q7QUFDaEQsaURBQW9EO0FBR3BELE1BQWEseUJBQTBCLFNBQVEsbUJBQUs7SUFLaEQsWUFBWSxLQUFnQixFQUFFLEVBQVUsRUFBRSxLQUFrQjtRQUN4RCxLQUFLLENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUV4QixJQUFJLENBQUMsY0FBYyxHQUFHLElBQUkscUJBQVEsQ0FBQyxJQUFJLEVBQUUsOEJBQThCLEVBQUU7WUFDckUsWUFBWSxFQUFFLGdCQUFnQjtZQUM5QixJQUFJLEVBQUUsaUJBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUscUNBQXFDLENBQUMsQ0FBQztZQUNqRixPQUFPLEVBQUUsa0RBQWtEO1lBQzNELE9BQU8sRUFBRSxvQkFBTyxDQUFDLFVBQVU7WUFDM0IsT0FBTyxFQUFFLHNCQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztTQUNoQyxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsZ0JBQWdCLEdBQUcsSUFBSSxrQ0FBWSxDQUFDLElBQUksRUFBRSxpQ0FBaUMsRUFBRTtZQUM5RSxZQUFZLEVBQUUsa0JBQWtCO1lBQ2hDLElBQUksRUFBRSxpQkFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxxQ0FBcUMsQ0FBQyxDQUFDO1lBQ2pGLE9BQU8sRUFBRSx1REFBdUQ7WUFDaEUsT0FBTyxFQUFFLG9CQUFPLENBQUMsVUFBVTtZQUMzQixPQUFPLEVBQUUsc0JBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQzdCLFFBQVEsRUFBRSxJQUFJO1lBQ2QsYUFBYSxFQUFFLENBQUM7WUFDaEIsc0JBQXNCLEVBQUUsSUFBSSxDQUFDLGNBQWM7WUFDM0MscUJBQXFCLEVBQUUscUJBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQ2pDLE1BQU0sRUFBRSxNQUFNO2dCQUNkLElBQUksRUFBRSxNQUFNO2dCQUNaLEdBQUcsRUFBRSxJQUFJO2FBQ1osQ0FBQztTQUNMLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxjQUFjLENBQUMsZUFBZSxDQUFDLElBQUkseUJBQWUsQ0FBQztZQUNwRCxTQUFTLEVBQUUsQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFDO1lBQzlDLE9BQU8sRUFBRSxDQUFDLHVCQUF1QixFQUFFLG9CQUFvQixDQUFDO1NBQzNELENBQUMsQ0FBQyxDQUFBO0lBQ1AsQ0FBQztDQUNKO0FBckNELDhEQXFDQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7U3RhY2ssIFN0YWNrUHJvcHMsIER1cmF0aW9ufSBmcm9tICdhd3MtY2RrLWxpYic7XG5pbXBvcnQgeyBDb25zdHJ1Y3QgfSBmcm9tICdjb25zdHJ1Y3RzJztcbmltcG9ydCB7SUZ1bmN0aW9uLCBGdW5jdGlvbiwgQ29kZSwgUnVudGltZX0gZnJvbSBcImF3cy1jZGstbGliL2F3cy1sYW1iZGFcIjtcbmltcG9ydCB7SXhvckZ1bmN0aW9ufSBmcm9tIFwiLi9hd3MtY2RrLWl4b3ItbGFtYmRhXCI7XG5pbXBvcnQgKiBhcyBwYXRoIGZyb20gXCJwYXRoXCI7XG5pbXBvcnQge1NjaGVkdWxlfSBmcm9tIFwiYXdzLWNkay1saWIvYXdzLWV2ZW50c1wiO1xuaW1wb3J0IHtQb2xpY3lTdGF0ZW1lbnR9IGZyb20gXCJhd3MtY2RrLWxpYi9hd3MtaWFtXCI7XG5cblxuZXhwb3J0IGNsYXNzIFRlc3RBd3NDZGtJeG9yTGFtYmRhU3RhY2sgZXh0ZW5kcyBTdGFjayB7XG4gICAgcHJpdmF0ZSBrZWVwV2FybUxhbWJkYTogSUZ1bmN0aW9uO1xuICAgIHByaXZhdGUgbGFtYmRhVG9LZWVwV2FybTogSUZ1bmN0aW9uO1xuXG5cbiAgICBjb25zdHJ1Y3RvcihzY29wZTogQ29uc3RydWN0LCBpZDogc3RyaW5nLCBwcm9wcz86IFN0YWNrUHJvcHMpIHtcbiAgICAgICAgc3VwZXIoc2NvcGUsIGlkLCBwcm9wcyk7XG5cbiAgICAgICAgdGhpcy5rZWVwV2FybUxhbWJkYSA9IG5ldyBGdW5jdGlvbih0aGlzLCAnaXhvci1sYW1iZGEta2VlcC13YXJtLWxhbWJkYScsIHtcbiAgICAgICAgICAgIGZ1bmN0aW9uTmFtZTogJ2tlZXBXYXJtTGFtYmRhJyxcbiAgICAgICAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi90ZXN0X2F3c19jZGtfaXhvcl9sYW1iZGFfaGFuZGxlcicpKSxcbiAgICAgICAgICAgIGhhbmRsZXI6IFwidGVzdF9hd3NfY2RrX2l4b3JfbGFtYmRhX2tlZXB3YXJtLmxhbWJkYV9oYW5kbGVyXCIsXG4gICAgICAgICAgICBydW50aW1lOiBSdW50aW1lLlBZVEhPTl8zXzgsXG4gICAgICAgICAgICB0aW1lb3V0OiBEdXJhdGlvbi5zZWNvbmRzKDMwKVxuICAgICAgICB9KVxuXG4gICAgICAgIHRoaXMubGFtYmRhVG9LZWVwV2FybSA9IG5ldyBJeG9yRnVuY3Rpb24odGhpcywgJ2l4b3ItbGFtYmRhLWxhbWJkYS10by1rZWVwLXdhcm0nLCB7XG4gICAgICAgICAgICBmdW5jdGlvbk5hbWU6ICdsYW1iZGFUb0tlZXBXYXJtJyxcbiAgICAgICAgICAgIGNvZGU6IENvZGUuZnJvbUFzc2V0KHBhdGguam9pbihfX2Rpcm5hbWUsICcuLi90ZXN0X2F3c19jZGtfaXhvcl9sYW1iZGFfaGFuZGxlcicpKSxcbiAgICAgICAgICAgIGhhbmRsZXI6IFwidGVzdF9hd3NfY2RrX2l4b3JfbGFtYmRhX3dhcm1lZF9sYW1iZGEubGFtYmRhX2hhbmRsZXJcIixcbiAgICAgICAgICAgIHJ1bnRpbWU6IFJ1bnRpbWUuUFlUSE9OXzNfOCxcbiAgICAgICAgICAgIHRpbWVvdXQ6IER1cmF0aW9uLnNlY29uZHMoMzApLFxuICAgICAgICAgICAga2VlcFdhcm06IHRydWUsXG4gICAgICAgICAgICBrZWVwV2FybUNvdW50OiAyLFxuICAgICAgICAgICAga2VlcFdhcm1MYW1iZGFGdW5jdGlvbjogdGhpcy5rZWVwV2FybUxhbWJkYSxcbiAgICAgICAgICAgIGtlZXBXYXJtRXZlbnRTY2hlZHVsZTogU2NoZWR1bGUuY3Jvbih7XG4gICAgICAgICAgICAgICAgbWludXRlOiAnMC8xMCcsXG4gICAgICAgICAgICAgICAgaG91cjogJzctMTknLFxuICAgICAgICAgICAgICAgIGRheTogJypXJ1xuICAgICAgICAgICAgfSlcbiAgICAgICAgfSlcblxuICAgICAgICB0aGlzLmtlZXBXYXJtTGFtYmRhLmFkZFRvUm9sZVBvbGljeShuZXcgUG9saWN5U3RhdGVtZW50KHtcbiAgICAgICAgICAgIHJlc291cmNlczogW3RoaXMubGFtYmRhVG9LZWVwV2FybS5mdW5jdGlvbkFybl0sXG4gICAgICAgICAgICBhY3Rpb25zOiBbJ2xhbWJkYTpJbnZva2VGdW5jdGlvbicsICdsYW1iZGE6SW52b2tlQXN5bmMnXVxuICAgICAgICB9KSlcbiAgICB9XG59XG4iXX0=
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ixor/aws-cdk-ixor-lambda",
3
- "version": "0.2.0",
3
+ "version": "1.0.0-rc-1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/ixorbe/aws-cdk-ixor-lambda.git"
@@ -19,25 +19,19 @@
19
19
  "prepublishOnly": "tsc"
20
20
  },
21
21
  "devDependencies": {
22
- "@aws-cdk/assert": "1.128.0",
22
+ "aws-cdk-lib": "~2.50.0",
23
+ "constructs": "~10.1.152",
23
24
  "@types/jest": "^25.2.1",
24
25
  "@types/node": "10.17.5",
25
26
  "jest": "^25.5.0",
26
27
  "ts-jest": "^25.3.1",
27
- "aws-cdk": "~1.128.0",
28
28
  "ts-node": "^8.1.0",
29
- "typescript": "~3.7.2",
30
- "@aws-cdk/aws-events": "~1.128.0",
31
- "@aws-cdk/aws-events-targets": "~1.128.0",
32
- "@aws-cdk/aws-lambda": "~1.128.0",
33
- "@aws-cdk/core": "~1.128.0",
29
+ "typescript": "~3.9.7",
34
30
  "source-map-support": "^0.5.16"
35
31
  },
36
32
  "peerDependencies": {
37
- "@aws-cdk/aws-events": "~1.128.0",
38
- "@aws-cdk/aws-events-targets": "~1.128.0",
39
- "@aws-cdk/aws-lambda": "~1.128.0",
40
- "@aws-cdk/core": "~1.128.0",
33
+ "aws-cdk-lib": "~2.50.0",
34
+ "constructs": "~10.1.152",
41
35
  "source-map-support": "^0.5.16"
42
36
  }
43
37
  }
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ import 'source-map-support/register';
@@ -0,0 +1,20 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ require("source-map-support/register");
5
+ const cdk = require("aws-cdk-lib");
6
+ const test_aws_cdk_ixor_lambda_stack_1 = require("../lib/test-aws-cdk-ixor-lambda-stack");
7
+ const app = new cdk.App();
8
+ new test_aws_cdk_ixor_lambda_stack_1.TestAwsCdkIxorLambdaStack(app, 'TestAwsCdkIxorLambdaStack', {
9
+ /* If you don't specify 'env', this stack will be environment-agnostic.
10
+ * Account/Region-dependent features and context lookups will not work,
11
+ * but a single synthesized template can be deployed anywhere. */
12
+ /* Uncomment the next line to specialize this stack for the AWS Account
13
+ * and Region that are implied by the current CLI configuration. */
14
+ // env: { account: process.env.CDK_DEFAULT_ACCOUNT, region: process.env.CDK_DEFAULT_REGION },
15
+ /* Uncomment the next line if you know exactly what Account and Region you
16
+ * want to deploy the stack to. */
17
+ //only Sandbox account
18
+ env: { account: '365354788990', region: 'eu-central-1' },
19
+ });
20
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdC1hd3MtY2RrLWl4b3ItbGFtYmRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsidGVzdC1hd3MtY2RrLWl4b3ItbGFtYmRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHVDQUFxQztBQUNyQyxtQ0FBbUM7QUFDbkMsMEZBQWtGO0FBR2xGLE1BQU0sR0FBRyxHQUFHLElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzFCLElBQUksMERBQXlCLENBQUMsR0FBRyxFQUFFLDJCQUEyQixFQUFFO0lBQzVEOztxRUFFaUU7SUFFakU7dUVBQ21FO0lBQ25FLDZGQUE2RjtJQUU3RjtzQ0FDa0M7SUFDbEMsc0JBQXNCO0lBQ3RCLEdBQUcsRUFBRSxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxFQUFFLGNBQWMsRUFBRTtDQUUzRCxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5pbXBvcnQgJ3NvdXJjZS1tYXAtc3VwcG9ydC9yZWdpc3Rlcic7XG5pbXBvcnQgKiBhcyBjZGsgZnJvbSAnYXdzLWNkay1saWInO1xuaW1wb3J0IHsgVGVzdEF3c0Nka0l4b3JMYW1iZGFTdGFjayB9IGZyb20gJy4uL2xpYi90ZXN0LWF3cy1jZGstaXhvci1sYW1iZGEtc3RhY2snO1xuXG5cbmNvbnN0IGFwcCA9IG5ldyBjZGsuQXBwKCk7XG5uZXcgVGVzdEF3c0Nka0l4b3JMYW1iZGFTdGFjayhhcHAsICdUZXN0QXdzQ2RrSXhvckxhbWJkYVN0YWNrJywge1xuICAgIC8qIElmIHlvdSBkb24ndCBzcGVjaWZ5ICdlbnYnLCB0aGlzIHN0YWNrIHdpbGwgYmUgZW52aXJvbm1lbnQtYWdub3N0aWMuXG4gICAgICogQWNjb3VudC9SZWdpb24tZGVwZW5kZW50IGZlYXR1cmVzIGFuZCBjb250ZXh0IGxvb2t1cHMgd2lsbCBub3Qgd29yayxcbiAgICAgKiBidXQgYSBzaW5nbGUgc3ludGhlc2l6ZWQgdGVtcGxhdGUgY2FuIGJlIGRlcGxveWVkIGFueXdoZXJlLiAqL1xuXG4gICAgLyogVW5jb21tZW50IHRoZSBuZXh0IGxpbmUgdG8gc3BlY2lhbGl6ZSB0aGlzIHN0YWNrIGZvciB0aGUgQVdTIEFjY291bnRcbiAgICAgKiBhbmQgUmVnaW9uIHRoYXQgYXJlIGltcGxpZWQgYnkgdGhlIGN1cnJlbnQgQ0xJIGNvbmZpZ3VyYXRpb24uICovXG4gICAgLy8gZW52OiB7IGFjY291bnQ6IHByb2Nlc3MuZW52LkNES19ERUZBVUxUX0FDQ09VTlQsIHJlZ2lvbjogcHJvY2Vzcy5lbnYuQ0RLX0RFRkFVTFRfUkVHSU9OIH0sXG5cbiAgICAvKiBVbmNvbW1lbnQgdGhlIG5leHQgbGluZSBpZiB5b3Uga25vdyBleGFjdGx5IHdoYXQgQWNjb3VudCBhbmQgUmVnaW9uIHlvdVxuICAgICAqIHdhbnQgdG8gZGVwbG95IHRoZSBzdGFjayB0by4gKi9cbiAgICAvL29ubHkgU2FuZGJveCBhY2NvdW50XG4gICAgZW52OiB7IGFjY291bnQ6ICczNjUzNTQ3ODg5OTAnLCByZWdpb246ICdldS1jZW50cmFsLTEnIH0sXG4gICAgLyogRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBodHRwczovL2RvY3MuYXdzLmFtYXpvbi5jb20vY2RrL2xhdGVzdC9ndWlkZS9lbnZpcm9ubWVudHMuaHRtbCAqL1xufSk7Il19
@@ -0,0 +1,41 @@
1
+ import json
2
+ import logging
3
+ import boto3
4
+ import os
5
+
6
+ logger = logging.getLogger()
7
+ logger.setLevel(logging.INFO)
8
+
9
+ client = boto3.client("lambda")
10
+
11
+ dummy_sleep_seconds = os.getenv('DUMMY_SLEEP_SECONDS', '1')
12
+
13
+ def lambda_handler(event, context):
14
+ logger.info(json.dumps(event))
15
+ count = event.get('count', 3)
16
+ lambda_arn = event.get('lambdaArn')
17
+ logger.debug(f"Lambda to warm: {lambda_arn}")
18
+ logger.debug(f"How many? {count}")
19
+ logger.info(f"Asynchronously starting {count} target lambdas")
20
+
21
+ success_count = 0
22
+
23
+ for i in range(count):
24
+ logger.debug(f"Iteration {i+1}")
25
+ try:
26
+ client.invoke(
27
+ FunctionName=lambda_arn,
28
+ InvocationType='Event',
29
+ Payload=f'{{"dummy": "dummy", "dummySleepSeconds": {dummy_sleep_seconds} }}'
30
+ )
31
+ except Exception as e:
32
+ logger.error(f"Exception occured: {e}")
33
+ else:
34
+ success_count = success_count + 1
35
+
36
+ logger.info(f"{success_count}/{count} successful invocations")
37
+
38
+ return {
39
+ 'statusCode': 200,
40
+ 'body': json.dumps('Finished')
41
+ }
@@ -0,0 +1,24 @@
1
+ import json
2
+ import logging
3
+ import os
4
+
5
+ logger = logging.getLogger()
6
+ logger.setLevel(logging.INFO)
7
+
8
+ if "DEBUG" in os.environ:
9
+ logger.setLevel(logging.DEBUG)
10
+
11
+ def lambda_handler(event, context):
12
+ logger.info(f"Starting warmed lambda")
13
+ logger.info(json.dumps(event))
14
+
15
+ result = False
16
+ if 'dummy' in event:
17
+ sleep(event.get('dummySleepSeconds', 1))
18
+ result = True
19
+
20
+ logger.info(f"Successful dummy: {result}")
21
+
22
+ return {
23
+ "success": result
24
+ }
@@ -1,12 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <module type="WEB_MODULE" version="4">
3
- <component name="NewModuleRootManager">
4
- <content url="file://$MODULE_DIR$">
5
- <excludeFolder url="file://$MODULE_DIR$/.tmp" />
6
- <excludeFolder url="file://$MODULE_DIR$/temp" />
7
- <excludeFolder url="file://$MODULE_DIR$/tmp" />
8
- </content>
9
- <orderEntry type="inheritedJdk" />
10
- <orderEntry type="sourceFolder" forTests="false" />
11
- </component>
12
- </module>
package/.idea/aws.xml DELETED
@@ -1,11 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="accountSettings">
4
- <option name="activeRegion" value="eu-central-1" />
5
- <option name="recentlyUsedRegions">
6
- <list>
7
- <option value="eu-central-1" />
8
- </list>
9
- </option>
10
- </component>
11
- </project>
package/.idea/misc.xml DELETED
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="JavaScriptSettings">
4
- <option name="languageLevel" value="ES6" />
5
- </component>
6
- </project>
package/.idea/modules.xml DELETED
@@ -1,8 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ProjectModuleManager">
4
- <modules>
5
- <module fileurl="file://$PROJECT_DIR$/.idea/aws-cdk-ixor-lambda.iml" filepath="$PROJECT_DIR$/.idea/aws-cdk-ixor-lambda.iml" />
6
- </modules>
7
- </component>
8
- </project>
package/.idea/vcs.xml DELETED
@@ -1,6 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="VcsDirectoryMappings">
4
- <mapping directory="$PROJECT_DIR$" vcs="Git" />
5
- </component>
6
- </project>
@@ -1,103 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <project version="4">
3
- <component name="ChangeListManager">
4
- <list default="true" id="698705ca-4ff3-4982-91fb-9a2ce97f8af0" name="Default Changelist" comment="">
5
- <change beforePath="$PROJECT_DIR$/lib/aws-cdk-ixor-lambda.ts" beforeDir="false" afterPath="$PROJECT_DIR$/lib/aws-cdk-ixor-lambda.ts" afterDir="false" />
6
- <change beforePath="$PROJECT_DIR$/package-lock.json" beforeDir="false" afterPath="$PROJECT_DIR$/package-lock.json" afterDir="false" />
7
- <change beforePath="$PROJECT_DIR$/package.json" beforeDir="false" afterPath="$PROJECT_DIR$/package.json" afterDir="false" />
8
- </list>
9
- <option name="SHOW_DIALOG" value="false" />
10
- <option name="HIGHLIGHT_CONFLICTS" value="true" />
11
- <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
12
- <option name="LAST_RESOLUTION" value="IGNORE" />
13
- </component>
14
- <component name="Git.Settings">
15
- <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
16
- </component>
17
- <component name="ProjectId" id="1cO47Lu7dR0pvgFWIv3sCgN93XF" />
18
- <component name="ProjectViewState">
19
- <option name="hideEmptyMiddlePackages" value="true" />
20
- <option name="showExcludedFiles" value="false" />
21
- <option name="showLibraryContents" value="true" />
22
- </component>
23
- <component name="PropertiesComponent">
24
- <property name="RunOnceActivity.OpenProjectViewOnStart" value="true" />
25
- <property name="RunOnceActivity.ShowReadmeOnStart" value="true" />
26
- <property name="last_opened_file_path" value="$PROJECT_DIR$" />
27
- <property name="node.js.detected.package.eslint" value="true" />
28
- <property name="node.js.detected.package.standard" value="true" />
29
- <property name="node.js.detected.package.tslint" value="true" />
30
- <property name="node.js.path.for.package.eslint" value="project" />
31
- <property name="node.js.path.for.package.standard" value="project" />
32
- <property name="node.js.path.for.package.tslint" value="project" />
33
- <property name="node.js.selected.package.eslint" value="(autodetect)" />
34
- <property name="node.js.selected.package.standard" value="" />
35
- <property name="node.js.selected.package.tslint" value="(autodetect)" />
36
- <property name="nodejs_interpreter_path" value="node" />
37
- <property name="nodejs_package_manager_path" value="npm" />
38
- <property name="settings.editor.selected.configurable" value="settings.nodejs" />
39
- <property name="ts.external.directory.path" value="$PROJECT_DIR$/node_modules/typescript/lib" />
40
- <property name="vue.rearranger.settings.migration" value="true" />
41
- </component>
42
- <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
43
- <component name="SvnConfiguration">
44
- <configuration />
45
- </component>
46
- <component name="TaskManager">
47
- <task active="true" id="Default" summary="Default task">
48
- <changelist id="698705ca-4ff3-4982-91fb-9a2ce97f8af0" name="Default Changelist" comment="" />
49
- <created>1590386137515</created>
50
- <option name="number" value="Default" />
51
- <option name="presentableId" value="Default" />
52
- <updated>1590386137515</updated>
53
- <workItem from="1590386140821" duration="8573000" />
54
- <workItem from="1590471986532" duration="55000" />
55
- <workItem from="1594298938144" duration="3372000" />
56
- <workItem from="1634545910408" duration="305000" />
57
- </task>
58
- <task id="LOCAL-00001" summary="Moved code from a custom cdk stack to a construct in its own package and added a README.md file">
59
- <created>1590398700384</created>
60
- <option name="number" value="00001" />
61
- <option name="presentableId" value="LOCAL-00001" />
62
- <option name="project" value="LOCAL" />
63
- <updated>1590398700385</updated>
64
- </task>
65
- <task id="LOCAL-00002" summary="Cleanup and update README.md">
66
- <created>1590408429833</created>
67
- <option name="number" value="00002" />
68
- <option name="presentableId" value="LOCAL-00002" />
69
- <option name="project" value="LOCAL" />
70
- <updated>1590408429835</updated>
71
- </task>
72
- <option name="localTasksCounter" value="3" />
73
- <servers />
74
- </component>
75
- <component name="TypeScriptGeneratedFilesManager">
76
- <option name="version" value="3" />
77
- <option name="exactExcludedFiles">
78
- <list>
79
- <option value="$PROJECT_DIR$/lib/aws-cdk-ixor-lambda.js" />
80
- <option value="$PROJECT_DIR$/lib/aws-cdk-ixor-lambda.d.ts" />
81
- </list>
82
- </option>
83
- </component>
84
- <component name="VcsManagerConfiguration">
85
- <MESSAGE value="Moved code from a custom cdk stack to a construct in its own package and added a README.md file" />
86
- <MESSAGE value="Cleanup and update README.md" />
87
- <option name="LAST_COMMIT_MESSAGE" value="Cleanup and update README.md" />
88
- </component>
89
- <component name="WindowStateProjectService">
90
- <state x="-2662" y="495" key="#com.intellij.refactoring.safeDelete.UnsafeUsagesDialog" timestamp="1590408366170">
91
- <screen x="-3200" y="86" width="3200" height="1310" />
92
- </state>
93
- <state x="-2662" y="495" key="#com.intellij.refactoring.safeDelete.UnsafeUsagesDialog/0.23.2560.1417/-3200.86.3200.1310@-3200.86.3200.1310" timestamp="1590408366170" />
94
- <state x="-2823" y="316" key="CommitChangelistDialog2" timestamp="1590408429408">
95
- <screen x="-3200" y="86" width="3200" height="1310" />
96
- </state>
97
- <state x="-2823" y="316" key="CommitChangelistDialog2/0.23.2560.1417/-3200.86.3200.1310@-3200.86.3200.1310" timestamp="1590408429408" />
98
- <state x="-2797" y="380" key="SettingsEditor" timestamp="1590386235160">
99
- <screen x="-3200" y="86" width="3200" height="1310" />
100
- </state>
101
- <state x="-2797" y="380" key="SettingsEditor/0.23.2560.1417/-3200.86.3200.1310@-3200.86.3200.1310" timestamp="1590386235160" />
102
- </component>
103
- </project>