【初心者向け】WindowsでTerraformをとりあえず触ってみる

記事タイトルとURLをコピーする

10月に入社しました技術1課の松田と申します。
初投稿となる今回は、WindowsでTerraformをお試しで触ってみよう、という記事です。

はじめに

対象読者

今回の記事では、次のような方を対象読者としています。

  • Terraformをとりあえず触ってみたい
  • WindowsでTerraformを動かしたい

今回の記事ではお試しということで、できるだけ手元の環境を汚さずTerraformを使えるようにしています。
WindowsでTerraformというとWSLを使うのがメジャーなようですが、今回は現状復帰が簡単にできるよう、WSLは使わずにやっていきます。

ちなみにそもそもTerraformって何?って方は、IaCでググると幸せになれます。

環境

今回使用する環境は以下の通りです。
ちなみにAWSアカウントは登録済みの前提で話を進めますので、ご了承ください。

  • AWS
  • Windows 10 Pro 64-bit
  • Terraform

Terraformのインストール

とりあえず公式サイトから、Terraformの実行ファイルをダウンロードしましょう。
Windowsは32-bit版と64-bit版がありますが、Windows 10の場合は64-bitを選んでまずOKです。

www.terraform.io

Zipファイルがダウンロードされます。
こちらを解凍すると"terraform.exe"というファイルが出てきますので、適当なフォルダに保存しておいてください。
私はとりあえず、"C:\Terraform\terraform_1.0.9_windows_amd64"というフォルダに保存してみました。

さて、Terraformを使用する準備はこれだけでOKです。
確認のため、コマンドプロンプトを起動して、先の手順で"terraform.exe"を保存したフォルダに移動し、terrform -vコマンドを実行してみてください。
以下のように、Terraformのバージョンが表示されればOKです。

f:id:swx-kei-matsuda:20211025144901p:plain

試しに使ってみる

ではインストールも済んだところで、簡単にAWSリソースをTerraformで作ってみます。
Terraformで、EC2インスタンスを作成・更新・削除という3ステップで実施します。

IAMユーザーの作成&アクセスキーの発行(省略可)

Terraformの利用には、AWSアクセスキーが必要になります。
新規でIAMユーザーを1つ作成し、アクセスキーを発行しておいてください。
アクセスキーの発行手順はこちらを参考に。

docs.aws.amazon.com

EC2インスタンスの作成

Terraformでは、リソースの作成時に.tfという拡張子のファイルを使用しますので、まずは.tfファイルを作成します。
お好きなテキストエディタで、下記の内容でファイルを作成してください。
ちなみに拡張子が.tfとなっていればファイル名はなんでもOKですが、作成したファイルは必ず"terraform.exe"と同じフォルダ内に保存するようにしてください(パスを通していないため)。

provider "aws" {
  access_key = "<xxxx>"
  secret_key = "<xxxx>"
  region = "ap-northeast-1"
}

resource "aws_instance" "example" {
        ami = "ami-0701e21c502689c31"
        instance_type = "t2.micro"
}

※今回はお試しということでアクセスキーをコード内に記述していますが、重大なセキュリティリスクとなりますので本番では使用しないようご注意ください。

ファイルを作成したら、コマンドプロンプトに戻ってterraform initコマンドを実行します。
この段階ではバックエンドの初期化が行われるだけで、リソ-スはまだ作成されません。

C:\Terraform\terraform_1.0.9_windows_amd64>terraform init

Initializing the backend...

Initializing provider plugins...
- Finding latest version of hashicorp/aws...
- Installing hashicorp/aws v3.63.0...
- Installed hashicorp/aws v3.63.0 (signed by HashiCorp)

Terraform has created a lock file .terraform.lock.hcl to record the provider
selections it made above. Include this file in your version control repository
so that Terraform can guarantee to make the same selections by default when
you run "terraform init" in the future.

Terraform has been successfully initialized!

初期化処理が完了したら、terraform applyコマンドを実行します。
ただし、これですぐにリソースが作成されるわけではなく、まずはこれから作成されるリソースが一覧表示されます。

C:\Terraform\terraform_1.0.9_windows_amd64>terraform apply

Terraform used the selected providers to generate the following execution plan. Resource actions are indicated with the
following symbols:
  + create

# 作成されるリソースの詳細
Terraform will perform the following actions:

  # aws_instance.example will be created
  + resource "aws_instance" "example" {
      + ami                                  = "ami-0701e21c502689c31"
      + arn                                  = (known after apply)
      + associate_public_ip_address          = (known after apply)
      + availability_zone                    = (known after apply)
      + cpu_core_count                       = (known after apply)
      + cpu_threads_per_core                 = (known after apply)
      + disable_api_termination              = (known after apply)
      + ebs_optimized                        = (known after apply)
      + get_password_data                    = false
      + host_id                              = (known after apply)
      + id                                   = (known after apply)
     
~中略~

# 作成されるリソースのサマリ
Plan: 1 to add, 0 to change, 0 to destroy.

これらに続いて、表示した内容で処理を実行するかどうかの確認メッセージが表示されます。
ここで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!と表示されればOKです。
これで無事、EC2インスタンスを作成することができました。

aws_instance.example: Creating...
aws_instance.example: Creation complete after 43s [id=i-008fa56fc6f3eff4b]

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

EC2インスタンスの更新

続けて、作成したインスタンスをTerraformから更新したいと思います。
先ほど作成した.tfファイルを以下のように修正し、Nameタグを追加しましょう。

provider "aws" {
  access_key = "<xxxx>"
  secret_key = "<xxxx>"
  region = "ap-northeast-1"
}

resource "aws_instance" "example" {
        ami = "ami-0701e21c502689c31"
        instance_type = "t2.micro"
        tags = {
          Name = "terraform-test"
        }
}

ここで、再度terraform applyを実行すると、以下のメッセージが表示されます。

C:\Terraform\terraform_1.0.9_windows_amd64>terraform apply

# ~中略~

Plan: 0 to add, 1 to change, 0 to destroy.

今回は既存のリソースに変更を加える処理ですので、0 to add, 1 to change, 0 to destroyとなっています。
ちなみに、インスタンスタイプの変更のようにリソースの再作成が発生する場合は、1 to add, 0 to change,1 to destroyと表示され、サマリから区別できるようになっています。

また、作成するときと同様に処理を実行するか確認が入りますので、yesと入力してください。 Apply complete!と表示されればOKです。

aws_instance.example: Modifying... [id=i-008fa56fc6f3eff4b]
aws_instance.example: Modifications complete after 1s [id=i-008fa56fc6f3eff4b]

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

EC2インスタンスの削除

では最後に、作成したインスタンスをTerraformから削除したいと思います。
削除する場合は、terraform destroyコマンドを実行します。
すると、今度は1 to destroyのメッセージが表示されます。

C:\Terraform\terraform_1.0.9_windows_amd64>terraform destroy

# ~中略~

Plan: 0 to add, 0 to change, 1 to destroy.

やはり処理の実行前に確認メッセージが表示されますので、yesと入力して削除を実行します。

aws_instance.example: Destroying... [id=i-008fa56fc6f3eff4b]
aws_instance.example: Destruction complete after 2m32s

Destroy complete! Resources: 1 destroyed.

さいごに

Terraformのお試しは以上になります。
今回は手元の環境を汚さない、とりあえずのお試しチュートリアルという形で記事にしてみました。
ちなみに原状復帰したい場合は、"terraform.exe"が保存されたフォルダを丸ごと削除してしまえばOKです。
WindowsでTerraformを使いたい!というケースはレアかと思いますが、何かのお役に立てば幸いです。

本格的にTerraformを使用する場合は、Windowsでそのまま使うよりも、WSLや仮想マシン上に環境を準備して使用するのがよいと思いますので、機会があればそちらも記事にしてみたいと思います。

おまけですが、以前読んだ技術書を張っておきます。
内容は確かmac向けですので、Windowsユーザーの方はLinux環境を用意しておくと、手を動かしながら読み進められると思います。

booth.pm

松田 渓(記事一覧)

2021年10月入社。散歩が得意です。