すべての記事

Terraform 運用 #6 実行プラットフォーム比較 — 素の CI、HCP Terraform、Atlantis、Spacelift
読了 4分

Terraform 運用 #6 実行プラットフォーム比較 — 素の CI、HCP Terraform、Atlantis、Spacelift

自作した GitHub Actions ワークフローがどこまで持ちこたえ、どこから苦しくなるのかを基準に、マネージドの HCP Terraform、セルフホスト OSS の Atlantis、商用専門プラットフォームの Spacelift 系を比較します。ポリシーのコード化、RBAC、実行履歴の可視化といったプラットフォームの付加価値と料金構造を確認し、チーム規模ごとの選択基準を整理します。

Terraform 運用 #5 大規模の構造化 — スタック分割の基準、スタック間参照、Terragrunt 導入のタイミング
読了 6分

Terraform 運用 #5 大規模の構造化 — スタック分割の基準、スタック間参照、Terragrunt 導入のタイミング

1 つの state が大きくなると生まれる plan の遅延、ブラスト半径、チーム間のロック競合という問題を整理し、変更頻度、寿命、所有チームを基準にスタックを分割する方法を説明します。スタック間で値を渡す 2 つの方式である terraform_remote_state と SSM パラメータの結合度の違い、モノレポの運用ルール、そしてボイラープレートが限界を超えたときの Terragrunt 導入の判断まで扱います。

Terraform 運用 #4 セキュリティ・コストスキャン — trivy、checkov、Infracost で PR ガードレール
読了 4分

Terraform 運用 #4 セキュリティ・コストスキャン — trivy、checkov、Infracost で PR ガードレール

セキュリティ設定のミスを apply の前に捕まえる静的スキャナー trivy と checkov を比較して導入し、誤検知の例外処理を理由つきでコードに残すルールを決めます。Infracost で PR に月額コストの変化をコメントとして表示してコストレビューをデプロイ前の段階に引き上げ、default_tags ベースのコスト追跡までつなげて PR ガードレールを完成させます。

Terraform 運用 #3 コード品質とテスト — tflint、pre-commit、terraform test
読了 5分

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 ブロック
読了 5分

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
読了 4分

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
読了 5分

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 本のアーキテクチャを完成させます。

PostgreSQL LISTEN/NOTIFY — どこまで使い、いつメッセージキューへ移行するか
読了 5分

PostgreSQL LISTEN/NOTIFY — どこまで使い、いつメッセージキューへ移行するか

PostgreSQL 内蔵の pub/sub である LISTEN/NOTIFY の実用範囲を整理します。トランザクションと一緒にコミット時点で発行される動作原理、8000 バイトのペイロード上限と「キーだけ送れ」の原則、リスナーがいなければ消える揮発性、大量発行時のコミット直列化ボトルネックという規模の限界、だから定石になる「通知は起動の合図 + 仕事は SKIP LOCKED のテーブルキュー」の組み合わせ、そして本物のメッセージキューへ移る基準まで扱います。

Terraform 実践 #9 環境分離 — ワークスペースの限界、ディレクトリ構成、moved リファクタリング
読了 5分

Terraform 実践 #9 環境分離 — ワークスペースの限界、ディレクトリ構成、moved リファクタリング

ワークスペース方式が環境分離で直面する限界を整理し、modules と envs のディレクトリに分ける実務標準の構成を立てます。単一ディレクトリで育ったコードを network、compute、data モジュールにリファクタリングしながら、moved ブロックで再作成なしにアドレスを移し、dev と prod が同じモジュールを別の値で使う構成を完成させます。

PostgreSQL Row-Level Security — マルチテナント分離を DB で強制する
読了 5分

PostgreSQL Row-Level Security — マルチテナント分離を DB で強制する

行単位のアクセス制御(RLS)の実践導入を扱います。WHERE tenant_id の漏れというマルチテナント最悪の事故を、アプリケーションの規律ではなく DB の強制で防ぐ構造、ENABLE ROW LEVEL SECURITY と CREATE POLICY の基本形、current_setting でリクエストごとにテナントを指定する標準パターンとコネクションプールの注意点、性能の条件(tenant_id のインデックス)、そして RLS を使わないほうがいい場合まで扱います。

Terraform 実践 #8 ECS Fargate デプロイ — タスク定義、サービス、同じ ALB の後ろでの切り替え
読了 5分

Terraform 実践 #8 ECS Fargate デプロイ — タスク定義、サービス、同じ ALB の後ろでの切り替え

user_data 方式の限界を整理し、コンピューティング層をコンテナに世代交代させます。ECS クラスターと Fargate タスク定義、execution role と task role の区別、ip タイプのターゲットグループを持つサービスを作り、同じ ALB の後ろで EC2 とコンテナを並べて動かしながらリスナーの切り替えで乗り換えるところまで、コードで進めます。

Terraform 実践 #7 IAM のコード化 — インスタンスロール、最小権限、GitHub Actions OIDC
読了 4分

Terraform 実践 #7 IAM のコード化 — インスタンスロール、最小権限、GitHub Actions OIDC

aws_iam_policy_document データソースで信頼ポリシーと権限ポリシーを書き、インスタンスプロファイルで EC2 にロールを付与して、SSM Session Manager 接続とシークレット読み取りを完成させます。最小権限をリソース ARN 単位まで絞る方法と、GitHub Actions がアクセスキーなしで AWS のロールを引き受ける OIDC 連携まで、コードで作っていきます。