Amazon CodeCatalystで作るAWS CDKコントリビュート環境のススメ

Amazon CodeCatalystの開発環境の変更方法と、CodeCatalyst上にAWS CDKのコントリビュート環境を構築する方法について解説します
2022.12.16

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは。CX事業本部Delivery部のきんじょーです。

先日のre:Inventで、Amazon CodeCatalystというAWSが開発ツール一式を提供する新サービスがリリースされました。 AWSが提供するクラウド上の開発環境はこれまでCloud9のみでしたが、CodeCatalystによってVS CodeやJetBrainsといった好きなエディターを使用できるクラウド上開発環境が提供されました。

そんな中、先日TwitterのタイムラインにCodeCatalystの開発環境でCDKの日々の開発環境を構築するという、気になるツイートが流れてきました。

この記事ではCodeCatalystの開発環境について調べつつ、上記ツイートを元に、実際にAWS CDKにコントリビュートする開発環境を構築していきます。 この記事は AWS CDK Advent Calendar 2022 16日目の記事です。

CodeCatalystの開発環境の構成について

CDKのコントリビュート環境を作成する前に、以下のドキュメントを元にCodeCatalystが提供する開発環境について確認します。

ディレクトリ構成

開発環境では/projects/homeディレクトリのみが永続化されます。 開発環境を作成する際、リポジトリを選択して環境を作成すると、指定したブランチのコードが/projectsに自動的にcloneされます。

構成管理ファイル「devfile」

CodeCatalyst上の開発環境の構成はdevfileというファイルで管理します。 devfileはAWS、IBM、JetBrains、Red Hatが開発する、コンテナ上の開発環境を定義する標準仕様のOSSです。

CodeCatalystは開発者に一貫した開発環境を提供すると謳っていましたが、開発環境をコンテナ化して構成をコード管理することで差分のない環境を提供する仕組みだったんですね。

ブループリントを元にプロジェクトを作成した場合、devfileは自動的にリポジトリに含まれています。devfileを含まないリポジトリや、リポジトリを選択せずに空の開発環境を作成した場合、ソースリポジトリ(/projects)に自動的に作成されています。

開発環境の構成の変更方法

開発環境の構成を変更するにはdevfileを編集する必要があります。 空のプロジェクト作成時に定義されているdevfileを見てみましょう。

schemaVersion: 2.0.0
metadata:
  name: aws-universal
  version: 1.0.1
  displayName: AWS Universal
  description: Stack with AWS Universal Tooling
  tags: ["aws", "al2"]
  projectType: "aws"
components:
  - name: aws-runtime
    container:
      image: public.ecr.aws/aws-mde/universal-image:latest
      mountSources: true
      volumeMounts:
        - name: docker-store
          path: /var/lib/docker
  - name: docker-store
    volume:
      size: 16Gi

public.ecr.aws/aws-mde/universal-image:latestというイメージをもとに、この開発環境は作成されているようです。(mdeはModern Dev Environmentの略ですかね)

devfileで定義可能なスキーマは、実行環境となるコンテナの設定(components)や、開発するプロジェクトのコードの在処(projects)、コンテナ環境で実行するコマンドを定義する(commands)や開発環境のライフサイクルに応じて定義したコマンドを実行する(events)など、さまざまな設定値が存在します。

CodeCatalystのデフォルトの開発環境ではdevfileのcommandseventsをサポートしています。

やってみた

それでは、早速開発環境を作っていきます。

スペースの作成

AWS Builders IDを使ってCodeCatalystにサインインします。Builders IDを持っていない場合はサインアップから新規にアカウントを作成してください。

スペース名と連携するAWSアカウントを入力し、「Verify in AWS」を押下します。

そうするとAWSのマネジメントコンソールが開きます。「Verify Space」を押下してCodeCatalyst側で作ったSpaceのトークンを検証します。

トークンの検証が完了したので、Pending space creationのステータスになっています。

CodeCatalystに戻ってスペースを作成します。

スペースが作成されました!

次はプロジェクトを作成していきます。

プロジェクトの作成

「Create Project」でプロジェクトを作成します。

スクラッチから作成を選択し、プロジェクト名を入力し、プロジェクトを作成します。

プロジェクトが作成されました!

開発環境の作成

好きなエディターで開発環境を作成していきます。

「Clone a repository」で選択できるリポジトリは、CodeCatalystで作成したリポジトリのみです。今回はGitHub上でforkしたAWS CDKのリポジトリを使用するので、空の開発環境から作成します。

今回はエディターにVS Codeを選択しています。VS CodeのAWS Tool Kitの拡張機能のインストールや、AWS Tool KitからAWS環境へのアクセス権限の付与を行い、VS CodeでCodeCatalystに構築された開発環境を開くことができました!
空のリポジトリで作成したので、/projects配下にdevfile.yamlのみが転がっています。

devfileを修正

devfile.yamlにCDKのリポジトリをcloneしてbuildするコマンドを追加します。 コンテナ起動時にこのコマンドを実行するように、eventsのpostStartに設定します。

schemaVersion: 2.0.0
metadata:
  name: aws-universal
  version: 1.0.1
  displayName: AWS Universal
  description: Stack with AWS Universal Tooling
  tags: ["aws", "al2"]
  projectType: "aws"
components:
  - name: aws-runtime
    container:
      image: public.ecr.aws/aws-mde/universal-image:latest
      mountSources: true
      volumeMounts:
        - name: docker-store
          path: /var/lib/docker
  - name: docker-store
    volume:
      size: 16Gi
commands:
  - id: clone
    exec:
      component: aws-runtime
      commandLine: "git clone https://github.com/joe-king-sh/aws-cdk.git  >> /home/mde-user/git-clone.log"
      workingDir: /projects
  - id: build
    exec:
      component: aws-runtime
      commandLine: "(yarn install && yarn build) >> /home/mde-user/cdk.yarn-build.log"
      workingDir: /projects/aws-cdk
events:
  postStart:
    - clone
    - build

変更を開発環境に反映

devfileを変更すると、上部に「Update Dev Environment」が現れるので、これを押下して変更を環境に適用できます。

CodeCatalystの設定から開発環境の「Restart」からでも、同じく反映可能です。

変更を反映すると、aws-cdkがcloneされてきて、ログをtailするとyarn installbuildが走っているのが分かります。 初回のフルビルドには1~2時間程度かかるので、開発環境が落ちないように気をつけながら完了するまで見守ります。

これでCDKにコントリビュートするための開発環境が完成しました?

簡単にクラウド上にCDKコントリビュート環境が立ち上がりました

これまでCDKのコントリビュートにはGitPodを使用していましたが、使い慣れたVS Codeを使えるクラウド上の開発環境が手に入ったので大満足です。

CodeCatalystの開発環境は60時間/月無料で使用できます。 是非この機会に、CodeCatalyst上にCDKの開発環境を構築して、いつどこからでもコントリビュートできる環境を手に入れてはいかがでしょうか?

以上。CX事業本部Delivery部のきんじょーでした。