2026-04-26

"詳解 Terraform" Yevgeniy Brikman 著

近年、DevOps という用語を耳にする。
だが、ソフトウェアの開発やアップデートと並行して運用する考え方は、ずっと前からある。オンラインが当たり前な環境では、ネットワーク整備のための一時停止が致命的なダメージにもなりうる。決済システムや認証システム、SaaS や各種サーバなど、些細なメンテナンスの度に停止するわけにはいかない。こうした状況下で、より効率よく運用するには...
尚、松浦隼人訳版(オライリー・ジャパン)を手に取る。

「午前 3 時のアラート対応をやったことがあるなら、この本はあなたのためにあります。」

もう三十年ぐらい前になろうか。会社のルータを自宅からリモートで設定し、しくじっては深夜に車を走らせた記憶が蘇る。そもそも、ネットワークの設定をネットワーク経由でやるところに自己言及の罠がある。
本書は、ソフトウェアプロジェクトの時間見積もりは不正確なことで有名で、ホフスタッターの法則を計算に入れても、予測以上に時間がかかるものとしている。
ちなみに、ホフスタッターの法則とは、ダグラス・ホフスタッターの著作「ゲーデル、エッシャー、バッハ - あるいは不思議の環」の中で唱えられた自己言及に関する格言、いや、皮肉か...

さて、DevOps ムーブメントには、文化(Culture)、自動化(Automation)、計測(Measurement)、共有(Share)という四つのコアバリューがあるという。頭文字をとって CAMS とも呼ばれるとか。
本書は、この中の自動化に注目し、Infrastructure as Code(IaC)という考え方を提示する。そして、プログラミング言語の視点から、宣言型言語に焦点を当てる。
例えば、ルータを制御するためのコマンド群は、特化した宣言的な記述ができるが、柔軟性に欠く。複数のサーバや複数のアカウント、さらに複数のインフラを統合管理するのに手続き型言語を用いれば、コードが複雑化し、メンテナンスの手間も増大する。
コンパクトで分かりやすく記述でき、言語らしい振る舞いをする言語となると、その選択肢の一つが Terraform というのである。言語的な興味から、ちと試すことに...
ちなみに、コマンド群は、手続き型言語のコードをマクロ化してきた資産に似たところがある...

Terraform は、HashiCorp 社が提供するオープンソースツールで、Go 言語で書かれている。プロバイダや仮想化プラットフォームへ API コールする仕掛けとして。例えば、AWS, Azure, Google Cloud, DigitalOcean, OpenStack, VMware などを相手に...
また、宣言型言語でありながら、count, for_each, for, create_before_destroy、ビルトイン関数が実装され、柔軟性と表現の豊かさを与えるという。
但し、IaC は通常のコーディングとは違うトレードオフがあるとか。特にロック、分離、ステートについてよく考えよ!と注意を促している。ちょっとでもしくじると、その影響は広範に及び、大規模なシステムダウンに... 御用心!

さらに、複数のプロバイダを相手取るのに、Docker や Kubernetes の入門にも触れてくれる。
Docker は、アプリケーションの実行環境を構築、配布、実行するためのプラットフォームで、コンテナ型の仮想化技術を活用する。
Kubernetes は、コンテナ管理ツールで、アプリケーションのデプロイや管理を自動化する。

「自動テストのないインフラコードは、壊れている。」

1. 設定ファイルの集合体
プロバイダとは、各種インフラに対応したインスタンス生成のための宣言とでもしておこうか。その実装イメージは、設定ファイルの集合体といった様相で、宣言型らしくコンパクトな記述。

  module "name" {
    source = ...
    [CONFIG ...]
  }

  provider "name" {
    reigion = ...
    alias = ...
  }

2.インスタンス生成の大まかな手順
  1. 設定ファイルを HCL(Hashicorp Configuration Language)で書き、terraform init コマンドを実行。
  2. terraform plan コマンドで、実行する前に内容を確認。
  3. terraform apply コマンドで、実際にインスタンスの生成、更新。

3. インスタンスの依存グラフ
インスタンスの依存関係では、terraform graph コマンドが紹介される。グラフ記述言語 DOT で出力され、愛用してきた Graphviz とも連携できそう。

4. ステートファイル
Terraform は、インフラの構築情報を Terrafotm ステートファイルに記録するという。JSON フォーマットで...
また、ステートファイルの保存場所として、バックエンドという機能があるという。ローカルファイルとして扱うローカルバックエンドと、共有ストレージとして扱うリモートバックエンドが。共有するからには、ロックや暗号化にも対応。

5. workspace
すべてのステートファイルを一箇所で管理することも可能だが、一つのミスが全体に及ぶリスクは計り知れない。ステートを分離する方法としては、ファイルレイアウトを分離することが考えられるが、ある程度計画的にやる必要があろう。手っ取り早くやる方法としては、ワークスペースを利用する事例が紹介される。
terraform workspace コマンドで、開発ステージと本番ステージを分離したり...

0 コメント:

コメントを投稿