この記事は、Data Centre の Technical Solutions Architect である Conor Murphy によるブログ「Introduction to Terraform with Cisco ACI, Part 4」(2021/2/12)の抄訳です。
「Terraform の概要」投稿をまだ読まれていない場合は、ぜひお読みください。このセクションでは、Terraform Cloud を利用した、Terraform リモートバックエンドについて説明します。
- Terraform の概要
- Terraform と ACI
- Terraform 設定ファイルの説明
- Terraform リモート状態管理とチームでのコラボレーション
- Terraform プロバイダーの構築方法
コード例
https://github.com/conmurphy/intro-to-terraform-and-aci-remote-backend.git
Terraform の各ファイルについては、上記リンクの投稿を参照してください。backend.tf ファイルについては、今回の投稿で説明します。
ラボのインフラストラクチャ
利用している独自の ACI ラボがすでにあるかもしれませんが、ない場合は、DevNet サンドボックスで ACI Simulator を使用できます。
Terraform のバックエンド
Terraform を使用するにあたって重要なのは、状態が管理される場所と方法を理解することです。最初のセクションで、init、plan、apply コマンドを実行する際に、Terraform がラップトップにインストールされています。コマンドを実行したフォルダには、状態管理ファイル(terraform.tfstate)も作成されています。
8
概念を理解してテストするまでは問題なくても、共有環境や実稼働環境ではうまくいかないことがあります。たとえば、チームの他のメンバーが Terraform のコマンドを実行したい場合はどうすればよいのでしょうか。状態管理ファイルはそれぞれ独自に持っているのでしょうか。
これらの疑問は、Terraform バックエンドの概念で解決できます。
「Terraform バックエンドによって、状態のロード方法と、apply などのコマンド実行方法が決まります。Terraform バックエンドで抽象化することにより、作業管理ファイルをローカル以外に保管したり、リモートから実行したりすることができます。
バックエンドの主なメリットを次に示します。
- チームで作業できる:バックエンドは、リソースの状態をリモートに保存し、破損しないようにロックして保護できます。また、Terraform Cloud などの一部のバックエンドでは、状態のリビジョン履歴がすべて自動的に保存されます。
- 機密情報をディスクに保持しない:状態はバックエンドからオンデマンドで取得され、メモリにのみ保存されます。Amazon S3 などをバックエンドとして使用している場合、S3 が状態を保持する唯一の場所になります。
- リモート操作:大規模なインフラや特定の変更については、terraform apply の実行に時間がかかることがあります。一部のバックエンドでは、リモート操作をサポートしているため、リモートから操作を起動できます。起動後、起動したコンピュータの電源をオフにしても操作は続行して完了します。リモートに状態を保存する機能および上記のロック機能と組み合わせることで、チームで作業する場合にも役立ちます」
https://www.terraform.io/docs/backends/index.html
Terraform のドキュメントを見るとわかるように、バックエンドとして利用できるオプションは数多くあります。
この投稿では、Terraform Cloud Remote バックエンドをセットアップします。
https://www.terraform.io/docs/backends/types/remote.html
前の投稿と同じ Terraform 設定ファイルを使用し、「backend.tf」ファイルを追加します。各ファイルの説明については、上記のコード例を参照してください。
今回の例では、Terraform Cloud プラットフォームに無料のアカウントを作成する必要があります。
・新しい組織を作成し、名前を付けます。
・新しい CLI 駆動型ワークスペースを作成します。
・作成したら、[設定(Settings)] の下の [全般(General)] ページに移動します。
・[実行モード(Execution Mode)] を [ローカル(Local)] に変更します。
Terraform Cloud には以下の 2 つのオプションがあります。
- リモートで実行:状態の管理および plan コマンドと apply コマンドの実行は Terraform Cloud で行う
- ローカルで実行:状態は Terraform Cloud で管理するが、plan コマンドおよび apply コマンドはローカルで実行する
Terraform Cloud でコマンドを実行するには、エンドポイントへのパブリックアクセス権があるか、自社の環境内でエージェントを実行する必要があります(オンプレミスデバイスで Intersight Assist を設定する場合と同様)。
エージェントは、Terraform Cloud ビジネスプランで利用できます。今回の投稿では、Terraform Cloud で状態を管理し、コマンドはローカルで実行します。
・実稼働環境用ワークスペースに戻り、[キュー(Queue)] タブと [変数(Variables)] タブが削除されていることを確認します。
・サンプルの Terraform コードをコピーし、tf ファイルを更新します(Terraform ファイルは、上記の Github リポジトリにあります)。
・ページ上部の [設定(Settings)] リンクに移動し、[APIトークン(API Tokens)] を選択します。
・認証トークンを作成します。
・トークンをコピーします。
・ローカルマシンで、ホームディレクトリにファイルを作成し、
.terraformrc という名前を付けます(ファイルが存在しない場合)。
・組織用に作成したログイン情報/トークン情報を追加します。以下に例を示します。
CONMURPH:~$ cat ~/.terraformrc
credentials "app.terraform.io" {
token="<ENTER THE TOKEN HERE> "
}
- これで、上記の Github リポジトリから取得した Terraform のサンプルファイル、組織/ワークスペースを含む更新された tf ファイル、この組織にアクセスするためのトークンを含む .terraformrc ファイルが揃いました。
- Terraform のサンプルファイルと tf ファイルが含まれているフォルダに移動します。
- terraform init コマンドを実行します。すべて正しければ、リモートバックエンドが初期化され、ACI プラグインがインストールされます。
800
- terraform plan コマンドと terraform apply コマンドを実行して、設定の変更を適用します。
- apply が正常に完了したら、Terraform Cloud の組織を確認します。
- [状態(States)] タブに、状態管理ファイルの最初のバージョンが表示されます。このファイルを見ると、ローカルマシンにあったファイルの内容とまったく同じであることがわかります。ただし今度は、Terraform Cloud が管理しています。
- これで、チームメンバーとコラボレーションする場合は、コマンドはすべてローカルで実行しながら、Terraform Cloud で状態管理ファイルを一元管理できます(環境の管理方法によっては、ロック機能の確認が必要になる場合があります)。