Terraform

HOME > Terraform

Terraform:記事リスト

Terraformのカテゴリーには以下の記事がリストされています。

Terraformのdynamic blockでHCL設定を動的に生成する方法|繰り返し設定の簡潔化と実務パターン

「セキュリティグループのingressルールをTerraformで管理したいが、許可ポートの数だけブロックを静的にコピーしていたら100行を超えてしまった」
「EC2に追加するEBSボリュームの数を環境ごとに変えたいのに、resource{}自体をfor_eachで増やしても内部のブロックを制御できない」

Terraformを実務で使い始めると、ブロック単位での繰り返し設定という壁にぶつかります。resource{}全体をfor_eachで増やすことはできても、resource{}の内部にある特定のネストブロック(ingress・ebs_block_device・tags等)を動的に生成するには、別の構文が必要です。それがdynamic blockです。

この記事では、TerraformのHCLでネストブロックを動的に生成するdynamic blockの仕組みを解説します。基本構文から始め、iterator引数のカスタマイズ・セキュリティグループへの実務適用・for式との組み合わせ・よくあるエラーの切り分けまで、設計パターンとして体得できます。

実行環境:Terraform 1.8.x(RHEL 9.4 / Ubuntu 24.04 LTS で動作確認済み)

この記事のポイント

・dynamic blockはresource内のネストブロックをリストや集合から動的に生成するHCL構文
・for_each + content{} の組み合わせが基本形。iterator引数で参照名を変更できる
・セキュリティグループのingress・EBSボリューム追加が代表的な実務ユースケース
・for式をfor_each内で使うと、変数リストの変換・フィルタリングを1行で書ける

続きを読む "Terraformのdynamic blockでHCL設定を動的に生成する方法|繰り返し設定の簡潔化と実務パターン"

Terraformのplan・applyエラーを調査・解決する方法|TF_LOG・Stateロック・ドリフトを実践的に切り分ける

「terraform applyを実行したらエラーで止まった。でも何が原因か分からない」
Terraformを本番運用し始めると、こうした状況に必ず一度は直面します。エラーメッセージは英語で長く、どの行が本当の原因なのか見つけにくい。CI/CDに組み込んでいれば、パイプラインが突然止まって復旧に時間がかかることもあります。

この記事では、Terraformのplan・applyエラーを体系的に調査・解決するための実践手順を解説します。デバッグログ(TF_LOG)の活用、DynamoDBのStateロック解除、ドリフト検出とリカバリ、よくあるエラーパターンの切り分けまで、実際のコマンド出力を交えて説明します。

この記事のポイント

・TF_LOG=DEBUG 設定だけでAPIレベルのエラー原因を特定できる
・DynamoDB Stateロック詰まりはforce-unlockコマンドで安全に解除できる
・terraform plan -refresh-onlyでドリフト(コンソール手動変更)を検出できる
・planエラーの多くは「権限不足」「依存関係の循環」「プロバイダー設定ミス」の3パターンに分類できる

続きを読む "Terraformのplan・applyエラーを調査・解決する方法|TF_LOG・Stateロック・ドリフトを実践的に切り分ける"

Terraformのstate操作コマンド実践ガイド|state list・state mv・state rmで既存インフラを安全に管理する方法

「TerraformのHCLを整理してモジュール化しようとしたら、terraform planで大量のdestroy/createが出てしまった」
「既存のAWSリソースをTerraformの管理から外したいのに、誤ってdestroyされてしまわないか心配だ」
「チームメンバーが手動でEC2を増設してしまい、tfstateと実態がずれた。どうやって修正すればいい?」

Terraform運用を本格化するほど、こうした「stateをどう操作するか」という問題に必ずぶつかります。

この記事では、terraform stateサブコマンド(list・show・mv・rm)の使い方を実践形式で解説します。モジュール化に伴うリソース移動、管理対象からの除外、stateのバックアップとロールバック、よくある操作ミスの対処まで、現場で即使える手順を説明します。
実行環境:Terraform 1.8.x、AWS Provider 5.x

この記事のポイント

・terraform state listで管理中リソースのアドレス一覧を確認できる
・terraform state mvはdestroyなしでリソースを移動・リネームできる
・terraform state rmは実インフラを削除せず管理対象から外すだけ
・操作前のterraform state pullによるバックアップが安全運用の絶対条件

続きを読む "Terraformのstate操作コマンド実践ガイド|state list・state mv・state rmで既存インフラを安全に管理する方法"

GitHub ActionsでTerraformのCI/CDパイプラインを構築する方法|plan自動実行からapply承認フローまで

「Terraformのコードをレビューしているのに、実際のplan結果を誰も確認できていない」「本番へのapplyを誰でも実行できる状態になっていて、誤操作でインフラが壊れないか不安だ」

こういった課題は、Terraformを個人で使い始めた段階から、チームに広げようとした瞬間に一気に顕在化します。コードレビューはできても、そのコードを適用したらインフラがどう変わるのかをレビュアーが把握できていない、というのは非常に多い現場の悩みです。

この記事では、GitHub Actionsを使ってTerraformのCI/CDパイプラインを構築する方法を解説します。PRトリガーによるterraform plan自動実行とPRへの結果コメント投稿、GitHub Environmentsを使った本番applyの承認フロー、AWSへのOIDC認証設定まで、チーム開発で実際に使えるワークフロー設計の全体像をカバーします。

この記事のポイント

・PR作成時にterraform planを自動実行してレビュアーが差分を確認できる
・GitHub Environmentsで本番applyに承認フローを挟み誤操作を防ぐ
・OIDCを使いアクセスキー不要でAWSへ安全に認証する方法
・initの失敗・plan差分なし・OIDC認証エラーの典型的なトラブル対処法

続きを読む "GitHub ActionsでTerraformのCI/CDパイプラインを構築する方法|plan自動実行からapply承認フローまで"

Terraformのprovider設定とバージョン管理|required_providersとterraform.lock.hclでチーム開発を安定させる方法

「terraform initをチームで実行したら自分のPCでは動くのに同僚の環境では動かない」「先月まで動いていたTerraformコードが急に別のプロバイダーバージョンを要求してくる」
Terraformで複数人の開発や複数環境(dev・staging・prod)の管理を始めると、プロバイダーのバージョン管理のズレが原因でこうした問題が起きます。TerraformのAWSプロバイダーは本体とは独立して頻繁に更新されるため、バージョン指定を適切に設計していないと静かに環境差異が生まれます。

この記事では、required_providers ブロックによるバージョン制約の設計と、terraform.lock.hcl を使ったチーム全体での環境固定方法を解説します。バージョン制約演算子の使い分け・複数プロバイダーの設定・provider alias による複数リージョン構成と、よくあるエラーの対処法も合わせて説明します。

動作確認環境: RHEL 9.4 / Ubuntu 24.04 LTS + Terraform v1.9.x + hashicorp/aws v5.x

この記事のポイント

・required_providers でプロバイダーのsource・バージョン制約を必ず明示するのが基本
・~> 演算子でメジャーバージョンを固定しつつセキュリティパッチを自動取り込みできる
・terraform.lock.hcl は必ずGitにコミットしてチーム全体の環境を固定する
・provider alias で複数リージョン・クロスアカウント構成を1コードベースで扱える

続きを読む "Terraformのprovider設定とバージョン管理|required_providersとterraform.lock.hclでチーム開発を安定させる方法"

Terraformのlifecycleブロックで本番リソースを誤削除から守る方法|prevent_destroyとignore_changesの実践設計

「terraform destroyを間違えて本番環境に実行してしまった」「terraform applyでRDSが削除・再作成されてデータが消えた」
Terraformを使い始めたエンジニアやチームで本格運用を始めたばかりの現場では、こうした誤操作が実際に起きています。Terraformは「宣言した状態を実現する」ことに忠実すぎるがゆえに、意図しない削除や置換が発生しやすいツールでもあります。

この記事では、Terraformの lifecycle ブロックを使って本番リソースを守る方法を解説します。prevent_destroycreate_before_destroyignore_changes の3設定の意味と、RDS・ALBへの実践的な適用パターンを具体的なコード例と実行ログで説明します。

この記事のポイント

・prevent_destroy = true で誤ったdestroy/replace操作をエラーでブロックできる
・create_before_destroyでALB・セキュリティグループのゼロダウンタイム置換を実現する
・ignore_changesでコンソール手動変更によるドリフトを安全に吸収できる
・RDSにはDeletion Protectionとの二重防護でより確実に誤削除を防げる

続きを読む "Terraformのlifecycleブロックで本番リソースを誤削除から守る方法|prevent_destroyとignore_changesの実践設計"

TerraformのHCL変数設計|variable・locals・output・data sourceで構成を整理する方法

「TerraformでインフラをHCLに落としたはいいが、同じリージョン名や環境名があちこちにハードコードされていて管理できない」
「開発・本番の切り替えでファイルを書き換えたら、うっかり本番用の値で開発環境を壊してしまった」

Terraformを触り始めたころ、こういった失敗は誰もが経験します。その根本原因は、Terraformの変数機能を正しく使っていないことにあります。

TerraformのHCLには「variable」「locals」「output」「data source」という4種類の変数・参照機能があります。これらを使い分けることで、コードの重複を排除し、環境ごとの値切り替えをファイルコピーなしに実現できます。

この記事では、HCL変数設計の4要素を実際のコードと実行例で解説します。variables.tfの型定義・バリデーション・tfvarsによる環境分離・locals/outputの使い所・data sourceによる既存リソース参照まで、設計軸で整理して体得できます。

実行環境:Terraform 1.8.x(RHEL 9.4 / Ubuntu 24.04 LTS で動作確認済み)

この記事のポイント

・variable{}で入力値を外部化し、terraform.tfvarsで環境ごとに安全に切り替えられる
・locals{}は繰り返し使う式や計算結果を1箇所にまとめてDRYにするための要素
・output{}はモジュールから外部へ値を公開し、モジュール間の疎結合を保つ
・data{}ソースは「Terraformで作っていない既存リソース」をコードから参照するための機能

続きを読む "TerraformのHCL変数設計|variable・locals・output・data sourceで構成を整理する方法"

TerraformとAnsibleの違いと使い分け|IaCツール選定の判断軸

「TerraformとAnsibleって結局どっちを使えばいいの?」「両方学ぶ必要があるの?」
Infrastructure as Codeの導入を検討するエンジニアなら、一度はこの疑問にぶつかるはずです。

どちらもIaCを実現するツールですが、設計思想も得意領域もまったく異なります。「なんとなく流行っているから」という理由で選ぶと、現場で使い物にならない構成になってしまいます。

この記事では、TerraformとAnsibleの違いを設計思想レベルから整理し、「どの場面でどちらを選ぶべきか」の判断軸を実務目線で解説します。

この記事のポイント

・TerraformはインフラのプロビジョニングにAnsibleは設定管理に向く
・「宣言型」と「手続き型」の設計思想の違いが選定の核心になる
・現場では両ツールを役割分担させて併用するのが主流
・迷ったときはリソースの「作成/削除」ならTerraform、「設定/変更」ならAnsibleが目安

続きを読む "TerraformとAnsibleの違いと使い分け|IaCツール選定の判断軸"

Terraformのtfstate管理とS3バックエンド設定|チーム運用で壊さないための基礎

「チームでTerraformを使い始めたら、tfstateファイルが衝突してインフラの状態がめちゃくちゃになった」
「git管理しているtfstateを複数人が同時に変更して、どれが正しいか分からなくなった」
「S3バックエンドを設定しようとしたが、どのファイルに何を書けばいいのか分からない」

こうした悩みはチーム開発でTerraformを導入した直後に必ずといっていいほど発生します。

この記事では、tfstateの仕組みを基礎から解説し、S3バックエンドによるリモート管理の設定手順、DynamoDBを使ったState Lockingの実装、そしてstateが壊れたときのトラブルシューティングまで一気に解説します。
チームでTerraformを安全に運用するための設計知識を、実際のHCLコードと実行例を交えて丁寧に説明します。

この記事のポイント

・tfstateはTerraformがインフラの「現在の状態」を記録するJSONファイル
・S3バックエンド設定でtfstateをチーム共有・バージョン管理できる
・DynamoDB State Lockingで同時実行によるstate破損を防ぐ
・state破損・ロック残留はterraform force-unlockで対処できる

続きを読む "Terraformのtfstate管理とS3バックエンド設定|チーム運用で壊さないための基礎"

TerraformでAWS VPCとEC2を構築する方法|HCL記法とterraformコマンドの実践

「TerraformでAWSのVPCやEC2を構築しようとしたけど、どのファイルに何を書けばいいのかわからない」
「HCLの構文は調べたが、実際にterraform applyするまでの全体像がつかめない」

こういった悩みを持つエンジニアは多いです。Terraformのドキュメントは英語が中心で、しかもProviderのバージョンによって書き方が変わるため、情報が散らばりがちです。

この記事では、terraform aws vpc の構築を軸に、VPC・サブネット・インターネットゲートウェイ・EC2インスタンスをHCL(HashiCorp Configuration Language)で定義し、terraform init / plan / apply の実行フローまで一気通貫で解説します。さらに既存AWSリソースをTerraform管理下に取り込む terraform import の基本手順まで押さえます。動作確認環境は Terraform v1.8.x / AWS Provider v5.x(Rocky Linux 9 / Amazon Linux 2023で動作確認済み)です。

この記事のポイント

・terraform aws vpcはHCLのresourceブロックで宣言的に定義する
・VPC→サブネット→IGW→ルートテーブルの順に依存関係を組む
・terraform plan で差分確認、apply で実際にAWSリソースが作成される
・tfstateはS3+DynamoDBでチーム共有するのが本番運用の鉄則

続きを読む "TerraformでAWS VPCとEC2を構築する方法|HCL記法とterraformコマンドの実践"

Terraform入門|Infrastructure as CodeでAWSインフラをコード化する基礎ハンズオン

「AWSのインフラ構築、毎回ポチポチとコンソールを操作していて、設定ミスや環境差異が怖い」
「Terraformを使えばインフラをコードで管理できると聞いたが、何から始めればいいのかわからない」
「コンソールで手動作成した既存リソース、どうやってTerraformに取り込めばいいんだ…」

こういった悩みを持つインフラエンジニアは多いでしょう。AWSコンソールでの手作業は、チームで運用するほどに属人化・設定漏れ・環境間の差異という問題を引き起こします。

この記事では、Infrastructure as Code(IaC)の代表格であるTerraformの概念から、HCL構文・状態管理・既存リソースの取り込み(terraform import)・モジュール設計、そしてAWSでVPCとEC2をコード化するハンズオンまでを体系的に解説します。「なぜTerraformを使うのか」「どう設計するか」「既存リソースをどう管理下に置くか」「よくあるトラブルをどう乗り越えるか」という4つの軸で、実務で使えるレベルまで踏み込んで説明します。

この記事のポイント

・TerraformはHCLでAWSインフラを宣言的にコード化できるIaCツール
・tfstateで状態を管理し、S3+DynamoDBでチーム共有するのが実務の基本
・terraform importで既存リソースをTerraformのstate管理に取り込める
・plan/apply失敗の多くは依存関係・権限・tfstate不整合が原因

続きを読む "Terraform入門|Infrastructure as CodeでAWSインフラをコード化する基礎ハンズオン"

Linux無料マニュアル(図解60P) 名前とメールで30秒登録