GCP入門: Terraformの状態管理 -Vol.5-

スポンサーリンク
GCP入門: Terraformの状態管理 -Vol.5- ノウハウ
GCP入門: Terraformの状態管理 -Vol.5-
この記事は約6分で読めます。
よっしー
よっしー

こんにちは。よっしーです(^^)

今日は、Terraformでの状態管理について解説しています。

スポンサーリンク

背景

下記の記事の続きになります。

実施内容

下記のコマンドを実行します。

docker run --name hashicorp-learn --detach --publish 8080:80 nginx:latest

git clone https://github.com/hashicorp/learn-terraform-import.git

cd learn-terraform-import

terraform import docker_container.web $(docker inspect -f {{.ID}} hashicorp-learn)

terraform show -no-color > docker.tf

terraform plan

警告やエラーが出力されるので、docker.tfファイルを下記の属性だけにします。

resource "docker_container" "web" {
    image = "sha256:xxx"
    name  = "hashicorp-learn"
    ports {
        external = 8080
        internal = 80
        ip       = "0.0.0.0"
        protocol = "tcp"
    }
}

下記のコマンドを実行します。

terraform plan

terraform apply

docker.tfファイルに下記のリソースを追加します。

resource "docker_image" "nginx" {
  name         = "nginx:latest"
}

下記のコマンドを実行します。

terraform apply

docker.tfファイルのdocker_container.webリソースで、image属性の値を書き換えます。

resource "docker_container" "web" {
    image = docker_image.nginx.image_id
    name  = "hashicorp-learn"
    ports {
        external = 8080
        internal = 80
        ip       = "0.0.0.0"
        protocol = "tcp"
    }
}

下記のコマンドを実行します。

terraform apply

docker.tfファイルのdocker_container.webリソースで、external属性の値を書き換えます。

resource "docker_container" "web" {
    image = docker_image.nginx.image_id
    name  = "hashicorp-learn"
    ports {
        external = 8081
        internal = 80
        ip       = "0.0.0.0"
        protocol = "tcp"
    }
}

下記のコマンドを実行します。

terraform apply

ブラウザで「http://localhost:8081/」にアクセスして、下図のような画面になれば成功です。

解説

terraform import docker_container.web $(docker inspect -f {{.ID}} hashicorp-learn)

このコマンドはTerraformとDockerに関連しています。一つずつ説明していきましょう。

  1. terraform import: これはTerraformのコマンドで、既存のインフラストラクチャリソースをTerraformの状態に取り込むために使用されます。
  2. docker_container.web: これはTerraformの設定ファイル内で定義されているリソース名です。ここでは、webという名前のDockerコンテナリソースを指しています。
  3. $(...): これはコマンド置換を行うシェルの構文です。括弧内のコマンドが実行され、その出力が親コマンドの引数として使用されます。
  4. docker inspect -f {{.ID}} hashicorp-learn: これはDockerのコマンドです。
  • docker inspect: 指定されたDockerオブジェクト(ここではコンテナ)の詳細情報を取得します。
  • -f {{.ID}}: 出力をフォーマットし、コンテナのIDのみを取得します。
  • hashicorp-learn: これは対象となるDockerコンテナの名前です。

このコマンド全体の意味は以下のとおりです:

hashicorp-learnという名前のDockerコンテナのIDを取得し、そのコンテナをTerraformの状態にdocker_container.webというリソース名でインポートする」

これにより、既存のDockerコンテナをTerraformの管理下に置くことができます。

terraform show -no-color > docker.tf

このコマンドは Terraform の状態を表示し、その出力を docker.tf ファイルに保存するものです。詳しく説明しましょう:

  1. terraform show: これは現在の Terraform の状態(state)を人間が読める形式で表示するコマンドです。このコマンドは、現在管理されているリソースの詳細な情報を出力します。
  2. -no-color: このオプションは、出力からANSIカラーコードを除去します。これにより、プレーンテキストの出力が得られます。
  3. > docker.tf: この部分はシェルのリダイレクト操作です。>は標準出力をファイルにリダイレクトします。ここでは、terraform showの出力を docker.tf というファイルに保存します。

このコマンドの目的は通常、以下のようなケースで使用されます:

  • 現在の Terraform の状態を HCL(HashiCorp Configuration Language)形式で取得し、それを新しい Terraform 設定ファイルの基礎として使用する。
  • 既存のインフラストラクチャの状態を Terraform の設定ファイルとして保存し、それを基に今後の管理や変更を行う。

ただし、このコマンドの出力をそのまま Terraform の設定ファイルとして使用する場合は注意が必要です。出力には現在の状態に関する情報が含まれていますが、それがそのまま理想的な設定ファイルになるとは限りません。多くの場合、手動での編集や調整が必要になるでしょう。

おわりに

今日は、Terraformでの状態管理について解説しました。

よっしー
よっしー

何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。

それでは、また明日お会いしましょう(^^)

コメント

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