第一次给Terraform Registry做贡献的故事
请用中文概括下列内容。只需要一个答案:
太长不看。
-
- Terraformにはユーザーが作ったmoduleを共有するTerraform Module Registryという仕組みがある
-
- 自前でmoduleを管理するよりもいろんな人が管理しているので便利
-
- terraform使ってる人はterraform使ってるので、contributeできる!
- 実際に行ったのは去年の年末なので、少し前ですが実際にContributeした際のこと書きます。
Terraform 注册表
-
- https://registry.terraform.io/
- Terraformが公式で出している他の人が作っているTerraform moduleを公開・共有できる仕組み(これ書いて気づいたんですが、いつの間にか名前が Terraform Module Registry から Terraform Registry にいつの間に名前が変わっている?)
已經公開的模組(舉例)
Terraformを扱うときに一つだけのresourceを扱うことは少ないと思います。
例えばVPCを扱うときにVPC,subnet,route table,internet gateway,security group,vpc endpoint etc…
そのときにTerraform Registryで公開されているmoduleを利用して、欲しいresourceがまとまっているmoduleを利用すると非常に便利!
搜索需要的模块
-
- 欲しいmoduleを探すのは簡単で検索欄にkeywordを入力すると、登録されているmoduleの一覧を見ることが出来ます。
-
- Verifiedにチェックを入れると、HashiCorpの人がreviewやmaintenanceをしている認定されたものだけが表示されます。
https://www.terraform.io/docs/registry/modules/verified.html
Terraform-eks-模块
-
- https://registry.terraform.io/modules/terraform-aws-modules/eks/aws/
- Terraformでeksのclusterを建てることができるmoduleの一つです。EKSはkubernetesのcontrol planeをmanagedで建ててくれるもので実際にclusterとして利用する場合は、EC2を別途建てたり(これ書いている中でFargate for EKSもされましたが)、security groupやIAM Roleの作成などが必要になります。これらのresourceをまとめてくれるものです。
来源
请以中文自然语言排列以下内容,只需提供一种选项:
- Registoryがどこで管理されているかは、ページのsourceの部分にlinkがあります。今回の場合はhttps://github.com/terraform-aws-modules/terraform-aws-eksです。
问题
-
- 私が実際に出したPRは(https://github.com/terraform-aws-modules/terraform-aws-eks/pull/228) でmoduleにoutputにkubeconfigファイルを書き出さないようにするというオプションを追加したものなのですが、PRを出す前にIssueを確認しました。その結果、修正を出そうとしていた内容のIssueが2つあったので、PRには添付しています。(htts://github.com/terraform-aws-modules/terraform-aws-eks/issues/169,htts://github.com/terraform-aws-modules/terraform-aws-eks/issues/170)
- 自分が欲しい機能以外にもまずはIssueを眺めて、自分でも修正できそうなやつを見つけてContributeするのも良いかもしれません。
修改
-
- repositoryをforkしてコードを修正します。ここらへんは普通のGithubの利用と同じなので割愛。
- 参照するmoduleを変更する方法はいくつかあると思うのですが、私の場合はinitした後のeks moduleを呼んでいる箇所をシンボリックリンクにして、forkしたrepositoryを向くようにして変更していました。
terraform-docs-以纯中文原生语言解读
-
- Terraform RegistryはGithubのREADME.mdの部分がRegistryの部分の説明文になります。
-
- 全てのmoduleがそうというわけではありませんが、多くのmoduleでterraform-docsを使って、inputとoutputの表を作成していることが多いので、terraform-docs(https://github.com/segmentio/terraform-docs)を使って、output,inputが増えた場合は更新します。
多くのprojectはpre-commit(https://pre-commit.com/)を使って、terraform-docsやlint,fmtの設定がされていることがあるので、その場合はpre-commit frameworkを導入してあげると更新忘れが少ないので便利です。(逆にいえば入ってなかったらPRチャンス!)
https://github.com/terraform-aws-modules/terraform-aws-eks/blob/master/.pre-commit-config.yaml#L5
terraform-docsの細かい使い方は別記事(https://qiita.com/yutachaos/items/1a7f5a93ceaf972c76c6) に書きました。
以下是一个用中文对其进行本地化改写的选项:
公共关系
-
- 修正ができたらPRを出します。
-
- terraform-eks-moduleの場合はテンプレートがあったのでテンプレートに合わせて埋めていきました。
-
- “`
- # PR o’clock
描述
请解释您在这里所做的改变,并链接到任何相关的问题。
核对清单
Change added to CHANGELOG.md. All changes must be added and breaking changes and highlighted
CI tests are passing
README.md has been updated after any changes to variables and outputs. See https://github.com/terraform-aws-modules/terraform-aws-eks/#doc-generation
“`
– Description
– コードの修正内容や意図を書きます。すでにIssueなどを立てている場合はここに入れるのもありです。
– Checklist
– registoryにあったりなかったりだと思いますが、今回の場合はCHANGELOG.mdに変更点を記載、CIが通ったか、前述のterraform-docsでREADME.mdを更新したかがchecklistのようです。
合并
- PRに出すとCommentなどがされることがあると思うので対応していきます。対応が全て終わったらmergeされます。
发布
- 通常のOSSと同じようにmasterにmergeされた分はいくつかの単位にまとめられてreleaseがされます。relesaseされたmoduleはterraform moduleのversionで指定して使うことができるようになります!
module "eks" {
source = "terraform-aws-modules/eks/aws"
version = "6.0.2"
# insert the 4 required variables here
}
最后
- 複数のresourceをmodule機能を使って、自前でまとめてあげることがよくあると思いますが、最初は良かったけど、段々、追加したい機能やversionが上がったときの差分の考慮など、自前でmoduleを管理すると大変になっていきます。そのようなときにTerraform Registoryで自分が実現したい機能がある場合は非常に便利です。erraform自体も非常に変化が早いOSSなので、自分たちで追随していくよりも多くの人が扱っているmoduleを使った方がメンテナンスコストを避けられる面もあります。何よりTerraform Providerを書くにはGolangの知識が必要になりますが、Terraform moduleが必要になる人は基本的にTerraformのresourceを扱っているので、これらのOSSよりも参加する敷居が(個人的には)低いかなーと思いますので、ぜひ皆でterraformをよくしていきましょう!