はじめに
こんにちは![Wano株式会社] (https://wano.co.jp/)の[nari](https://twitter.com/fukubaka0825)と申します。
こちらは、terraform Advent Calendar 2019 20日目の記事として書いております。
この記事では、先月 terraform-jpの有識者の方々のおかげで、terraform-provider-awsへ初コントリビュートすることができたので、その際のプロセスとこれからコントリビュートしていきたい皆様へ一点注意事項を共有していきたいと思います。
マージされました🎉
— nari@BOOTHで好評発売中「GoとAWS CDKで作る本格SlackBot入門」 (@fukubaka0825) November 15, 2019
これでterraformコントリビュータ駆け出しになった!継続する https://t.co/CeD16v8KpZ
想定読者
- terraformやproviderにコントリビュートしたいが、何から始めたらいいかよくわからない方
どうコントリビュートしたか
1. 環境構築/Terraform Source Code Reading会に参加
まず、常々おじゃましたいなと思っていたTerraform Source Code Reading#3 - connpassというイベントに参加してみることにしました。
このイベントはterraform-jpというterraformの日本語コミュニティ(Slackもとても活発)が2ヶ月置きに開催しているイベントに、 @kterada0509 や @chaspy などのファシリテーターを中心にterraform本体やproviderのソースやissueを読んで学んでいこうという会です。是非皆さん参加してみてください。(来月もあるっぽい、僕も参加します。)
その事前準備として、Terraform職人入門: 日々の運用で学んだ知見を淡々とまとめる - Qiitaの「Terraformをデバッグする技術」の部分や、Terraform/AWS Provider source code reading #1 - HackMDとTerraform Source Code Reading#2 - HackMDを参考にして、pull requestを出すときに必要になるテストやデバッグの環境を整えました。
また、@chaspy さんのTerraform meetup tokyo#1 - connpassでの発表資料 How to contribute to terraform-provider-aws - Speaker Deckを読んで、コントリビュートに必要な大まかなflowを頭に入れました。
当日は、環境構築で詰まっていたところ(なぜかterraform-provider-awsをgo installするとversion0.0.0になる問題)を解決したり、first good issue
のタグのついたissueが全然ファーストにグッドじゃない、、ってなりながら色んなissueを眺めてできそうなものをちょいちょい挑戦していきましたが、少し時間がかかりそうなものばかりでした。
2. terraform-jpのSlackチャンネルで本当のfirst good issue
情報をキャッチ
terraform-jpの#codereadingチャンネルに投げられていた以下の @kterada0509 氏のメッセージが言及しているissueが、マジにファーストに良いやつっぽいというのをissueを読んだりしながら感じ、これならいけそうということで着手し始めました。
3. なんのためのissueなのかを確認し、やる気を出す
親issueであるDefault tags for all resources · Issue #7926 · terraform-providers/terraform-provider-aws · GitHubを読んで、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を選択してその通り実装するだけっちゃだけでした。
この中から、適当に僕は `aws/resource_aws_route53_resolver_endpoint.go`と`aws/resource_aws_route53_resolver_rule.go`ファイルを選択して、タスクに取り掛かりました。以下のように、何でリソースをidentifyするかをとちって少し詰まってしまったりもしましたが、 @kterada0509 さんに質問に答えてもらったりしながら、無事testが通るところまで実装することができました。
⬇︎以下がその際のメッセージのやりとり(このように、気さくに質問に答えていただけました。感謝)
これを読み、コントリビュートしてみようという方に気をつけてほしいこと
どうコントリビュートしたかのStep4で、testを実行していたかと思うのですが、このterraform providerのtestは実際にリソースを作成したり削除したりするので、途中でリソースが作りかけで放置される危険性があります。
私のケースですと、テストが終わった後使用したアカウントを見てみたところ、リソースが作られたままになっていました。
今回扱ったRoute53 resolver endpoitは0.125$/hがENIごとに課金されます(料金 - Amazon Route 53 | AWS)ので、放置され続けていたらと思うとゾッとします。。。。
ですのでテスト後きちんと使用したAWSアカウントを確認して、無駄なテスト対象リソースが立っていないか確認する必要があります。
最後に
少しテンションの下がる注意事項が挟まってしまいましたが、逆に言えばそこさえ注意していただければ、すでに先人たちの素晴らしい資料&terraform-jpという素晴らしい日本コミュニティが存在するので、これを読んでいる万人がすぐにterraformコントリビュータになることができます。是非みんなでコントリビュートしてterraform界隈を盛り上げていきましょう!
僕も継続してコントリビュートできるように頑張ります。また、 terraform-jpコミュニティにはお世話になりっぱなしなので、登壇諸々で恩返しできるように頑張っていきたいです。
最後に、terraform-jpの有識者の皆さん、本当にありがとうございました! @kterada0509 @chaspy @minamijoyo @raki