ひさびさのterraformerでハマる

# OverView

terraformerでAWSリソース取得を実施したところ、少々ハマったので記事にします。
背景として、PCをMac M1に変えてから初めてのterraformerの実行となります。
また、terraformerのインストールは今回割愛します。

# Environment

- Mac M1
- tfenvでterraform管理

# エラーについて
## エラー出力

```bash
$ terraformer import aws --resources=s3 --regions=ap-northeast-1 --profile=【自分のプロファイル】
2022/04/13 17:20:43 aws importing region ap-northeast-1
2022/04/13 17:20:43 open /[自分の環境]/.terraform.d/plugins/darwin_arm64: no such file or directory
```

## エラーの内容

最終的にエラーは2点ありました。
- terraformerは、terraform0.13.6での対応(1系はサポートしていない)
- aws pluginを指定の箇所に設置

# エラー解決方法
## terraform 0.13.6のインストール
### tfenvでインストール　(これではできません)
tfenvでterraformバージョンを管理しているので以下を実行します。

```bash
$ tfenv install 0.13.6
Installing Terraform v0.13.6
Downloading release tarball from https://releases.hashicorp.com/terraform/0.13.6/terraform_0.13.6_darwin_arm64.zip
##O=#    #                                                                                                                                          
curl: (22) The requested URL returned error: 403
```

[terraform 0.13.6](https://releases.hashicorp.com/terraform/0.13.6/)を見てみると、terraform_0.13.6_darwin_arm64.zipがありません。

そこで手動でインストールします。

[M1 MacでtfenvからTerraform1.0.2未満のダウンロードに失敗する問題を無理矢理解決する | public memo](https://masakimisawa.com/terraform-m1mac/)
こちらやクラメソさんの記事にもありますが、arm環境でもamdで動作するようです。

### 手動インストール
tfenvのversionsの場所を探索します。
私の場合は、/opt/homebrew/Cellar/tfenv/2.2.3/versionsにありました。
調査方法は、tfenv listで調べるとヒントになると思います。

```bash
$ tfenv list
* 1.1.7 (set by /opt/homebrew/Cellar/tfenv/2.2.3/version)
  1.1.6
  1.1.2
  1.0.10
  1.0.9
  1.0.7
~ $ ls /opt/homebrew/opt/tfenv/versions
1.0.10 1.0.7  1.0.9  1.1.2  1.1.6  1.1.7
```

wgetでzipをダウンロードして解凍します。

```bash
$ cd /opt/homebrew/Cellar/tfenv/2.2.3/versions
$ mkdir 0.13.6
$ wget https://releases.hashicorp.com/terraform/0.13.6/terraform_0.13.6_darwin_amd64.zip
--2022-04-14 09:35:34--  https://releases.hashicorp.com/terraform/0.13.6/terraform_0.13.6_darwin_amd64.zip
releases.hashicorp.com (releases.hashicorp.com) をDNSに問いあわせています... 151.101.109.183
releases.hashicorp.com (releases.hashicorp.com)|151.101.109.183|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 35671246 (34M) [application/zip]
`terraform_0.13.6_darwin_amd64.zip' に保存中

terraform_0.13.6_darwin_amd64.zip 100%[============================================================>]  34.02M  18.2MB/s 時間 1.9s

2022-04-14 09:35:36 (18.2 MB/s) - `terraform_0.13.6_darwin_amd64.zip' へ保存完了 [35671246/35671246]

$ ls
terraform_0.13.6_darwin_amd64.zip

$ unzip terraform_0.13.6_darwin_amd64.zip
Archive:  terraform_0.13.6_darwin_amd64.zip
  inflating: terraform
$ ls
terraform                         terraform_0.13.6_darwin_amd64.zip
$ rm terraform_0.13.6_darwin_amd64.zip
$ ls 
terraform
$ tfenv use 0.13.6                               ✘ 1
Switching default version to v0.13.6
Switching completed
$ tfenv list
  1.1.7
  1.1.6
  1.1.2
  1.0.10
  1.0.9
  1.0.7
* 0.13.6 (set by /opt/homebrew/Cellar/tfenv/2.2.3/version)
```

完了したので実行してみると、また同じエラーが出ます。。。

```bash
$ terraformer import aws --resources=s3 --regions=ap-northeast-1 --profile=【自分のプロファイル】
2022/04/14 09:45:53 aws importing region ap-northeast-1
2022/04/14 09:45:53 open /【自分の環境】/.terraform.d/plugins/darwin_arm64: no such file or directory
```

率直に[Readme](https://github.com/GoogleCloudPlatform/terraformer#use-with-aws)をみてみると以下の説明がありました。

> • Copy your Terraform provider's plugin(s) to folder `~/.terraform.d/plugins/{darwin,linux}_amd64/`, as appropriate.
> 

要はこのディレクトリに AWSのプラグインを入れろとのことです。

AWSのプラグインは、以下にあります。
[https://releases.hashicorp.com/terraform-provider-aws/3.49.0/](https://releases.hashicorp.com/terraform-provider-aws/3.49.0/)

今回は特に意識せずに4系ではない、3.49.0を使いました。
(4系はハマりそう、、、という直感)

~/.terraform.d/はすでに存在していたので以下のコマンドで実行しました。
エラー出力の内容に従いarm64をインストールします。

```bash
$ cd ~/.terraform.d/
$ ls
checkpoint_cache     checkpoint_signature
$ mkdir -p plugins/darwin_arm64
$ ls
checkpoint_cache     checkpoint_signature plugins
$ cd plugins/darwin_arm64/
$ wget https://releases.hashicorp.com/terraform-provider-aws/3.49.0/terraform-provider-aws_3.49.0_darwin_arm64.zip
--2022-04-14 12:27:39--  https://releases.hashicorp.com/terraform-provider-aws/3.49.0/terraform-provider-aws_3.49.0_darwin_arm64.zip
releases.hashicorp.com (releases.hashicorp.com) をDNSに問いあわせています... 151.101.65.183, 151.101.129.183, 151.101.193.183, ...
releases.hashicorp.com (releases.hashicorp.com)|151.101.65.183|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 44046217 (42M) [application/zip]
`terraform-provider-aws_3.49.0_darwin_arm64.zip' に保存中

terraform-provider-aws_3. 100%[==================================>]  42.00M  13.3MB/s 時間 3.1s

2022-04-14 12:27:42 (13.3 MB/s) - `terraform-provider-aws_3.49.0_darwin_arm64.zip' へ保存完了 [44046217/44046217]

$ unzip terraform-provider-aws_3.49.0_darwin_arm64.zip
Archive:  terraform-provider-aws_3.49.0_darwin_arm64.zip
  inflating: terraform-provider-aws_v3.49.0_x5
$ rm terraform-provider-aws_3.49.0_darwin_arm64.zip
$ ls
terraform-provider-aws_3.49.0_darwin_arm64.zip terraform-provider-aws_v3.49.0_x5
```

# 実行

エラーが出ている方はすでに実行されていると思いますが、init.tfの作成も記載しておきます。

```bash
$ echo 'provider "aws" {}' > init.tf
$ terraformer import aws --resources=s3 --regions=ap-northeast-1 --profile=【個人のプロファイル】
2022/04/14 12:28:50 aws importing region ap-northeast-1
2022/04/14 12:28:53 aws importing... 
・・・
```

できました。

# まとめ
terraformerは、terraformバージョンが固定されているので気を付けたほうが良いです。
エラー内容ではよく分からないので、同じ事象に遭遇した方の参考になればと思います。