M1Macでterraformerを動かす方法(2021年8月版)

# この記事は何？
既存AWS環境をterraformのコードにしてくれる`terraformer`というツールをM1 Macで動かせるようにするために行った記事です。

# 気づいたきっかけ
brewでterraformとterraformer環境を作って実行したところ、以下のようなエラーが発生したことです。~/.terraform.dの中を見てもpluginsディレクトリがありませんでした。

```
% terraformer import aws --regions=ap-northeast-1 --resources=s3
2021/08/01 17:02:00 aws importing region ap-northeast-1
2021/08/01 17:02:00 open /Users/hogehoge/.terraform.d/plugins/darwin_arm64: no such file or directory
```

# 先に結論を...

- terrafomersはREADMEに書いてあるとおりterraform 1.0系や0.14系未対応なので、0.13系の最新版をtfenvを利用して導入する
- 上記を行ったあとでbrewを使ってterraformerを導入する
- brewでterraformを導入しない方がよさそう

# terraformerとは？
terraformerというのは、既存クラウド環境の設定を読み込んでterraformのコードにしてくれるツールです。ただし、Googleの公式ツールではありません。(Google傘下の[WAZE](https://ja.wikipedia.org/wiki/Waze)社のSREが作ったツールのようです)
https://github.com/GoogleCloudPlatform/terraformer

AWS以外にGCPやAzureといったクラウド、そしてKubernates, Fastly, GitHub, Cloudflare, Datadog, Grafana, Oktaなど多くのサービスに対応しています。
https://github.com/GoogleCloudPlatform/terraformer/tree/master/docs

terraformのコードを1から書くのは大変ですが、こうしたツールを使うことで作成時間の省力化につながるかと思います。

なお、同様のツールで[terraforming](https://github.com/dtan4/terraforming)というツールもありますが、2019年で更新が止まってしまっているので、いま使うならterraformerが良さそうです。

# 構築方法
terraformerのREADMEにあるCapabilitiesを見ると、以下のような記述があります。
https://github.com/GoogleCloudPlatform/terraformer#capabilities

```
Capabilities
(略)
6. Support terraform 0.13 (for terraform 0.11 use v0.7.9).
```

つまりterraformerはterraform 0.13 をサポートしており、1.0系や0.14系には未対応でした。やはりREADMEはちゃんと読まないとダメですね(笑)

ただこの時、brewでterraformを導入しても正しく動いてくれませんでした。（私の環境の問題のせいかもしれません）

そこでtfenvを利用してterraform 0.13系を導入し(2021年8月1日現在だと`0.13.7`)、その後terraformerを導入して構築していきます。

# tfenvとtfenvを利用したterraformの導入
```
### tfenvの導入
% brew install tfenv

### tfenvでterraform 0.13.7 を導入
% tfenv install 0.13.7
Installing Terraform v0.13.7
Downloading release tarball from https://releases.hashicorp.com/terraform/0.13.7/terraform_0.13.7_darwin_amd64.zip
(略)
Installation of terraform v0.13.7 successful. To make this your default version, run 'tfenv use 0.13.7'
%

### terraformのコードを置くディレクトリに移動する。
### 以後の作業はこのディレクトリ内で行う。
% cd {terraformのコードを置くディレクトリ}

### terraform 0.13.7を利用するように設定
% tfenv use 0.13.7
Switching default version to v0.13.7
Switching completed
%

### terraformのバージョン確認
% terraform version
Terraform v0.13.7
(以下略)
% 
```
# terraformerの導入
```
### terraformerの導入
% brew install terraformer
==> Downloading https://ghcr.io/v2/homebrew/core/terraformer/manifests/0.8.15
(以下略)
% 

### terraformerのバージョン確認
% terraformer version
Terraformer v0.8.15
% 
```
# 動作確認
以下のようにして動作確認をします。なお事前にawscliを導入して、aws configでdefault設定を行い、既存AWS環境に接続できるようにしておきます。(awscliの導入や設定方法は他の記事もあるので割愛します）

```
### init.tfファイルを作成しawsの指定をする
% echo 'provider "aws" {}' > init.tf

### 初期化する(terraform使う時のお約束)
% terraform init

Initializing the backend...

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

### terraformerでS3の設定をimportする
### 事前にaws configでdefault設定を行っておくこと
% terraformer import aws --regions=ap-northeast-1 --resources=s3
2021/08/01 23:21:15 aws importing region ap-northeast-1
2021/08/01 23:21:19 aws importing... s3
2021/08/01 23:21:20 aws done importing s3
2021/08/01 23:21:20 Number of resources for service s3: 1
2021/08/01 23:21:20 Refreshing state... aws_s3_bucket.tfer--XXXXXXXX    ### バケット名を伏せています
2021/08/01 23:21:22 Filtered number of resources for service s3: 1
2021/08/01 23:21:22 aws Connecting....
2021/08/01 23:21:22 aws save s3
2021/08/01 23:21:22 aws save tfstate for s3
%
```
# まとめ
このようにすることで、M1Macでもterrafomerが利用できるようになります。

そのうち、terrafomerもterraform 1.0系に対応してくると思うそれまでの記事ですが、2021年8月時点では情報も錯綜していて困っている人もいるのではないか？と思ったので記事を作成しました。

何かのお役に立てば幸いです。

# 参考ページ
https://dev.classmethod.jp/articles/terraformer-version-dependence/
https://zenn.dev/ww24/articles/e52e7a9f3332b4
https://blog.mizukami.sh/entry/2021/01/02/terraform-on-apple-silicon-temp