
Amazon CodeCatalystで作るAWS CDKコントリビュート環境のススメ
この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
こんにちは。CX事業本部Delivery部のきんじょーです。
先日のre:Inventで、Amazon CodeCatalystというAWSが開発ツール一式を提供する新サービスがリリースされました。 AWSが提供するクラウド上の開発環境はこれまでCloud9のみでしたが、CodeCatalystによってVS CodeやJetBrainsといった好きなエディターを使用できるクラウド上開発環境が提供されました。
そんな中、先日TwitterのタイムラインにCodeCatalystの開発環境でCDKの日々の開発環境を構築するという、気になるツイートが流れてきました。
Using the CodeCatalyst IDE for daily CDK PR development is interesting! Just define custom commands in devfile.yaml and click `update dev environment`. Bingo! Now I have a fully managed remote VSCode dev env managed by AWS! pic.twitter.com/pEgxJXCOAG
— Pahud Hsieh (@pahudnet) December 2, 2022
この記事では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のcommandsとeventsをサポートしています。
やってみた
それでは、早速開発環境を作っていきます。
スペースの作成
AWS Builders IDを使ってCodeCatalystにサインインします。Builders IDを持っていない場合はサインアップから新規にアカウントを作成してください。

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

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

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

次はプロジェクトを作成していきます。
プロジェクトの作成
「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 installとbuildが走っているのが分かります。
初回のフルビルドには1~2時間程度かかるので、開発環境が落ちないように気をつけながら完了するまで見守ります。

これでCDKにコントリビュートするための開発環境が完成しました?
簡単にクラウド上にCDKコントリビュート環境が立ち上がりました
これまでCDKのコントリビュートにはGitPodを使用していましたが、使い慣れたVS Codeを使えるクラウド上の開発環境が手に入ったので大満足です。
CodeCatalystの開発環境は60時間/月無料で使用できます。 是非この機会に、CodeCatalyst上にCDKの開発環境を構築して、いつどこからでもコントリビュートできる環境を手に入れてはいかがでしょうか?
以上。CX事業本部Delivery部のきんじょーでした。












