OpenWork Tech Blog

社員クチコミサービスを運営しているオープンワークエンジニアによるテックブログです。

【Terraform】M1 Mac使っていると必ず引っ掛かる(かもしれない)providerエラー問題!

食生活見直して最近3kg痩せました。
インフラチームの長崎です。
痩せる為には、筋トレより有酸素運動より食生活を見直すのが一番効率が良いと痛感しました。

このブログで書く事

  • M1 Macだけがよく出力されるproviderのエラーにどんなものが存在するか。
  • エラーの対処方法。

環境

  • Terraform version : 1.5.0
  • Go version : 1.21.3
  • M1 Mac OS version : Monterey 12.6.9

よく引っ掛かるprovider周りのエラー

M1を使っていると、terraform initを実行した際に下記のようなエラーに遭遇する可能性があります。

  • providerのバージョンがarmに対応していなさそうなエラー。
Provider registry.terraform.io/hashicorp/template v2.2.0 does not have a package available for your current platform,
darwin_arm64.
  • provider packageのバージョンに制約はあるが対応しているバージョンがないよというエラー。
Could not retrieve the list of available versions for provider hashicorp/github: no
available releases match the given constraints 3.0.0, ~> 3.0

なぜエラーになるのか?

既にリポジトリがArchiveされていたりして、対象のproviderにはarmベースに対応したバージョンが外部リポジトリに存在しません。

解決方法

解決方法は、2パターン存在します。

※goがインストール済みの環境を前提としています。

手動でソースからbuildしてインストールする

providerを読み替えて下記の通りコマンド実行していけばできます。

$ git clone https://github.com/hashicorp/terraform-provider-github.git
$ cd terraform-provider-github
$ git checkout v3.0.0
$ make build
$ mkdir -p ~/.terraform.d/plugins/registry.terraform.io/hashicorp/github/3.0.0/darwin_arm64
$ cp terraform-provider-github ~/.terraform.d/plugins/registry.terraform.io/hashicorp/github/3.0.0/darwin_arm64/terraform-provider-github_v3.0.0

補足

  • git checkout で指定しているバージョンは、リポジトリの「Tags」から選択すればOKです。
  • make build について、ほとんどのproviderはルート直下に「Makefile」や「GNUmakefile」があるからmakeコマンドでいけます。
    • ない場合はREADMEにbuildのやり方が書いてあるかもしれません。
  • 作成するディレクトリは、上記の例だと/github/3.0.0/ だけ /provider name/version/ に書き換えてあげればOKです。
  • 最後に実行するコピー元の実行ファイルのパスは、~/go/bin/ 配下にあるかもしれません。

m1-terraform-provider-helperを使ってインストールする

m1-terraform-provider-helper は、kreuzwerker氏が開発したものです。リポジトリはこちら
READMEに従って実行する事で利用する事ができます。

$ brew install kreuzwerker/taps/m1-terraform-provider-helper
$ m1-terraform-provider-helper activate
$ m1-terraform-provider-helper install hashicorp/vault -v v2.10.0   # install [provider] -v [version] と読み替えてください。

補足

  • 基本的にはproviderのソースリポジトリ配下に Makefile が存在し、m1-terraform-provider-helpermake build コマンドを実行してくれています。リポジトリ配下に Makefile がなかったり、ビルドコマンドが違う場合はインストールがコケるので -custom-build-command オプションを使用して任意のコマンドが実行できます。(README参照)
  • ソースリポジトリをcloneする際のURLは、m1-terraform-provider-helper で定義されているURLが実行されているようです。こちらもたまにURLが変わっているものがあるとインストールがうまくいきません。その場合は、-custom-provider-repository-url オプションを使ってインストールしたいリポジトリのURLを指定するとうまくいくと思います。(README参照)

私が引っかかったポイント

providerのソースリポジトリ配下に Makefile があり、 make build コマンドが実行できる状態だったのにインストールがうまくいかなかった事があったのでご紹介します。

installコマンドを実行したところ下記エラーが出力されました。

FATA[0018] Bash execution did not run successfully: exit status 2.
Output:
make: *** [fmtcheck] Error 1 

Makefile を確認し、下記のように実行してみたらうまくいきました。
うまくいかない時には一工夫が必要かもしれません。

$ m1-terraform-provider-helper install hashicorp/github -v v4.0.0 --custom-build-command 'make fmt && make build'

Getting provider data from terraform registry
2023/10/17 18:58:44 Getting provider data from https://registry.terraform.io/v1/providers/hashicorp/github
2023/10/17 18:58:44 Provider data: {https://github.com/hashicorp/terraform-provider-github terraform-provider-github}
Getting source code...
2023/10/17 18:58:44 Extracted repo https://github.com/hashicorp/terraform-provider-github to terraform-provider-github
2023/10/17 18:58:44 Resetting /Users/s_nagasaki/.m1-terraform-provider-helper/terraform-provider-github and pulling latest changes
Compiling...
Successfully installed hashicorp/github v4.0.0

M2/M3でもm1-terraform-provider-helper は使えるか?

手元で検証できていないので、できます!と断言はできないですがおそらく使えます。 darwin_arm64アーキテクチャ であればいけると思います。

結局使いやすいのはどっち?

インストールはやはり m1-terraform-provider-helper を使う方が圧倒的に楽ですね。
ただ、何かが原因でうまくインストールできないと確認に時間を取られる事があるかもしれません。
そういう場合は手動でやれば良さそうですね。

まとめ

最近よくこのエラーに引っかかっています。
既にブログで解消方法を書いてくださっている方もいらっしゃってとても助かってましたが、m1-terraform-provider-helper の情報はまだ少なかったので解消方法をまとめて書いてみました。
誰かの助けになれれば幸いです。

オープンワークでは、一緒に働いてくれるメンバーを募集しています。 www.openwork.co.jp