Terraform で IaC をしてみたいという思いから各クラウドに小規模な検証環境を作ってみます。なるべく節約をして行きますが、一部は MSDN サブスクリプション分を含めてリソース課金が発生する環境です。
全体構成図
オンプレを含めた簡易な構成は次の通りです。マルチクラウドとはいっても、ネットワーク的にはオンプレと Azure、OCI だけ VPN 接続します。(GCP と AWS の VPN 接続って意外と料金かかるからね、、)
各クラウドの VM をまとめて管理する計画に関しては、今後 Azure Arc や Ansible の導入も検討しています。

ローカル環境準備
Terraform は次のバージョンを使用しています。各クラウド用の資格情報を用意するために一応各 CLI ツールもインストールしておきました。
- Terraform : 1.1.3
- AzCLI : 2.23.0
- AWS CLI : 2.4.7
- GCP CLI : 342.0.0
- OCI CLI : 2.25.0
ディレクトリ構成
Terraform のコード構成としては各クラウド用のディレクトリを用意しました。リソースのコードはモジュール単位で分割し、ディレクトリ内には基本的に 3 つのファイルで構成しています。
- main.tf : リソースやモジュールの呼び出しなどほとんどのコードを記述
- variables.tf : 変数のみ抽出して記述
- outputs.tf : 呼び出し元モジュールなどに値を渡すためのアウトプットを記述
terraform
├aws
│├main.tf
│├outputs.tf
│├variables.tf
│└modules
│ ├compute
│ │├main.tf
│ │├outputs.tf
│ │└variables.tf
│ ├network
│ │├main.tf
│ │├outputs.tf
│ │└variables.tf
│ └storage
│ ├main.tf
│ ├outputs.tf
│ └ariables.tf
├azure
│├main.tf
│├outputs.tf
│├variables.tf
│└modules
│ ├compute
│ ├networking
│ └storage
├gcp
│├main.tf
│├outputs.tf
│├variables.tf
│└modules
│ ├compute
│ ├networking
│ └storage
├oci
│├main.tf
│├outputs.tf
│├variables.tf
│└modules
│ ├compute
│ ├networking
│ └storage
├hashicorp
└secrets
コメント