WSL(Ubuntu)でTerraform利用準備と備忘メモ

WSL2のUbuntuを使って、Terraformを操作していく。

# 環境
以下。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/229539/4b478df2-f336-1be0-f9c7-6e48fb5735fc.png)

# 前提
- Windowsがインターネットに接続できていること
- [WSLにUbuntuをインストール済であること](https://qiita.com/If_it_bleeds-we_can_kill_it/items/3ce21243f3caceeb4a81)
- Ubuntu-20.04
- AWSでIAMユーザのシークレットが払い出されていること

# やり方
## WSL準備
- Powershellを開く
<br>

- powershell：コンソールログ記録（新規）
Teratermログのようなコンソールの記録を取るばあい、Powershellではこうする。
```powershell:Powershell
Start-Transcript -Path 保存先パス\ログファイル名.log
```
<br>

- powershell：WSLリスト表示
```powershell:Powershell
wsl -l -v

  NAME            STATE           VERSION
* Ubuntu-20.04    Stopped         2
```
Ubuntuが選択されていることを確認して次へ。
<br>

- powershell：WSL実行
```powershell:Powershell
wsl


Welcome to Ubuntu 20.04.4 LTS (GNU/Linux 5.15.90.1-microsoft-standard-WSL2 x86_64)
 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Thu Apr  6 15:17:53 JST 2023

  System load:  0.61               Processes:             9
  Usage of /:   1.2% of 250.92GB   Users logged in:       0
  Memory usage: 3%                 IPv4 address for eth0: 172.22.233.133
  Swap usage:   0%

0 updates can be applied immediately.

The list of available updates is more than a week old.
To check for new updates run: sudo apt update

This message is shown once a day. To disable it please create the
/home/USER/.hushlogin file.
```
実行するとプロンプトがpowershellの「>」から「$」に変わり、Ubuntuのシェルセッションに遷移する。
<br>

## AWS CLIインストール
- powershell(Ubuntu)：AWSCLIインストール
```shell-session:Powershell(Ubuntu-20.04)
$ sudo apt install awscli
```
<br>

## （定型：次回以降も繰り返し）AWSクレデンシャル投入
- powershell(Ubuntu)：環境変数にIAMユーザのシークレットとリージョンを投入
```shell-session:Powershell(Ubuntu-20.04)
$ export AWS_ACCESS_KEY_ID=AKXXXXXXXXXXXXXXXXXX
$ export AWS_SECRET_ACCESS_KEY=XXXX!!XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
$ export AWS_DEFAULT_REGION=ap-northeast-1
```
※exitなどでログアウト、OS再起動等をすると、この環境変数は消えます。再ログイン時にこれを改めて実行。
<br>

- powershell(Ubuntu)：AWSのクレデンシャルを登録
```shell-session:Powershell(Ubuntu-20.04)
$ aws configure
AWS Access Key ID [None]: ${AWS_ACCESS_KEY_ID}
AWS Secret Access Key [None]: ${AWS_SECRET_ACCESS_KEY}
Default region name [None]: ${AWS_DEFAULT_REGION}
Default output format [None]: text
```
※exitなどでログアウト、OS再起動のあと、これを改めて実行。
<br>



- powershell(Ubuntu)：AWSアカウントのクレデンシャル確認
```shell-session:Powershell(Ubuntu-20.04)
$ aws sts get-caller-identity --query Account --output text
```
※exitなどでログアウト、OS再起動のあと、これを改めて実行。AWSのアカウントIDが出ればOK.
<br>

## 各種ツールインストール
- powershell(Ubuntu)：requiredパッケージのインストール
```shell-session:Powershell(Ubuntu-20.04)
$ sudo apt-get install build-essential procps curl file git
```
<br>

- powershell(Ubuntu)：Homebrewのインストール
```shell-session:Powershell(Ubuntu-20.04)
$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
```
<br>

- powershell(Ubuntu)：Homebrewのパスを追加
```shell-session:Powershell(Ubuntu-20.04)
$ test -d ~/.linuxbrew && PATH="$HOME/.linuxbrew/bin:$HOME/.linuxbrew/sbin:$PATH"
$ test -d /home/linuxbrew/.linuxbrew && $ PATH="/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin:$PATH"
$ test -r ~/.bash_profile && echo "export PATH='$(brew --prefix)/bin:$(brew --prefix)/sbin'":'"$PATH"' >>~/.bash_profile
$ echo "export PATH='$(brew --prefix)/bin:$(brew --prefix)/sbin'":'"$PATH"' >>~/.profile
```
<br>

- powershell(Ubuntu)：Homebrewのパスが通っているかの確認でバージョンを確認
```shell-session:Powershell(Ubuntu-20.04)
$ brew --version

Homebrew 3.4.11
```
<br>

## Terraform関連のインストール
- powershell(Ubuntu)：tfenvインストール
```shell-session:Powershell(Ubuntu-20.04)
$ brew install tfenv

==> Downloading https://ghcr.io/v2/homebrew/core/bzip2/manifests/1.0.8-1
######################################################################## 100.0%
```
<br>

- powershell(Ubuntu)：tfenvインストール確認
```shell-session:Powershell(Ubuntu-20.04)
$ tfenv --version

tfenv 2.2.3
```
<br>


- powershell(Ubuntu)：terraformバージョン確認
```shell-session:Powershell(Ubuntu-20.04)
$ tfenv list-remote

1.2.0-rc2
1.2.0-rc1
1.2.0-beta1
1.2.0-alpha20220413
1.2.0-alpha
1.1.9
1.1.8
・・・
・・・
```
<br>

- powershell(Ubuntu)：terraformバージョン指定インストール
この場合、「0.12.5」バージョンを選択してインストールしている。
```shell-session:Powershell(Ubuntu-20.04)
$ tfenv install 0.12.5

Installing Terraform v0.12.5
Downloading release tarball from https://releases.hashicorp.com/terraform/0.12.5/terraform_0.12.5_linux_amd64.zip
```
<br>

- powershell(Ubuntu)：terraformバージョン指定
この場合、「0.12.5」バージョンを指定
```shell-session:Powershell(Ubuntu-20.04)
$ tfenv list
$ tfenv use 0.12.5
$ tfenv list
$ terraform -v

Terraform v0.12.5

Your version of Terraform is out of date! The latest version
is 1.1.9. You can update by downloading from www.terraform.io/downloads.html
```
<br>

## Terraform:リソースの作成
- powershell(Ubuntu)：リソース作成用ディレクトリ作成、カレントディレクトリ移動
```shell-session:Powershell(Ubuntu-20.04)
$ mkdir example
$ cd example
$ pwd
```
<br>

- powershell(Ubuntu)：Terraformメインファイルの作成
```shell-session:Powershell(Ubuntu-20.04)
$ touch main.tf
```
<br>

- powershell(Ubuntu)：Terraformメインファイルの編集
```shell-session:Powershell(Ubuntu-20.04)
$ nano main.tf
```

```tf:main.tf
provider "aws" {
  region  = "ap-northeast-1"
  version = "4.22.0"
}
```
リージョン名、プロバイダーバージョンは任意変更。
<br>


- powershell(Ubuntu)：（**初回のみ**）Terraform init　リソース作成用バイナリダウンロード、初期化
```shell-session:Powershell(Ubuntu-20.04)
$ pwd
$ terraform init
```
※この場合、exampleディレクトリでinitすること。そのためにpwdでカレントディレクトリをチェックしている。
<br>


- エディタnanoで良い感じにtfファイル、つまりリソースを書いていく。
ある程度ソースコード（.tfファイル）にリソースを書いたら、それをAWSに適用する。
<br>

- powershell(Ubuntu)：Terraform plan リソース実行計画
Dry-Runとなる。ここでエラーやWarnが出たら、ソースコードを適宜修正する。
ここでもexampleディレクトリがカレントなのを確認するためpwdしている。
```shell-session:Powershell(Ubuntu-20.04)
$ pwd
$ terraform plan
```
<br>

- powershell(Ubuntu)：Terraform apply リソース作成
実際にリソースをクラウドへ作成する。失敗が許されない部分。
いろいろリソースが表示された後、yes　noが出るので、yesでEnterする。
```shell-session:Powershell(Ubuntu-20.04)
$ pwd
$ terraform apply

yes
```
<br>

- powershell(Ubuntu)：Terraform tfstate リソース状態ファイル確認
リソースの状態がここに記載されるため、軽くチェックする。
```shell-session:Powershell(Ubuntu-20.04)
$ pwd
$ cat terraform.tfstate
```
<br>


- powershell(Ubuntu)：Terraform destroy リソース削除
リソースを削除する。**リソースをすべて消すので注意する。**
なお、ソースコードは消されない。あくまでもリソースが消える。
いろいろリソースが表示された後、yes　noが出るので、yesでEnterする。
```shell-session:Powershell(Ubuntu-20.04)
$ pwd
$ terraform destroy

yes
```
<br>

## 作業終了
- powershell(Ubuntu)：Ubuntuからログアウト
```shell-session:Powershell(Ubuntu-20.04)
$ exit
```
プロンプトがubuntuの「$」から、powershellの「>」に変わる。
<br>

- powershell：コンソールログ終了
取ってたログを止める。
```powershell:Powershell
Stop-Transcript
```
<br>


# 参考
- UbuntuにHomebrewをインストール

https://tdomy.com/2021/12/how-to-install-homebrew-on-ubuntu/

- Ubuntu18.04LTSにlinuxbrew(linux版homebrew)を入れる

https://qiita.com/yoshinyan/items/b92dd303626360b43328

- 実践Terraform　AWSにおけるシステム設計とベストプラクティス (技術の泉シリーズ（NextPublishing）)
具体的なTerraformのソースコードの書き方はこの本がとってもおすすめ。

https://www.amazon.co.jp/%E5%AE%9F%E8%B7%B5Terraform-AWS%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E8%A8%AD%E8%A8%88%E3%81%A8%E3%83%99%E3%82%B9%E3%83%88%E3%83%97%E3%83%A9%E3%82%AF%E3%83%86%E3%82%A3%E3%82%B9-%E6%8A%80%E8%A1%93%E3%81%AE%E6%B3%89%E3%82%B7%E3%83%AA%E3%83%BC%E3%82%BA%EF%BC%88NextPublishing%EF%BC%89-%E9%87%8E%E6%9D%91-%E5%8F%8B%E8%A6%8F-ebook/dp/B07XT7LJLC