LoginSignup
21
4

More than 1 year has passed since last update.

Terraform、後から来る辛みと処方箋🌶

Last updated at Posted at 2022-12-02

この記事は

株式会社 RetailAI X Advent Calendar 2022 の 3 日目の記事です。
Terraform + Config Controller を使って IaC を運用する話です。

ご存じの通り、Terraform は、環境構築の再現性という意味で、とても役立ちます。
一方で、tfstate を維持・管理していくのはとても手間がかかります。
運用を楽にしたい!
という願望からたどり着いた現在地について書いていきます。

なぜ Terraform がつらいのか🌶?

一番の辛みは、誰かが GUI で変更した場合、回収する(tfstate を同期させる)必要があるということです。
正しく回収しないと、、、conflict が発生し、最悪、Resource が削除される可能性があります。

そして、誰もが .tf を編集・適用できるわけではないため、GUI での変更は許容する必要があります。

これまでの運用の流れ

Advent Calendar_2022 (1).png

mission critical なシステムの場合、terraform apply なんて気軽にできません。
それでいて、復元は一刻を争います。
難易度が高杉です。

そこで、ぼくは、Config Connector について再考しました。

実は、Config Connector が発表された当時は、
「IaC のために、Cluster が必要なのかー、、Terraform で十分かな 🤔」
と思っていました。

なぜ Config Connector か 🙌?

tfstate ファイルの維持から解放されます。そして、plan / apply のループから解放されます。

  • Config Connector は、状態を宣言します。Status ファイルは、存在しません。
  • k8s の知識を活用できます。
    Config Connector では、k8s の namespace を Project や Folder として扱います。
    Multi Project を管理する場合は、Project が namespace として並びます。
    Project と GKE の位置関係が逆転しているような。個人的に面白いと思う構成です。

Config Connector の流れ

  1. Config Connector を有効にして Cluster を作成する。
    kubectl get ConfigConnectorContext -n config-control
    
  2. Manifest を作成する。
    vi tokyo-bucket.yaml
    
    apiVersion: storage.cnrm.cloud.google.com/v1beta1
    kind: StorageBucket
    metadata:
      annotations:
        cnrm.cloud.google.com/force-destroy: "false"
      name: sanbox-danny
      namespace: config-control
    spec:
      location: asia-northeast1
    
  3. Apply する。
    kubectl apply -f tokyo-bucket.yaml
    

とても単純です。
また、Project 全体の状態を意識する必要がありません。
追加する Resource に集中できます。

また、これまで目をつぶってきた以下の課題を解決してくれます。
その課題は、Terraform Cloud の管理です。

  • Terraform Cloud( Free )の課題
    • User 数の制限
    • セキュリティ(認証)
    • Concurrency の制限

Config Connector にすることで、Terraform Cloud は不要になります。

 Terraform Cloud は、2019 年に Goole Cloud と Azure の Multi Cloud を検討したことをきっかけに利用開始しました。当時は、PoC と言う位置付けで、そのまま現在に至ります。

Config Connector の事例はある?

メルカリさんで事例が公開されています。
こちらは、おそらく、Managed ではありません。

終わりに

現在、Terraform への注目度は非常に高いです。
GitHub が発表した、この 1 年の GitHub の利用動向などをまとめた年次レポート「Octoverse 2022」をみるとわかる通り。
急増したプログラミング言語のトップは、Terraform などで使われる HCL だったそうです。
一方で、ぼくのような辛さを感じている人も少なくないと思います。
共感していただける人、別の解決方法を共有していただける人がいましたら、コメントいただけると嬉しいです。

明日 4 日目の記事は @wu_manning さんの「next.js初心者入門記事」です。お楽しみに!

21
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
21
4