Google Cloud:コンソールで作成したリソースをTerraform importで取り込む

2023.04.03

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

今回の目的

コンソールで作成したリソースをTerraform管理下に反映させる事です。(tfstateファイルに反映させる)
他にもterraformのコマンドとして、mvやrm、list、showなどが存在します。
それぞれの説明は割愛しますが、terraformコマンドはどれも分かりやすいものが多くかつ量も少ないので、一度全てのコマンドを見てどのような操作ができるかイメージを掴むのも良いかもしれません。

また、今回はコンソールで作成したリソースをTerraformの管理下に置くという操作をしていきますが、 今回のようにまず一度コンソールでリソースを作成して、その後インポートされたディレクトリやファイルを見ることで、Terraformの構成を見るための学習にも有用に使えるなと思いました。

terraform importとは

コンソールなどのterraformの管理外で作成したリソースを、tfstateファイルで管理できるようにするための仕組みです。

terraform import リソースID.リソースの変数名 リソース名

上記のコマンドにより、Terraformの管理下にリソースを配置する事ができます。

手順

1.コンソールでリソースを作成
2.mainファイルに取り込みたいリソース内容を記述
3.terraform import リソースID.リソースの変数名 リソース名 を実行する

実際の手順については上記の通りです。
今回は1~3を順に解説していくわけではなく、初心者の私が分かりにくいな、と思った箇所を解説します。(おそらく上記の1~3を見ればやる事は大体わかるかと思います)

mainファイルに取り込みたいリソース内容を記述

実際にコンソールで作成したリソースには、リソースID.リソースの変数名がありません。
インポートするためには、先程のコマンドの実行が必要であり、terraform importコマンドを実行する前に一度、Terraformのmainファイルにインポートしたいリソースの状態を記述しておかなければなりません。

実際の例

では、ストレージバケットを例にしてみてみましょう。
コンソールで下記のHCLコードと同じストレージバケットを作成したとしましょう。

resource "google_storage_bucket" "sample" {

name = "my-bucket"

project = "sample-project"

location = "US"

force_destroy = true

}

こちらは公式ドキュメントから引っ張ってきたサンプルコードになりますが、"google_storage_bucket" "sample"が先程説明したリソースID.リソースの変数名にあたり、
name = "my-bucket"がそのリソースの名前となります。

そして、こちらのストレージをTerraformの管理下に置きたい場合には下記のコマンドを実行します。

terraform import google_storage_bucket.sample my-bucket

次にGCEのインポートを行います。
このGCEは実際に私がコンソールで作成 → Terraformへインポートした時のものです。

$ terraform import google_compute_instance.terraform-test-instance1 terraform-test-instance1

実際に経験したエラー

Error: Cannot determine region: set in this resource, or set provider-level 'region' or 'zone'.

→ このエラーメッセージはサブネットをインポートしようとした時に出ました。
サブネット内のコードにregionの指定がないか、provider “google”{ }内にregionの指定がない場合に出る模様です。
今回は、provider “google”{ }内にregionの指定を追加したら解決しました。

Error: Cannot determine zone: set in this resource, or set provider-level zone

→ このエラーメッセージはGCEをインポートしようとした時に出ました。
先程のサブネットインポート時のエラーと同じようなもので、GCE内のコードにzoneの指定がないか、provider “google”{ }内にzoneの指定がない場合に出る模様です。
今回は、provider “google”{ }内にzoneの指定を追加したら解決しました。

まとめ

今回はTerraform管理外のリソースを、tfstateファイル内にインポートする手順を見ていきました。
私自身やっとTerraformの全体像がわかってきて、実際に触っていく段階のレベルなので、説明に至らない箇所がありましたらご容赦ください。
やっていて感じたことは、HCLのコードだと基本文はTerraformの公式サイトからコピペする事が多くなりそうで、しっかりとパラメーターの確認を行わなければならないと思いました。(そもそも慣れればコピペなどしないのかな)

Google Cloudをある程度理解していないとTerraformで構成を作成するのも大変だなと感じております?(他クラウドも同様)

最後に

前職が元パーソナルトレーナーであったため、ダイエット情報や筋トレ情報を積極的に配信したいと思っています!!IT=脳=運動=体調管理⇒全ては繋がっています。

【筋肉がつかない理由②】

端的にいうと、毎回同じ刺激を継続させていることが多いです。
いくら筋トレを頑張っても、毎回同じ筋トレをしていると身体は慣れます。というよりかは、その筋トレに筋肉が適応していきます
この適応にはいろいろな意味がありますが、今回の題の観点から言うと、筋肉が筋トレの刺激に慣れることにより成長しなくなります。

逆に、筋肉が大きくなることも適応にあたりますが、その為には同じ刺激を与えないという工夫が大切になります。

業界的には、非線形のトレーニングといったりしますが、 それは、回数、種目、重さ、セット数、順番を毎回異なるように組むことを言います。

もし今、筋肉が付きにくくなったとか、筋トレの扱う重量が更新できない(ベンチ,スクワット...etc)という方がいましたら、ぜひ非線形のトレーニングを取り入れてみてください。