...
1
2
3
4
5
6
7 package driverutil
8
9 import (
10 "os"
11 "strings"
12 )
13
14 const AwsLambdaPrefix = "AWS_Lambda_"
15
16 const (
17
18
19
20 EnvVarAWSExecutionEnv = "AWS_EXECUTION_ENV"
21
22 EnvVarAWSLambdaRuntimeAPI = "AWS_LAMBDA_RUNTIME_API"
23
24 EnvVarFunctionsWorkerRuntime = "FUNCTIONS_WORKER_RUNTIME"
25
26 EnvVarKService = "K_SERVICE"
27
28 EnvVarFunctionName = "FUNCTION_NAME"
29
30 EnvVarVercel = "VERCEL"
31
32 EnvVarK8s = "KUBERNETES_SERVICE_HOST"
33 )
34
35 const (
36
37
38
39 EnvVarAWSRegion = "AWS_REGION"
40
41 EnvVarAWSLambdaFunctionMemorySize = "AWS_LAMBDA_FUNCTION_MEMORY_SIZE"
42
43 EnvVarFunctionMemoryMB = "FUNCTION_MEMORY_MB"
44
45 EnvVarFunctionTimeoutSec = "FUNCTION_TIMEOUT_SEC"
46
47 EnvVarFunctionRegion = "FUNCTION_REGION"
48
49 EnvVarVercelRegion = "VERCEL_REGION"
50 )
51
52 const (
53
54
55
56 EnvNameAWSLambda = "aws.lambda"
57
58 EnvNameAzureFunc = "azure.func"
59
60 EnvNameGCPFunc = "gcp.func"
61
62 EnvNameVercel = "vercel"
63 )
64
65
66
67
68
69
70
71 func GetFaasEnvName() string {
72 envVars := []string{
73 EnvVarAWSExecutionEnv,
74 EnvVarAWSLambdaRuntimeAPI,
75 EnvVarFunctionsWorkerRuntime,
76 EnvVarKService,
77 EnvVarFunctionName,
78 EnvVarVercel,
79 }
80
81
82
83 names := make(map[string]struct{})
84
85 for _, envVar := range envVars {
86 val := os.Getenv(envVar)
87 if val == "" {
88 continue
89 }
90
91 var name string
92
93 switch envVar {
94 case EnvVarAWSExecutionEnv:
95 if !strings.HasPrefix(val, AwsLambdaPrefix) {
96 continue
97 }
98
99 name = EnvNameAWSLambda
100 case EnvVarAWSLambdaRuntimeAPI:
101 name = EnvNameAWSLambda
102 case EnvVarFunctionsWorkerRuntime:
103 name = EnvNameAzureFunc
104 case EnvVarKService, EnvVarFunctionName:
105 name = EnvNameGCPFunc
106 case EnvVarVercel:
107
108 delete(names, EnvNameAWSLambda)
109
110 name = EnvNameVercel
111 }
112
113 names[name] = struct{}{}
114 if len(names) > 1 {
115
116
117 names = nil
118
119 break
120 }
121 }
122
123 for name := range names {
124 return name
125 }
126
127 return ""
128 }
129
View as plain text