@datadog/datadog-ci 0.17.9 → 0.17.10

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.
@@ -15,6 +15,49 @@ const commons_1 = require("../../functions/commons");
15
15
  const instrument_1 = require("../../instrument");
16
16
  const fixtures_1 = require("../fixtures");
17
17
  describe('commons', () => {
18
+ describe('addLayerArn', () => {
19
+ test('adds layers and removes previous versions', () => {
20
+ const runtime = 'python3.9';
21
+ const config = {
22
+ Runtime: runtime,
23
+ };
24
+ let layerARNs = [
25
+ 'arn:aws:lambda:sa-east-1:464622532012:layer:Datadog-Python39:48',
26
+ 'arn:aws:lambda:sa-east-1:464622532012:layer:Datadog-Extension:10',
27
+ ];
28
+ const region = 'sa-east-1';
29
+ const lambdaLibraryLayerName = constants_1.RUNTIME_LAYER_LOOKUP[runtime];
30
+ const fullLambdaLibraryLayerArn = commons_1.getLayerArn(config, config.Runtime, region) + ':49';
31
+ const fullExtensionLayerArn = commons_1.getLayerArn(config, constants_1.EXTENSION_LAYER_KEY, region) + ':11';
32
+ layerARNs = commons_1.addLayerArn(fullLambdaLibraryLayerArn, lambdaLibraryLayerName, layerARNs);
33
+ layerARNs = commons_1.addLayerArn(fullExtensionLayerArn, constants_1.DD_LAMBDA_EXTENSION_LAYER_NAME, layerARNs);
34
+ expect(layerARNs).toEqual([
35
+ 'arn:aws:lambda:sa-east-1:464622532012:layer:Datadog-Python39:49',
36
+ 'arn:aws:lambda:sa-east-1:464622532012:layer:Datadog-Extension:11',
37
+ ]);
38
+ });
39
+ test('swaps layers if architecture is arm64', () => {
40
+ const runtime = 'python3.9';
41
+ const config = {
42
+ Architectures: ['arm64'],
43
+ Runtime: runtime,
44
+ };
45
+ let layerARNs = [
46
+ 'arn:aws:lambda:sa-east-1:464622532012:layer:Datadog-Python39:49',
47
+ 'arn:aws:lambda:sa-east-1:464622532012:layer:Datadog-Extension:11',
48
+ ];
49
+ const region = 'sa-east-1';
50
+ const lambdaLibraryLayerName = constants_1.RUNTIME_LAYER_LOOKUP[runtime];
51
+ const fullLambdaLibraryLayerArn = commons_1.getLayerArn(config, config.Runtime, region) + ':49';
52
+ const fullExtensionLayerArn = commons_1.getLayerArn(config, constants_1.EXTENSION_LAYER_KEY, region) + ':11';
53
+ layerARNs = commons_1.addLayerArn(fullLambdaLibraryLayerArn, lambdaLibraryLayerName, layerARNs);
54
+ layerARNs = commons_1.addLayerArn(fullExtensionLayerArn, constants_1.DD_LAMBDA_EXTENSION_LAYER_NAME, layerARNs);
55
+ expect(layerARNs).toEqual([
56
+ 'arn:aws:lambda:sa-east-1:464622532012:layer:Datadog-Python39-ARM:49',
57
+ 'arn:aws:lambda:sa-east-1:464622532012:layer:Datadog-Extension-ARM:11',
58
+ ]);
59
+ });
60
+ });
18
61
  describe('collectFunctionsByRegion', () => {
19
62
  test('groups functions with region read from arn', () => {
20
63
  process.env = {};
@@ -87,6 +130,128 @@ describe('commons', () => {
87
130
  expect(functionsGroup).toBeUndefined();
88
131
  });
89
132
  });
133
+ describe('getLayerArn', () => {
134
+ const OLD_ENV = process.env;
135
+ beforeEach(() => {
136
+ jest.resetModules();
137
+ process.env = {};
138
+ });
139
+ afterAll(() => {
140
+ process.env = OLD_ENV;
141
+ });
142
+ test('gets sa-east-1 Lambda Extension layer ARN', () => __awaiter(void 0, void 0, void 0, function* () {
143
+ const settings = {
144
+ flushMetricsToLogs: false,
145
+ layerAWSAccount: fixtures_1.mockAwsAccount,
146
+ mergeXrayTraces: false,
147
+ tracingEnabled: false,
148
+ };
149
+ const region = 'sa-east-1';
150
+ const layerArn = commons_1.getLayerArn({}, constants_1.EXTENSION_LAYER_KEY, region, settings);
151
+ expect(layerArn).toEqual(`arn:aws:lambda:${region}:${fixtures_1.mockAwsAccount}:layer:Datadog-Extension`);
152
+ }));
153
+ test('gets sa-east-1 arm64 Lambda Extension layer ARN', () => __awaiter(void 0, void 0, void 0, function* () {
154
+ const config = {
155
+ Architectures: ['arm64'],
156
+ };
157
+ const settings = {
158
+ flushMetricsToLogs: false,
159
+ layerAWSAccount: fixtures_1.mockAwsAccount,
160
+ mergeXrayTraces: false,
161
+ tracingEnabled: false,
162
+ };
163
+ const region = 'sa-east-1';
164
+ const layerArn = commons_1.getLayerArn(config, constants_1.EXTENSION_LAYER_KEY, region, settings);
165
+ expect(layerArn).toEqual(`arn:aws:lambda:${region}:${fixtures_1.mockAwsAccount}:layer:Datadog-Extension-ARM`);
166
+ }));
167
+ test('gets us-gov-1 gov cloud Lambda Extension layer ARN', () => __awaiter(void 0, void 0, void 0, function* () {
168
+ const settings = {
169
+ flushMetricsToLogs: false,
170
+ layerAWSAccount: fixtures_1.mockAwsAccount,
171
+ mergeXrayTraces: false,
172
+ tracingEnabled: false,
173
+ };
174
+ const region = 'us-gov-1';
175
+ const layerArn = commons_1.getLayerArn({}, constants_1.EXTENSION_LAYER_KEY, region, settings);
176
+ expect(layerArn).toEqual(`arn:aws-us-gov:lambda:${region}:${constants_1.GOVCLOUD_LAYER_AWS_ACCOUNT}:layer:Datadog-Extension`);
177
+ }));
178
+ test('gets us-gov-1 gov cloud arm64 Lambda Extension layer ARN', () => __awaiter(void 0, void 0, void 0, function* () {
179
+ const config = {
180
+ Architectures: ['arm64'],
181
+ };
182
+ const settings = {
183
+ flushMetricsToLogs: false,
184
+ layerAWSAccount: fixtures_1.mockAwsAccount,
185
+ mergeXrayTraces: false,
186
+ tracingEnabled: false,
187
+ };
188
+ const region = 'us-gov-1';
189
+ const layerArn = commons_1.getLayerArn(config, constants_1.EXTENSION_LAYER_KEY, region, settings);
190
+ expect(layerArn).toEqual(`arn:aws-us-gov:lambda:${region}:${constants_1.GOVCLOUD_LAYER_AWS_ACCOUNT}:layer:Datadog-Extension-ARM`);
191
+ }));
192
+ test('gets sa-east-1 Node12 Lambda Library layer ARN', () => __awaiter(void 0, void 0, void 0, function* () {
193
+ const runtime = 'nodejs12.x';
194
+ const config = {
195
+ Runtime: runtime,
196
+ };
197
+ const settings = {
198
+ flushMetricsToLogs: false,
199
+ layerAWSAccount: fixtures_1.mockAwsAccount,
200
+ mergeXrayTraces: false,
201
+ tracingEnabled: false,
202
+ };
203
+ const region = 'sa-east-1';
204
+ const layerArn = commons_1.getLayerArn(config, config.Runtime, region, settings);
205
+ expect(layerArn).toEqual(`arn:aws:lambda:${region}:${fixtures_1.mockAwsAccount}:layer:Datadog-Node12-x`);
206
+ }));
207
+ test('gets sa-east-1 Python3.9 arm64 Lambda Library layer ARN', () => __awaiter(void 0, void 0, void 0, function* () {
208
+ const runtime = 'python3.9';
209
+ const config = {
210
+ Architectures: ['arm64'],
211
+ Runtime: runtime,
212
+ };
213
+ const settings = {
214
+ flushMetricsToLogs: false,
215
+ layerAWSAccount: fixtures_1.mockAwsAccount,
216
+ mergeXrayTraces: false,
217
+ tracingEnabled: false,
218
+ };
219
+ const region = 'sa-east-1';
220
+ const layerArn = commons_1.getLayerArn(config, config.Runtime, region, settings);
221
+ expect(layerArn).toEqual(`arn:aws:lambda:${region}:${fixtures_1.mockAwsAccount}:layer:Datadog-Python39-ARM`);
222
+ }));
223
+ test('gets us-gov-1 Python37 gov cloud Lambda Library layer ARN', () => __awaiter(void 0, void 0, void 0, function* () {
224
+ const runtime = 'python3.7';
225
+ const config = {
226
+ Runtime: runtime,
227
+ };
228
+ const settings = {
229
+ flushMetricsToLogs: false,
230
+ layerAWSAccount: fixtures_1.mockAwsAccount,
231
+ mergeXrayTraces: false,
232
+ tracingEnabled: false,
233
+ };
234
+ const region = 'us-gov-1';
235
+ const layerArn = commons_1.getLayerArn(config, config.Runtime, region, settings);
236
+ expect(layerArn).toEqual(`arn:aws-us-gov:lambda:${region}:${constants_1.GOVCLOUD_LAYER_AWS_ACCOUNT}:layer:Datadog-Python37`);
237
+ }));
238
+ test('gets us-gov-1 Python39 gov cloud arm64 Lambda Library layer ARN', () => __awaiter(void 0, void 0, void 0, function* () {
239
+ const runtime = 'python3.9';
240
+ const config = {
241
+ Architectures: ['arm64'],
242
+ Runtime: runtime,
243
+ };
244
+ const settings = {
245
+ flushMetricsToLogs: false,
246
+ layerAWSAccount: fixtures_1.mockAwsAccount,
247
+ mergeXrayTraces: false,
248
+ tracingEnabled: false,
249
+ };
250
+ const region = 'us-gov-1';
251
+ const layerArn = commons_1.getLayerArn(config, config.Runtime, region, settings);
252
+ expect(layerArn).toEqual(`arn:aws-us-gov:lambda:${region}:${constants_1.GOVCLOUD_LAYER_AWS_ACCOUNT}:layer:Datadog-Python39-ARM`);
253
+ }));
254
+ });
90
255
  describe('getRegion', () => {
91
256
  test('should return the expected region', () => {
92
257
  const functionARN = 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world';
@@ -44,10 +44,12 @@ describe('instrument', () => {
44
44
  process.env = OLD_ENV;
45
45
  });
46
46
  test('calculates an update request with just lambda library layers', () => {
47
+ const runtime = 'nodejs12.x';
47
48
  const config = {
48
49
  FunctionArn: 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world',
49
50
  Handler: 'index.handler',
50
51
  Layers: [],
52
+ Runtime: runtime,
51
53
  };
52
54
  const settings = {
53
55
  flushMetricsToLogs: false,
@@ -56,10 +58,8 @@ describe('instrument', () => {
56
58
  mergeXrayTraces: false,
57
59
  tracingEnabled: false,
58
60
  };
59
- const lambdaLibraryLayerArn = `arn:aws:lambda:sa-east-1:${fixtures_1.mockAwsAccount}:layer:Datadog-Node12-x`;
60
- const lambdaExtensionLayerArn = `arn:aws:lambda:sa-east-1:${fixtures_1.mockAwsAccount}:layer:Datadog-Extension`;
61
- const runtime = 'nodejs12.x';
62
- const updateRequest = instrument_1.calculateUpdateRequest(config, settings, lambdaLibraryLayerArn, lambdaExtensionLayerArn, runtime);
61
+ const region = 'sa-east-1';
62
+ const updateRequest = instrument_1.calculateUpdateRequest(config, settings, region, runtime);
63
63
  expect(updateRequest).toMatchInlineSnapshot(`
64
64
  Object {
65
65
  "Environment": Object {
@@ -77,14 +77,53 @@ describe('instrument', () => {
77
77
  "arn:aws:lambda:sa-east-1:123456789012:layer:Datadog-Node12-x:5",
78
78
  ],
79
79
  }
80
+ `);
81
+ });
82
+ test('calculates an update request with just lambda library layers in arm architecture', () => {
83
+ const runtime = 'python3.9';
84
+ const config = {
85
+ Architectures: ['arm64'],
86
+ FunctionArn: 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world',
87
+ Handler: 'handler.hello',
88
+ Layers: [],
89
+ Runtime: runtime,
90
+ };
91
+ const settings = {
92
+ flushMetricsToLogs: false,
93
+ layerAWSAccount: fixtures_1.mockAwsAccount,
94
+ layerVersion: 11,
95
+ mergeXrayTraces: false,
96
+ tracingEnabled: false,
97
+ };
98
+ const region = 'sa-east-1';
99
+ const updateRequest = instrument_1.calculateUpdateRequest(config, settings, region, runtime);
100
+ expect(updateRequest).toMatchInlineSnapshot(`
101
+ Object {
102
+ "Environment": Object {
103
+ "Variables": Object {
104
+ "DD_FLUSH_TO_LOG": "false",
105
+ "DD_LAMBDA_HANDLER": "handler.hello",
106
+ "DD_MERGE_XRAY_TRACES": "false",
107
+ "DD_SITE": "datadoghq.com",
108
+ "DD_TRACE_ENABLED": "false",
109
+ },
110
+ },
111
+ "FunctionName": "arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world",
112
+ "Handler": "datadog_lambda.handler.handler",
113
+ "Layers": Array [
114
+ "arn:aws:lambda:sa-east-1:123456789012:layer:Datadog-Python39-ARM:11",
115
+ ],
116
+ }
80
117
  `);
81
118
  });
82
119
  test('calculates an update request with a lambda library, extension, and DATADOG_API_KEY', () => {
83
- process.env.DATADOG_API_KEY = '1234';
120
+ process.env[constants_1.CI_API_KEY_ENV_VAR] = '1234';
121
+ const runtime = 'nodejs12.x';
84
122
  const config = {
85
123
  FunctionArn: 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world',
86
124
  Handler: 'index.handler',
87
125
  Layers: [],
126
+ Runtime: runtime,
88
127
  };
89
128
  const settings = {
90
129
  extensionVersion: 6,
@@ -94,10 +133,8 @@ describe('instrument', () => {
94
133
  mergeXrayTraces: false,
95
134
  tracingEnabled: false,
96
135
  };
97
- const lambdaLibraryLayerArn = `arn:aws:lambda:sa-east-1:${fixtures_1.mockAwsAccount}:layer:Datadog-Node12-x`;
98
- const lambdaExtensionLayerArn = `arn:aws:lambda:sa-east-1:${fixtures_1.mockAwsAccount}:layer:Datadog-Extension`;
99
- const runtime = 'nodejs12.x';
100
- const updateRequest = instrument_1.calculateUpdateRequest(config, settings, lambdaLibraryLayerArn, lambdaExtensionLayerArn, runtime);
136
+ const region = 'sa-east-1';
137
+ const updateRequest = instrument_1.calculateUpdateRequest(config, settings, region, runtime);
101
138
  expect(updateRequest).toMatchInlineSnapshot(`
102
139
  Object {
103
140
  "Environment": Object {
@@ -117,14 +154,56 @@ describe('instrument', () => {
117
154
  "arn:aws:lambda:sa-east-1:123456789012:layer:Datadog-Node12-x:5",
118
155
  ],
119
156
  }
157
+ `);
158
+ });
159
+ test('calculates an update request with a lambda library, extension, and DATADOG_API_KEY_SECRET_ARN', () => {
160
+ process.env[constants_1.CI_API_KEY_SECRET_ARN_ENV_VAR] = 'some-secret:arn:from:aws';
161
+ const runtime = 'python3.9';
162
+ const config = {
163
+ FunctionArn: 'arn:aws:lambda:sa-east-1:123456789012:function:lambda-hello-world',
164
+ Handler: 'index.handler',
165
+ Layers: [],
166
+ Runtime: runtime,
167
+ };
168
+ const settings = {
169
+ extensionVersion: 11,
170
+ flushMetricsToLogs: false,
171
+ layerAWSAccount: fixtures_1.mockAwsAccount,
172
+ layerVersion: 49,
173
+ mergeXrayTraces: false,
174
+ tracingEnabled: false,
175
+ };
176
+ const region = 'sa-east-1';
177
+ const updateRequest = instrument_1.calculateUpdateRequest(config, settings, region, runtime);
178
+ expect(updateRequest).toMatchInlineSnapshot(`
179
+ Object {
180
+ "Environment": Object {
181
+ "Variables": Object {
182
+ "DD_API_KEY_SECRET_ARN": "some-secret:arn:from:aws",
183
+ "DD_FLUSH_TO_LOG": "false",
184
+ "DD_LAMBDA_HANDLER": "index.handler",
185
+ "DD_MERGE_XRAY_TRACES": "false",
186
+ "DD_SITE": "datadoghq.com",
187
+ "DD_TRACE_ENABLED": "false",
188
+ },
189
+ },
190
+ "FunctionName": "arn:aws:lambda:sa-east-1:123456789012:function:lambda-hello-world",
191
+ "Handler": "datadog_lambda.handler.handler",
192
+ "Layers": Array [
193
+ "arn:aws:lambda:sa-east-1:123456789012:layer:Datadog-Extension:11",
194
+ "arn:aws:lambda:sa-east-1:123456789012:layer:Datadog-Python39:49",
195
+ ],
196
+ }
120
197
  `);
121
198
  });
122
199
  test('calculates an update request with a lambda library, extension, and DATADOG_KMS_API_KEY', () => {
123
- process.env.DATADOG_KMS_API_KEY = '5678';
200
+ process.env[constants_1.CI_KMS_API_KEY_ENV_VAR] = '5678';
201
+ const runtime = 'python3.6';
124
202
  const config = {
125
203
  FunctionArn: 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world',
126
204
  Handler: 'index.handler',
127
205
  Layers: [],
206
+ Runtime: runtime,
128
207
  };
129
208
  const settings = {
130
209
  extensionVersion: 6,
@@ -134,10 +213,8 @@ describe('instrument', () => {
134
213
  mergeXrayTraces: false,
135
214
  tracingEnabled: false,
136
215
  };
137
- const lambdaLibraryLayerArn = `arn:aws:lambda:sa-east-1:${fixtures_1.mockAwsAccount}:layer:Datadog-Python36`;
138
- const lambdaExtensionLayerArn = `arn:aws:lambda:sa-east-1:${fixtures_1.mockAwsAccount}:layer:Datadog-Extension`;
139
- const runtime = 'python3.6';
140
- const updateRequest = instrument_1.calculateUpdateRequest(config, settings, lambdaLibraryLayerArn, lambdaExtensionLayerArn, runtime);
216
+ const region = 'sa-east-1';
217
+ const updateRequest = instrument_1.calculateUpdateRequest(config, settings, region, runtime);
141
218
  expect(updateRequest).toMatchInlineSnapshot(`
142
219
  Object {
143
220
  "Environment": Object {
@@ -157,13 +234,43 @@ describe('instrument', () => {
157
234
  "arn:aws:lambda:sa-east-1:123456789012:layer:Datadog-Python36:5",
158
235
  ],
159
236
  }
237
+ `);
238
+ });
239
+ test('prioritizes the KMS API KEY when all of them are exported', () => {
240
+ process.env = {
241
+ [constants_1.CI_API_KEY_ENV_VAR]: '1234',
242
+ [constants_1.CI_API_KEY_SECRET_ARN_ENV_VAR]: '5678',
243
+ [constants_1.CI_KMS_API_KEY_ENV_VAR]: 'should-be-selected',
244
+ };
245
+ const config = {
246
+ FunctionArn: 'arn:aws:lambda:sa-east-1:123456789012:function:lambda-hello-world',
247
+ Handler: 'index.handler',
248
+ Layers: [],
249
+ };
250
+ const runtime = 'python3.9';
251
+ const region = 'sa-east-1';
252
+ const updateRequest = instrument_1.calculateUpdateRequest(config, {}, region, runtime);
253
+ expect(updateRequest).toMatchInlineSnapshot(`
254
+ Object {
255
+ "Environment": Object {
256
+ "Variables": Object {
257
+ "DD_KMS_API_KEY": "should-be-selected",
258
+ "DD_LAMBDA_HANDLER": "index.handler",
259
+ "DD_SITE": "datadoghq.com",
260
+ },
261
+ },
262
+ "FunctionName": "arn:aws:lambda:sa-east-1:123456789012:function:lambda-hello-world",
263
+ "Handler": "datadog_lambda.handler.handler",
264
+ }
160
265
  `);
161
266
  });
162
267
  test('by default calculates an update request with DATADOG_SITE being set to datadoghq.com', () => {
268
+ const runtime = 'python3.6';
163
269
  const config = {
164
270
  FunctionArn: 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world',
165
271
  Handler: 'index.handler',
166
272
  Layers: [],
273
+ Runtime: runtime,
167
274
  };
168
275
  const settings = {
169
276
  flushMetricsToLogs: false,
@@ -171,10 +278,8 @@ describe('instrument', () => {
171
278
  mergeXrayTraces: false,
172
279
  tracingEnabled: false,
173
280
  };
174
- const lambdaLibraryLayerArn = `arn:aws:lambda:sa-east-1:${fixtures_1.mockAwsAccount}:layer:Datadog-Python36`;
175
- const lambdaExtensionLayerArn = `arn:aws:lambda:sa-east-1:${fixtures_1.mockAwsAccount}:layer:Datadog-Extension`;
176
- const runtime = 'python3.6';
177
- const updateRequest = instrument_1.calculateUpdateRequest(config, settings, lambdaLibraryLayerArn, lambdaExtensionLayerArn, runtime);
281
+ const region = 'sa-east-1';
282
+ const updateRequest = instrument_1.calculateUpdateRequest(config, settings, region, runtime);
178
283
  expect(updateRequest).toMatchInlineSnapshot(`
179
284
  Object {
180
285
  "Environment": Object {
@@ -204,10 +309,9 @@ describe('instrument', () => {
204
309
  mergeXrayTraces: false,
205
310
  tracingEnabled: false,
206
311
  };
207
- const lambdaLibraryLayerArn = `arn:aws:lambda:sa-east-1:${fixtures_1.mockAwsAccount}:layer:Datadog-Python36`;
208
- const lambdaExtensionLayerArn = `arn:aws:lambda:sa-east-1:${fixtures_1.mockAwsAccount}:layer:Datadog-Extension`;
312
+ const region = 'sa-east-1';
209
313
  const runtime = 'python3.6';
210
- const updateRequest = instrument_1.calculateUpdateRequest(config, settings, lambdaLibraryLayerArn, lambdaExtensionLayerArn, runtime);
314
+ const updateRequest = instrument_1.calculateUpdateRequest(config, settings, region, runtime);
211
315
  expect(updateRequest).toMatchInlineSnapshot(`
212
316
  Object {
213
317
  "Environment": Object {
@@ -238,11 +342,10 @@ describe('instrument', () => {
238
342
  mergeXrayTraces: false,
239
343
  tracingEnabled: false,
240
344
  };
241
- const lambdaLibraryLayerArn = `arn:aws:lambda:sa-east-1:${fixtures_1.mockAwsAccount}:layer:Datadog-Python36`;
242
- const lambdaExtensionLayerArn = `arn:aws:lambda:sa-east-1:${fixtures_1.mockAwsAccount}:layer:Datadog-Extension`;
345
+ const region = 'us-east-1';
243
346
  const runtime = 'python3.6';
244
347
  expect(() => {
245
- instrument_1.calculateUpdateRequest(config, settings, lambdaLibraryLayerArn, lambdaExtensionLayerArn, runtime);
348
+ instrument_1.calculateUpdateRequest(config, settings, region, runtime);
246
349
  }).toThrowError('Warning: Invalid site URL. Must be either datadoghq.com, datadoghq.eu, us3.datadoghq.com, or ddog-gov.com.');
247
350
  });
248
351
  test('throws an error when neither DATADOG_API_KEY nor DATADOG_KMS_API_KEY are given through the environment while using extensionVersion', () => {
@@ -259,45 +362,33 @@ describe('instrument', () => {
259
362
  mergeXrayTraces: false,
260
363
  tracingEnabled: false,
261
364
  };
262
- const lambdaLibraryLayerArn = `arn:aws:lambda:sa-east-1:${fixtures_1.mockAwsAccount}:layer:Datadog-Python36`;
263
- const lambdaExtensionLayerArn = `arn:aws:lambda:sa-east-1:${fixtures_1.mockAwsAccount}:layer:Datadog-Extension`;
365
+ const region = 'us-east-1';
264
366
  const runtime = 'python3.6';
265
367
  expect(() => {
266
- instrument_1.calculateUpdateRequest(config, settings, lambdaLibraryLayerArn, lambdaExtensionLayerArn, runtime);
267
- }).toThrowError("When 'extensionLayer' is set, DATADOG_API_KEY or DATADOG_KMS_API_KEY must also be set");
368
+ instrument_1.calculateUpdateRequest(config, settings, region, runtime);
369
+ }).toThrowError("When 'extensionLayer' is set, DATADOG_API_KEY, DATADOG_KMS_API_KEY, or DATADOG_API_KEY_SECRET_ARN must also be set");
268
370
  });
269
- });
270
- describe('getExtensionArn', () => {
271
- const OLD_ENV = process.env;
272
- beforeEach(() => {
273
- jest.resetModules();
274
- process.env = {};
275
- });
276
- afterAll(() => {
277
- process.env = OLD_ENV;
278
- });
279
- test('gets sa-east-1 Lambda Extension layer ARN', () => __awaiter(void 0, void 0, void 0, function* () {
280
- const settings = {
281
- flushMetricsToLogs: false,
282
- layerAWSAccount: fixtures_1.mockAwsAccount,
283
- mergeXrayTraces: false,
284
- tracingEnabled: false,
371
+ test('throws error when trying to add `DD_API_KEY_SECRET_ARN` while using sync metrics in a node runtime', () => {
372
+ process.env[constants_1.CI_API_KEY_SECRET_ARN_ENV_VAR] = 'some-secret:arn:from:aws';
373
+ const runtime = 'nodejs14.x';
374
+ const region = 'us-east-1';
375
+ const config = {
376
+ FunctionArn: 'arn:aws:lambda:us-east-1:123456789012:function:lambda-hello-world',
377
+ Handler: 'index.handler',
378
+ Layers: [],
379
+ Runtime: runtime,
285
380
  };
286
- const region = 'sa-east-1';
287
- const layerArn = instrument_1.getExtensionArn(settings, region);
288
- expect(layerArn).toEqual(`arn:aws:lambda:${region}:${fixtures_1.mockAwsAccount}:layer:Datadog-Extension`);
289
- }));
290
- test('gets sa-east-1 gov cloud Lambda Extension layer ARN', () => __awaiter(void 0, void 0, void 0, function* () {
291
381
  const settings = {
292
382
  flushMetricsToLogs: false,
293
383
  layerAWSAccount: fixtures_1.mockAwsAccount,
384
+ layerVersion: 13,
294
385
  mergeXrayTraces: false,
295
386
  tracingEnabled: false,
296
387
  };
297
- const region = 'us-gov-1';
298
- const layerArn = instrument_1.getExtensionArn(settings, region);
299
- expect(layerArn).toEqual(`arn:aws-us-gov:lambda:${region}:${constants_1.GOVCLOUD_LAYER_AWS_ACCOUNT}:layer:Datadog-Extension`);
300
- }));
388
+ expect(() => {
389
+ instrument_1.calculateUpdateRequest(config, settings, region, runtime);
390
+ }).toThrowError('`apiKeySecretArn` is not supported for Node runtimes when using Synchronous Metrics. Use either `apiKey` or `apiKmsKey`.');
391
+ });
301
392
  });
302
393
  describe('getFunctionConfig', () => {
303
394
  const OLD_ENV = process.env;
@@ -610,38 +701,4 @@ describe('instrument', () => {
610
701
  yield expect(instrument_1.getLambdaConfigsFromRegEx(lambda, cloudWatch, 'us-east-1', 'fake-pattern', settings)).rejects.toStrictEqual(new Error('Max retry count exceeded.'));
611
702
  }));
612
703
  });
613
- describe('getLayerArn', () => {
614
- const OLD_ENV = process.env;
615
- beforeEach(() => {
616
- jest.resetModules();
617
- process.env = {};
618
- });
619
- afterAll(() => {
620
- process.env = OLD_ENV;
621
- });
622
- test('gets sa-east-1 Node12 Lambda Library layer ARN', () => __awaiter(void 0, void 0, void 0, function* () {
623
- const runtime = 'nodejs12.x';
624
- const settings = {
625
- flushMetricsToLogs: false,
626
- layerAWSAccount: fixtures_1.mockAwsAccount,
627
- mergeXrayTraces: false,
628
- tracingEnabled: false,
629
- };
630
- const region = 'sa-east-1';
631
- const layerArn = instrument_1.getLayerArn(runtime, settings, region);
632
- expect(layerArn).toEqual(`arn:aws:lambda:${region}:${fixtures_1.mockAwsAccount}:layer:Datadog-Node12-x`);
633
- }));
634
- test('gets sa-east-1 Python37 gov cloud Lambda Library layer ARN', () => __awaiter(void 0, void 0, void 0, function* () {
635
- const runtime = 'python3.7';
636
- const settings = {
637
- flushMetricsToLogs: false,
638
- layerAWSAccount: fixtures_1.mockAwsAccount,
639
- mergeXrayTraces: false,
640
- tracingEnabled: false,
641
- };
642
- const region = 'us-gov-1';
643
- const layerArn = instrument_1.getLayerArn(runtime, settings, region);
644
- expect(layerArn).toEqual(`arn:aws-us-gov:lambda:${region}:${constants_1.GOVCLOUD_LAYER_AWS_ACCOUNT}:layer:Datadog-Python37`);
645
- }));
646
- });
647
704
  });
@@ -49,6 +49,7 @@ describe('uninstrument', () => {
49
49
  'arn:aws:lambda:us-east-1:000000000000:function:uninstrument': {
50
50
  Environment: {
51
51
  Variables: {
52
+ [constants_1.API_KEY_SECRET_ARN_ENV_VAR]: 'some-secret:arn:from:aws',
52
53
  [constants_1.ENVIRONMENT_ENV_VAR]: 'staging',
53
54
  [constants_1.FLUSH_TO_LOG_ENV_VAR]: 'true',
54
55
  [constants_1.LAMBDA_HANDLER_ENV_VAR]: 'lambda_function.lambda_handler',
@@ -52,6 +52,7 @@ describe('uninstrument', () => {
52
52
  fs.readFile.mockImplementation((a, b, callback) => callback({ code: 'ENOENT' }));
53
53
  aws_sdk_1.Lambda.mockImplementation(() => fixtures_1.makeMockLambda({
54
54
  'arn:aws:lambda:us-east-1:000000000000:function:uninstrument': {
55
+ Architectures: ['x86_64'],
55
56
  Environment: {
56
57
  Variables: {
57
58
  [constants_1.ENVIRONMENT_ENV_VAR]: 'staging',
@@ -1,19 +1,28 @@
1
+ export declare const DD_LAMBDA_EXTENSION_LAYER_NAME = "Datadog-Extension";
2
+ export declare const EXTENSION_LAYER_KEY = "extension";
1
3
  export declare const RUNTIME_LAYER_LOOKUP: {
2
- readonly 'nodejs10.x': "Datadog-Node10-x";
4
+ readonly extension: "Datadog-Extension";
3
5
  readonly 'nodejs12.x': "Datadog-Node12-x";
4
6
  readonly 'nodejs14.x': "Datadog-Node14-x";
5
- readonly 'python2.7': "Datadog-Python27";
6
7
  readonly 'python3.6': "Datadog-Python36";
7
8
  readonly 'python3.7': "Datadog-Python37";
8
9
  readonly 'python3.8': "Datadog-Python38";
9
10
  readonly 'python3.9': "Datadog-Python39";
10
11
  };
11
- export declare type Runtime = keyof typeof RUNTIME_LAYER_LOOKUP;
12
+ export declare type Runtime = Exclude<keyof typeof RUNTIME_LAYER_LOOKUP, typeof EXTENSION_LAYER_KEY>;
13
+ export declare const ARM_RUNTIMES: string[];
14
+ export declare const ARM64_ARCHITECTURE = "arm64";
15
+ export declare const ARM_LAYER_SUFFIX = "-ARM";
16
+ export declare enum RuntimeType {
17
+ NODE = 0,
18
+ PYTHON = 1
19
+ }
20
+ export declare const RUNTIME_LOOKUP: {
21
+ [key: string]: RuntimeType;
22
+ };
12
23
  export declare const HANDLER_LOCATION: {
13
- 'nodejs10.x': string;
14
24
  'nodejs12.x': string;
15
25
  'nodejs14.x': string;
16
- 'python2.7': string;
17
26
  'python3.6': string;
18
27
  'python3.7': string;
19
28
  'python3.8': string;
@@ -23,8 +32,8 @@ export declare const DEFAULT_LAYER_AWS_ACCOUNT = "464622532012";
23
32
  export declare const GOVCLOUD_LAYER_AWS_ACCOUNT = "002406178527";
24
33
  export declare const SUBSCRIPTION_FILTER_NAME = "datadog-ci-filter";
25
34
  export declare const TAG_VERSION_NAME = "dd_sls_ci";
26
- export declare const DD_LAMBDA_EXTENSION_LAYER_NAME = "Datadog-Extension";
27
35
  export declare const API_KEY_ENV_VAR = "DD_API_KEY";
36
+ export declare const API_KEY_SECRET_ARN_ENV_VAR = "DD_API_KEY_SECRET_ARN";
28
37
  export declare const KMS_API_KEY_ENV_VAR = "DD_KMS_API_KEY";
29
38
  export declare const SITE_ENV_VAR = "DD_SITE";
30
39
  export declare const TRACE_ENABLED_ENV_VAR = "DD_TRACE_ENABLED";
@@ -38,6 +47,7 @@ export declare const ENVIRONMENT_ENV_VAR = "DD_ENV";
38
47
  export declare const EXTRA_TAGS_ENV_VAR = "DD_TAGS";
39
48
  export declare const CI_SITE_ENV_VAR = "DATADOG_SITE";
40
49
  export declare const CI_API_KEY_ENV_VAR = "DATADOG_API_KEY";
50
+ export declare const CI_API_KEY_SECRET_ARN_ENV_VAR = "DATADOG_API_KEY_SECRET_ARN";
41
51
  export declare const CI_KMS_API_KEY_ENV_VAR = "DATADOG_KMS_API_KEY";
42
52
  export declare const LIST_FUNCTIONS_MAX_RETRY_COUNT = 2;
43
53
  export declare const MAX_LAMBDA_STATE_CHECK_ATTEMPTS = 3;
@@ -1,23 +1,38 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.EXTRA_TAGS_REG_EXP = exports.MAX_LAMBDA_STATE_CHECK_ATTEMPTS = exports.LIST_FUNCTIONS_MAX_RETRY_COUNT = exports.CI_KMS_API_KEY_ENV_VAR = exports.CI_API_KEY_ENV_VAR = exports.CI_SITE_ENV_VAR = exports.EXTRA_TAGS_ENV_VAR = exports.ENVIRONMENT_ENV_VAR = exports.VERSION_ENV_VAR = exports.SERVICE_ENV_VAR = exports.LAMBDA_HANDLER_ENV_VAR = exports.LOG_LEVEL_ENV_VAR = exports.FLUSH_TO_LOG_ENV_VAR = exports.MERGE_XRAY_TRACES_ENV_VAR = exports.TRACE_ENABLED_ENV_VAR = exports.SITE_ENV_VAR = exports.KMS_API_KEY_ENV_VAR = exports.API_KEY_ENV_VAR = exports.DD_LAMBDA_EXTENSION_LAYER_NAME = exports.TAG_VERSION_NAME = exports.SUBSCRIPTION_FILTER_NAME = exports.GOVCLOUD_LAYER_AWS_ACCOUNT = exports.DEFAULT_LAYER_AWS_ACCOUNT = exports.HANDLER_LOCATION = exports.RUNTIME_LAYER_LOOKUP = void 0;
3
+ exports.EXTRA_TAGS_REG_EXP = exports.MAX_LAMBDA_STATE_CHECK_ATTEMPTS = exports.LIST_FUNCTIONS_MAX_RETRY_COUNT = exports.CI_KMS_API_KEY_ENV_VAR = exports.CI_API_KEY_SECRET_ARN_ENV_VAR = exports.CI_API_KEY_ENV_VAR = exports.CI_SITE_ENV_VAR = exports.EXTRA_TAGS_ENV_VAR = exports.ENVIRONMENT_ENV_VAR = exports.VERSION_ENV_VAR = exports.SERVICE_ENV_VAR = exports.LAMBDA_HANDLER_ENV_VAR = exports.LOG_LEVEL_ENV_VAR = exports.FLUSH_TO_LOG_ENV_VAR = exports.MERGE_XRAY_TRACES_ENV_VAR = exports.TRACE_ENABLED_ENV_VAR = exports.SITE_ENV_VAR = exports.KMS_API_KEY_ENV_VAR = exports.API_KEY_SECRET_ARN_ENV_VAR = exports.API_KEY_ENV_VAR = exports.TAG_VERSION_NAME = exports.SUBSCRIPTION_FILTER_NAME = exports.GOVCLOUD_LAYER_AWS_ACCOUNT = exports.DEFAULT_LAYER_AWS_ACCOUNT = exports.HANDLER_LOCATION = exports.RUNTIME_LOOKUP = exports.RuntimeType = exports.ARM_LAYER_SUFFIX = exports.ARM64_ARCHITECTURE = exports.ARM_RUNTIMES = exports.RUNTIME_LAYER_LOOKUP = exports.EXTENSION_LAYER_KEY = exports.DD_LAMBDA_EXTENSION_LAYER_NAME = void 0;
4
+ exports.DD_LAMBDA_EXTENSION_LAYER_NAME = 'Datadog-Extension';
5
+ exports.EXTENSION_LAYER_KEY = 'extension';
4
6
  exports.RUNTIME_LAYER_LOOKUP = {
5
- 'nodejs10.x': 'Datadog-Node10-x',
7
+ [exports.EXTENSION_LAYER_KEY]: exports.DD_LAMBDA_EXTENSION_LAYER_NAME,
6
8
  'nodejs12.x': 'Datadog-Node12-x',
7
9
  'nodejs14.x': 'Datadog-Node14-x',
8
- 'python2.7': 'Datadog-Python27',
9
10
  'python3.6': 'Datadog-Python36',
10
11
  'python3.7': 'Datadog-Python37',
11
12
  'python3.8': 'Datadog-Python38',
12
13
  'python3.9': 'Datadog-Python39',
13
14
  };
15
+ exports.ARM_RUNTIMES = [exports.EXTENSION_LAYER_KEY, 'python3.8', 'python3.9'];
16
+ exports.ARM64_ARCHITECTURE = 'arm64';
17
+ exports.ARM_LAYER_SUFFIX = '-ARM';
18
+ var RuntimeType;
19
+ (function (RuntimeType) {
20
+ RuntimeType[RuntimeType["NODE"] = 0] = "NODE";
21
+ RuntimeType[RuntimeType["PYTHON"] = 1] = "PYTHON";
22
+ })(RuntimeType = exports.RuntimeType || (exports.RuntimeType = {}));
23
+ exports.RUNTIME_LOOKUP = {
24
+ 'nodejs12.x': RuntimeType.NODE,
25
+ 'nodejs14.x': RuntimeType.NODE,
26
+ 'python3.6': RuntimeType.PYTHON,
27
+ 'python3.7': RuntimeType.PYTHON,
28
+ 'python3.8': RuntimeType.PYTHON,
29
+ 'python3.9': RuntimeType.PYTHON,
30
+ };
14
31
  const PYTHON_HANDLER_LOCATION = 'datadog_lambda.handler.handler';
15
32
  const NODE_HANDLER_LOCATION = '/opt/nodejs/node_modules/datadog-lambda-js/handler.handler';
16
33
  exports.HANDLER_LOCATION = {
17
- 'nodejs10.x': NODE_HANDLER_LOCATION,
18
34
  'nodejs12.x': NODE_HANDLER_LOCATION,
19
35
  'nodejs14.x': NODE_HANDLER_LOCATION,
20
- 'python2.7': PYTHON_HANDLER_LOCATION,
21
36
  'python3.6': PYTHON_HANDLER_LOCATION,
22
37
  'python3.7': PYTHON_HANDLER_LOCATION,
23
38
  'python3.8': PYTHON_HANDLER_LOCATION,
@@ -27,9 +42,9 @@ exports.DEFAULT_LAYER_AWS_ACCOUNT = '464622532012';
27
42
  exports.GOVCLOUD_LAYER_AWS_ACCOUNT = '002406178527';
28
43
  exports.SUBSCRIPTION_FILTER_NAME = 'datadog-ci-filter';
29
44
  exports.TAG_VERSION_NAME = 'dd_sls_ci';
30
- exports.DD_LAMBDA_EXTENSION_LAYER_NAME = 'Datadog-Extension';
31
45
  // Environment variables used in the Lambda environment
32
46
  exports.API_KEY_ENV_VAR = 'DD_API_KEY';
47
+ exports.API_KEY_SECRET_ARN_ENV_VAR = 'DD_API_KEY_SECRET_ARN';
33
48
  exports.KMS_API_KEY_ENV_VAR = 'DD_KMS_API_KEY';
34
49
  exports.SITE_ENV_VAR = 'DD_SITE';
35
50
  exports.TRACE_ENABLED_ENV_VAR = 'DD_TRACE_ENABLED';
@@ -44,6 +59,7 @@ exports.EXTRA_TAGS_ENV_VAR = 'DD_TAGS';
44
59
  // Environment variables used by Datadog CI
45
60
  exports.CI_SITE_ENV_VAR = 'DATADOG_SITE';
46
61
  exports.CI_API_KEY_ENV_VAR = 'DATADOG_API_KEY';
62
+ exports.CI_API_KEY_SECRET_ARN_ENV_VAR = 'DATADOG_API_KEY_SECRET_ARN';
47
63
  exports.CI_KMS_API_KEY_ENV_VAR = 'DATADOG_KMS_API_KEY';
48
64
  exports.LIST_FUNCTIONS_MAX_RETRY_COUNT = 2;
49
65
  exports.MAX_LAMBDA_STATE_CHECK_ATTEMPTS = 3;