たくあんポリポリ

勉強したことを載せていきます。最近、技術系の記事はZennに書いています。(https://zenn.dev/chittai)

【Terraform】【GCP】VMインスタンス作成時に発生したエラーについてメモ

terraformでVMインスタンスを作成使用とした時に何箇所かエラーではまったポイントがあるので、メモを残しておきます。

c-taquna.hatenablog.com

tfvarsで定義してもvariableでの定義が必要

変数は*.tfvarsに定義することができます。これは、実行時にファイルを指定する必要があるので接続先情報などを入れて環境別で作成したりするといいかもしれません。ただ、ここに変数を書いただけでは使用できないため、 variablesで別途定義する必要があります。ただ、例外はあり、terraform.tfvarsで定義すると指定しなくても読み込んでくれます

resource のには変数は使えない

resource ブロックで、"gcp-instance-1" に該当する部分を変数で記述したらエラーになったので修正しました。ここを変更しても作成されるVMインスタンスの名前はnameで指定したものになるので問題ありません。

resource "google_compute_instance" "gcp-instance-1" {
}
Error: Error asking for user input: Error parsing address 'google_compute_instance.${var.gcp_instance_1}': invalid resource address "google_compute_instance.${var.gcp_instance_1}"

projectにはprojectIDを指定する

provider 情報のブロックにprojectの項目があります。これは、プロジェクト名ではなくプロジェクトIDを記載する項目になります。GCPの画面上部にあるプロジェクト選択画面から確認できます。
f:id:c_taquna:20190420205043p:plain

Errorメッセージ

* google_compute_instance.gcp-instance-1: Error loading zone 'asia-northeast1-x': googleapi: Error 400: Invalid value '<ProjectName>'. Values must match the following regular expression: '(?:(?:[-a-z0-9]{1,63}\.)*(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?):)?(?:[0-9]{1,19}|(?:[a-z0-9](?:[-a-z0-9]{0,61}[a-z0-9])?))', invalidParameter

インスタンスの名前は小文字

VMインスタンスの名前は小文字で指定してください。

* google_compute_instance.gcp-instance-1: Error creating instance: googleapi: Error 400: Invalid value for field 'resource.name': 'AnsibleServer'. Must be a match of regex '(?:[a-z](?:[-a-z0-9]{0,61}[a-z0-9])?)', invalid