terraform
Secrets Managerの値を変えたのにlambrollでデプロイしたら古い値のままだった。原因はtfstateが terraform plan では更新されないこと。 terraform apply -target=data.xxx でdata sourceだけを狙い撃ちでapplyすれば、tfstateが最新値に更新されます。 何…
ECSタスク定義をTerraformから切り離す3つの方法(ignore_changes / Provider 5.x / ecspresso) ECSのタスク定義をTerraformから切り離してCI/CDに移管するには、ignore_changes、Provider 5.xのtrack_latest、ecspressoの3つの方法があります。どれを選ぶ…
Proxmox + Terraform + k3s の構成でハマる原因は、技術不足ではなくAWS前提の思考がそのまま通らないことにあります。 代表的な詰まりポイントはboot_order、qemu-guest-agent、SSH認証経路の3つです。 何が起きたか Proxmox上にTerraformでVMを作って、clo…
Terraform stateの分割は「きれいな構成」のためではなく、誤変更の確率を下げるための運用設計です。 分割の軸はサービス境界ではなく、変更頻度と障害半径で決めます。 考え方をまとめたので記事にしておきます。 きっかけ MSK(Managed Streaming for Apa…
Proxmox上にTerraform + cloud-initでk3sクラスタを構築してたんですけど、terraform apply が失敗するたびに原因の特定に時間がかかる。 「VM自体が作れてないのか」「VMは作れたけどcloud-initが途中で止まったのか」「k3s serverは起動したけどworker joi…
Terraform本体・Provider・Moduleのアップデートは基盤側(Terraform本体)から順に上げます。同時に上げると terraform plan の差分がどこ起因かわからなくなり、ロールバックの粒度も消えます。 きっかけ Terraform本体とAWS ProviderとModuleを「どうせ全…
Terraform で「特定のリソースが変わったときだけスクリプトを実行したい」という場面に出くわすことがあります。 そのときに使うのが null_resource の triggers です。 便利な反面、ハマりどころも多い。timestamp() を入れたら毎回 destroy/create が走っ…
Proxmox上にTerraformでVMを作って name = "k3s-cp1" と設定したのに、SSHで入ると hostname が ubuntu のまま。原因は user_data_file_id でカスタムcloud-configを指定すると、Proxmoxの暗黙のhostname設定が効かなくなることでした。cloud-configに hostn…
Redditを見ていたら、以下のような記事が目に留まりました。 https://www.reddit.com/r/aws/comments/1rlrlwi/psa_the_modern_way_to_host_sites_in_s3/ 内容的にはチュートリアル通りだとパブリックBucketを構成している人多いけど、今だとCloudfront + OAC…
lambrollの {{ tfstate }} テンプレートを使うと、TerraformのstateファイルからIAMロールARNやSSMの値をデプロイ時に自動展開できます。 Terraformで管理している値をlambrollのfunction.jsonに持ってこれるので、function.jsonに機密情報を書かずに管理す…
data "aws_ami" で most_recent = true を使っていると、AWSが新しいAMIを公開したタイミングで terraform apply がEC2インスタンスをdestroy → createします。 原因はAMI IDの変更がForceNew属性であること。本番ではAMI IDを固定値で管理するのが対策です…
Terraform MCP Serverとは Model Context Protocol(MCP)を使って、AIエージェントがTerraformエコシステムと連携するためのサーバーです。Claude CodeなどのMCP対応ツールから、Terraform Registryの最新プロバイダー/モジュール情報にリアルタイムアクセ…
Terraformの三層構造(compositions / infra-modules / resource-modules)でinfra-modulesをどう分割するか。結論はワークロード別をデフォルトにする。カテゴリ別にすると terraform plan の影響範囲が不必要に広がって、レビューもデプロイも辛くなります…
Terraformのチームガイドラインを5つ作って、全部正しいのに誰も守らなかった。結局2つに絞ったら、PRレビューで同じ指摘を繰り返す回数が減った。この記事では「なぜ5つではダメだったのか」「どう2つを選んだのか」を、実際のレビューで起きたことベースで…
lambrollでLambdaをデプロイするとき、環境変数にデータベースのパスワードやAPIキーを渡したい場面があります。 function.json に直書きするわけにはいかないし、かといってデプロイのたびに手作業で設定するのも避けたいところです。 この記事では、SSM Pa…
Terraform AWS Provider v6.33.0が2026-02-18にリリースされたので、変更内容を確認して影響評価してみました。 結論から言うと、breaking changeなしで安全にアップグレードできます。ただし aws_docdb_cluster をServerless v2で使ってる人は早めに上げた…
bpg/proxmox providerで proxmox_virtual_environment_file(snippets)を作ろうとしたらSSH認証エラーになった。調べてみたところ、providerがファイルアップロードだけSSH/SFTP経由で行うためだった。ってことで、APIトークンとは別にSSH接続の設定が必要…
IaCの設計原則をチームに導入するとき、5つも7つも一度に入れると結局誰も読まない。入れちゃいけないとは言わないけれども、最初に必ず守るべきものを指定して、それは「ライフサイクル分割」と「共通化 vs 隠蔽」の2つだけ。 この2つはレビューで「なぜこ…
terraform destroy → terraform apply でVMを再作成した後にSSHが通らなくなるのは、~/.ssh/known_hosts に残っている古いホスト鍵と新VMのホスト鍵が一致しないため。ssh-keygen -R <IP> で古い鍵を消せば解決します。 何が起きたか ProxmoxのVM構成をTerraform</ip>…
Terraformやプロバイダのバージョン管理、手動でやっていませんか。tfupdateを使えば、コマンド一発で最新バージョンに更新できます。 tfupdateとは tfupdateは、Terraformの設定ファイル内のバージョン制約を自動的に更新するCLIツールです。Terraform本体…
この記事は EC2 user_data シリーズ(全3回) の3本目です。 aws_instance の user_data に lifecycle { ignore_changes } を入れると意図しない stop/start は止まります。でも「いざ新しい user_data を適用したくなったらどうするのか」が次の問題になる…
この記事は EC2 user_data シリーズ(全3回) の2本目です。 Terraform の aws_instance に user_data_replace_on_change という属性があります。これは Provider v4 のメジャーアップデートで user_data 変更時の挙動が変わり、困ったユーザーのために後か…
この記事は EC2 user_data シリーズ(全3回) の1本目です。 Terraform で aws_instance の user_data を変更して terraform apply したら、インスタンスが stop/start してしまうので、サービス断発生してしまいます。 しかも新しい user_data のスクリプト…
いつのまにか今週も終わってしまいますね。 今週見たTerraform関連の記事一覧です。 Terraform OpenTF — Publishing the Fork OpenTFの動きは今後も気になる。 How to Manage Terraform S3 Backend — Best Practices opentffoundation/opentf: OpenTF lets y…
今週Terraform関連で見た記事一覧です。 今週は何といってもTerraformのライセンス変更が個人的には興味深かったです。 それではどうぞ。 Terraform ライセンス変更 HashiCorp、全製品のライセンスを商用利用に制限があるBSLライセンスに変更すると発表 - P…
Terraformの型をまとめました。 不足があれば追記してく予定です。 string 文字列はダブルクォートで囲まれたUnicode文字のシーケンスで表現されます。 variable "example_string" { default = "hello" } number 数値は引用符なしの数字のシーケンスで表現さ…
Terraformを使っているとよく使う組み込み関数。今日は組み込み関数のfor_eachについて調べてみました。 例として、Terraformを使って複数のBucketを一度に作成してみようと思います。 コード 以下がそのコード。 provider "aws" { region = local.region } …
先日、最新のModuleバージョンを調べる方法を記事にしましたが、「そもそも今使っているModuleバージョンっていくつなんだ?」というのがわからなかったのでその調べ方です。 ソースコードを確認する ソースコード内でModuleのバージョンを指定しているよう…
Terraformでよく活用する公式Module。 「今のModuleの最新バージョンはいくつなんだろう?」というのの調べ方がわからなかったので調べました。 公式サイトを確認する 公式サイトを確認する方法になるのかなと思います。 registry.terraform.io 例えば、S3を…
今日はInfrastructure as Code(IaC)ツールの一つであるTerraformを使用してAWS S3バケットを作成する方法を2つご紹介。一つはTerraformのモジュールを使用する方法、もう一つは直接コーディングを行う方法です。それぞれの違いと特徴についても触れていき…