コンテンツにスキップ

フォークからビルドまで

リポジトリのフォーク

まずは、AWS CDK のリポジトリをご自身の GitHub アカウントにフォークします。

しかし本ワークショップでは、本家の AWS CDK リポジトリではなく、ワークショップ用の擬似リポジトリを使用します。 そのため、以下のリポジトリをフォークしてください。

ブラウザでリポジトリを開き、右上のForkボタンを押す

workshop-01

入力値はそのままで、右下のCreate forkボタンを押す

workshop-02

自分のアカウントにフォークされたリポジトリが開かれる

workshop-03

リポジトリのクローン

次は、フォークしたリポジトリを開発環境にクローン(複製)します。

本ワークショップでは先ほど構築した EC2 で実際に開発を行うため、EC2 の VS Code 上でクローンをしてみます。

まず、EC2 の VS Code に移り、左側に表示されているバーから「リポジトリの複製」をクリックします。

すると上の入力欄に「GitHub から複製」という項目が表示されるので、クリックします。

workshop-05

workshop-06

そして、先ほどフォークしたご自身のリポジトリ(ユーザー名/aws-cdk-for-workshop)を入力・選択します。

workshop-07

表示されたものに沿ってそのままクリックしていき、リポジトリを VS Code 上で開きます。

workshop-08

workshop-09

workshop-10

これでクローンが完了し、VS Code でコードを開けるようになりました。

ターミナルを開いておく

ここで VS Code でターミナルを開いておきます。

以降で説明するインストールやビルドなどのコマンドは、このターミナルで実行します。

workshop-11

Kiro CLI でリポジトリを確認する

VS Code のターミナルが、クローンした aws-cdk-for-workshop のルートを開いていることを確認してから Kiro CLI を起動します。

Terminal window
pwd
git remote -v
kiro-cli

Kiro CLI で /context show を実行し、次を確認します。

  • cdk-contribution-skill が利用可能である
  • リポジトリルートの AGENTS.md が context に含まれている

続いて、Kiro CLI に次のメッセージを送ります。

Read AGENTS.md and summarize the workshop target repository, prohibited actions, human approval gates, and validation commands. Do not modify any files yet.

回答に次の内容が含まれていることを確認します。

  • 対象は jaws-ug-cdk/aws-cdk-for-workshop
  • aws/aws-cdk への Pull Request、Issue、コメントの作成は禁止
  • 次の操作の前には参加者の承認が必要
    • フルビルドなどの長時間ビルド
    • integration test の AWS へのデプロイ (実リソースが作成され課金が発生)
    • ブランチの push と Pull Request の作成
  • .contributions/ は Skill の作業ディレクトリで、コミットしない (.gitignore 済み)

内容が異なる場合は先へ進まず、ファシリテーターへ確認してください。以降は同じ Kiro CLI セッションで、参加者がコマンドと差分を確認しながら進めます。

モジュールのインストール

さて、ここでクローンした AWS CDK リポジトリのコードを開いてみましょう。

まず、左側のディレクトリ一覧から、packages/aws-cdk-libをクリックして中身を表示してみてください。

これはaws-cdk-libモジュールといい、AWS CDK のコンストラクトなど CDK を構成する大部分のコードが含まれています。

※他のディレクトリでは、@aws-cdkには alpha モジュールなど、@aws-cdk-testingには integration テストなどのテストコードが入っています。

workshop-14

試しに、Amazon SQS のコンストラクトファイル(packages/aws-cdk-lib/aws-sqs/lib/queue.ts)を開いてみましょう。

すると SQS のコンストラクトなどのコードが入ったファイルが表示されます。しかし、最初の数行の import 文でエラーが出ていることがわかります。

workshop-15

これは、まだ aws-cdk が依存するモジュールなどのインストールをしていないからです。次のコマンドでインストールしてみましょう。

Terminal window
yarn install

workshop-16

すると依存モジュールのインストールがされ、一部のエラーが解消されました。

ビルド

しかし、まだエラーが出ているようです。CfnQueue (sqs.generated)という部分で出力されています。

workshop-17

これはL1 コンストラクトのモジュールになりますが、AWS CDK ではL1 コンストラクトのファイルはビルドの際に自動生成されます。

ここまでリポジトリのクローンから依存モジュールのインストールまでしましたが、実はまだ「ビルド」をしていません

そこで、次のビルドコマンドを投げてみましょう。

Terminal window
npx lerna run build --concurrency 4

※上記コマンドでは、AWS CDK を構成するすべてのモジュールをビルドしますが、たとえばaws-cdk-libモジュールだけビルドする場合は、--scope=aws-cdk-libオプションを指定することで、ビルドするスコープを絞ることができます。

また、今回は並列実行数の上限を4に設定しています。これは実行環境に応じて適宜変更してください。

デフォルトのビルドでは一度ビルドしたものはキャッシュされ、次回ビルド時はそのキャッシュを使用します。しかし、このキャッシュにより思わぬビルドエラーになることも稀にあるため、その際は--skip-nx-cacheというオプションを指定することで、キャッシュを使わずにビルドすることができます。

またビルドの際、以下のようなエラーが起こることがあるため、その際はexport NODE_OPTIONS="--max-old-space-size=8192"のように使用するメモリサイズを増加させることでエラーを回避することができます。それを見越して、本ワークショップでは、あらかじめ EC2 で上記の環境変数の設定を行っています。

ERROR: Reached heap limit Allocation failed - JavaScript heap out of memory

その他ビルドに関する説明は、本家のコントリビュートガイドをご覧ください。

workshop-18

初回のフルビルドはとても時間がかかりますが、しばらく待ちましょう。

workshop-19

無事ビルドが完了し、L1 コンストラクトの import で出力されていたエラーも解消されました。

※フルビルドの際に以下の差分が発生していますが、これらは破棄してしまって構いません。

workshop-20

workshop-21

workshop-22

これで各ファイルを実際に変更する準備が整いました。

※各ファイルをダブルクリックすると、それぞれのファイルを新規タブで開けます。

  • ユニットテストファイル: packages/aws-cdk-lib/aws-sqs/test/sqs.test.ts

workshop-23

  • integration テストファイル: packages/@aws-cdk-testing/framework-integ/test/aws-sqs/test/integ.sqs.ts

workshop-24

※ブランチの作成・チェックアウト

以下のコマンドを実行して、プルリクエストのための任意の名前のブランチを作成します。git branchコマンドで作成したブランチが確認できます。

Terminal window
git switch -c workshop-guide-1
git branch