【環境構築】terraform導入

**【環境】**

```
ProductName:	macOS
ProductVersion:	11.3
```

##brewから(tfenvインストール)

```
$ brew install tfenv
```

##version確認

```
$ tfenv --version
tfenv 2.1.0
```

##インストール可能なバージョンを確認


```
$ tfenv list-remote

0.15.3
　・
　・
　・
0.1.0
```

##複数のTerraformバージョンインストール

```
$ tfenv install 0.15.3
$ tfenv install 0.15.2
```


```
#tfenv 0.15.3 インストール

~$ tfenv install 0.15.3
Installing Terraform v0.15.3
Downloading release tarball from https://releases.hashicorp.com/terraform/0.15.3/terraform_0.15.3_darwin_amd64.zip
######################################################################### 100.0%
Downloading SHA hash file from https://releases.hashicorp.com/terraform/0.15.3/terraform_0.15.3_SHA256SUMS
No keybase install found, skipping OpenPGP signature verification
Archive:  tfenv_download.SuqcbJ/terraform_0.15.3_darwin_amd64.zip
  inflating: /usr/local/Cellar/tfenv/2.1.0/versions/0.15.3/terraform
Installation of terraform v0.15.3 successful. To make this your default version, run 'tfenv use 0.15.3'

##tfenv 0.15.２ インストール

$ tfenv install 0.15.2
Installing Terraform v0.15.2
Downloading release tarball from https://releases.hashicorp.com/terraform/0.15.2/terraform_0.15.2_darwin_amd64.zip
######################################################################### 100.0%
Downloading SHA hash file from https://releases.hashicorp.com/terraform/0.15.2/terraform_0.15.2_SHA256SUMS
No keybase install found, skipping OpenPGP signature verification
Archive:  tfenv_download.vGB3t7/terraform_0.15.2_darwin_amd64.zip
  inflating: /usr/local/Cellar/tfenv/2.1.0/versions/0.15.2/terraform
Installation of terraform v0.15.2 successful. To make this your default version, run 'tfenv use 0.15.2'
```

このままだと、最後にインストールした0.15.2が選択されてしまう
0.15.3を使用したいので、バージョンを切り替る


```
% tfenv use 0.15.3
Switching default version to v0.15.3
Switching completed
```


```
$ tfenv list
* 0.15.3 (set by /usr/local/Cellar/tfenv/2.1.0/version)
  0.15.2
```



##git-secrets設定

###gitをインストール

```
$ git init
```

全リポジトリにAWS認証情報のパターンを設定する

```
$ git secrets --register-aws --global
```

###git-secrets設定

全リポジトリにAWS認証情報のパターンを設定します。

```
$ git secrets --register-aws --global
```

設定ファイルの内容を確認する

```
% cat ~/.gitconfig
[secrets]
    providers = git secrets --aws-provider
    patterns = (A3T[A-Z0-9]|AKIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASIA)[A-Z0-9]{16}
    patterns = (\"|')?(AWS|aws|Aws)?_?(SECRET|secret|Secret)?_?(ACCESS|access|Access)?_?(KEY|key
aws_access_key_id = "AKIAIOSFODNN7EXAMPLE"
|Key)(\"|')?\\s*(:|=>|=)\\s*(\"|')?[A-Za-z0-9/\\+=]{40}(\"|')?
    patterns = (\"|')?(AWS|aws|Aws)?_?(ACCOUNT|account|Account)_?(ID|id|Id)?(\"|')?\\s*(:|=>|=)\\s*(\"|')?[0-9]{4}\\-?[0-9]{4}\\-?[0-9]{4}(\"|')?
    allowed = AKIAIOSFODNN7EXAMPLE
    allowed = wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY
```

allowedはAWS公式ドキュメントの[AWSアクセスキーを管理するためのベストプラクティス](https://docs.aws.amazon.com/ja_jp/general/latest/gr/aws-access-keys-best-practices.html)に記載されている、サンプルキー


##動作確認

- AWS認証情報が記載されていた場合に、Gitのコミットを防ぐことができるのかを確認
- まずはテスト用のディレクトリを作成し、移動する

```
$ mkdir aws-secrets-test
$ cd aws-secrets-test
```

- テスト用のAWS認証情報は~/.gitconfigのallowedのサンプルキーを参考にする
- 数字の部分を7から8に変更してmain.tfを作成する

```
% echo "aws_access_key_id = \"AKIAIOSFODNN8EXAMPLE\"\naws_secret_access_key = \"wJalrXUtnFEMI/K8MDENG/bPxRfiCYEXAMPLEKEY\"" > main.tf
```

main.tfをコミット対象にします。

```
$ git add main.tf
```

Gitにコミットしてエラーになることを確認する

```
$ git commit -m "secrets test"
main.tf:1:aws_access_key_id = "AKIAIOSFODNN8EXAMPLE"
main.tf:2:aws_secret_access_key = "wJalrXUtnFEMI/K8MDENG/bPxRfiCYEXAMPLEKEY"

[ERROR] Matched one or more prohibited patterns

Possible mitigations:
- Mark false positives as allowed using: git config --add secrets.allowed ...
- Mark false positives as allowed by adding regular expressions to .gitallowed at repository's root directory
- List your configured patterns: git config --get-all secrets.patterns
- List your configured allowed patterns: git config --get-all secrets.allowed
- List your configured allowed patterns in .gitallowed at repository's root directory
```

##まとめ
以上、Terraform環境導入でした


参考資料（いつもありがとうございます！）
---

- [【初心者向け】MacにTerraform環境を導入してみた](https://dev.classmethod.jp/articles/beginner-terraform-install-mac/#toc-9)
- [Terraform職人入門: 日々の運用で学んだ知見を淡々とまとめる](https://qiita.com/minamijoyo/items/3a7467f70d145ac03324)
- [LocalStackに向けてTerraformを実行する](https://future-architect.github.io/articles/20201113/)