広告

Terraform-Resourceブロックタイプ

GCP

Resources are the most important element in the Terraform language. Each resource block describes one or more infrastructure objects, such as virtual networks, compute instances, or higher-level components such as DNS records.

Resourcesブロックタイプ(Resource block type)はインフラのリソースを定義するために使用します。
terraformコマンドを使って、リソースを定義の通りに作成、更新、削除できます。

設定ファイル例

resource "google_compute_instance" "vm_instance" {
    name = "terraform-instance"
    machine_type = "f1-micro"

    boot_disk {
        initialize_params {
            image = "debian-cloud/debian-9"
        }
    }

    network_interface {
        # VPCの指定
        network = "default"
        access_config {
        }
    }
}

resource typeとresouce name

上記の例では、"google_compute_instance"の部分はresource type、"vm_instance"の部分はresource nameといいます。
resource typeとresource nameを一緒に使うことで、モジュール内で一意なリソースを定義できます。
※resource nameは自分で名づけますので、意味のある名前に変更することは可能です。
※一意なリソースの設定を修正してapplyすると、リソースが再作成するようになります。

The name is used to refer to this resource from elsewhere in the same Terraform module, but has no significance outside of the scope of a module.The resource type and name together serve as an identifier for a given resource and so must be unique within a module.

上記書いたように、resource nameはモジュール内の名前です。resource type + resource nameで、特定のリソースを指定できます。

リソースを指定する時は、以下のような書き方でできます

<resource type>.<resouce name>.self_link

terraformのstate

terraformでリソースを作成したら、リソースの定義がterraformのstateに保存されます。
stateに保存されたことで、管理対象となり、今後の更新、削除などが可能になります。

terraformのstateはterraform.tfstateファイルに保存しています。
※terraform.tfstateファイルはterraform apply実行時に、同じディレクトリに生成されます。

リソースの依存関係について

terraformがリソースを作成する時に、依存関係のないリソースは並行で作成されます。
ただ、依存関係のあるリソースは依存順番で作成されます。

設定ファイルの記載の順番は依存関係と関係なく、どんな順番で記述しても問題ありません。

例外

権限やポリシーの設定とその権限に基づく操作をする場合、この依存関係はterraformでは識別できません。
この場合。依存関係の設定を明示的に定義する必要がります。

depends_onをご参照ください。

terraformのmeta-arguments

terraformは特殊な処理ができるように、以下のmeta-argumentsが用意されています。
※詳細は今後に説明できればと思います。

  • depends_on:for specifying hidden dependencies
  • count:for creating multiple resource instances according to a count
  • for_each:to create multiple instances according to a map, or set of strings
  • provider:for selecting a non-default provider configuration
  • lifecycle:for lifecycle customizations
  • provisioner/connection:for taking extra actions after resource creation

詳細

terraformのlocal-onlyリソース

terraformはローカルにのみ存在するリソースを作成することが可能です。
例えば秘密鍵、個人TLS(SSL)証明書、ランダムなIDなどです。

これらのローカルのみのリソースは、terraformのstateに保存されます。
これらのリソースをdestroyする場合、ただのstateが保持しているデータを消すことになるだけです。

※ローカルにのみ保存されるので、どこまで活用できるかは要件によります。

*Operation Timeouts

リソース操作時に、操作のtimeoutの時間を指定できます。resourceブロックの内部ブロックで指定します。
操作が指定した時間を超えた場合、操作失敗と認識されます。

  • 操作は以下を含まれます:
    • 作成(create)
    • 更新(update)
    • 削除(delete)

*:多くのリソースタイプはtimeoutsをサポートしません。timeoutsを定義する前に、ドキュメントを確認してください。

resource "google_compute_instance" "vm_instance_test" {
  # ...

  timeouts {
    create = "60m"
    delete = "2h"
  }
}

最後に

今回はresourceブロックについて、簡単に説明しました。
resourceブロックは作成するリソースの設定を定義するブロックとなります。
ここまで読んでいただいて、お疲れ様でした。

コメント

タイトルとURLをコピーしました