case-kの備忘録

日々の備忘録です。データ分析とか基盤系に興味あります。

terraform-provider-awsにコントリビュートする方法:Issueの起票からコントリビュートまで

terraform-provider-awsにコントリビュートする機会があったので、その過程を備忘録として記録しておきたいと思います。コントリビュートした内容としてはEventBridgeへの強制削除オプションの追加です。EventBridgeを触っている時に見つけたもので、issueを起票してコントリビュートしました。terraform-provider-awsへのコントリビュートを考えている方の参考になれば幸いです。
github.com

Issueの見つけ方

仕様の違和感に気づく

TerraformでCI/CDを構築する際、デプロイしたEventBridgeを削除しようとしたところ、以下のエラーが発生しました。EventBridgeのターゲットが存在している場合、強制的に削除ができない仕様のようです。この制約は不便に感じたため、APIの仕様を確認しました。私の場合はこのような違和感が、コントリビュートのきっかけになることが多いように思います。

│ Error: deleting EventBridge Rule (): ValidationException: Rule can't be deleted since it has targets.
│       status code: 400, request id: <resource_id>

また、すでに多くのissueが起票されているので、もし興味のあるissueがあればここから探せます。

github.com

AWS API Referenceを確認する

APIで実装されていない機能はTerraformでも利用できないため、まずはEventBridgeのAPI仕様を確認します。今回はEventBridgeの強制削除がサポートされていることを確認しました。
docs.aws.amazon.com

Terraformのドキュメントを確認する

Terraformのドキュメントを確認し、EventBridgeにおける強制削除オプションがサポートされているか確認しました。今回はEventBridgeの強制削除オプションが未実装であることを確認しました。
github.com

Issueを起票する

Terraformで強制削除オプションがサポートされていないことを確認したため、Issueを起票しました。OSSによっては、Issueを作成する際に「Would you like to implement a fix?(修正を実装したいですか?)」という確認項目が含まれる場合があります。この場合、修正を自分で行いたい場合は、その旨を記載して意思を示します。

github.com

逆にそのような項目がないOSSに対してはテンプレートに項目を追加するのはどうか聞いてみるといいと思います。
過去に別のOSSで提案して、追加してもらいました。
github.com

コントリビュートする方法

Contributing Guideを確認する

READMEに記載されているContributing Guideを確認します。また、過去にマージされたPull Requestも参照し、コミュニティでの一般的なお作法や手順を把握します。確認すると、Pull Requestにはテストの実行結果を添付する必要があることが分かります。

hashicorp.github.io

Terraformのコードを確認してPRを作成する

リポジトリをフォークし、ブランチを切って、PRを作成します。この流れはどのOSSでもほとんど同じように思います。ブランチを切ったら、問題となる箇所を特定します。私の場合、まずは既存のテストコードを実行できるように環境を整備します。既存のテストコードを動かすと、処理の全体の流れが掴めます。修正すべき該当箇所が特定できるので、必要な修正を加えた後にPull Requestを作成します。

レビューしてもらう

Pull Request作成後はメンテナの反応を待ちます。個人的にはterraform-provider-awsは人手不足なのか少し反応が遅いように感じました。この辺はOSSによって随分違います。

まとめ

terraform-provider-awsにコントリビュートしするまでの大まかな流れを紹介しました。私の場合、実際に触ってみて違和感を感じた箇所やバグを修正する形でコントリビュートすることが多いです。GitHub上でIssueを確認したり、未解決の課題を探したりすると、さらに多くのコントリビュート機会ができると思います。現時点ではそこまで積極的にやれてないですが、今年はもう少し挑戦したいと思います。