Skip to content

Commit 561c847

Browse files
authored
Simplify Docker Image Build, be more similar to upstream build process (#63)
*Issue #, if available:* *Description of changes:* - Build NPM tarball of ADOT JS in Docker Image and install tarball as a dependency of the `autoinstrumentation.ts` program, instead of copying all the source code alongside `autoinstrumentation.ts` as a non-dependency - Simplify tsconfig.json usage, no need for base config. - Upstream comparison: - https://github.com/open-telemetry/opentelemetry-operator/blob/main/autoinstrumentation/nodejs/package.json - https://github.com/open-telemetry/opentelemetry-operator/blob/main/autoinstrumentation/nodejs/Dockerfile Testing: - Tested docker image on ECS Fargate. By submitting this pull request, I confirm that you can use, modify, copy, and redistribute this contribution, under the terms of your choice.
1 parent 8befa1a commit 561c847

File tree

5 files changed

+38
-115
lines changed

5 files changed

+38
-115
lines changed

Dockerfile

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
# # Stage 1: Install ADOT nodejs instrumentation in the /operator-build folder
1+
# Stage 1: Install ADOT nodejs instrumentation in the /operator-build folder
22
FROM node:20 AS build
33

4-
# In the future, when ADOT JS is uploaded to NPM, the source code can be obtained from there
5-
# and this Dockerfile will not need to copy the source code anymore as a workaround.
6-
# Copy Source Code without original package.json
7-
WORKDIR /
8-
COPY tsconfig.base.json ./tsconfig.base.json
4+
# Build the ADOT JS SDK Tarball: aws-aws-distro-opentelemetry-node-autoinstrumentation-x.y.z.tgz
5+
WORKDIR /adot-js-build
6+
COPY . .
7+
RUN npm install
8+
WORKDIR /adot-js-build/aws-distro-opentelemetry-node-autoinstrumentation
9+
RUN npm run compile
10+
RUN npm pack
11+
12+
# Install Tarball build from previous step so that autoinstrumentation.ts can "require" the ADOT JS SDK
913
WORKDIR /operator-build
10-
COPY aws-distro-opentelemetry-node-autoinstrumentation/src ./src/
14+
COPY docker-utils/ .
1115
COPY aws-distro-opentelemetry-node-autoinstrumentation/tsconfig.json ./tsconfig.json
12-
COPY aws-distro-opentelemetry-node-autoinstrumentation/LICENSE ./LICENSE
13-
# ... but also add the required autoinstrumentation.ts and package.json to be consistent with upstream
14-
# https://github.com/open-telemetry/opentelemetry-operator/tree/main/autoinstrumentation/nodejs
15-
COPY docker-utils/autoinstrumentation.ts ./src/autoinstrumentation.ts
16-
COPY docker-utils/package.json ./package.json
17-
16+
RUN cp /adot-js-build/aws-distro-opentelemetry-node-autoinstrumentation/aws-aws-distro-opentelemetry-node-autoinstrumentation-*.tgz ./
17+
RUN npm install aws-aws-distro-opentelemetry-node-autoinstrumentation-$(node -p -e "require('/adot-js-build/aws-distro-opentelemetry-node-autoinstrumentation/package.json').version").tgz
1818
RUN npm install
1919

2020
# Stage 2: Build the cp-utility binary
Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,35 @@
11
{
2-
"extends": "../tsconfig.base",
32
"compilerOptions": {
43
"rootDir": ".",
54
"outDir": "build",
5+
6+
"allowUnreachableCode": false,
7+
"allowUnusedLabels": false,
8+
"declaration": true,
9+
"declarationMap": true,
10+
"forceConsistentCasingInFileNames": true,
11+
"inlineSources": true,
12+
"module": "commonjs",
13+
"noEmitOnError": true,
14+
"noFallthroughCasesInSwitch": true,
15+
"noImplicitOverride": true,
16+
"noImplicitReturns": true,
17+
"noUnusedLocals": true,
18+
"pretty": true,
19+
"sourceMap": true,
20+
"strict": true,
21+
"strictNullChecks": true,
22+
"target": "es2017",
23+
"incremental": true,
24+
"newLine": "LF",
625
// This command allows TypeScript to import `sql_dialect_keywords.json`
726
"resolveJsonModule": true
827
},
928
"include": [
1029
"src/**/*.ts",
1130
"test/**/*.ts"
31+
],
32+
"exclude": [
33+
"node_modules"
1234
]
1335
}

docker-utils/package.json

Lines changed: 1 addition & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -5,87 +5,14 @@
55
"scripts": {
66
"clean": "rimraf build/*",
77
"prepare": "npm run compile",
8-
"create-version": "node -p \"'export const LIB_VERSION = ' + JSON.stringify(require('./package.json').version) + ';'\" > src/version.ts",
9-
"precompile": "npm run create-version",
108
"compile": "tsc -p .",
11-
"postcompile": "copyfiles -f 'build/src/*.js' build/workspace/ && copyfiles -f 'build/src/configuration/*.json' build/workspace/configuration/ && copyfiles -f 'build/src/patches/*.js' build/workspace/patches/ && copyfiles -f 'build/src/sampler/*.js' build/workspace/sampler/ && copyfiles -f 'build/src/patches/aws/services/*.js' build/workspace/patches/aws/services/ && copyfiles -f 'build/src/third-party/otel/aws/services/*.js' build/workspace/third-party/otel/aws/services/ && copyfiles -f 'build/src/configuration/*.json' build/workspace/configuration/ && copyfiles 'node_modules/**' package.json build/workspace/ && npm -C build/workspace prune --omit=dev --no-package-lock"
9+
"postcompile": "copyfiles -f 'aws-aws-distro-opentelemetry-node-autoinstrumentation-*.tgz' build/workspace/ && copyfiles -f 'build/src/**' build/workspace/ && copyfiles 'node_modules/**' package.json build/workspace/ && npm -C build/workspace prune --omit=dev --no-package-lock"
1210
},
1311
"devDependencies": {
1412
"@types/mocha": "7.0.2",
1513
"@types/node": "18.6.5",
1614
"copyfiles": "^2.4.1",
1715
"rimraf": "5.0.5",
1816
"typescript": "4.4.4"
19-
},
20-
"dependencies": {
21-
"@opentelemetry/api": "1.9.0",
22-
"@opentelemetry/auto-instrumentations-node": "0.48.0",
23-
"@opentelemetry/auto-configuration-propagators": "0.2.0",
24-
"@opentelemetry/exporter-metrics-otlp-grpc": "0.52.1",
25-
"@opentelemetry/exporter-metrics-otlp-http": "0.52.1",
26-
"@opentelemetry/instrumentation": "0.52.1",
27-
"@opentelemetry/id-generator-aws-xray": "1.2.2",
28-
"@opentelemetry/propagator-aws-xray": "1.25.1",
29-
"@opentelemetry/core": "1.25.1",
30-
"@opentelemetry/sdk-trace-base": "1.25.1",
31-
"@opentelemetry/semantic-conventions": "1.25.1",
32-
"@opentelemetry/resources": "1.25.1",
33-
"@opentelemetry/resource-detector-aws": "1.5.2",
34-
"@opentelemetry/exporter-trace-otlp-proto": "0.52.1",
35-
"@opentelemetry/exporter-zipkin": "1.25.1",
36-
"@opentelemetry/sdk-metrics": "1.25.1",
37-
"@opentelemetry/sdk-node": "0.52.1",
38-
"@opentelemetry/instrumentation-aws-sdk": "0.43.1"
39-
},
40-
"overrides": {
41-
"@opentelemetry/auto-instrumentations-node": {
42-
"@opentelemetry/instrumentation": "0.52.1",
43-
"@opentelemetry/instrumentation-amqplib": "0.40.0",
44-
"@opentelemetry/instrumentation-aws-lambda": "0.43.0",
45-
"@opentelemetry/instrumentation-aws-sdk": "0.43.1",
46-
"@opentelemetry/instrumentation-bunyan": "0.40.0",
47-
"@opentelemetry/instrumentation-cassandra-driver": "0.40.0",
48-
"@opentelemetry/instrumentation-connect": "0.38.0",
49-
"@opentelemetry/instrumentation-cucumber": "0.8.0",
50-
"@opentelemetry/instrumentation-dataloader": "0.11.0",
51-
"@opentelemetry/instrumentation-dns": "0.38.0",
52-
"@opentelemetry/instrumentation-express": "0.41.1",
53-
"@opentelemetry/instrumentation-fastify": "0.38.0",
54-
"@opentelemetry/instrumentation-fs": "0.14.0",
55-
"@opentelemetry/instrumentation-generic-pool": "0.38.0",
56-
"@opentelemetry/instrumentation-graphql": "0.42.0",
57-
"@opentelemetry/instrumentation-grpc": "0.52.1",
58-
"@opentelemetry/instrumentation-hapi": "0.40.0",
59-
"@opentelemetry/instrumentation-http": "0.52.1",
60-
"@opentelemetry/instrumentation-ioredis": "0.42.0",
61-
"@opentelemetry/instrumentation-kafkajs": "0.2.0",
62-
"@opentelemetry/instrumentation-knex": "0.39.0",
63-
"@opentelemetry/instrumentation-koa": "0.42.0",
64-
"@opentelemetry/instrumentation-lru-memoizer": "0.39.0",
65-
"@opentelemetry/instrumentation-memcached": "0.38.0",
66-
"@opentelemetry/instrumentation-mongodb": "0.46.0",
67-
"@opentelemetry/instrumentation-mongoose": "0.40.0",
68-
"@opentelemetry/instrumentation-mysql": "0.40.0",
69-
"@opentelemetry/instrumentation-mysql2": "0.40.0",
70-
"@opentelemetry/instrumentation-nestjs-core": "0.39.0",
71-
"@opentelemetry/instrumentation-net": "0.38.0",
72-
"@opentelemetry/instrumentation-pg": "0.43.0",
73-
"@opentelemetry/instrumentation-pino": "0.41.0",
74-
"@opentelemetry/instrumentation-redis": "0.41.0",
75-
"@opentelemetry/instrumentation-redis-4": "0.41.0",
76-
"@opentelemetry/instrumentation-restify": "0.40.0",
77-
"@opentelemetry/instrumentation-router": "0.39.0",
78-
"@opentelemetry/instrumentation-socket.io": "0.41.0",
79-
"@opentelemetry/instrumentation-tedious": "0.12.0",
80-
"@opentelemetry/instrumentation-undici": "0.4.0",
81-
"@opentelemetry/instrumentation-winston": "0.39.0",
82-
"@opentelemetry/resource-detector-alibaba-cloud": "0.28.10",
83-
"@opentelemetry/resource-detector-aws": "1.5.2",
84-
"@opentelemetry/resource-detector-azure": "0.2.9",
85-
"@opentelemetry/resource-detector-container": "0.3.11",
86-
"@opentelemetry/resource-detector-gcp": "0.29.10",
87-
"@opentelemetry/resources": "1.25.1",
88-
"@opentelemetry/sdk-node": "0.52.1"
89-
}
9017
}
9118
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
// Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
22
// SPDX-License-Identifier: Apache-2.0
33

4-
require('./register');
4+
require('@aws/aws-distro-opentelemetry-node-autoinstrumentation/register');

tsconfig.base.json

Lines changed: 0 additions & 26 deletions
This file was deleted.

0 commit comments

Comments
 (0)