「Terraform Cloudの雰囲気を掴みたい」
Terraform CloudはStateファイルの管理やTerraformのCI/CDを楽にできる便利なツールです。
この記事では、そんなTerraform Cloudの雰囲気を掴む助けになると幸いです。
やってみた
Terraform Cloudのアカウント作成
以下サイトで、Terraform Cloudのアカウントを作成します。
https://app.terraform.io/signup/account
本記事の内容は、5名まで無料のFreeプランで実行可能です。
サンプルコード
以下のコードが入っているGithubリポジトリとワークスペースを紐付けます。
任意の名前でGithubリポジトリを作成して、以下のコードをpushします。
この後の手順で、Terraform Cloudのワークスペースと作成したリポジトリを紐づけます。
AWSのus-east-1リージョンにVPCを作成するという内容です。
main.tf
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 4.0"
}
}
cloud {
organization = "<オーガニゼーション名>"
hostname = "app.terraform.io"
workspaces {
name = "state-sample-remote"
}
}
}
# Configure the AWS Provider
provider "aws" {
region = "us-east-1"
}
# Create a VPC
resource "aws_vpc" "example" {
cidr_block = "10.0.0.0/16"
}
注目してもらいたいのは、cloudブロックの部分です。
The cloud block only affects Terraform CLI's behavior. When Terraform Cloud uses a configuration that contains a cloud block - for example, when a workspace is configured to use a VCS provider directly - it ignores the block and behaves according to its own workspace settings.
クラウド ブロックは、Terraform CLI の動作にのみ影響します。 Terraform Cloud がクラウド ブロックを含む構成を使用する場合 (たとえば、ワークスペースが VCS プロバイダーを直接使用するように構成されている場合)、ブロックを無視し、独自のワークスペース設定に従って動作します。
引用元: Terraform Cloud Settings - Terraform CLI | Terraform by HashiCorp
この部分は、ローカルでTerraform CLIを使用する場合に影響します。 Terraform Cloud上でapplyやplan(remote実行)を行うために必須の項目ではありません。
実際にこの部分を記載せずに、Terraform Cloud上で実行してみましたが正常にRunを行えました。
個人的にはTerraform CLIを使用しない場合でも、記載しておいた方が良いと思います 理由としては、他の人がコードを見たときにTerraform Cloudを使用していることがわかるためです。
ワークスペースの作成
Terraform Cloud側の作業です。
ワークスペースを作成します。
AWS認証情報の設定
ワークスペースを作成したら、変数を設定します。 AWS上にリソースをデプロイするために、IAMユーザーのアクセスキーとシークレットアクセスキーが必要です。
今回は個人検証用のOrganizationを使っているため、Organization全体で使用できるように設定しています。 ワークスペース個別に設定したり、Organizationで設定して特定のワークスペースで利用できるようにもできます。
Create a Credentials Variable Set | Terraform - HashiCorp Learn
ちなみに、Terraform CloudがAWSリソースにアクセスするために、IAMロールを使用することも可能です。(2023/1/31のアップデート)
補足
Terraform Cloud上でplan,applyを実行しない場合は(実行モード local、Stateファイルの管理等のみを行う)、AWS認証情報の設定をTerraform Cloud上に保存する作業は不要です。
本記事の内容はTerraform Cloud上でplan,applyを実行する実行モード remoteを使用しています。
Terraformの実行
「サイドバーのRuns」 > 「Actions」 > 「Start new Run」で手動実行できます。
リポジトリへのpushやPull Requestをトリガーに実行することもできます。
デフォルトでは、Planまで実行されて「Confirm & Apply」のボタンを押すことでApplyを実行することができます。 (承認不要で自動Applyする設定も可能です)
Stateファイル
「States」からStateファイルを確認できます。
(補足)ローカルでTerraform CLIを実行したい場合
Terraform Cloud APIトークンの作成
ローカルからTerraform Cloudを使用するために、APIトークンを作成します。
以下コマンドでトークンが作成されます。
terraform login
# プロンプトに従って必要事項入力
トークンはローカルの「~/.terraform.d/credentials.tfrc.json」に保存されます。
$ cat ~/.terraform.d/credentials.tfrc.json
{
"credentials": {
"app.terraform.io": {
"token": "<トークン>"
}
}
}
Log in to Terraform Cloud from the CLI | Terraform - HashiCorp Learn
トークンが作成できたら、通常通りTerraform CLIを実行できます。
terraform init
terraform plan
terraform apply
おわりに
Terraform CloudでAWSリソースをデプロイする方法でした。
興味が湧いた方は、公式のチュートリアルをやってみると面白いと思います。
今回の記事では基本的な機能を紹介しましたが、より実践的な内容を見てみたい方は以下の記事がおすすめです。
他にもTerraform Cloudの便利な機能をブログで紹介しています。良かったら、読んでもらえると嬉しいです。
Terraform Cloud の記事一覧 | DevelopersIO
以上、AWS事業本部の佐藤(@chari7311)でした。