📚

Terraformを採用する前に知っておくべき6つの課題

2024/06/16に公開

クラウドインフラのシステム基盤構築にTerraformを採用している組織は多いですね。村上自身は特別な要件がない限り、”どのクラウドを使う場合でも” システム基盤構築にはTerraformを使いたいと考えているインフラエンジニアです。

私は、Terraformを3年間使用する中で、6つの課題に直面してきました。
このブログでは、実際の開発現場でどのような問題が起こったのか、またその問題をどのように回避、あるいは対策すべきだったのかについて、綴ってみました。

【課題1】プロジェクト始動直後にTerraform開発を開始したため、後工程で改修タスクが多発

SI案件では、クライアントが提案する調達要件RFPをもとに、ITベンダーがヒアリングを行いながら要件定義を進めていきます。

要件定義の一例として以下のようなものがあります。

  • クラウド・ミドルウェアの選定(事前に指定される場合もあるが、基本的には省略されるか、ITベンダーに委ねられる)
  • 可用性要件:サービス稼働率、RTO/RPO、DR対策など
  • 拡張性要件:最大アクセス負荷、応答レスポンス時間、スループット容量など
  • 安全性要件:データ改ざん対策、暗号化など

この時点では、具体的に決まる要件あいまいな要件が混在しています。ITベンダー側のヒアリング能力にもよりますが、予算見積もりに必要な可用性要件と拡張性要件については、クライアントと合意に達するまで詰めていくことが一般的です。それ以外の要件については、基本設計などの後工程で調整することが多いです。

つまり、この段階ではTerraform開発には着手できません。

基本設計フェーズでは、システム基盤でどのクラウドリソースやミドルウェアを利用するか(必要に応じて技術検証も行いながら)基本設計書に記載し、クライアントにシステム基盤の基本構成を確認してもらう必要があります。

よって、Terraform開発に着手できるのは、最短でも基本設計が完了した後になります。

Terraform開発を先行して着手すること自体は悪いことではありませんが、開発よりも設計(やIaC未経験者の学習コスト)に注力するための十分な工数を確保するべきです。
適切な計画を立てて取り組むことで、人的コストの効率化や改修作業工数の最小化といった利点を得ることができるため、Terraformを用いたインフラ構築プロジェクトには入念な準備が推奨されます。

【課題2】Terraformの開発工数を確保できていないことによる進捗遅延

Terraformは、AzureやAWSなどのクラウドサービス、KubernetesやDatabaseなどのミドルウェアを含むシステム基盤の構成に適した最強ツールです。Web APIが公開されて認証トークンがあれば、なんでもできます。

しかし、「クラウドを使うから簡単に構築できるだろう」と過小評価をして、1〜2週間といった短期間で見積もりを行うと、プロジェクトの規模にもよりますが、ほぼ確実にスケジュール遅延を引き起こします。

経験則として、中規模のプロジェクトであれば最低1ヶ月間、大規模なプロジェクトでは3ヶ月間程度の期間を確保するべきです。

未経験者が多い場合やクラウドサービスの破壊的変更が多発する時期(5,6月、11,12月)は、もっと多くの時間がかかることがあります。

なお、小規模なプロジェクトではTerraformを導入しないケースもあるため、ここでは中規模以上のプロジェクトを想定して説明しています。

【課題3】Terraform はベストプラクティスが存在しないため、構成設計が必要

Terraformプロジェクトの構成を悩む実装者は多いと思います。私は数年間で何度も苦しみました。特にクラウド事業者(MicrosoftやAWSなど)が仕様変更してきて、modulesの更新作業が発生することはあるあるですよね。所属する組織がTerraformを卓越する実績があれば、それに従いましょう。いろんな構成管理を現場に導入することは危険です。

私がよく使うTerraformプロジェクトの構成を記載します。ほとんどのシナリオで、stg(検証環境)とprod(本番環境)は同一構成を求められるため、同一フォルダにしてもいいかもしれません。私は縮小状態の検証環境を構築する場面が何度か経験したため、分割しています。また モジュールは環境ごとに分けるのでなく、共通で利用することを推奨します。

【課題4】Terraform の実行環境が異なり、誰でも同じ作業が不可

OSによる実行環境の違いにより、稀ではありますがWindowsでは実行できるのにMacでは実行できない問題が発生することがあります。私は何度か発狂しました。絶対にDockerやUbuntuなどの仮想マシン上で環境構築業務ができるように体制を整えましょう。これは義務です。

CI/CD ツールなどで実行環境を用意しておくと誰でも同じことができますね。

【課題5】資格情報を交換しないことによる情報漏洩のリスク

情報漏洩の経験はないのですが、人的セキュリティは必ず対応すべきです。特にTerraformで使用されるAPIキーやアクセスキー、サービスプリンシパルといったIDには特権ロールが付与されることが多いと思います。万が一 外部漏洩した場合に利用者の個人情報が第三者(退職者や委託先も含む)によって悪用された場合、ほとんどの責任はITベンダーになります。

これらのリスクを回避する為、下記の取り組みを習慣化します。

  • 退職者/委託先の契約解除 が発生した場合、必ず資格情報のパスワードを更新する
  • GitHubやBitbucketなどのソースコード管理ツール上に資格情報をPushしない
  • 情報セキュリティの教育を行う

【課題6】すべての作業をTerraformで実装してしまい、柔軟性が皆無

【課題2】にも取り上げましたが、Terraformは何でもできます。それゆえ、サーバやネットワークの構築が容易に行えるメリットがあるのですが、たまにTerraformが対応していないリソース操作があります。この課題解決は、Terraformで実装するのではなくShellスクリプト(BashやPowerShell)で実装するようにしましょう。Terraform はREST APIを実行することができるため、対応していない操作を無理矢理実装することができます。ただし、REST API のバージョン管理が運用業務で発生するため、そのコストを考慮すればTerraform実行後、外部スクリプトを実行するようにしたほうが担当者は楽になります。

Discussion