こんにちは。よっしーです(^^)
今日は、Terraformの変数機能を使用したAWSリソースの構築についてご紹介します。
背景
前回までの記事ではTerraformを使ってAWS上のEC2インスタンスを作成し、更新と破棄をしました。
これで、役に立つ構成を作成するのに十分な Terraform の知識が得られましたが、これまでの例ではハードコーディングされた値が使用されていました。 Terraform には、構成をより動的かつ柔軟にするための変数を含めることができます。
この記事では、その変数についてご紹介しています。
事前準備
この記事は、前回の記事から継続していることを前提としています。前回の記事を参照していない方は、前回の記事を参照することをおすすめします。
AWSリソースの構成を変数で定義
variables.tfを用意
現在の設定には、ハードコードされた値が多数含まれています。Terraformの変数を使えば、柔軟で再利用しやすい設定を書くことができます。
インスタンス名を定義するための変数を追加します。
新しい変数instance_nameを定義するブロックがあるvariables.tfというファイルを新規作成します。
variable "instance_name" {
description = "Value of the Name tag for the EC2 instance"
type = string
default = "ExampleAppServerInstance"
}
main.tfの修正
main.tf で、新しい変数を使用するように aws_instance リソース ブロックを更新します。別の値を宣言しない限り、instance_name 変数ブロックはデフォルト値 (「ExampleAppServerInstance」) になります。
resource "aws_instance" "app_server" {
ami = "ami-04310c38b29b29953"
instance_type = "t2.micro"
tags = {
Name = var.instance_name
}
}
設定の適用
設定を適用します。確認プロンプトに「yes」で応答する。
cd learn-terraform-aws-instance
export AWS_ACCESS_KEY_ID=[Terraformを実行するIAMユーザーのアクセスキーを入力]
export AWS_SECRET_ACCESS_KEY=[Terraformを実行するIAMユーザーのシークレットキーを入力]
terraform init
terraform apply
次に、構成を再度適用します。今回は、-var フラグを使用して変数を渡すことにより、デフォルトのインスタンス名をオーバーライドします。 Terraform は、インスタンスの Name タグを新しい名前で更新します。確認プロンプトに「yes」と応答します。
terraform apply -var "instance_name=YetAnotherName"
コマンドラインから変数を設定しても、その値は保存されません。Terraformは変数の使用・設定方法を多数サポートしているので、コマンドを実行する際に何度も入力する必要がありません。詳しくは、下記の公式サイトで「Customize Terraform Configuration with Variables」をご覧ください。
使用方法の考察
Terraformのvariable
ブロックは、Terraformコード内で使用する変数を定義するために使用されます。variable
ブロックは、以下のような有用な使用法があります。
- パラメータ化されたインフラストラクチャの作成:
variable
ブロックを使用して、インフラストラクチャのパラメータ化を実現することができます。例えば、インスタンスタイプ、ストレージ容量、リージョンなどの値を変数として定義し、異なる環境や設定に応じて値を切り替えることができます。 - モジュールの再利用性: モジュールを作成する場合、
variable
ブロックを使用してモジュールの入力パラメータを定義できます。これにより、モジュールを再利用する際に異なる値を指定することができます。モジュールの使い回しを容易にするため、異なる環境やプロジェクトで同じモジュールを使用する場合に特に有用です。 - 環境ごとの設定: 異なる環境(開発、ステージング、本番など)ごとに変数を定義することができます。例えば、開発環境では小規模なリソースを使用し、本番環境では大規模なリソースを使用する場合、変数を使用して各環境に適した値を指定できます。
- 敏感な情報の保護:
variable
ブロックでは、センシティブな情報(APIキー、パスワードなど)を含む変数を定義することができます。変数はTerraformの状態ファイルには保存されますが、センシティブな情報は外部の変数ファイルや環境変数など、安全な方法で提供することができます。 - コードの可読性と保守性:
variable
ブロックを使用することで、コードの可読性と保守性を向上させることができます。変数の名前と説明を明示的に定義することで、コードの意図が明確になり、後でコードを理解したり変更したりする際に役立ちます。 - テストと検証:
variable
ブロックを使用して、Terraformコードのテストや検証を容易にすることができます。例えば、ユニットテストや統合テストのために異なる値を変数として定義し、コードの動作を検証することができます。 - インフラストラクチャの柔軟な管理:
variable
ブロックを使用することで、インフラストラクチャの構成を柔軟に管理することができます。異なる値を変数として定義し、Terraformのプランや適用時に値を指定することで、インフラストラクチャの構成を簡単に変更することができます。 - デフォルト値の指定:
variable
ブロックでは、変数にデフォルト値を指定することができます。デフォルト値を使用することで、変数の値が指定されていない場合や値が未定義の場合に、デフォルトの値を利用することができます。 - 変数間の相互依存関係:
variable
ブロックでは、複数の変数間に相互依存関係を定義することができます。これにより、一部の変数の値が変更されると、自動的に関連する変数の値も更新されるようになります。変数間の依存関係を明示的に定義することで、設定の整合性を保つことができます。 - ドキュメンテーション:
variable
ブロック内には、変数の説明やドキュメンテーションを記述することができます。これにより、変数の意味や使用方法を明確にすることができます。他の開発者やチームメンバーがコードを読んだり使用したりする際に、変数の目的と意図を理解しやすくなります。
これらは、Terraformのvariable
ブロックの有用な使用法の一部です。変数を活用することで、柔軟性、再利用性、可読性、保守性が向上し、より効果的なインフラストラクチャの管理が可能になります。
おわりに
今日は、Terraformを利用してAWSリソースの変数定義を実施しました。次回は、出力機能を確認したいと思います。
今回使用したTerraformのソースは下記のGitHubにあります。
何か質問や相談があれば、遠慮なくコメントしてください。また、エンジニア案件についても、いつでも相談にのっていますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント