terraform-provider-awsへ初コントリビュートできた話

# はじめに
こんにちは！[Wano株式会社] (https://wano.co.jp/)の[nari](https://twitter.com/fukubaka0825)と申します。
こちらは、[terraform Advent Calendar 2019](https://qiita.com/advent-calendar/2019/terraform) 20日目の記事として書いております。

この記事では、先月 [terraform-jp](https://terraformjp.github.io/)の有識者の方々のおかげで、[terraform-provider-aws](https://github.com/terraform-providers/terraform-provider-aws)へ初コントリビュートすることができたので、**その際のプロセスとこれからコントリビュートしていきたい皆様へ一点注意事項を共有していきたい**と思います。

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">マージされました🎉<br>これでterraformコントリビュータ駆け出しになった！継続する <a href="https://t.co/CeD16v8KpZ">https://t.co/CeD16v8KpZ</a></p>&mdash; nari@BOOTHで好評発売中「GoとAWS CDKで作る本格SlackBot入門」 (@fukubaka0825) <a href="https://twitter.com/fukubaka0825/status/1195196887986343937?ref_src=twsrc%5Etfw">November 15, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

<img width="1113" alt="スクリーンショット 2019-12-20 01.21.39.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321850/8a24799f-e835-b77e-fc8d-e3eda4757bab.png">

今回の対象Issue: [fix to use keyvaluetags in aws_route53_resolver_endpoint and aws_rout… by fukubaka0825 · Pull Request #10842 · terraform-providers/terraform-provider-aws · GitHub](https://github.com/terraform-providers/terraform-provider-aws/pull/10842)

# 想定読者
- terraformやproviderにコントリビュートしたいが、何から始めたらいいかよくわからない方

# どうコントリビュートしたか
## 1. 環境構築/Terraform Source Code Reading会に参加
まず、常々おじゃましたいなと思っていた[Terraform Source Code Reading#3 - connpass](https://terraform-jp.connpass.com/event/150359/)というイベントに参加してみることにしました。
このイベントは[terraform-jp](https://terraformjp.github.io/)というterraformの日本語コミュニティ(Slackもとても活発)が2ヶ月置きに開催しているイベントに、 @kterada0509  や　@chaspy  などのファシリテーターを中心に[terraform本体](https://github.com/hashicorp/terraform)やproviderのソースやissueを読んで学んでいこうという会です。是非皆さん参加してみてください。(来月もあるっぽい、僕も参加します。)

その事前準備として、[Terraform職人入門: 日々の運用で学んだ知見を淡々とまとめる - Qiita](https://qiita.com/minamijoyo/items/1f57c62bed781ab8f4d7#terraform%E3%82%92%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%81%99%E3%82%8B%E6%8A%80%E8%A1%93)の「Terraformをデバッグする技術」の部分や、[Terraform/AWS Provider source code reading #1 - HackMD](https://hackmd.io/HeEmX_dPQAaEANhiH1lKQQ?view)と[Terraform Source Code Reading#2 - HackMD](https://hackmd.io/ltNuiK_KTEaxueiCLY7rMw)を参考にして、pull requestを出すときに必要になるテストやデバッグの環境を整えました。
また、@chaspy さんの[Terraform meetup tokyo#1 - connpass](https://terraform-jp.connpass.com/event/137865/)での発表資料 [How to contribute to terraform-provider-aws - Speaker Deck](https://speakerdeck.com/chaspy/how-to-contribute-to-terraform-provider-aws)を読んで、コントリビュートに必要な大まかなflowを頭に入れました。

当日は、環境構築で詰まっていたところ(なぜかterraform-provider-awsをgo installするとversion0.0.0になる問題)を解決したり、`first good issue`のタグのついたissueが全然ファーストにグッドじゃない、、ってなりながら色んなissueを眺めてできそうなものをちょいちょい挑戦していきましたが、少し時間がかかりそうなものばかりでした。

## 2. [terraform-jp](https://terraformjp.github.io/)のSlackチャンネルで本当の`first good issue`情報をキャッチ
[terraform-jp](https://terraformjp.github.io/)の#codereadingチャンネルに投げられていた以下の @kterada0509 氏のメッセージが言及しているissueが、マジにファーストに良いやつっぽいというのをissueを読んだりしながら感じ、これならいけそうということで着手し始めました。

<img width="663" alt="スクリーンショット 2019-12-20 08.35.19.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321850/98693e43-5ad1-1ca0-781f-dbeebaa9921a.png">

## 3. なんのためのissueなのかを確認し、やる気を出す
親issueである[Default tags for all resources · Issue #7926 · terraform-providers/terraform-provider-aws · GitHub](https://github.com/terraform-providers/terraform-provider-aws/issues/7926)を読んで、env=hogeみたいな環境指定のtagとかをdefaultで指定するために、必要なrefactorのissueであることを理解しました。それ欲しいやつやん！

>I would like to set default tags with the provider, that then automatically get applied to all AWS resources that support it.

## 4. 手順通り実装/Testし、pull requestを出す 
非常に細かく各ケースに対する要求する実装がissueに記載されていたので、リファクタするresourceを選択してその通り実装するだけっちゃだけでした。

<img width="632" alt="スクリーンショット 2019-12-20 08.48.57.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321850/afc058a3-217e-6882-701a-dcee2b6cca6e.png">
この中から、適当に僕は `aws/resource_aws_route53_resolver_endpoint.go`と`aws/resource_aws_route53_resolver_rule.go`ファイルを選択して、タスクに取り掛かりました。

以下のように、何でリソースをidentifyするかをとちって少し詰まってしまったりもしましたが、 @kterada0509 さんに質問に答えてもらったりしながら、無事testが通るところまで実装することができました。

⬇︎以下がその際のメッセージのやりとり(このように、気さくに質問に答えていただけました。感謝)
<img width="328" alt="スクリーンショット 2019-12-20 08.44.30.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321850/fccf7b5a-b482-ce93-520a-2d06e4102073.png">

<img width="315" alt="スクリーンショット 2019-12-20 08.41.25.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321850/5f672836-224e-f26b-45ea-bdfa8978f266.png">
そうして、2019/11/12に無事初aws providerへのプルリクを作ることができました。(リアクションがあったけえ)
<img width="553" alt="スクリーンショット 2019-12-20 08.44.00.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321850/476dcbfe-d064-6740-d408-6bd9a782e3a4.png">
## 5. 3日後無事マージされる
これもSlackに投げられたコメントで知りました笑 無事プルリクを出してから3日後の2019/11/15にマージされていることが確認できました。(added this to the v2.36.0 milestone on 15 Nov)
放置されているプルリクとかもあるようなのですが、このissueは詳細に書かれていてreviewerがレビューしやすかったんじゃないかなぁとか思っています。
<img width="647" alt="スクリーンショット 2019-12-20 08.46.02.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/321850/a6a470c5-a5eb-86c2-83c3-4acc9726b233.png">

# これを読み、コントリビュートしてみようという方に気をつけてほしいこと
どうコントリビュートしたかのStep4で、testを実行していたかと思うのですが、このterraform providerのtestは実際にリソースを作成したり削除したりするので、**途中でリソースが作りかけで放置される危険性**があります。

私のケースですと、テストが終わった後使用したアカウントを見てみたところ、リソースが作られたままになっていました。
今回扱ったRoute53 resolver endpoitは0.125$/hがENIごとに課金されます([料金 - Amazon Route 53 \| AWS](https://aws.amazon.com/jp/route53/pricing/))ので、放置され続けていたらと思うとゾッとします。。。。

ですのでテスト後**きちんと使用したAWSアカウントを確認して、無駄なテスト対象リソースが立っていないか確認する必要があります。**

# 最後に
少しテンションの下がる注意事項が挟まってしまいましたが、逆に言えばそこさえ注意していただければ、**すでに先人たちの素晴らしい資料&terraform-jpという素晴らしい日本コミュニティが存在するので、これを読んでいる万人がすぐにterraformコントリビュータになることができます**。**是非みんなでコントリビュートしてterraform界隈を盛り上げていきましょう！**

僕も継続してコントリビュートできるように頑張ります。また、 [terraform-jp](https://terraformjp.github.io/)コミュニティにはお世話になりっぱなしなので、登壇諸々で恩返しできるように頑張っていきたいです。

最後に、[terraform-jp](https://terraformjp.github.io/)の有識者の皆さん、本当にありがとうございました！ @kterada0509   @chaspy @minamijoyo @raki