1.3K Views
May 21, 25
スライド概要
2025/5/21 IaC Meetup【Finatext × YUMEMI.grow】
Terraformの「状態」について知ろう! IaC Meetup【Finatext × YUMEMI.grow】 株式会社Finatext ぐらにゅ © Finatext Holdings Ltd.
自己紹介 ● 名前: 山吹明里 ○ 社内でも社外でも大体「ぐらにゅ」と呼ばれてます ○ 大体のSNSは @gurany_touでやっています ● 役職: インフラエンジニア ○ 主に証券事業でAWS・Terraformに関するあれそれをやってます © Finatext Holdings Ltd. 1
会社紹介 株式会社Finatextについて 「金融を“サービス”として再発明する」をミッションに掲げ、次世代金融インフラの 提供を通して組込型金融を実現するフィンテック企業です。 証券・保険・クレジット・データ解析などの事業を展開し、「金融がもっと暮らしに 寄り添う世の中」の実現を目指しています。 © Finatext Holdings Ltd. 2
初学者の頃に思ったこと ● そういう挙動になることはわかったけど、なぜそうなるんだろう? ○ コードを書き換えてデプロイするとクラウド上にあるリソースが変更される ○ 手動でクラウド上にあるリソースの設定を変えると差分が発生する デプロイ 手動での操作 クラウドリソース コード © Finatext Holdings Ltd. 3
今回話す内容 ● Terraformではどのように状態を管理しているのか ○ terraform stateとは何か ■ tfstateファイルについて ○ plan/apply時の挙動 ○ terraform stateを操作する © Finatext Holdings Ltd. 4
Terraformではどのように状態を管理しているのか terraform stateとは Terraformでは、terraform stateというものを利用して、実リソースとコードの管理 を行っている ● terraform stateとは ○ Terraformが管理する状態ファイル(.tfstateという拡張子のファイル) ○ コードとクラウドリソースのマッピングを行っている ○ クラウドリソースの属性状態をキャッシュする役割も担っている ○ Terraformはこのファイルをもとに、リソースの差分を判断し、必要な変更を行う © Finatext Holdings Ltd. 5
Terraformではどのように状態を管理しているのか tfstateファイルについて ● JSON形式のファイル ○ JSON形式になっており、リソースのマッピング・属性情報が保存されている ○ この対応情報があるからこそ、Terraform は「差分」や「削除対象」がわかる ● チーム開発だと利用しているクラウドサービスが提供しているストレージサービス で管理することが多い(AWSの場合はS3) ○ なので普段の開発ではあまりtfstateファイルを見る機会がないかなと © Finatext Holdings Ltd. 6
tfstateの中身(一例) © Finatext Holdings Ltd. 7
terraform planの挙動 ● 何が行われているか ○ stateとクラウドリソース/コードをそれぞれ比較する ○ 比較結果から差分(作成・更新・削除)を検知して表示する ● 処理の流れ 1. 既存のクラウドリソースとstateを比較し、tfstateの状態が最新であることを確 認する(ドリフト検知) 2. コードとstateを比較する 3. 1と2で比較した結果を元に差分を表示する ● stateとの関係 ○ stateを利用して、コード・クラウドリソースとの比較を行う ○ 実リソースの最新状態とstateが一致しない場合もあるので確認を行っている ■ 手動で実リソースを操作した ■ クラウドサービス/Terraform Provider側の機能更新 © Finatext Holdings Ltd. 8
terraform applyの挙動 ● 何が行われているか ○ planで算出された差分をもとに、クラウドリソースを実際に操作する ○ クラウドリソースの操作が成功した後、stateを最新の状態に更新する ● 処理の流れ 1. tfファイルとstateから差分を計算(terraform plan) 2. クラウドリソースの操作(作成・変更・削除)を行う 3. 新しい状態を.tfstateファイルに書き込む ● stateとの関係 ○ stateに基づいて「何をどう変更するか」を算出し、その結果に基づいて操作を行 う ○ stateファイルが更新されることで、Terraformの「状態」も最新化される © Finatext Holdings Ltd. 9
terraform stateを操作する terraform stateは基本的に自動更新されるが、コマンドやコード上から操作可能 ここでは代表的な2つの操作を紹介する ● import ○ Terraform管理されていない既存リソースをtfstateに取り込む際に利用 ○ importブロックを記述する or terraform importコマンドで実行可能 ○ https://developer.hashicorp.com/terraform/cli/import ● moved ○ リソース名変更に利用する ○ movedブロックを記述する or terraform state mvコマンドで実行可能 ○ https://developer.hashicorp.com/terraform/language/modules/develop/ref actoring © Finatext Holdings Ltd. 10
(参考)他のIaCツールにおける状態管理 ● OpenTofu ○ Terraformと同様にstateファイルがある(Terraformをforkしてきたものなので それはそう) ○ https://opentofu.org/docs/language/state/ ● Pulumi ○ Terraformと同様にstateファイルがある ○ デフォルトだとPulumi Cloudで管理される ○ https://www.pulumi.com/docs/iac/concepts/state-and-backends/#managin g-state-backend-options ● 各クラウドが提供しているIaCサービス ○ どのサービスもクラウドサービス側で自動的に管理している ■ AWS: CloudFormation ■ Azure: Azure Resource Manager ■ Google Cloud: Cloud Deployment Manager © Finatext Holdings Ltd. 11