ブログ

AWS 環境の Terraform コード化で実現! tfstate ファイルを活用した構成把握と管理法!

AWS 環境の構成を手軽に把握して運用したい!そんな時にコード管理ができたら便利ですよね?

本ブログでは、 Terraform を使用して AWS 環境の構築を行い、 tfstate ファイルを見て構成を把握する方法についてご紹介します。

 Terraform とは?

 Terraform とは HashiCorp 社が提供する、クラウド環境における Infrastructure as Code を実現するサービスです。
簡単に言い換えると、クラウド環境でのリソースの作成・管理をコード化してプロビジョニングできるサービスとなります。

利点は色々ありますが、重要ポイントとしてリソースの管理が簡単になるという点が挙げられます。

例えば、検証時に AWS アカウントにたくさんのリソースを作成したとして、どのリソースを作成したのか分からなくなってしまう時は無いでしょうか。その様な状況では全てのリソースを削除したと思っていても、実はリソースが削除しきれておらず課金が発生し続けてしまうなどのトラブルになり兼ねません。

そこで役に立つのがインフラ作成のコード化です。一度コード化してしまえば、簡単なコマンドを打つだけで AWS 上にリソースを作成でき、さらには漏れなく削除することが可能です。

また、 Terraform で作成したリソースの全体像は tfstate ファイルに自動で記載される仕様のため、リソース管理が簡単になります。それでは解説していきます。

 

AWS上にTerraformを実行する環境を用意しよう

まずは Terraform を実行する環境を用意します。 AWS アカウントへ AWS CLI を実行できる環境であれば問題ないので、今回は Cloud9 を使用して Terraform を実行できる環境を用意します。

 Cloud9 でインスタンスを作成後、作成したインスタンスにロールをアタッチしてリソース作成の権限を付与します。

※ 筆者は Administratoraccess 権限を付与しましたが、最小権限を適用することがベストプラクティスとなります。

※ Cloud9 の「 AWS managed temporary credentials 」を OFF にしておきます。

 Cloud9 インスタンスで Teraform を使えるようにします。
今回は tfenv と言われる Terraform のバージョン管理ツールを使用して Terraform をインストールしていきます。

以下のコマンドを実行して tfenv をインストールして、 PATH 設定を行います。

$ git clone https://github.com/tfutils/tfenv.git ~/.tfenv && echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bash_profile && source ~/.bash_profile

 tfenv を使用して Teraform をインストールしますが、その前に利用可能なバージョンを確認します。

$ tfenv list-remote

※ 利用可能な Terraform のバージョン一覧

基本的にはバージョン数字の横に文字列の入っていない最新バージョンのインストールを推奨しますが、今回は筆者の都合で、 1.5.7 をインストールします。

$ tfenv install 1.5.7

※ インストール完了画面

インストールしただけでは使用することが出来ず、以下コマンドで使用する Terraform バージョンを設定をします。

$ tfenv use 1.5.7

※ 設定完了の表示

 Terraform のインストール及び、バージョン選択が完了しました。

TerraformでAWSリソースを作成してみよう

それでは実際に Terraform でリソースを作成してみましょう。
今回はモジュールを利用して以下の構成を作成してみます。

リソース作成のための「モジュールファイル」と「呼び出しファイル」を用意しました。
「モジュールファイル」には再利用可能なコードを記載し、「呼び出しファイル」側で設定値を定義してリソースを作成します。

呼び出しファイルが配置されているディレクトリ配下で Terraform コマンドを実行していきます。
まずは「 terraform init 」を実行し、 Terraform を初期化します。

次に「 terraform plan 」を実行し、 tf ファイルの構文や依存関係に問題がないかを確認します。

ここまでで問題がなければ「 terraform apply 」コマンドを実行し、 Enter a value を「 yes 」としてエンターを押します。

以下はリソース作成中の画面です。

以下の画面で Terraform apply の実行が完了となり、実際にリソースが作成されている状況です。

 tfstate ファイルを見てみよう

リソース完了後、呼び出しファイル格納ディレクトリに「 terraform.tfstate 」というファイルが増えていることが確認できます。このファイルには terraform で作成したリソースの状況が事細かに示されています。

中身を全て見ると膨大になるため、一部を抜粋して簡単に解説します。

 version :  tfstate ファイルのフォーマットバージョン ※ この例ではフォーマットのバージョン4

 terraform_version :  使用されている Terraform のバージョン ※ この例ではバージョン1.5.7

 serial :  tfstate のリビジョン番号

 lineage :  一意の識別子で特定の Terraform 設定の tfstate のインスタンスをトラックするのに役立つ

リソース情報:

 resources :  このキーの下には、Terraformが管理するリソースの情報がリストとして格納される
※ この例では ec2_public_module モジュール内で定義された情報が記載されています。

 allocation_id :  EIP の ID

 association_id :  この EIP が関連付けられているリソースの ID

 domain :  この EIP が VPC 内で使用されることを示す

 public_dns および public_ip : この EIP の公開 DNS 名と IP アドレス

 instances キー以下は EC2 インスタンスを表します。
module.ec2_public_module モジュール内で定義されているものです。

 ami :  使用される Amazon Machine Image の ID

 availability_zone :  インスタンスが起動される Availability Zone

 instance_type :  インスタンスのタイプ(この場合、 t2.small )

 subnet_id :  このインスタンスが所属するサブネットの ID

 tag s:  インスタンスに付けられたタグ

 vpc_security_group_ids :  このインスタンスに関連付けられた VPC セキュリティグループの ID のリスト

 dependencies キーより下には、依存している他のリソースのリストが記載されています。

このように、 Teraform で作成したリソースとその詳細な値、さらには依存関係まで自動で記載されるため、 tfstate ファイルを見れば何を作成したかを漏れなく把握できるようになります。

TerraformでAWSリソースを削除してみよう

では Terraform で作成したリソースを漏れなく削除してみましょう。

コマンドは「 terraform destroy 」を使用します。
実行後に「 yes 」と入力したらリソースの削除が実行されます。

以下の表示が出たらリソース削除完了です。

 tfstate ファイルを見てみると中身が消えていることが分かります。
このようにリソースの状況に応じて自動的に反映してくれます。

漏れなく削除出来たかの確認や、対象リソースの正確な情報を得ることが出来ます。

TerraformによるAWS環境の構築と管理(まとめ)

本ブログでは tfstate ファイルについて触れて来ましたが、 Terraform を使いこなすことが出来れば、より便利に AWS を活用することができます。ぜひ皆様も使ってみてはいかがでしょうか。

元記事発行日: 2023年11月27日、最終更新日: 2023年12月01日