0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

WindownsにWSLを導入し、Terraformを実行できる環境を作る

Posted at

初めに

Windows環境で、WSLを導入しTerraformを実行できるようにするまでの手順を備忘録として残します。

この記事ではWindows上で以下の内容を説明します。

  • WSLの導入
  • AWS CLIのインストール
  • tfenvを使ったterraformのインストール
  • terraformの実行準備
  • teraformの実行

WSLの導入

いろいろCLIで操作するにあたり、Linuxでの操作のほうが慣れているので、WSLをインストールし以降の項目はWSL上で操作する前提とします。

WSLとはWindows上でLinux環境を再現できる機能になります。詳細は👇のドキュメントをご覧ください。

👇のドキュメントを参考にWSLのインストールを進めます。

検索バーから「CMD」を開き、 wsl --install を実行します。

デフォルトではUbuntuがインストールされます。
ほかのディストリビューションがよい場合は適宜ドキュメントを参考にインストールを進めてください。

インストールが進むと👇のような出力がされ、ユーザの作成とパスワードの作成を行います。

ダウンロードしています: Ubuntu
インストールしています: Ubuntu
ディストリビューションが正常にインストールされました。'wsl.exe -d Ubuntu' を使用して起動できます
Ubuntu を起動しています...
Provisioning the new WSL instance Ubuntu
This might take a while...
Create a default Unix user account: {ユーザ名}
New password:
Retype new password:
passwd: password updated successfully
To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

ユーザ作成後、プロンプトが👇の様になっていれば正常にインストールされています。

XXXXXXX@AS-HN-PC0471:/mnt/c/Users/XXXXXXX$

インストールが完了するとエクスプローラーにLinuxの項目が追加されています。
image.png

VScodeのインストール

私は個人的にVScodeの使用頻度が高く操作に慣れているので、以降の操作はVScodeをもとに説明します。

VScodeがインストールされていなければ👇からインストールできます。

VScodeを起動し、画面左下の「><」を選択します。

image.png

「WSLへの接続」をクリックします

image.png

画面左下の「><」が「>< WSL:Ubuntu」に代わっていればWSLに接続ができています。

image.png

AWS CLIのインストール

TerraformとAWSアカウント間でやり取りできるようにするためにアクセスキーを設定する必要があります。
その設定の際にAWS CLIが必要なのでまずはAWS CLIのインストールをしていきます。

AWS CLIインストールの公式ドキュメントは下記になります。

👇のコマンドを順に実行し、インストールを進めます。

curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
  • unzipにインストールが必要になるケースがあるみたいです。
  • sudoのパスワードはWSLインストール時に設定したものになっています。

インストール完了後 aws --versionを実行し👇のようなバージョンが出力されていればインストール完了です。

aws-cli/2.31.18 Python/3.13.7 Linux/6.6.87.2-microsoft-standard-WSL2 exe/x86_64.ubuntu.24

tfenvでTerraformをインストールする

Terraformを使えるようにするにあたって、tfenvというツールを用いてインストールすると、バージョン管理などが容易になるので今回はtfenvを導入します。

tfenvはTerraformのバージョン管理を容易にするツールです。複数のプロジェクトで異なるバージョンのTerraformを使いたい場合や、新しいバージョンをテストしたい場合に、コマンドで簡単にバージョンのインストールと切り替えができます。

tfenvの詳しい使い方は後述します。

tfenvはGitで公開されておりクローンして使うので、gitのインストールが必要になってきます。
インストールの確認は git -v コマンドでできます。
👇のようにバージョンが出力されていればインストール済みです。

git version 2.43.0

デフォルトでインストールされていない場合は👇を参考にインストールしてください。

gitが導入出来たら次はtfenvを使えるようにしていきます。
tfenvのリポジトリは👇になります。

👇のコマンドでリポジトリをクローンしていきます。

git clone https://github.com/tfutils/tfenv $HOME/.tfenv
echo 'export PATH="$HOME/.tfenv/bin:$PATH"' >> ~/.bash_profile

コマンドが完了し、tfenv -vで👇のようにバージョンが表示されればインストール成功です。

tfenv 3.0.0-70-gc8eb40

tfenvの使い方ざっくり説明

続いてtfenvを使う上で得しようするコマンドを説明します。

  • tfenv list-remote
    インストールできるteraformのバージョンの一覧を出力します。長いのでgrepと併用するといいと思います。👇出力例
1.14.0-beta3
1.14.0-beta2
1.14.0-beta1
1.14.0-alpha20250911
1.14.0-alpha20250903
1.14.0-alpha20250827
1.14.0-alpha20250813
1.14.0-alpha20250806
1.14.0-alpha20250724
1.14.0-alpha20250716
1.13.4
1.13.3
1.13.2
1.13.1
1.13.0
1.13.0-rc1
1.13.0-beta3
1.13.0-beta2
1.13.0-beta1
1.13.0-alpha20250708
1.13.0-alpha20250702
1.13.0-alpha20250623
1.13.0-alpha20250604
~~~~~~~~以下省略~~~~~~~~
  • tfenv install {インストールするバージョン or latest}
    バージョンを指定した場合はそのバージョンを、latestの場合は最新のバージョンをインストールします。

  • tfenv use {インストール済みのバージョン}
    インストールしたバージョンから使用するバージョンを選択します。👇1.13.4を指定した出力例
Switching default version to v1.13.4
Default version (when not overridden by .terraform-version or TFENV_TERRAFORM_VERSION) is now: 1.13.4
  • tfenv list
    インストール済みのバージョンのリストを表示します。使用されているバージョンの横に*が付きます。
    👇出力例
* 1.13.4 (set by /home/asl_root/.tfenv/version)
  1.13.3

よく使うであろうコマンドはこんな感じだと思います。他が気になる方はリポジトリを読んでみてください。

terraformの実行準備

tfenvのインストールが完了したので、実際にteraformでAWSリソースを操作できるように設定していきます。

まず初めに、先ほどインストールしたAWS CLIで使用するプロファイルを作成します。

👇キャプチャを参考にAWSのコンソールから「IAM」>「ユーザ」>「セキュリティ認証情報」タブのアクセスキーの項目からアクセスキーを発行します。

image.png

アクセスキーの漏洩に注意してください。

アクセスキーを取得したら、aws configureコマンドで設定していきます。

AWS Access Key ID [None]: XXXXXXXXXXXXXXXXXXXX
AWS Secret Access Key [None]: YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
Default region name [None]: ap-northeast-1 #任意のリージョン
Default output format [None]: json #任意の出力

teraformの実行

準備が整ったので、実際にteraformでAWSリソースの構築、削除を試してみます。

👇のサンプルコードを「main.tf」として保存します。

provider "aws" {
  
}

resource "aws_s3_bucket" "test_bucket" {
  bucket = "qiita-test-bucket-miyazaki" ###任意のバケット名
  acl    = "private"

  tags = {
    Name        = "Qiita_test_bucket_Miyazaki" ###付与するタグ
  }
}

保存出来たらterraform initを実行します。
👇の出力が出ればinitは成功です。

Terraform has been successfully initialized!

You may now begin working with Terraform. Try running "terraform plan" to see
any changes that are required for your infrastructure. All Terraform commands
should now work.

If you ever set or change modules or backend configuration for Terraform,
rerun this command to reinitialize your working directory. If you forget, other
commands will detect it and remind you to do so if necessary.

続いてterraform planで作成するリソースの確認をします。
👇のように作成予定のリソースが表示されればplanは成功です。

  # aws_s3_bucket.test_bucket will be created
  + resource "aws_s3_bucket" "test_bucket" {
      + acceleration_status         = (known after apply)
      + acl                         = "private"
      + arn                         = (known after apply)
      + bucket                      = "qiita-test-bucket-miyazaki"
      + bucket_domain_name          = (known after apply)
      + bucket_prefix               = (known after apply)
      + bucket_region               = (known after apply)
      + bucket_regional_domain_name = (known after apply)
      + force_destroy               = false
      + hosted_zone_id              = (known after apply)
      + id                          = (known after apply)
      + object_lock_enabled         = (known after apply)
      + policy                      = (known after apply)
      + region                      = "ap-northeast-1"
      + request_payer               = (known after apply)
      + tags                        = {
          + "Name" = "Qiita_test_bucket_Miyazaki"
        }
      + tags_all                    = {
          + "Name" = "Qiita_test_bucket_Miyazaki"
        }
      + website_domain              = (known after apply)
      + website_endpoint            = (known after apply)

      + cors_rule (known after apply)

      + grant (known after apply)

      + lifecycle_rule (known after apply)

      + logging (known after apply)

      + object_lock_configuration (known after apply)

      + replication_configuration (known after apply)

      + server_side_encryption_configuration (known after apply)

      + versioning (known after apply)

      + website (known after apply)
    }

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

作成予定のリソースに問題がないことが確認できたので、terraform applyで実際にリソースを作成します。
👇のように「Apply complete!」が出力されればリソースの作成は完了です。

 Enter a value: yes  ###yesと入力して、enter押下

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

Applyが成功しましたが、本当にAWS上にリソースが作成されているか確認してみます。
aws s3 lsでアカウント上のs3を確認できるので確認してみます。

xxxxxx@AS-HN-PC0471:~/work$ aws s3 ls | grep qiita
2025-10-22 21:36:40 qiita-test-bucket-miyazaki

ということで期待通りterraformでs3バケットを作成できました!
最後にterraform destroyコマンドでs3バケットを消して終わりにします。
👇のように「Destroy complete!」が出力されればリソースの削除は完了です。

Enter a value: yes  ###yesと入力して、enter押下

Destroy complete! Resources: 1 destroyed.

無事にTerraformの実行環境を用意できたので、次はSSM接続のテンプレートなんかも作ってみようかと考えてます:thinking:

今回の記事は以上になります。最後までご覧いただきありがとうございました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?