[レポート] AWS CDK Construct Libraryにコントリビューションする方法 OSS #reinvent

AWS CDKはクラウドアプリケーションをプログラミング言語で記載し, デプロイするOSSの開発フレームワークです.
AWS CDKの開発はオープンで, フレームワークは柔軟に扱えるためコントリビューティングを心待ちにしています.
このセッションではデザインパターンとAWS Construct Libraryの考慮点について話します.

  • タイトル: Contributing To The AWS Construct Library
  • スピーカー: Elic Hujibers 様, Lee Packham 様
  • セッションID: OPN205

About the AWS CDK

  • PythonやJavaScriptなどのプログラミング言語でインフラを記載できる
    • プログラミング言語で書かれたコードのため, メンテナンスがしやすい
    • エディタの自動補完が効くので書きやすい
  • セッションを受講した人の多くがすでにCDKを利用している

CDK and open source

  • 隠している秘密などは何もないオープンである
  • 誰でもコントリビューションできる
  • GitHub上に作成されたPull Requestを元に変更を加えていく
  • CDKについて
    • 19ヶ月前に公開
    • 1000を超えるIssue
    • 200を超えるコントリビュータ
    • コアメンテナは6人で構成
  • コントリビュータの中でも非常に貢献している方のうち, 1人が聴講者としてこのセッションにいました

How it Works

  • AWS CDKの動作がわかると, 開発もコントリビューションもしやすくなる
  • AWS CDKがCloudFormationテンプレートを作成して, それをもとにCloudFormationスタックを作成
  • CloudFormationのロールバックのような便利な機能がそのまま使える
  • CloudFormationの記述量が多いなど, 大変な部分はCDKがうまく解消してくれる

AWS CDK Constructor Library

  • 大きく分けると2種類ある
  • AWS CloudFormation Resources
    • CloudFormation Template Languageeの仕様を元に作成されるConcstruct Library
    • プレフィックスにCfnが付いた上で提供される
    • L1 Libraryと総称される
  • AWS Construct Library
    • L1を元に作成されるConstruct Library
    • L1より高級なライブラリなのでL2 Libraryとも呼ばれる
    • CDKを使用するユーザが実際に記述する必要があるライブラリ
    • AWS CloudFormation Resourcesに変換される

All Contributions are Welcome

  • 機能要望
    • 追加したい機能がなぜ必要か, ユースケースなどを書いて要望を出す
  • バグ報告
    • バグを発見した場合に報告を出す
  • バグ修正
    • バグを修正してPull Requestの作成
  • ドキュメント修正
    • タイポなどがあった場合は報告やPull Requestsで修正をする

example: DynamoDB Accelerator

  • 実際にDynamoDB Accelerator用のL2 Libraryをライブコーディングしていく
  • OSSへのコントリビュートをするのにまず, リポジトリなどにあるCONTRIBUTINGドキュメントを確認すると流れが把握できる
  • 実際に該当サービスを触って何が必要で, どのような動作をするかの確認をすると良い
    • DAXはVPCに作成され, セキュリティグループや, IAM ロールが必要になる
  • まずはAWSリソースが動作するかを確認する
    • DAZはVPC中で動作し, SGも必要
    • DAXはインメモリキャッシュで低レイテンシが必要になる
    • IAM Roleをアタッチする必要がある
    • DynamoDBにアクセスする必要があるため
  • CloudFormationの仕様確認をすると良い
    • CDKはCloudFormationテンプレートを作成するためどういった項目があるかや, 必要項目がわかる
  • L2 Libraryの作成
    • @aws-cdk/aws-daxlib配下にコードを追加していく
    • 今回はVPCやIAMへの操作が必要になるため, 依存関係をpackage.jsonに追加する
    • L2 Libraryの基本形は下記のようになっている
export interface XxxProps {}

export class Xxx extends Construct {
  constoructor(scope: Construct, id: string, props: XxxProps) {
    super(scope, id);
  }
}
  • ビルドの実行
    • CDKはモノリでかつ, ライブラリが膨大にあるため全てビルドすると大変
    • scripts/builddown を実行する事で現在変更を加えているモジュールのみビルドを実行する

Commit Message

  • 先頭行に何をしたかの概略を書いていく
    • プレフィックス, サービス, 概略の順番で書いていく
    • 今回の場合は「feat(dax) Add a Cluster L2 Constructor」のようなメッセージとなる
    • 動詞は現在形単数形で記載する
    • 機能追加の場合は3行目以降になぜ追加したかの理由などを書いていく

Pull Request

  • 機能がある程度の粒度になった段階でPull Requuestを作成して議論ができるようにする
  • 作成後にメンテナがコードの確認などをしていく

Conclusion

  • AWS CDKへのコントリビュートは誰でもできる
  • コントリビュートする際はCDKを利用するユーザのことを考慮すると良い
  • コントリビュートは非常に楽しく非常に良い経験となる
  • 誰かがコントリビュートを止めたりすることはない
  • あ誰でも貢献できる
  • 利用者のことを考えよう
  • 貢献は楽しいらしい
  • 誰かがやることを止めることはない
  • 誰もが詰まらないドキュメントは大事なのでしっかり作る
  • それが利用者にとって良い経験となる

さいごに

個人的に好きなOSSプロジェクトの話を直接聞けてかつ, 実際にどのようにコントリビュートするかの具体的な内容まで触れていて 非常に聞けて良かったと思っています.
今後何かがあったら私もコントリビュートしたいと思います.