M1 Macでtfenvを使うと特定のVersionのTerraformのダウンロードに失敗する

2021.12.28

M1 Macでtfenvを使っていると特定のVersionのTerraformを使用できなかったので、対処法をレポートします。

tfenvとは

TerraformのVersion管理を簡単にするツールです。Terraformコマンドを実行するフォルダに.terraform-versionというファイルを作成し、中にVersionを記入しておくと、terraform init時に自動的にそのVersionのTerraformをインストールしてくれ、使ってくれます。

M1 Macでダウンロードに失敗する

最近開発環境をM1 Macに変えました。

環境情報

  • MacBook Pro (13-inch, M1, 2020)
  • チップ: Apple M1
  • OS: MacOS Big Sur (バージョン11.6.2)

すると、tfenvで特定のVersionのTerraformをダウンロードする際に失敗するようになりました。

% terraform init
version '0.15.2' is not installed (set by /Users/kazue.masaki/project/201227-tfenv-onm1mac/.terraform-version). Installing now as TFENV_AUTO_INSTALL==true
Installing Terraform v0.15.2
Downloading release tarball from https://releases.hashicorp.com/terraform/0.15.2/terraform_0.15.2_darwin_arm64.zip
##O=-#     #                                                                                                                                                                                    
curl: (22) The requested URL returned error: 403 
Tarball download failed
/Users/kazue.masaki/.anyenv/envs/tfenv/libexec/tfenv-exec: line 105: /Users/kazue.masaki/.anyenv/envs/tfenv/versions/0.15.2/terraform: No such file or directory
/Users/kazue.masaki/.anyenv/envs/tfenv/libexec/tfenv-exec: line 105: exec: /Users/kazue.masaki/.anyenv/envs/tfenv/versions/0.15.2/terraform: cannot execute: No such file or directory

どうやら、v1.0.1まではARM版のバイナリが無く、エラーになるようです。ですがv1.0.1以前のVersionも使いたいですね。

対処方針

tfenvの特定のフォルダに手動でバイナリを入れておけば、以降は問題なくtfenvを使えます。かつ入れるバイナリはAMD版でも問題ないようです。

具体的な方法

私はanyenvを経由でtfenvを使っているので、tfenv実行パスは以下でした。

% which tfenv
/Users/kazue.masaki/.anyenv/envs/tfenv/bin/tfenv

この場合、Terraformの各Versionのバイナリは以下にあります。

% ls ~/.anyenv/envs/tfenv/versions
0.14.5  0.14.9  0.15.0  1.0.11  1.0.2   1.1.0

この位置に所定のVersionのバイナリを配置します。

% mkdir ~/.anyenv/envs/tfenv/versions/0.15.2 && cd $_
% wget https://releases.hashicorp.com/terraform/0.15.2/terraform_0.15.2_darwin_amd64.zip
--2021-12-27 22:13:58--  https://releases.hashicorp.com/terraform/0.15.2/terraform_0.15.2_darwin_amd64.zip
releases.hashicorp.com (releases.hashicorp.com) をDNSに問いあわせています... 2a04:4e42:36::439, 151.101.229.183
releases.hashicorp.com (releases.hashicorp.com)|2a04:4e42:36::439|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 33511358 (32M) [application/zip]
`terraform_0.15.2_darwin_amd64.zip' に保存中

terraform_0.15.2_darwin_amd64.zip                100%[=======================================================================================================>]  31.96M  84.7MB/s 時間 0.4s     

2021-12-27 22:13:59 (84.7 MB/s) - `terraform_0.15.2_darwin_amd64.zip' へ保存完了 [33511358/33511358]
% unzip terraform_0.15.2_darwin_amd64.zip
Archive:  terraform_0.15.2_darwin_amd64.zip
  inflating: terraform    
% rm terraform_0.15.2_darwin_amd64.zip

ここまでやればこのVersion(0.15.2)を使うことができます。

(terraform実行ディレクトリに移動)
% terraform init

Initializing the backend...

Initializing provider plugins...

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 version
Terraform v0.15.2
on darwin_amd64

Your version of Terraform is out of date! The latest version
is 1.1.2. You can update by downloading from https://www.terraform.io/downloads.html

まとめ

M1 Macでtfenvで特定のTerraformのVersionのダウンロードに失敗する際の対処法についてご紹介しました。おそらくもっとちゃんとした解決方法があるのだと思いますし、AMD版で良いのかも疑問ですがが、一旦問題なく動いているので良しとします。詳しい方教えて下さい。

参考情報