BETA

Terraform Cloud に寄せようとしてみてわかったこと

投稿日:2020-03-20
最終更新:2020-03-22

とあるコミュニティで 問いかけがあったのを契機に Terraform Cloud を軽く使ってみました。
ちょっとではありますがわかったことを共有します。

やったこと

ド小規模ながら自分が Terraform で管理している各クラウドリソースを、Terraform Cloud のUI上で Queue plan まで通るようにする。
apply は、怖いので絶対にしないでおく。今後新規に作るリソースを Terraform Cloud で運用できそう、というのを掴むところまで。

プロセスとしては以下のような感じです

  1. サインイン(サインアップは以前やっていたみたい)
  2. Organization 作成
  3. Workspace作成
    • この過程で、VCS(自分の場合、GitLab.com と)連携設定
    • Advanced options は以下の調整
      • Terraform Working Directory
        • ローカルで terraform コマンドを実行していた時のディレクトリ相対パスを指定
        • これを指定したら、Automatic Run Triggering が自然に Only trigger runs when files in specified paths change になった
  4. Variables 設定
    • terraform.tfvars に設定していたパラメータをローカルで保持していたファイルからコピー&ペースト
  5. Settings
    • ふと気が付いて、Notifications でSlack通知を設定
  6. Queue plan してみる
    • Errorが出たらコードを調整・Variables を見直すなどしてリトライ

plan までできたリソース(provider)

azurerm

  • provider : version 2.1 , backend (Azure Storage) [^1]
  • azurerm_resource_group
  • azurerm_dns_zone , azurerm_dns_txt_record , azurerm_dns_mx_record

aws

  • provider : version 2.54 , backend (s3)
  • aws_route53_record

google

  • provider : version 3.4 , backend (gcs)
  • google_dns_managed_zone , google_dns_record_set
  • google_compute_network , google_compute_subnetwork
  • google_compute_firewall
  • google_compute_project_metadata_item [^2] , google_compute_instance

わかったこと

主要であろう3パブリッククラウドで Terraform の SaaS に寄せることができるであろうというのがだいたいわかりました。
tfvars の共有方法の1つとしてアリではないかと思いました。無料枠には人数の上限ありますが。

azurerm

リソースも少なかったし、すんなり plan 成功した。気づいたのは2点。

aws

一発ですんなり plan できたので特筆できる事項はないです。
さすがに情報が他のパブリッククラウドに比べて多いと感じました。

google

GCPのクレデンシャルをファイルで認識させていた点と、メタデータに設定する ssh_keys で利用していたヒアドキュメントの部分を変数化する点で苦戦しました。

  • Terraform Cloud では file は使えないので、クレデンシャルをどう渡せばいいのか、難儀しました。

    • type = map(object({ project_id = string .....} )) のような頑張った定義を書いたりしましたが、無駄でした。
    • 正解は、こんな感じ。
        variable "credentials" {  
          type = string  
          default = ""  
        }  
      こうしたうえで、terraform.tfvars にクレデンシャルの json を1行にして書くという・・・
      • さらに、 "(ダブルクオート) をエスケープしないとダメ、
      • 途中にある改行文字 \n もエスケープしないとダメ、という・・・
    • 普段使いの IntelliJ IDEA でなく、UIが日本語化されてる Visual Studio Code で折り返しの切り替えと置換を駆使してローカルで terraform plan が成功するようにできたので突破かなと判断。
    • おまけに、Terraform Cloud ではそうやって頑張って有効化した文字列だとエラーになって、クレデンシャルのjsonをそのままコピペして Variables の Value に貼り付ければいいだけだったのにはよかったけど脱力。
  • ヒアドキュメントの部分を変数化するところで少しハマりました。

    • 一発目、末尾に改行を入れてなくてシンタックスエラーを喰らい
    • 普通に string を入れるのかな?と思ってヒアドキュメントでなくしたら変化が発生
    • ハマり事例 (後述 Appendix Qiita系の2番目の記事) を見つけて参考にして末尾に改行入れたら通りました

つぎにやること

ズバリ、apply までやるリソースを検討し、実行しようと思っています。
今のところ、とある事情で Azure が第一候補ですが、どこで何やるかまだ未定。

あしあと(スクリーンショット集)

Workspace の削除方法がまだわかってない都合などでいろいろ伏せてますが(ここをクリックすると展開)
  • Workspaces

  • Runs

  • Variables

  • Settings - Version Control

  • Settings - Notifications

  • Runs - plan - success

  • Runs - plan - fail

Appendix

参照した情報たち。先人に感謝。

HashiCorp 系

Qiita 系

その他

Footnotes

[^1]: Azure 管理画面(何て言うんだろ...)のアクティビティログに List Storage Account Keys の操作をしたことが表示されたので、Terraform Cloud から「さわった」のだと判断。
[^2]: 深く確認していないので、Azure Storage側に書き込みができるように設定したらできるのかも。
[^3]: ヒアドキュメントをつかってたところです。

技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@sogaoh's founds in personal activity

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう