こんにちは。よっしーです(^^)
今日は、Terraformを使用して構築したDockerコンテナの情報を取得する方法についてご紹介します。
背景
これまで、Terraform を使用してマシン上で Docker コンテナを作成、更新および破棄をしました。また、前回の記事では、variableを使用して Terraform 構成をパラメーター化しました。
この記事では、outputブロックを使用してデータを整理し、Terraform ユーザーに簡単なコマンドで表示できるようにします。
Terraformのインストール記事に関しては、下記をご覧ください。
Terraformでoutputブロックを使用する
Terraformを利用してDockerでNGINX サーバーをプロビジョニングしました。
前回の復習
Terraformを利用してDockerでNGINX サーバーをプロビジョニングした手順は下記になります。
# 作業ディレクトリの作成
mkdir learn-terraform-docker-container
# 作業ディレクトリの移動
cd learn-terraform-docker-container
# tf用のファイルを作成
vi main.tf
vi variables.tf
# 初期化
terraform init
# Dokcerコンテナ起動 : localhost:8000 でnginxが起動していることを確認
terraform apply
main.tfの内容は下記になります。
terraform {
required_providers {
docker = {
source = "kreuzwerker/docker"
version = "~> 3.0.1"
}
}
}
provider "docker" {}
resource "docker_image" "nginx" {
name = "nginx"
keep_locally = false
}
resource "docker_container" "nginx" {
image = docker_image.nginx.image_id
name = var.container_name
ports {
internal = 80
external = 8000
}
}
variables.tf の内容は下記になります。
variable "container_name" {
description = "Value of the name for the Docker container"
type = string
default = "ExampleNginxContainer"
}
出力
outputs.tf というファイルを作成します。 以下の内容を outputs.tf に追加して、コンテナーの ID とイメージ ID の出力を定義します。
output "container_id" {
description = "ID of the Docker container"
value = docker_container.nginx.id
}
output "image_id" {
description = "ID of the Docker image"
value = docker_image.nginx.id
}
これらの出力値を使用する前に、この構成を適用する必要があります。今すぐ設定を適用してください。確認プロンプトに yes で応答します。
terraform apply
構成を適用すると、Terraform によって出力値が画面に出力されます。
Changes to Outputs:
+ container_id = (known after apply)
+ image_id = "sha256:6405d9b26fafcc65baf6cbacd0211bd624632da10d18cae7dc42220a00eb7655nginx"
terraform output コマンドを使用して構築された情報を出力します。
terraform output
Terraform outputを使用して、Terraform プロジェクトをインフラストラクチャの他の部分、または他の Terraform プロジェクトに接続できます。詳細については、下記の公式サイトに従ってください。
解説
output ブロック
Terraformのoutputブロックは、Terraformの実行後に表示される値を定義するために使用されます。 outputブロックを使用すると、Terraform applyコマンドの実行後に、値を表示することができます。
outputブロックの構文は以下のようになります。
output "name" {
value = "value"
}
この例では、”name”という名前のoutputが定義され、その値は”value”に設定されています。valueには文字列、数値、真偽値、オブジェクト、リストなど、任意のTerraformの式を指定することができます。
たとえば、AWSのEC2インスタンスのパブリックIPアドレスを出力するoutputブロックは以下のようになります。
output "public_ip" {
value = aws_instance.example.public_ip
}
このoutputブロックでは、”public_ip”という名前のoutputが定義され、aws_instance.example.public_ipの値が設定されています。これにより、Terraform applyコマンドを実行した後に、作成されたEC2インスタンスのパブリックIPアドレスを取得することができます。
outputブロックは、Terraformのコードをより見やすく、メンテナンス性を高めることができます。また、Terraformのapplyコマンドを実行した後に、出力を取得することができるため、デプロイされたリソースにアクセスするための情報を提供するのに役立ちます。
Terraform outputコマンドを使用することで、outputブロックで定義したすべてのoutputの値を表示することができます。また、特定のoutputだけを表示することもできます。
terraform output
Terraform outputコマンドは、Terraformが管理するリソースの状態や値を表示するために使用されます。Terraform applyコマンドを実行すると、Terraformは変更を適用し、状態ファイルを更新します。この状態ファイルには、リソースの詳細な情報が含まれています。
Terraform outputコマンドを使用することで、この状態ファイルから特定の情報を抽出して、構築されたインフラストラクチャの状態を確認することができます。たとえば、以下のような構文を使用して、Terraformのoutputを定義することができます。
output "output_name" {
value = value_to_output
}
output_nameは出力名を指定し、value_to_outputは出力する値を指定します。value_to_outputには、文字列、数値、真偽値、オブジェクト、リストなどを含めることができます。
たとえば、以下のようにEC2インスタンスのパブリックIPアドレスをTerraform outputとして定義することができます。
output "public_ip" {
value = aws_instance.example.public_ip
}
この場合、”public_ip”という名前のoutputが定義され、aws_instance.example.public_ipという値が設定されます。このoutputを参照することで、Terraform applyコマンドを実行した後に、作成されたEC2インスタンスのパブリックIPアドレスを取得することができます。
Terraform outputコマンドを実行するには、Terraformファイルを適用した後に、以下のように実行します。
terraform output
このコマンドを実行することで、Terraform outputで定義したすべてのoutputの値が表示されます。また、output名を指定して、特定のoutputの値だけを表示することもできます。
terraform output public_ip
Terraform outputコマンドは、インフラストラクチャを構築した後に、その状態を確認するために非常に便利なコマンドです。
おわりに
今日は、Terraformを使用して構築したDockerコンテナの情報を取得する方法をご紹介しました。機会があれば、AWSでインフラ環境を構築する方法をご紹介しようと思います。
今回使用したTerraformのソースは下記のGitHubにあります。
何か質問や相談があれば、遠慮なくコメントしてください。また、エンジニア案件についても、いつでも相談にのっていますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント