Skip to content

Commit b25e3cf

Browse files
authored
feat: enable sls logs for lambda invoke (#25)
feat: enable sls logs for lambda invoke - enable sls logs for fc Refs: #5 --------- Signed-off-by: seven <zilisheng1996@gmail.com>
1 parent a523eef commit b25e3cf

File tree

10 files changed

+718
-64
lines changed

10 files changed

+718
-64
lines changed

package-lock.json

Lines changed: 7 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
"@alicloud/ros-cdk-oss": "^1.4.0",
5959
"@alicloud/ros-cdk-ossdeployment": "^1.4.0",
6060
"@alicloud/ros-cdk-ram": "^1.4.0",
61+
"@alicloud/ros-cdk-sls": "^1.5.0",
6162
"@alicloud/ros20190910": "^3.5.2",
6263
"ajv": "^8.17.1",
6364
"ali-oss": "^6.22.0",

src/common/base64.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export const encodeBase64 = (str: string) => Buffer.from(str, 'utf-8').toString('base64');

src/common/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ export * from './actionContext';
66
export * from './iacHelper';
77
export * from './constants';
88
export * from './imsClient';
9+
export * from './base64';

src/stack/rosStack/event.ts

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import * as ros from '@alicloud/ros-cdk-core';
22
import { ActionContext, EventDomain, EventTypes, ServerlessIac } from '../../types';
33
import * as ram from '@alicloud/ros-cdk-ram';
4-
import { replaceReference } from '../../common';
4+
import { encodeBase64, replaceReference } from '../../common';
55
import * as agw from '@alicloud/ros-cdk-apigateway';
66
import { isEmpty } from 'lodash';
77

@@ -61,6 +61,7 @@ export const resolveEvents = (
6161
{
6262
groupName: replaceReference(`${service}_apigroup`, context),
6363
tags: replaceReference(tags, context),
64+
passthroughHeaders: 'host',
6465
},
6566
true,
6667
);
@@ -80,15 +81,18 @@ export const resolveEvents = (
8081

8182
apiGateway.forEach((event) => {
8283
event.triggers.forEach((trigger) => {
83-
const key = `${trigger.method}_${trigger.path}`.toLowerCase().replace(/\//g, '_');
84+
const key = encodeBase64(
85+
replaceReference(`${trigger.method}_${trigger.path}`, context),
86+
).replace(/=+$/, '');
8487

8588
const api = new agw.RosApi(
8689
scope,
87-
replaceReference(`${event.key}_api_${key}`, context),
90+
`${event.key}_api_${key}`,
8891
{
8992
apiName: replaceReference(`${event.name}_api_${key}`, context),
9093
groupId: apiGatewayGroup.attrGroupId,
9194
visibility: 'PRIVATE',
95+
authType: 'ANONYMOUS',
9296
requestConfig: {
9397
requestProtocol: 'HTTP',
9498
requestHttpMethod: replaceReference(trigger.method, context),
@@ -102,15 +106,23 @@ export const resolveEvents = (
102106
functionName: replaceReference(trigger.backend, context),
103107
roleArn: gatewayAccessRole.attrArn,
104108
fcVersion: '3.0',
109+
method: replaceReference(trigger.method, context),
105110
},
106111
},
107112
resultSample: 'ServerlessInsight resultSample',
108-
resultType: 'JSON',
113+
resultType: 'PASSTHROUGH',
109114
tags: replaceReference(tags, context),
110115
},
111116
true,
112117
);
113118
api.addDependsOn(apiGatewayGroup);
119+
120+
new agw.Deployment(scope, `${service}_deployment`, {
121+
apiId: api.attrApiId,
122+
groupId: apiGatewayGroup.attrGroupId,
123+
stageName: 'RELEASE',
124+
description: `${service} Api Gateway deployment`,
125+
});
114126
});
115127
});
116128
}

src/stack/rosStack/function.ts

Lines changed: 41 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { ActionContext, FunctionDomain } from '../../types';
1+
import { ActionContext, FunctionDomain, ServerlessIac } from '../../types';
22
import {
33
CODE_ZIP_SIZE_LIMIT,
44
getFileSource,
@@ -10,16 +10,47 @@ import * as fc from '@alicloud/ros-cdk-fc3';
1010
import { isEmpty } from 'lodash';
1111
import * as ossDeployment from '@alicloud/ros-cdk-ossdeployment';
1212
import * as ros from '@alicloud/ros-cdk-core';
13+
import * as sls from '@alicloud/ros-cdk-sls';
1314

1415
export const resolveFunctions = (
1516
scope: ros.Construct,
1617
functions: Array<FunctionDomain> | undefined,
18+
tags: ServerlessIac['tags'] | undefined,
1719
context: ActionContext,
1820
service: string,
1921
) => {
2022
if (isEmpty(functions)) {
2123
return undefined;
2224
}
25+
const slsService = new sls.Project(
26+
scope,
27+
`${service}_sls`,
28+
{ name: `${service}-sls`, tags: replaceReference(tags, context) },
29+
true,
30+
);
31+
32+
const slsLogstore = new sls.Logstore(
33+
scope,
34+
`${service}_sls_logstore`,
35+
{
36+
logstoreName: `${service}-sls-logstore`,
37+
projectName: slsService.attrName,
38+
ttl: 7,
39+
},
40+
true,
41+
);
42+
43+
new sls.Index(
44+
scope,
45+
`${service}_sls_index`,
46+
{
47+
projectName: slsService.attrName,
48+
logstoreName: slsLogstore.attrLogstoreName,
49+
fullTextIndex: { enable: true },
50+
},
51+
true,
52+
);
53+
2354
const fileSources = functions
2455
?.filter(({ code }) => readCodeSize(code) > CODE_ZIP_SIZE_LIMIT)
2556
.map(({ code, name }) => {
@@ -71,9 +102,18 @@ export const resolveFunctions = (
71102
timeout: replaceReference(fnc.timeout, context),
72103
environmentVariables: replaceReference(fnc.environment, context),
73104
code,
105+
logConfig: {
106+
project: slsLogstore.attrProjectName,
107+
logstore: slsLogstore.attrLogstoreName,
108+
enableRequestMetrics: true,
109+
},
74110
},
75111
true,
76112
);
113+
fcn.addRosDependency(`${service}_sls`);
114+
fcn.addRosDependency(`${service}_sls_logstore`);
115+
fcn.addRosDependency(`${service}_sls_index`);
116+
77117
if (storeInBucket) {
78118
fcn.addRosDependency(`${service}_artifacts_code_deployment`);
79119
}

src/stack/rosStack/index.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ export class RosStack extends ros.Stack {
2727
// Define Mappings
2828
resolveStages(this, iac.stages, context);
2929
// Define functions
30-
resolveFunctions(this, iac.functions, context, this.service);
30+
resolveFunctions(this, iac.functions, iac.tags, context, this.service);
3131
// Define Events
3232
resolveEvents(this, iac.events, iac.tags, context, this.service);
3333
// Define Databases

0 commit comments

Comments
 (0)