mazyu36の日記

某SIer所属のクラウドエンジニアのブログ

CDK コントリビュートデビューしてからの8ヶ月弱を振り返る

本記事は AWS CDK Advent Calendar 2024 の 24日目の記事です。

CDK コントリビュートを始めてから約8ヶ月経ちました。

年末ということもありこの機会に振り返ってみたいと思います(技術的な内容はほぼ無いです)。

目次

コントリビュート開始から現在までの時系列

ゴールデンウィークにコントリビュートを始める(2024/4/30)

GWまとまった時間が取れそうだったので、前からやってみようと思っていたコントリビュートにチャレンジしてみることにしました。

初コントリビュートした時の記事↓。

mazyu36.hatenablog.com

そうしたところどハマりして、日々コントリビュートするようになりました。

3ヶ月後に50コントリビュート(2024/7/30)

CDKコントリビュートにはマージされたPR数でバッジが付くゲーミング要素があります。以下の記事に記載がある通り、特にメリットがあるわけではなくお楽しみ要素ですね。

qiita.com

最上位は 50件以上マージの distinguished-contributor で、こちらは約3ヶ月ほどで達成しました。

4ヶ月~5ヶ月後に Top Contributor & Community Reviewer 認定(2024/9)

9月に入ったあたりで Top Contributor とレビュアーの認定をいただきました。レビュアーの方は目標にしていたのと、貢献できる方法が増えたので嬉しかったですね(もっとレビュー頑張らねば...)

6ヶ月後に100コントリビュート(2024/11/1)

約半年で100コントリビュートになりました。

執筆時点(2024/12/24)

記事執筆時点では全体で20番目のコントリビュート数でした。

過去1年間で人間界では一番コントリビュートしていたようです。

PRを集計してみる

さまざまな軸で起票したPRを集計してみたいと思います。執筆時点では未マージのPRも含んでいます。

月ごとの集計

月 カウント
2024-05 31
2024-06 25
2024-07 11
2024-08 11
2024-09 19
2024-10 12
2024-11 10
2024-12 13
合計 132

どハマりしたためか最初の2ヶ月はPR起票しまくってますね。

PRの種類ごとの集計

PRの種類 カウント
feat 66
chore 46
docs 10
fix 9
refactor 1
合計 132

ちょうど半分が feat(機能追加)でした。enum追加なども結構やっているため chore も多いです。

バグ修正は難易度が個人的にも難易度が高いと思っており、そこまでできていませんね。今後は増やしていきたい。

サービスごとの集計

サービス カウント
rds 19
bedrock 11
ec2 8
apprunner 7
location 7
stepfunctions-tasks 6
cognito 5
elasticloadbalancingv2 5
synthetics 5
opensearch 5
その他 4
ecs 3
glue 3
ivs 3
lambda 3
pipes-enrichments 3
codebuild 3
appsync 2
amplify 2
config 2
dynamodb 2
fsx 2
neptune 2
ses 2
events 2
custom-resource 1
docdb 1
appconfig 1
cloudfront 1
kinesis 1
kinesisanalytics-flink 1
kms 1
logs 1
pipelines 1
redshift 1
route53 1
scheduler 1
sns 1
stepfunctions 1
events-target 1
batch 1
合計 132

RDSはエンジンバージョンのenum追加、Bedrockは基盤モデルのenum追加、EC2はVPCエンドポイントのenum追加が多かったため上位に来ています。

feat(機能追加)が多かったのは、App Runner, Location, Step Functions, Cognito, ALB/NLB あたりです。この辺りはユーザーとして利用することが多かったのもあり、それが傾向として現れていますね。

印象に残っているPR

一番大変だったのは ALB の mTLS 対応でした。以下記事にも書いていますが、integ-test 走行で工夫が必要で苦労しました。 ただ使いたかった機能なので辛さは特になかったです。

mazyu36.hatenablog.com

難産だったのは以下の Step Functions で Bedrock の Invoke に Guardrail 対応を追加するPRです。Construct のデザインでメンテナーの方とのやりとりが続きレビューが長引きました。ただ最終的には良い形にまとまったのでやって良かったとは思います。

Step Functions は特に tasks の方は無限にコントリビュートチャンスがあるのですが、デザインが複雑で難易度が高めです。

github.com

最近のPRで印象に残っているのは AppSync Events のL2対応です。起票したところ並行して AppSyncチーム(中の方々)も実装していたらしく、声をかけてもらいお互いの実装を合わせる形で協力させてもらいました。

執筆時点では未マージのため、マージされたらまた別途記事にします(このL2をAdvent Calendarネタにしようと思っていましたが、マージが間に合わず...)

○元のPR github.com

○AppSyncチームに起票してもらったPR github.com

番外:open-constructs

新規L2作成としてコミュニティ駆動の Open Constructs にもチャレンジしました。

初手としてはやりやすそう、かつ少し触っていた Redshift Serverless をやってみました。

mazyu36.hatenablog.com

後は自分も欲しい、かつそこそこ需要がありそうな ElastiCache Serverless も実装しています。こちらは執筆時点では未マージのため、マージされたら別途記事にします。

github.com

CDKコントリビュートをやってみての変化

1. Construct や test の実装スキルが向上する

コントリビュートを通して以下について習熟することができ、CDKを利用するユーザー視点でもメリットがあると思います。

  • Construct のデザイン、実装方法(特にL2)
  • unit test の実装テクニック。test.eachで複数のテストをまとめる、バリデーションのテスト方法など。
  • integ testの実装方法

また内部実装がわかることでバグっぽい挙動をした時に、実装を調査できるようになったことも大きいです。

2. AWS サービスの仕様(API)の理解が進む

コントリビュートする際は、各サービスの仕様を踏まえた実装、制約を踏まえたバリデーションを行う必要があります。そのため対象サービスの仕様やAPIに関する理解が深まります。

そのため自分が全く使わない / 興味がないサービスだと苦しいかもしれません。 実装する上でドキュメントだけではよく分からず実際に動かしながら試す、デプロイでエラーになるため制約を確認してバリデーションを追加する、など試行錯誤をしながら進めることが多いので、モチベーションがあるサービスのコントリビュートにチャレンジするのが良いと思います。

3. AWS アップデートに敏感になる

コントリビュートネタ探しを目的に、以前よりも日々のAWS アップデートを追うようになりました。新機能のコントリビュートを行うとメリット2と合わせて仕様も把握することができて一石二鳥です。

ただし CFn のアップデートが追いついていないことも多いので、その場合は対応されるまで待つ必要があります。

今後どうする

コントリビュートに慣れてきたのもあり、小規模な機能追加等は卒なくこなせるようになってきました。そのため欲しい機能の実装をしつつ、今後は以下の比率を上げていきたいと思います。

1. Coreモジュールや CLIへのコントリビュート

今までのコントリビュートは全て aws-cdk-lib (各サービスのConstruct)であり、CDK自体のCoreの部分やCLIはまだ経験できていません。

更なるCDKスキル向上のためにこの辺りもチャレンジしていきたいと思います。

2. Community Review

PRのコミュニティレビューも今後は積極的にやっていきたいと思います。特に自分が手を出さないようなPRをレビューすることで、そこから得られることも多いと感じています。

※最近はコミュニティレビューが済んだものは、メンテナーレビューまでのリードタイムが短くなってきているため、コミュニティレビューの重要性が増してきているというのも理由としてはあります

3. 大きめの機能追加や新規L2にチャレンジ

欲しいと思いつつも実装量が多くて手を出せていない機能追加やL2追加があるのでやっていこうと思います。Open Constructsへのコントリビュートももっとやっていきたいですね。

おわりに

CDK自体はOSSの中でもコントリビュートしやすくハードルは低いと思います(私もCDKが初のOSSコントリビュート)。

興味がある方はぜひチャレンジしてみてください!