この記事は、Data Centre の Technical Solutions Architect である Conor Murphy によるブログ「Introduction to Terraform with Cisco ACI, Part 4 」(2021/2/12)の抄訳です。
「Terraform の概要」投稿をまだ読まれていない場合は、ぜひお読みください。このセクションでは、Terraform Cloud を利用した、Terraform リモートバックエンドについて説明します。
https://github.com/conmurphy/intro-to-terraform-and-aci-remote-backend.git
Terraform の各ファイルについては、上記リンクの投稿を参照してください。backend.tf ファイルについては、今回の投稿で説明します。
利用している独自の ACI ラボがすでにあるかもしれませんが、ない場合は、DevNet サンドボックスで ACI Simulator を使用できます。
Terraform を使用するにあたって重要なのは、状態が管理される場所と方法を理解することです。最初のセクションで、init、plan、apply コマンドを実行する際に、Terraform がラップトップにインストールされています。コマンドを実行したフォルダには、状態管理ファイル(terraform.tfstate)も作成されています。
8
概念を理解してテストするまでは問題なくても、共有環境や実稼働環境ではうまくいかないことがあります。たとえば、チームの他のメンバーが Terraform のコマンドを実行したい場合はどうすればよいのでしょうか。状態管理ファイルはそれぞれ独自に持っているのでしょうか。
これらの疑問は、Terraform バックエンドの概念で解決できます。
「Terraform バックエンドによって、状態のロード方法と、apply などのコマンド実行方法が決まります。Terraform バックエンドで抽象化することにより、作業管理ファイルをローカル以外に保管したり、リモートから実行したりすることができます。
バックエンドの主なメリットを次に示します。
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 つのオプションがあります。
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> "
}
800