コンテンツにスキップ

フォークからビルドまで

リポジトリのフォーク

まずは、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 でコードを開けるようになりました。

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

ここでターミナルを開きます。

workshop-11

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

Terminal window
git checkout -b workshop-guide-1
git branch

workshop-12

workshop-13

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

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

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

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

※他のディレクトリでは、aws-cdkには CLI としてのコードなど、@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/aws-sqs/test/integ.sqs.ts

workshop-24