プログラミング学習サイト

プログラミングの学習を開始される方を対象としたプログラミング入門サイトです。

Terraformリソースブロックについて

参考 : https://developer.hashicorp.com/terraform/language/resources/syntax

TerraformのResourceブロックについて

リソースブロックは、特定のタイプのリソースを宣言します。 各プロバイダタイプに応じて、サーバー、データベース、ロードバランサなどたくさんのリソースが存在しています。

Terraformでリソースを作成するときの文法は次のとおりです。

resource "<プロバイダ>_<タイプ>" "名前" {
    リソース設定
}

例えば次の例では、aws_instanceというリソースタイプでWebという名前でリソースを作成しています。 リソースの種類と名前は、特定のリソースの識別子として機能するため、モジュール内で一意でなければなりません。

resource "aws_instance" "web" {
    ami           = "ami-a1b2c3d4"
    instance_type = "t2.micro"
}
  • リソース名には次の規則があります。
    1. リソース名は、文字列またはアンダースコアで開始する必要があります。
    2. リソース名は文字、数字、アンダースコア、ダッシュのみが含まれています。

リソース宣言には、シングルなどのより高度な機能を含めることができます 複数の同様のリモートオブジェクトを生成するリソース宣言ですが、 初期使用には小さなサブセットが必要です。

Providers

プロバイダーは、Terraform標準のプラグインです。 各リソースタイプはプロバイダーによって実装されます。

プロバイダーは、単一のクラウドまたはオンプレミスを管理するためのTerraformリソースを提供します。 プロバイダーは、テラフォームとは別に分布していますが、Terraformは、初期化時にほとんどのプロバイダーを自動的にインストールしています。

ほとんどのプロバイダーは、プロバイダがリモートAPIにアクセスするためにある程度の条件(aws cliにアクセス可能など)が必要です。

Documentation for Resource Types

すべてのTerraformプロバイダーには独自のドキュメントがあり、そのリソースを説明しています タイプとその議論。

一部のプロバイダードキュメントは、Terraformのコアドキュメントの一部であり、 しかし、Terraformレジストリ 公開されているすべてのプロバイダードキュメントの主要なホームです。

Terraformでプロバイダーのページを表示するとき レジストリ、ヘッダーのドキュメントリンクをクリックして、その閲覧 ドキュメンテーション。ドキュメントはバージョンです。プロバイダーのドキュメントの別のバージョンを選択するには、プロバイダーのパン粉のバージョンをクリックして、ドロップダウンメニューからバージョンを選択します。

Meta-Arguments

Terraform言語は、次のメタアーグメントを定義します。 リソースの動作を変更するリソースタイプ:

  • 非表示の依存関係を指定するためのDepends_on
  • カウントに従って複数のリソースインスタンスを作成するためのカウント
  • for_each、マップに従って複数のインスタンスを作成するか、文字列のセット
  • 非デフォルトプロバイダー構成を選択するためのプロバイダー
  • ライフサイクル、ライフサイクルのカスタマイズ用
  • リソース作成後に余分なアクションをとるためのプロビジャー

TerraformでResourceを削除する

Terraformからリソースを削除するには、Terraform構成からリソースブロックを削除するだけです。 デフォルトでは、リソースブロックを削除した後、Terraformはそのリソースで管理されている実際のインフラストラクチャオブジェクトを破棄します。 このとき、コンソール画面から管理する実際のインフラストラクチャオブジェクトを破壊することなく、Terraform構成からリソースを削除することをお勧めします。(そうでないとTerraformコードと実際のAWSリソースの間に乖離が発生します。)

リソースがTerraform構成から削除したいが、その管理されたオブジェクトを破棄すべきではない時( ~terraformコードからはデータベースを削除したいが、データが消えては困る時~ ) には、構成からリソースブロックを削除し、削除されたブロックに置き換えます。

removed {
    from = aws_instance.example  
    lifecycle {    
        destroy = false  
    }
}

注:removedブロックは、Terraform v1.7以降で使用できます。

カスタムコンディションChecks

precondition条件分岐を使用することでリソースの動作について前提条件の保証が可能です。 次の条件ではcpuアーキテクチャx86_64であることを前提としたコードでpreconditionブロックでそれを保証しています。

resource "aws_instance" "example" {
    instance_type = "t2.micro"
    ami           = "ami-abc123"
    lifecycle {
        # The AMI ID must refer to an AMI that contains an operating system    
        # for the `x86_64` architecture.    
        precondition {      
            condition     = data.aws_ami.example.architecture == "x86_64"      
            error_message = "The selected AMI must be for the x86_64 architecture."    
        }
    }
}

Operation Timeouts

一部のリソースタイプは、特別なタイムアウトネストブロックの議論を提供します 特定の操作にかかる時間をカスタマイズできます 失敗したと見なされる前に。 たとえば、AWS_DB_INSTANCE 操作を作成、更新、削除するための構成可能なタイムアウトを可能にします。

タイムアウトは、リソースタイプの実装によって完全に処理されます プロバイダーですが、これらの機能を提供するリソースタイプは条約に従います ネストされた引数を持つタイムアウトと呼ばれる子ブロックを定義する 構成可能なタイムアウト値を持つ各操作にちなんで名付けられました。 これらの引数のそれぞれは、そのような期間の文字列表現を取得します 「60m」として60分間、10秒間「10秒」、または2時間「2H」として。

resource "aws_db_instance" "example" {  # ...  timeouts {    create = "60m"    delete = "2h"  }}

構成可能な操作のセットは、各リソースタイプによって選択されます。ほとんど リソースタイプは、タイムアウトブロックをまったくサポートしていません。に相談してください 各リソースタイプのドキュメントが提供する操作を確認する 構成用、ある場合。

https://developer.hashicorp.com/terraform/language/resources/syntax

page:https://minegishirei.hatenablog.com/entry/2024/06/06/133214