Open9

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

dokeitadokeita

動作確認環境

  • WSL2 Ubuntu 24.04

事前準備

node 実行環境を構築する
こちらを参考にして実施
https://zenn.dev/ryuu/articles/wsl2-addyarn
補足として、 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

これで フォークからビルドまで のモジュールのインストールができるようになる。

dokeitadokeita

ビルド

こけた・・・

$ 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.
dokeitadokeita

本家のリポジトリもこけるけどプロジェクトが違うな、、

 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.
dokeitadokeita
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$
dokeitadokeita

とりあえず aws-cdk-lib だけビルドできればいいので、以下の手順に従って実施。
https://github.com/aws/aws-cdk/blob/main/CONTRIBUTING.md#building-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$