public memo

エンジニア向け小ネタ書き溜め用。公開日記だけど親切な文章とは程遠いかもしれない。

M1 MacでtfenvからTerraform1.0.2未満のダウンロードに失敗する問題を無理矢理解決する

2022-02-16 by MasakiMisawa
Tweet
このエントリーをはてなブックマークに追加
Pocket
LINEで送る

最近開発環境を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)

$ terraform init
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と暫定の対処法がありました。

GitHub
SHA256 hash does not match! error when trying to install terraform 0.15.5 · I...
https://github.com/tfutils/tfenv/issues/275#issuecomment-856736373
When I try to install 0.15.5 with tfenv install 0.15.5 I get Installing Terraform v0.15.5 Downloading release tarball from https://releases.hashicorp.com/terraform/0.15.5/terraform_0.15.5_darwin_am...

ありがたい、、、という事で、早速暫定の対処を行っていきます。

1. tfenvで管理するTerraformのDL先パスを確認

tfenvを何経由でインストールしているかが各環境で異なる為、まずはtfenvで管理するTerraformの各バージョンのダウンロード先となるパスを確認します。

ZSH
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以降の適当なバージョンをインストールして使用バージョンに登録してみると確認が可能になります。

ZSH
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を登録していきます。

ZSH
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から認識され、使用可能な状態を確認します。

ZSH
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版を強制させる方法もあるようなので、どう対処するかはお好みでお選びください。

ZSH
1
2
3
$ asdf plugin add terraform
 
$ ASDF_HASHICORP_OVERWRITE_ARCH=amd64 asdf install terraform 1.0.0

Zenn
M1 Macでarm64未対応のTerraformを利用できるようにする
https://zenn.dev/kentama/articles/78d4caae4c6307

また、amd64のバイナリを無理やりAppleシリコン環境で動かすのはいつ動かなくなってもおかしくない暫定対応の為、少し手間はかかるもののIntelプロセッサ用の実行環境を別途用意して正しい実行環境で動かすようにするのが恒久対応として良さそうです。
上記の方法を選択する場合の手順なども別途書きましたので、よろしければご参照ください。

public memo
 
2 Pockets
2022.02.21
M1 MacでAppleシリコンとIntelプロセッサのバイナリ管理を分離して共存させる
https://masakimisawa.com/m1mac-create-local-environment
前回の記事でApple シリコンCPUの環境から特定バージョン未満のTerraformを無理やり動かせる方法を書きましたが、他にも幾つかIntelプロセッサ用にしかバイナリが提供されていないものが出てきたり、前回の方法がかなり無茶な内容だった事もあり、「流石に毎回その場凌ぎ対応で乗り切るのは無理がある」ということで、改めてM1 Macでのローカル開発環境を作り直してみた内容のメモです。前提1. AppleシリコンCPUへの世の中的な対応は追いついておらず、arm64バイナリが提供されていないものはまだ多いかなり普及してきたM1 Macですが、...

あとがき

書き終わって気付きましたが、全く同じ対処方法を既にクラメソさんのブログで紹介されていました。

クラスメソッド発「やってみた」系技術メディア | DevelopersIO
 
6 Tweets
4 Users
3 Pockets
M1 Macでtfenvを使うと特定のVersionのTerraformのダウンロードに失敗する | Devel...
https://dev.classmethod.jp/articles/tfenv-on-m1-mac/
M1 Macでtfenvを使っていると特定のVersionのTerraformを使用できなかったので、対処法をレポートします。 tfenvとは TerraformのVersion管理を簡単にするツールです。Terrafo …

先に調べてから書けって話ですね。
大変申し訳ありません(土下座)

Tweet
このエントリーをはてなブックマークに追加
Pocket
LINEで送る

カテゴリー: M1 Mac, Terraform タグ: M1 Mac, Terraform, tfenv

profile

profile_img Web系のソフトウェアエンジニアです。
野球観戦(横浜DeNAベイスターズ)、格闘ゲーム、カメラ、ランニング、愛犬、インテリア、美味しいものの食べ歩き、などなどが好き。

  • twitter MasakiMisawa
  • facebook MisawaMasaki
  • github MasakiMisawa
  • instagram masakimisawa
  • follow us in feedly

search

recent entry

  • M1 MacでAppleシリコンとIntelプロセッサのバイナリ管理を分離して共存させる
  • M1 MacでtfenvからTerraform1.0.2未満のダウンロードに失敗する問題を無理矢理解決する
  • GitHub ActionsからAWS利用時に永続的クレデンシャル情報を渡さないようにする
  • TerraformでAuroraのエンジンバージョンアップグレードをする時は、対象リソースをクラスターだけに絞る
  • CloudWatch Logsに出力されたエラーログ本文のSlackへの転送

category

  • AWS (17)
    • ACM (1)
    • AWS CLI (1)
    • Chatbot (2)
    • CloudWatchAlarm (1)
    • CloudWatchLogs (1)
    • CodeBuild (3)
    • DynamoDB (1)
    • IAM (1)
    • Kinesis (2)
    • Lambda (5)
    • OpenId Connect (1)
    • RDS (1)
    • S3 (2)
    • SNS (2)
    • SSM (2)
    • STS (1)
  • CI (2)
  • GCP (1)
    • PageSpeedInsights (1)
  • Git (3)
    • GitHub (2)
      • GitHub Actions (1)
  • M1 Mac (2)
  • Python (2)
  • Redis (1)
  • selenium (1)
  • Slack (3)
  • Terraform (3)
  • その他 (1)

archive

  • 2022年2月 (3)
  • 2021年1月 (1)
  • 2020年12月 (1)
  • 2020年11月 (1)
  • 2020年9月 (2)
  • 2020年8月 (1)
  • 2020年7月 (1)
  • 2020年6月 (1)
  • 2020年5月 (2)
  • 2020年4月 (1)
  • 2020年3月 (1)
  • 2020年1月 (1)
  • 2019年1月 (1)
  • 2017年12月 (1)
  • 2017年9月 (1)
  • 2017年8月 (1)
  • 2017年7月 (1)
  • 2017年2月 (1)
  • 2016年10月 (1)

tag cloud

ACM Aurora AWS AWS CLI Billing CI CloudWatchAlarm CloudWatch Logs CodeBuild Code Format Docker DynamoDB EC2 env find firehose Git GitHub GitHub Actions Homebrew husky IAM Role Java kinesis KinesisFirehose Lambda lint-staged M1 Mac Node.js OpenId Connect PHP Python RDS Redis RI S3 Selenium Slack SNS SSM Terraform tfenv セッションマネジャー リモートワーク 生産性

Copyright © 2025 public memo.