最近開発環境をM1 Macに変更したのですが、Terraform1.0.2未満のバージョンをDLしようとすると、arm64のバイナリが存在せずterraform init時のバイナリダウンロードで失敗する問題が発生するようになりました。
少し無理やりな方法にはなりますが、M1 MacなどAppleシリコン CPU環境からtfenv経由でTerraform1.0.2未満を使用する場合の解決方法を記録として残します。
発生した問題
開発環境をAppleシリコン CPUのM1 Macに変更後にtfenvで管理するTerraformを使おうとしたところ、以下のようなエラーが出るようになりTerraformのバイナリダウンロードで失敗するようになってしまいました。
【発生環境】
PC: MacBook Pro (14-inch, M1, 2021)
CPU: Apple M1 Pro
OS: MacOS Monterey (バージョン12.1)
version ‘1.0.0’ is not installed (set by ${current dir}/.terraform-version). Installing now as TFENV_AUTO_INSTALL==true
Installing Terraform v1.0.0
Downloading release tarball from https://releases.hashicorp.com/terraform/1.0.0/terraform_1.0.0_darwin_arm64.zip
curl: (22) The requested URL returned error: 403
使用しようとしているTerraformのバージョン(今回は1.0.0)のarm64バイナリがないと怒られているようです。
Terraform1.0.0のリリースバイナリを見にいくと、確かにamd64だけでarm64が提供されていないようです。
調べると、Terraform1.0.2からarm64のバイナリが提供されているものの、それ以前のバージョンでは今回のようにarm64バイナリが提供されていないようでした。
どう対処したか
Terraformのバージョンを管理しているtfenvが指定されたバージョンのバイナリがローカル環境に存在しない場合に公式サイトから実行環境のCPU用のバイナリをDLする挙動になっている以上、対象バイナリが提供されていないとなるとどうしたものかと思っていたところ、tfenvに同様の問題のissueと暫定の対処法がありました。
ありがたい、、、という事で、早速暫定の対処を行っていきます。
1. tfenvで管理するTerraformのDL先パスを確認
tfenvを何経由でインストールしているかが各環境で異なる為、まずはtfenvで管理するTerraformの各バージョンのダウンロード先となるパスを確認します。
1 2 3 4 5 |
$ tfenv list * 1.1.5 (set by /usr/local/Cellar/tfenv/2.2.3/version) $ cat /usr/local/Cellar/tfenv/2.2.3/version 1.1.5 |
自分はHomebrewでtfenvをインストールしていたので、/usr/local/Cellar/tfenv/2.2.3/versionに使用するバージョンが登録されているようでした。
tfenv listで使用可能なバージョンが一つも登録されていない場合は、tfenf list-remoteでダウンロード可能なバージョンを確認後、1.0.2以降の適当なバージョンをインストールして使用バージョンに登録してみると確認が可能になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
$ tfenv list-remote 1.1.5 1.1.4 1.1.3 1.1.2 1.1.1 1.1.0 1.1.0-rc1 1.1.0-beta2 1.1.0-beta1 1.1.0-alpha20211029 1.1.0-alpha20211020 1.1.0-alpha20211006 1.1.0-alpha20210922 1.1.0-alpha20210908 1.1.0-alpha20210811 1.1.0-alpha20210728 1.1.0-alpha20210714 1.1.0-alpha20210630 1.1.0-alpha20210616 1.0.11 1.0.10 1.0.9 1.0.8 1.0.7 1.0.6 1.0.5 1.0.4 1.0.3 1.0.2 1.0.1 1.0.0 ... $ tfenv install 1.0.2 Installing Terraform v1.0.2 Downloading release tarball from https://releases.hashicorp.com/terraform/1.0.2/terraform_1.0.2_darwin_amd64.zip ##################################################################################################################################### 100.0% Downloading SHA hash file from https://releases.hashicorp.com/terraform/1.0.2/terraform_1.0.2_SHA256SUMS No keybase install found, skipping OpenPGP signature verification Archive: /var/folders/4l/q2pgb1l53dq54vw6nzmg9nmh0000gn/T/tfenv_download.XXXXXX.aN5K5rD3/terraform_1.0.2_darwin_amd64.zip inflating: /usr/local/Cellar/tfenv/2.2.3/versions/1.0.2/terraform Installation of terraform v1.0.2 successful. To make this your default version, run 'tfenv use 1.0.2' $ tfenv use 1.0.2 Switching default version to v1.0.2 Switching completed $ tfenv list 1.1.5 * 1.0.2 (set by /usr/local/Cellar/tfenv/2.2.3/version) |
2. 使用したいバージョンのamd64版を手動DL
TerraformはM1 MACなどアップルシリコン CPUの環境でもamd64のバイナリで動作することが確認されているようなので、無理やりですがamd64版のバイナリを手動でダウンロードします。
ダウンロード先は、使用バージョンが登録されているversionファイルと同階層にあるversionsディレクトリ配下が対象です。
自分の環境では、/usr/local/Cellar/tfenv/2.2.3/versionファイルに使用バージョンが登録されているので、/usr/local/Cellar/tfenv/2.2.3/versions配下が対象です。
今回は1.0.0が使いたかったので、1.0.0を登録していきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$ cd /usr/local/Cellar/tfenv/2.2.3/versions $ mkdir 1.0.0 $ cd 1.0.0 $ wget https://releases.hashicorp.com/terraform/1.0.0/terraform_1.0.0_darwin_amd64.zip --2022-02-16 08:50:04-- https://releases.hashicorp.com/terraform/1.0.0/terraform_1.0.0_darwin_amd64.zip releases.hashicorp.com (releases.hashicorp.com) をDNSに問いあわせています... 2a04:4e42:1a::439, 151.101.109.183 releases.hashicorp.com (releases.hashicorp.com)|2a04:4e42:1a::439|:443 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 33803531 (32M) [application/zip] `terraform_1.0.0_darwin_amd64.zip' に保存中 terraform_1.0.0_darwin_amd64.zip 100%[================================================================>] 32.24M 47.3MB/s 時間 0.7s 2022-02-16 08:50:05 (47.3 MB/s) - `terraform_1.0.0_darwin_amd64.zip' へ保存完了 [33803531/33803531] $ unzip terraform_1.0.0_darwin_amd64.zip Archive: terraform_1.0.0_darwin_amd64.zip inflating: terraform $ rm terraform_1.0.0_darwin_amd64.zip |
これで手動登録が完了しました。
3. 手動DLバージョンの確認と登録
手動DLしたバージョンがtfenvから認識され、使用可能な状態を確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ tfenv list 1.1.5 * 1.0.2 (set by /usr/local/Cellar/tfenv/2.2.3/version) 1.0.0 $ tfenv use 1.0.0 Switching default version to v1.0.0 Switching completed $ tfenv list 1.1.5 1.0.2 * 1.0.0 (set by /usr/local/Cellar/tfenv/2.2.3/version) |
無事に使用可能になりました!
対応方法の他の選択肢
暫定対応ということで無理やり手動DLする方法を試してみましたが、1.0.2未満のバージョンを使用する場合は使用するバージョンが変わる毎に毎回手動DLする必要が出るのでやはり面倒です。
今回は使用しませんでしたが、Terraformのバージョン管理方法をtfenvからasdfに変更してDLするバージョンにオプションでamd64版を強制させる方法もあるようなので、どう対処するかはお好みでお選びください。
1 2 3 |
$ asdf plugin add terraform $ ASDF_HASHICORP_OVERWRITE_ARCH=amd64 asdf install terraform 1.0.0 |
また、amd64のバイナリを無理やりAppleシリコン環境で動かすのはいつ動かなくなってもおかしくない暫定対応の為、少し手間はかかるもののIntelプロセッサ用の実行環境を別途用意して正しい実行環境で動かすようにするのが恒久対応として良さそうです。
上記の方法を選択する場合の手順なども別途書きましたので、よろしければご参照ください。
あとがき
書き終わって気付きましたが、全く同じ対処方法を既にクラメソさんのブログで紹介されていました。
先に調べてから書けって話ですね。
大変申し訳ありません(土下座)