Chapter 05

Terraform実行

himekoh
himekoh
2022.10.26に更新

aws-vault 実行

以下のコマンド例のように aws-vault を実行し、設定した AWS Credential を使用できるようにします。
※sample は自身が設定した任意の AWS Credential 名です。

$ aws-vault exec sample
Enter MFA code for arn:aws:iam::000000000000:mfa/Terraform:

Terraform 実行方法

docker-compose.yml が存在するディレクトリへ移動します。
実行する tf ファイルを作成し、準備ができたら以下のコマンドを実行します。

$ docker compose run --rm terraform  ***

***の部分は任意の Terraform コマンドを入れます。
--rm オプションをつけているのでコマンド実行時にコンテナが実行され、実行後には自動で削除されます。

コマンド例

$ docker compose run --rm terraform init
$ docker compose run --rm terraform fmt
$ docker compose run --rm terraform validate
$ docker compose run --rm terraform plan
$ docker compose run --rm terraform apply
$ docker compose run --rm terraform destroy

Terraform 稼働確認 ※任意

環境設定が正しく行えていることを確認したい場合は以下の手順に従って稼働確認を実施してください。

稼働確認用 tf ファイル作成

以下の tf ファイルを作成して docker-compose.yml と同じディレクトリに作成します。

sample.tf
terraform {
  required_version = "1.2.4"
  required_providers {
    aws = {
      source  = "hashicorp/aws"
      version = "~> 4.27.0"
    }
  }
}

variable "aws_region" {
  default = "ap-northeast-1"
}

provider "aws" {

  region = var.aws_region
}

resource "random_string" "sample" {
  length  = 16
  upper   = false
  lower   = true
  numeric = false
  special = false
}
resource "aws_s3_bucket" "sample" {
  bucket = "terraform-test-${random_string.sample.result}"
}

Terraform 実行

以下の順で1つずつ Terraform コマンドを実行します。

$ docker compose run --rm terraform init
$ docker compose run --rm terraform plan
$ docker compose run --rm terraform apply

terraform apply 実行時には下記の確認がでるので、"yes"と入力します。

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

実行が成功すれば以下のメッセージが出力されます。

Apply complete! Resources: 2 added, 0 changed, 0 destroyed.

そのままターミナルで以下の AWS CLI コマンドを実行して S3 バケットが作成されていることを確認します。
(”terraform-test-”以降はランダムな文字列です)

$ aws s3 ls
2022-10-26 18:30:12 terraform-test-tcvpftbxsyicxpph

最後に作成したリソースを以下のコマンドで削除します。
terraform apply 実行時と同様に確認がでるので、"yes"と入力します。

$ docker compose run --rm terraform destroy

補足

MFA を使用している場合には aws-vault によって使用できる AWS Credential は 1 時間で失効します。
失効した状態のままで Terraform コマンドを実行すると以下のエラーが発生します。

 Error: error configuring Terraform AWS Provider: no valid credential sources for Terraform AWS Provider found.

上記が発生した場合はターミナルで"exit"と入力して aws-vault を解除してから、再度”aws-vault exec”を実行してから Terraform コマンドを実行してください。
MFA は一度入力すると 12 時間程度は再度入力しなくても”aws-vault exec”を実行できます。