こんにちは。よっしーです(^^)
今日は、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に関連しています。一つずつ説明していきましょう。
terraform import
: これはTerraformのコマンドで、既存のインフラストラクチャリソースをTerraformの状態に取り込むために使用されます。docker_container.web
: これはTerraformの設定ファイル内で定義されているリソース名です。ここでは、web
という名前のDockerコンテナリソースを指しています。$(...)
: これはコマンド置換を行うシェルの構文です。括弧内のコマンドが実行され、その出力が親コマンドの引数として使用されます。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
ファイルに保存するものです。詳しく説明しましょう:
terraform show
: これは現在の Terraform の状態(state)を人間が読める形式で表示するコマンドです。このコマンドは、現在管理されているリソースの詳細な情報を出力します。-no-color
: このオプションは、出力からANSIカラーコードを除去します。これにより、プレーンテキストの出力が得られます。> docker.tf
: この部分はシェルのリダイレクト操作です。>
は標準出力をファイルにリダイレクトします。ここでは、terraform show
の出力をdocker.tf
というファイルに保存します。
このコマンドの目的は通常、以下のようなケースで使用されます:
- 現在の Terraform の状態を HCL(HashiCorp Configuration Language)形式で取得し、それを新しい Terraform 設定ファイルの基礎として使用する。
- 既存のインフラストラクチャの状態を Terraform の設定ファイルとして保存し、それを基に今後の管理や変更を行う。
ただし、このコマンドの出力をそのまま Terraform の設定ファイルとして使用する場合は注意が必要です。出力には現在の状態に関する情報が含まれていますが、それがそのまま理想的な設定ファイルになるとは限りません。多くの場合、手動での編集や調整が必要になるでしょう。
おわりに
今日は、Terraformでの状態管理について解説しました。
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント