#IaC
47 件の記事
Terraform 運用 #3 コード品質とテスト — tflint、pre-commit、terraform test
fmt と validate の上に tflint を重ね、存在しないインスタンスタイプのようなプロバイダー知識ベースのエラーを plan の前に捕まえ、pre-commit フックでコミット時点に自動化します。Terraform 内蔵のテストフレームワーク terraform test の tftest ファイルと run・assert 構造をモジュールテストの例で身につけ、plan テストと apply テストのコスト差に応じた使い分けの基準まで整理します。
Terraform 運用 #2 drift と state の手術 — 定期検知、import ブロック、removed ブロック
コードの外で起きた変更を定期 plan ワークフローと -detailed-exitcode で検知する仕組みを作り、drift への 3 つの対応(コードに吸収、apply で戻す、ignore_changes)の選択基準を整理します。コンソールで生まれたリソースを import ブロックで編入し、-generate-config-out でコードのドラフトを生成する手順から、state からだけ取り除く removed ブロックまで扱います。
Terraform 運用 #1 チームワークフロー — PR で plan レビュー、GitHub Actions で apply
ローカル apply がチームにもたらす権限の集中とレビュー不在の問題を整理し、PR には plan をコメントとして残し、マージすると CI が apply する標準ワークフローを GitHub Actions で構成します。OIDC ロールの接続、plan 出力の PR コメント自動化、concurrency で同時 apply を防ぐ設定まで、人の手による apply をなくす最初のステップを作ります。
Terraform 実践 #10 ドメイン・HTTPS・完成 — Route 53、ACM 検証、CloudFront と provider alias
Route 53 のホストゾーンをデータソースでつなぎ、ACM 証明書をリソース 3 つの DNS 検証イディオムで発行して、ALB に HTTPS リスナーとリダイレクトを取り付けます。CloudFront 用の証明書のために provider alias で us-east-1 を併用する方法を扱い、OAC で閉じた S3 バケットを配信する CDN とエイリアスレコードまでつないで、10 本のアーキテクチャを完成させます。
Terraform 実践 #9 環境分離 — ワークスペースの限界、ディレクトリ構成、moved リファクタリング
ワークスペース方式が環境分離で直面する限界を整理し、modules と envs のディレクトリに分ける実務標準の構成を立てます。単一ディレクトリで育ったコードを network、compute、data モジュールにリファクタリングしながら、moved ブロックで再作成なしにアドレスを移し、dev と prod が同じモジュールを別の値で使う構成を完成させます。
Terraform 実践 #6 シークレット管理 — SSM vs Secrets Manager、write-only 引数
シークレットの保管先として SSM Parameter Store と Secrets Manager をコストと機能で比較して選択基準を立て、Terraform 1.11 の ephemeral リソースと write-only 引数で DB パスワードが plan にも state にも残らない構成を作ります。アプリケーションがシークレットをランタイムに読む流れまで設計し、前回の平文問題を構造的に解決します。
Terraform 実践 #4 ALB と Auto Scaling — launch template、ターゲットグループ、スケーリングポリシー
単一の EC2 インスタンスをロードバランサーの後ろの Auto Scaling グループに昇格させます。インスタンス定義を launch template に移し、ALB とターゲットグループ、リスナーをつないだうえで、CPU のターゲット追跡スケーリングポリシーまで設定します。検証用の単一インスタンスをコードから削除して IaC のリソース削除の流れを確認し、ブラウザで最初のレスポンスを受け取ります。
Terraform 実践 #2 VPC ネットワークのコード化 — 2 AZ のサブネット、ルーティング、NAT ゲートウェイ
myapp インフラの土台である VPC をコードで構築します。パブリック・プライベートサブネットを 2 つの AZ に for_each で作り、インターネットゲートウェイとルーティングテーブルでトラフィックのルートを定義し、プライベートサブネットのアウトバウンドを担う NAT ゲートウェイを費用の割り切りとともに配置します。ネットワークの output まで整理して、次回のコンピューティング層を受け入れる準備を済ませます。