forked from motdotla/node-lambda
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnode-lambda
More file actions
executable file
·148 lines (137 loc) · 8.3 KB
/
node-lambda
File metadata and controls
executable file
·148 lines (137 loc) · 8.3 KB
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#!/usr/bin/env node
'use strict'
const path = require('path')
const dotenv = require('dotenv')
dotenv.load()
const lambda = require(path.join(__dirname, '..', 'lib', 'main.js'))
const program = require('commander')
const fs = require('fs')
const packageJson = fs.existsSync(path.join(process.cwd(), 'package.json'))
? require(path.join(process.cwd(), 'package.json')) : {}
const packageJsonName = packageJson.name || 'UnnamedFunction'
const AWS_ENVIRONMENT = process.env.AWS_ENVIRONMENT || ''
const CONFIG_FILE = process.env.CONFIG_FILE || ''
const EVENT_SOURCE_FILE = process.env.EVENT_SOURCE_FILE || ''
const EXCLUDE_GLOBS = process.env.EXCLUDE_GLOBS || ''
const AWS_ACCESS_KEY_ID = process.env.AWS_ACCESS_KEY_ID
const AWS_SECRET_ACCESS_KEY = process.env.AWS_SECRET_ACCESS_KEY
const AWS_PROFILE = process.env.AWS_PROFILE || ''
const AWS_SESSION_TOKEN = process.env.AWS_SESSION_TOKEN || ''
const AWS_REGION = process.env.AWS_REGION || 'us-east-1,us-west-2,eu-west-1'
const AWS_FUNCTION_NAME = process.env.AWS_FUNCTION_NAME || packageJsonName
const AWS_HANDLER = process.env.AWS_HANDLER || 'index.handler'
const AWS_ROLE = process.env.AWS_ROLE_ARN || process.env.AWS_ROLE || 'missing'
const AWS_MEMORY_SIZE = process.env.AWS_MEMORY_SIZE || 128
const AWS_TIMEOUT = process.env.AWS_TIMEOUT || 60
const AWS_RUN_TIMEOUT = process.env.AWS_RUN_TIMEOUT || 3
const AWS_DESCRIPTION = process.env.AWS_DESCRIPTION || packageJson.description || ''
const AWS_RUNTIME = process.env.AWS_RUNTIME || 'nodejs6.10'
const AWS_PUBLISH = process.env.AWS_PUBLISH || false
const AWS_FUNCTION_VERSION = process.env.AWS_FUNCTION_VERSION || ''
const AWS_VPC_SUBNETS = process.env.AWS_VPC_SUBNETS || ''
const AWS_VPC_SECURITY_GROUPS = process.env.AWS_VPC_SECURITY_GROUPS || ''
const AWS_TRACING_CONFIG = process.env.AWS_TRACING_CONFIG || ''
const AWS_LOGS_RETENTION_IN_DAYS = process.env.AWS_LOGS_RETENTION_IN_DAYS || ''
const EVENT_FILE = process.env.EVENT_FILE || 'event.json'
const PACKAGE_DIRECTORY = process.env.PACKAGE_DIRECTORY
const CONTEXT_FILE = process.env.CONTEXT_FILE || 'context.json'
const PREBUILT_DIRECTORY = process.env.PREBUILT_DIRECTORY || ''
const SRC_DIRECTORY = process.env.SRC_DIRECTORY || ''
const DEPLOY_TIMEOUT = process.env.DEPLOY_TIMEOUT || 120000
const DOCKER_IMAGE = process.env.DOCKER_IMAGE || ''
const DEPLOY_ZIPFILE = process.env.DEPLOY_ZIPFILE || ''
const AWS_KMS_KEY_ARN = process.env.AWS_KMS_KEY_ARN || ''
const AWS_DLQ_TARGET_ARN = (() => {
// You can clear the setting by passing an empty string
// when executing updateFunctionConfiguration
if (process.env.AWS_DLQ_TARGET_ARN !== undefined) {
return process.env.AWS_DLQ_TARGET_ARN
}
return undefined
})()
const PROXY = process.env.PROXY || process.env.http_proxy || ''
const ENABLE_RUN_MULTIPLE_EVENTS = true
program
.command('deploy')
.description('Deploy your application to Amazon Lambda')
.option('-e, --environment [' + AWS_ENVIRONMENT + ']', 'Choose environment {dev, staging, production}',
AWS_ENVIRONMENT)
.option('-a, --accessKey [' + AWS_ACCESS_KEY_ID + ']', 'AWS Access Key', AWS_ACCESS_KEY_ID)
.option('-s, --secretKey [' + AWS_SECRET_ACCESS_KEY + ']', 'AWS Secret Key', AWS_SECRET_ACCESS_KEY)
.option('-P, --profile [' + AWS_PROFILE + ']', 'AWS Profile', AWS_PROFILE)
.option('-k, --sessionToken [' + AWS_SESSION_TOKEN + ']', 'AWS Session Token', AWS_SESSION_TOKEN)
.option('-r, --region [' + AWS_REGION + ']', 'AWS Region', AWS_REGION)
.option('-n, --functionName [' + AWS_FUNCTION_NAME + ']', 'Lambda FunctionName', AWS_FUNCTION_NAME)
.option('-H, --handler [' + AWS_HANDLER + ']', 'Lambda Handler {index.handler}', AWS_HANDLER)
.option('-o, --role [' + AWS_ROLE + ']', 'Amazon Role ARN', AWS_ROLE)
.option('-m, --memorySize [' + AWS_MEMORY_SIZE + ']', 'Lambda Memory Size', AWS_MEMORY_SIZE)
.option('-t, --timeout [' + AWS_TIMEOUT + ']', 'Lambda Timeout', AWS_TIMEOUT)
.option('-d, --description [' + AWS_DESCRIPTION + ']', 'Lambda Description', AWS_DESCRIPTION)
.option('-u, --runtime [' + AWS_RUNTIME + ']', 'Lambda Runtime', AWS_RUNTIME)
.option('-p, --publish [' + AWS_PUBLISH + ']', 'Lambda Publish', AWS_PUBLISH)
.option('-L, --lambdaVersion [' + AWS_FUNCTION_VERSION + ']', 'Lambda Function Version', AWS_FUNCTION_VERSION)
.option('-b, --vpcSubnets [' + AWS_VPC_SUBNETS + ']', 'Lambda Function VPC Subnets', AWS_VPC_SUBNETS)
.option('-g, --vpcSecurityGroups [' + AWS_VPC_SECURITY_GROUPS + ']', 'Lambda VPC Security Group',
AWS_VPC_SECURITY_GROUPS)
.option('-K, --kmsKeyArn [' + AWS_KMS_KEY_ARN + ']', 'Lambda KMS Key ARN', AWS_KMS_KEY_ARN)
.option('-Q, --deadLetterConfigTargetArn [' + AWS_DLQ_TARGET_ARN + ']', 'Lambda DLQ resource',
AWS_DLQ_TARGET_ARN)
.option('-c, --tracingConfig [' + AWS_TRACING_CONFIG + ']', 'Lambda tracing settings',
AWS_TRACING_CONFIG)
.option('-R, --retentionInDays [' + AWS_LOGS_RETENTION_IN_DAYS + ']', 'CloudWatchLogs retentionInDays settings',
AWS_LOGS_RETENTION_IN_DAYS)
.option('-A, --packageDirectory [' + PACKAGE_DIRECTORY + ']', 'Local Package Directory', PACKAGE_DIRECTORY)
.option('-G, --sourceDirectory [' + SRC_DIRECTORY + ']', 'Path to lambda source Directory (e.g. "./some-lambda")', SRC_DIRECTORY)
.option('-I, --dockerImage [' + DOCKER_IMAGE + ']', 'Docker image for npm install', DOCKER_IMAGE)
.option('-f, --configFile [' + CONFIG_FILE + ']',
'Path to file holding secret environment variables (e.g. "deploy.env")', CONFIG_FILE)
.option('-S, --eventSourceFile [' + EVENT_SOURCE_FILE + ']',
'Path to file holding event source mapping variables (e.g. "event_sources.json")', EVENT_SOURCE_FILE)
.option('-x, --excludeGlobs [' + EXCLUDE_GLOBS + ']',
'Space-separated glob pattern(s) for additional exclude files (e.g. "event.json dotenv.sample")', EXCLUDE_GLOBS)
.option('-D, --prebuiltDirectory [' + PREBUILT_DIRECTORY + ']', 'Prebuilt directory', PREBUILT_DIRECTORY)
.option('-T, --deployTimeout [' + DEPLOY_TIMEOUT + ']', 'Deploy Timeout', DEPLOY_TIMEOUT)
.option('-z, --deployZipfile [' + DEPLOY_ZIPFILE + ']', 'Deploy zipfile', DEPLOY_ZIPFILE)
.option('-y, --proxy [' + PROXY + ']', 'Proxy server', PROXY)
.action((prg) => lambda.deploy(prg))
program
.command('package')
.alias('zip')
.description('Create zipped package for Amazon Lambda deployment')
.option('-A, --packageDirectory [' + PACKAGE_DIRECTORY + ']', 'Local Package Directory', PACKAGE_DIRECTORY)
.option('-I, --dockerImage [' + DOCKER_IMAGE + ']', 'Docker image for npm install', DOCKER_IMAGE)
.option('-n, --functionName [' + AWS_FUNCTION_NAME + ']', 'Lambda FunctionName', AWS_FUNCTION_NAME)
.option('-H, --handler [' + AWS_HANDLER + ']', 'Lambda Handler {index.handler}', AWS_HANDLER)
.option('-e, --environment [' + AWS_ENVIRONMENT + ']', 'Choose environment {dev, staging, production}',
AWS_ENVIRONMENT)
.option('-x, --excludeGlobs [' + EXCLUDE_GLOBS + ']',
'Space-separated glob pattern(s) for additional exclude files (e.g. "event.json dotenv.sample")', EXCLUDE_GLOBS)
.option('-D, --prebuiltDirectory [' + PREBUILT_DIRECTORY + ']', 'Prebuilt directory', PREBUILT_DIRECTORY)
.action((prg) => lambda.package(prg))
program
.command('run')
.alias('execute')
.description('Run your Amazon Lambda application locally')
.option('-H, --handler [' + AWS_HANDLER + ']', 'Lambda Handler {index.handler}', AWS_HANDLER)
.option('-j, --eventFile [' + EVENT_FILE + ']', 'Event JSON File', EVENT_FILE)
.option('-u, --runtime [' + AWS_RUNTIME + ']', 'Lambda Runtime', AWS_RUNTIME)
.option('-t, --timeout [' + AWS_RUN_TIMEOUT + ']', 'Lambda Timeout', AWS_RUN_TIMEOUT)
.option('-f, --configFile [' + CONFIG_FILE + ']',
'Path to file holding secret environment variables (e.g. "deploy.env")', CONFIG_FILE)
.option('-x, --contextFile [' + CONTEXT_FILE + ']', 'Context JSON File', CONTEXT_FILE)
.option('-M, --enableRunMultipleEvents [' + ENABLE_RUN_MULTIPLE_EVENTS + ']', 'Enable run multiple events',
ENABLE_RUN_MULTIPLE_EVENTS)
.option('-y, --proxy [' + PROXY + ']', 'Proxy server', PROXY)
.action((prg) => lambda.run(prg))
program
.command('setup')
.description('Sets up the .env file.')
.option('-j, --eventFile [' + EVENT_FILE + ']', 'Event JSON File', EVENT_FILE)
.option('-x, --contextFile [' + CONTEXT_FILE + ']', 'Context JSON File', CONTEXT_FILE)
.action((prg) => lambda.setup(prg))
program
.version(lambda.version)
.parse(process.argv)
if (!process.argv.slice(2).length) {
program.outputHelp()
}