Open9
JAWS-UG CDK支部のコントリビュートワークショップを道しるべにCDKの実装を読む

動作確認環境
- WSL2 Ubuntu 24.04
事前準備
node 実行環境を構築する
こちらを参考にして実施
補足として、 n コマンドで node バージョンを新しくしたあとに shell の再読み込みが必要。
$ sudo n lts
installing : node-v22.12.0
mkdir : /usr/local/n/versions/node/22.12.0
fetch : https://nodejs.org/dist/v22.12.0/node-v22.12.0-linux-x64.tar.xz
copying : node/22.12.0
installed : v22.12.0 (with npm 10.9.0)
Note: the node command changed location and the old location may be remembered in your current shell.
old : /usr/bin/node
new : /usr/local/bin/node
If "node --version" shows the old version then start a new shell, or reset the location hash with:
hash -r (for bash, zsh, ash, dash, and ksh)
rehash (for csh and tcsh)
$ node --version
v18.19.1
$ hash -r
$ node --version
v22.12.0
これで フォークからビルドまで のモジュールのインストールができるようになる。

ビルド
こけた・・・
$ npx lerna run build --concurrency 4
(node:17336) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
lerna notice cli v8.1.2
略
Lerna (powered by Nx) Running target build for 62 projects
✖ awslint:build
yarn run v1.22.22
$ tsc -b && eslint . --ext=.ts && pkglint && chmod +x bin/awslint
略
Error: Some package.json files had errors
at main (/home/keita/repo/aws-cdk-for-workshop/tools/@aws-cdk/pkglint/bin/pkglint.js:29:15)
at Object.<anonymous> (/home/keita/repo/aws-cdk-for-workshop/tools/@aws-cdk/pkglint/bin/pkglint.js:32:1)
at Module._compile (node:internal/modules/cjs/loader:1565:14)
at Object..js (node:internal/modules/cjs/loader:1708:10)
at Module.load (node:internal/modules/cjs/loader:1318:32)
at Function._load (node:internal/modules/cjs/loader:1128:12)
at TracingChannel.traceSync (node:diagnostics_channel:322:14)
at wrapModuleLoad (node:internal/modules/cjs/loader:219:24)
at Module.require (node:internal/modules/cjs/loader:1340:12)
at require (node:internal/modules/helpers:138:16)
error Command failed with exit code 1.
info Visit https://yarnpkg.com/en/docs/cli/run for documentation about this command.

本家のリポジトリもこけるけどプロジェクトが違うな、、
Lerna (powered by Nx) Ran target build for 64 projects (19m)
✔ 51/55 succeeded [0 read from cache]
✖ 4/55 targets failed, including the following:
- @aws-cdk-testing/framework-integ:build
- @aws-cdk/aws-cloud9-alpha:build
- @aws-cdk/aws-kinesisanalytics-flink-alpha:build
- @aws-cdk/aws-lambda-python-alpha:build
Hint: Try "nx view-logs" to get structured, searchable errors logs in your browser.


いろいろ入れないといけなかった
ubuntu なので、 git-lfs は apt-get で入れる

keita@keita-lenovo:~/repo/aws-cdk$ node --version
v22.12.0
keita@keita-lenovo:~/repo/aws-cdk$ yarn --version
1.22.22
keita@keita-lenovo:~/repo/aws-cdk$ python3 --version
Python 3.12.3
keita@keita-lenovo:~/repo/aws-cdk$ docker --version
Docker version 27.4.1, build b9d17ea
keita@keita-lenovo:~/repo/aws-cdk$ sudo apt-get install git-lfs
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
The following NEW packages will be installed:
git-lfs
0 upgraded, 1 newly installed, 0 to remove and 39 not upgraded.
Need to get 3906 kB of archives.
After this operation, 11.7 MB of additional disk space will be used.
Get:1 http://archive.ubuntu.com/ubuntu noble-updates/universe amd64 git-lfs amd64 3.4.1-1ubuntu0.2 [3906 kB]
Fetched 3906 kB in 2s (1691 kB/s)
Selecting previously unselected package git-lfs.
(Reading database ... 53093 files and directories currently installed.)
Preparing to unpack .../git-lfs_3.4.1-1ubuntu0.2_amd64.deb ...
Unpacking git-lfs (3.4.1-1ubuntu0.2) ...
Setting up git-lfs (3.4.1-1ubuntu0.2) ...
Processing triggers for man-db (2.12.0-4build2) ...
keita@keita-lenovo:~/repo/aws-cdk$

とりあえず aws-cdk-lib だけビルドできればいいので、以下の手順に従って実施。
$ npx lerna run build --scope=aws-cdk-lib
なんかいろいろでてるけど成功はしたっぽい
ita@keita-lenovo:~/repo/aws-cdk$ npx lerna run build --scope=aws-cdk-lib
(node:12153) [DEP0040] DeprecationWarning: The `punycode` module is deprecated. Please use a userland alternative instead.
(Use `node --trace-deprecation ...` to show where the warning was created)
lerna notice cli v8.1.8
lerna notice filter including "aws-cdk-lib"
lerna info filter [ 'aws-cdk-lib' ]
✔ 9/9 dependent project tasks succeeded [0 read from cache]
Hint: you can run the command with --verbose to see the full dependent project outputs
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
> aws-cdk-lib:build
yarn run v1.22.22
$ cdk-build
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
fixtures/
fixtures/symlinks/
fixtures/test1/
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
fixtures/test1/external-link.txt
fixtures/test1/file1.txt
fixtures/test1/local-link.txt
fixtures/test1/subdir/
fixtures/test1/subdir2/
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
fixtures/test1/subdir2/empty-subdir/
fixtures/test1/subdir2/subdir3/
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
fixtures/test1/subdir2/subdir3/file3.txt
fixtures/test1/subdir2/empty-subdir/.hidden
fixtures/test1/subdir/file2.txt
fixtures/symlinks/external-dir-link
fixtures/symlinks/external-link.txt
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
fixtures/symlinks/indirect-external-link.txt
fixtures/symlinks/local-dir-link
fixtures/symlinks/local-link.txt
fixtures/symlinks/normal-dir/
fixtures/symlinks/normal-file.txt
fixtures/symlinks/normal-dir/file-in-subdir.txt
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
tar: Ignoring unknown extended header keyword 'SCHILY.dev'
tar: Ignoring unknown extended header keyword 'SCHILY.ino'
tar: Ignoring unknown extended header keyword 'SCHILY.nlink'
Generating 253 modules...
Summary:
Service files: 254
Resources: 1381
🐢 Completed in: 4.996s
warning JSII6: A "peerDependency" on "constructs" at "^10.0.0" means you should take a "devDependency" on "constructs" at "10.0.0" (found "^10.0.0")
aws-apigateway/lib/domain-name.ts:132:19 - warning JSII5019: The property name "domainName" conflicts with the declaring class "DomainName". This will result in renaming the class to "_DomainName" in C#. Consider renaming "domainName".
132 public readonly domainName: string;
~~~~~~~~~~
aws-apigateway/lib/domain-name.ts:117:14
117 export class DomainName extends Resource implements IDomainName {
~~~~~~~~~~
The declaring class is introduced here
aws-apigateway/lib/gateway-response.ts:217:19 - warning JSII5019: The property name "responseType" conflicts with the declaring class "ResponseType". This will result in renaming the class to "_ResponseType" in C#. Consider renaming "responseType".
217 public readonly responseType: string;
~~~~~~~~~~~~
aws-apigateway/lib/gateway-response.ts:101:14
101 export class ResponseType {
~~~~~~~~~~~~
The declaring class is introduced here
aws-appsync/lib/graphqlapi.ts:284:12 - warning JSII5019: The property name "sourceApi" conflicts with the declaring interface "SourceApi". This will result in renaming the interface to "_SourceApi" in C#. Consider renaming "sourceApi".
284 readonly sourceApi: IGraphqlApi;
~~~~~~~~~
aws-appsync/lib/graphqlapi.ts:280:18
280 export interface SourceApi {
~~~~~~~~~
The declaring interface is introduced here
aws-codepipeline/lib/artifact.ts:15:17 - warning JSII5019: The method name "artifact" conflicts with the declaring class "Artifact". This will result in renaming the class to "_Artifact" in C#. Consider renaming "artifact".
15 public static artifact(name: string): Artifact {
~~~~~~~~
aws-codepipeline/lib/artifact.ts:8:14
8 export class Artifact {
~~~~~~~~
The declaring class is introduced here
aws-codepipeline/lib/artifact.ts:124:17 - warning JSII5019: The method name "artifactPath" conflicts with the declaring class "ArtifactPath". This will result in renaming the class to "_ArtifactPath" in C#. Consider renaming "artifactPath".
124 public static artifactPath(artifactName: string, fileName: string): ArtifactPath {
~~~~~~~~~~~~
aws-codepipeline/lib/artifact.ts:123:14
123 export class ArtifactPath {
~~~~~~~~~~~~
The declaring class is introduced here
aws-ec2/lib/connections.ts:69:19 - warning JSII5019: The property name "connections" conflicts with the declaring class "Connections". This will result in renaming the class to "_Connections" in C#. Consider renaming "connections".
69 public readonly connections: Connections;
~~~~~~~~~~~
aws-ec2/lib/connections.ts:68:14
68 export class Connections implements IConnectable {
~~~~~~~~~~~
The declaring class is introduced here
aws-ec2/lib/instance.ts:434:19 - warning JSII5019: The property name "instance" conflicts with the declaring class "Instance". This will result in renaming the class to "_Instance" in C#. Consider renaming "instance".
434 public readonly instance: CfnInstance;
~~~~~~~~
aws-ec2/lib/instance.ts:404:14
404 export class Instance extends Resource implements IInstance {
~~~~~~~~
The declaring class is introduced here
aws-ecr-assets/lib/image-asset.ts:80:39 - warning JSII5019: The property name "platform" conflicts with the declaring class "Platform". This will result in renaming the class to "_Platform" in C#. Consider renaming "platform".
80 private constructor(public readonly platform: string) { }
~~~~~~~~
aws-ecr-assets/lib/image-asset.ts:56:14
56 export class Platform {
~~~~~~~~
The declaring class is introduced here
aws-lambda/lib/lambda-version.ts:181:19 - warning JSII5019: The property name "version" conflicts with the declaring class "Version". This will result in renaming the class to "_Version" in C#. Consider renaming "version".
181 public readonly version: string;
~~~~~~~
aws-lambda/lib/lambda-version.ts:114:14
114 export class Version extends QualifiedFunctionBase implements IVersion {
~~~~~~~
The declaring class is introduced here
Build times for aws-cdk-lib: Total time (3m30.3s) | /home/keita/repo/aws-cdk/node_modules/jsii/bin/jsii (1m55.7s) | /home/keita/repo/aws-cdk/node_modules/eslint/bin/eslint.js (48.8s) | ts-node ./scripts/verify-imports-resolve-same.ts && ts-node ./scripts/verify-imports-shielded.ts && ts-node ./cx-api/build-tools/flag-report.ts && env QUIET=1 lazify . (26.7s) | /home/keita/repo/aws-cdk/tools/@aws-cdk/cdk-build-tools/bin/cdk-awslint (10.0s) | ts-node -P tsconfig.dev.json scripts/gen.ts (7.4s) | ts-node -P tsconfig.dev.json region-info/build-tools/generate-static-data.ts && (rm -rf core/test/fs/fixtures && cd core/test/fs && tar -xzf fixtures.tar.gz) && (rm -rf assets/test/fs/fixtures && cd assets/test/fs && tar -xzvf fixtures.tar.gz) && ./scripts/airlift-custom-resource-handlers.sh (1.5s) | '/usr/local/bin/node' (0.1s) | pkglint (0.1s)
Done in 210.44s.
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
Lerna (powered by Nx) Successfully ran target build for project aws-cdk-lib and 9 tasks it depends on (4m)
keita@keita-lenovo:~/repo/aws-cdk$