-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserverless.ts
103 lines (100 loc) · 3.92 KB
/
serverless.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
import type { AWS } from '@serverless/typescript'
import outlays from '@functions/outlays'
import customLambdaAuthorizer from '@functions/authorizer'
const serverlessConfiguration: AWS = {
service: 'outlays-notion-sync-backend',
frameworkVersion: '3',
useDotenv: true,
// plugins: ['serverless-esbuild', 'serverless-offline', 'serverless-associate-waf'],
plugins: ['serverless-esbuild', 'serverless-offline'],
provider: {
name: 'aws',
runtime: 'nodejs18.x',
apiGateway: {
minimumCompressionSize: 1024,
shouldStartNameWithService: true,
apiKeys: ['${self:provider.stage}-api-key'],
},
stage: '${opt:stage, "dev"}',
environment: {
AWS_NODEJS_CONNECTION_REUSE_ENABLED: '1',
NODE_OPTIONS: '--enable-source-maps --stack-trace-limit=1000',
NOTION_ACCESS_TOKEN: '${file(.env.yml):NOTION_ACCESS_TOKEN}',
NOTION_NAME_PROPERTY_KEY: '${file(.env.yml):NOTION_NAME_PROPERTY_KEY}',
NOTION_DATE_PROPERTY_KEY: '${file(.env.yml):NOTION_DATE_PROPERTY_KEY}',
NOTION_TAGS_PROPERTY_KEY: '${file(.env.yml):NOTION_TAGS_PROPERTY_KEY}',
NOTION_PRICE_PROPERTY_KEY: '${file(.env.yml):NOTION_PRICE_PROPERTY_KEY}',
NOTION_PAYMENT_METHOD_PROPERTY_KEY: '${file(.env.yml):NOTION_PAYMENT_METHOD_PROPERTY_KEY}',
NOTION_PURCHASE_YEAR_PROPERTY_KEY: '${file(.env.yml):NOTION_PURCHASE_YEAR_PROPERTY_KEY}',
NOTION_CARD_PAYMENTS_PROPERTY_KEY: '${file(.env.yml):NOTION_CARD_PAYMENTS_PROPERTY_KEY}',
NOTION_OUTLAYS_DATABASE_ID: '${file(.env.yml):NOTION_OUTLAYS_DATABASE_ID}',
NOTION_YEARS_DATABASE_ID: '${file(.env.yml):NOTION_YEARS_DATABASE_ID}',
NOTION_YEARS_NAME_PROPERTY_KEY: '${file(.env.yml):NOTION_YEARS_NAME_PROPERTY_KEY}',
NOTION_CARD_PAYMENTS_DATABASE_ID: '${file(.env.yml):NOTION_CARD_PAYMENTS_DATABASE_ID}',
NOTION_CARD_PAYMENTS_NAME_PROPERTY_KEY: '${file(.env.yml):NOTION_CARD_PAYMENTS_NAME_PROPERTY_KEY}',
NOTION_CREDIT_CHARGE_DAY: '${file(.env.yml):NOTION_CREDIT_CHARGE_DAY}',
AUTH_TOKEN: '${file(.env.yml):AUTH_TOKEN}',
},
},
// import the function via paths
functions: { outlays, customLambdaAuthorizer },
package: { individually: true },
// resources: {
// Resources: {
// WAFRegionalWebACL: {
// Type: 'AWS::WAFv2::WebACL',
// Properties: {
// Name: 'ApiGateway-HTTP-Flood-Prevent-Auto-${self:provider.stage}',
// Scope: 'REGIONAL',
// Description: 'WAF Regional Web ACL to Prevent HTTP Flood DDos Attack',
// DefaultAction: {
// Allow: {},
// },
// VisibilityConfig: {
// SampledRequestsEnabled: true,
// CloudWatchMetricsEnabled: true,
// MetricName: 'ApiGateway-HTTP-Flood-Prevent-Metric',
// },
// Rules: [
// {
// Name: 'HTTP-Flood-Prevent-Rule',
// Priority: 0,
// Action: {
// Block: {},
// },
// VisibilityConfig: {
// SampledRequestsEnabled: true,
// CloudWatchMetricsEnabled: true,
// MetricName: 'HTTP-Flood-Prevent-Rule-Metric',
// },
// Statement: {
// RateBasedStatement: {
// AggregateKeyType: 'IP',
// Limit: 2000,
// },
// },
// },
// ],
// },
// },
// },
// },
custom: {
esbuild: {
bundle: true,
minify: false,
sourcemap: true,
exclude: ['aws-sdk'],
target: 'node18',
define: { 'require.resolve': undefined },
platform: 'node',
concurrency: 10,
},
// associateWaf: {
// name: '${self:resources.Resources.WAFRegionalWebACL.Properties.Name}',
// // Ref: https://stackoverflow.com/questions/67703857/using-aws-waf-with-serverless-associate-waf
// version: 'V2',
// },
},
}
module.exports = serverlessConfiguration