この記事は何?
既存AWS環境をterraformのコードにしてくれるterraformer
というツールをM1 Macで動かせるようにするために行った記事です。
気づいたきっかけ
brewでterraformとterraformer環境を作って実行したところ、以下のようなエラーが発生したことです。~/.terraform.dの中を見てもpluginsディレクトリがありませんでした。
% terraformer import aws --regions=ap-northeast-1 --resources=s3
2021/08/01 17:02:00 aws importing region ap-northeast-1
2021/08/01 17:02:00 open /Users/hogehoge/.terraform.d/plugins/darwin_arm64: no such file or directory
先に結論を...
- terrafomersはREADMEに書いてあるとおりterraform 1.0系や0.14系未対応なので、0.13系の最新版をtfenvを利用して導入する
- 上記を行ったあとでbrewを使ってterraformerを導入する
- brewでterraformを導入しない方がよさそう
terraformerとは?
terraformerというのは、既存クラウド環境の設定を読み込んでterraformのコードにしてくれるツールです。ただし、Googleの公式ツールではありません。(Google傘下のWAZE社のSREが作ったツールのようです)
https://github.com/GoogleCloudPlatform/terraformer
AWS以外にGCPやAzureといったクラウド、そしてKubernates, Fastly, GitHub, Cloudflare, Datadog, Grafana, Oktaなど多くのサービスに対応しています。
https://github.com/GoogleCloudPlatform/terraformer/tree/master/docs
terraformのコードを1から書くのは大変ですが、こうしたツールを使うことで作成時間の省力化につながるかと思います。
なお、同様のツールでterraformingというツールもありますが、2019年で更新が止まってしまっているので、いま使うならterraformerが良さそうです。
構築方法
terraformerのREADMEにあるCapabilitiesを見ると、以下のような記述があります。
https://github.com/GoogleCloudPlatform/terraformer#capabilities
Capabilities
(略)
6. Support terraform 0.13 (for terraform 0.11 use v0.7.9).
つまりterraformerはterraform 0.13 をサポートしており、1.0系や0.14系には未対応でした。やはりREADMEはちゃんと読まないとダメですね(笑)
ただこの時、brewでterraformを導入しても正しく動いてくれませんでした。(私の環境の問題のせいかもしれません)
そこでtfenvを利用してterraform 0.13系を導入し(2021年8月1日現在だと0.13.7
)、その後terraformerを導入して構築していきます。
tfenvとtfenvを利用したterraformの導入
### tfenvの導入
% brew install tfenv
### tfenvでterraform 0.13.7 を導入
% tfenv install 0.13.7
Installing Terraform v0.13.7
Downloading release tarball from https://releases.hashicorp.com/terraform/0.13.7/terraform_0.13.7_darwin_amd64.zip
(略)
Installation of terraform v0.13.7 successful. To make this your default version, run 'tfenv use 0.13.7'
%
### terraformのコードを置くディレクトリに移動する。
### 以後の作業はこのディレクトリ内で行う。
% cd {terraformのコードを置くディレクトリ}
### terraform 0.13.7を利用するように設定
% tfenv use 0.13.7
Switching default version to v0.13.7
Switching completed
%
### terraformのバージョン確認
% terraform version
Terraform v0.13.7
(以下略)
%
terraformerの導入
### terraformerの導入
% brew install terraformer
==> Downloading https://ghcr.io/v2/homebrew/core/terraformer/manifests/0.8.15
(以下略)
%
### terraformerのバージョン確認
% terraformer version
Terraformer v0.8.15
%
動作確認
以下のようにして動作確認をします。なお事前にawscliを導入して、aws configでdefault設定を行い、既存AWS環境に接続できるようにしておきます。(awscliの導入や設定方法は他の記事もあるので割愛します)
### init.tfファイルを作成しawsの指定をする
% echo 'provider "aws" {}' > init.tf
### 初期化する(terraform使う時のお約束)
% terraform init
Initializing the backend...
Initializing provider plugins...
- Finding latest version of hashicorp/aws...
- Installing hashicorp/aws v3.52.0...
- Installed hashicorp/aws v3.52.0 (signed by HashiCorp)
(略)
%
### terraformerでS3の設定をimportする
### 事前にaws configでdefault設定を行っておくこと
% terraformer import aws --regions=ap-northeast-1 --resources=s3
2021/08/01 23:21:15 aws importing region ap-northeast-1
2021/08/01 23:21:19 aws importing... s3
2021/08/01 23:21:20 aws done importing s3
2021/08/01 23:21:20 Number of resources for service s3: 1
2021/08/01 23:21:20 Refreshing state... aws_s3_bucket.tfer--XXXXXXXX ### バケット名を伏せています
2021/08/01 23:21:22 Filtered number of resources for service s3: 1
2021/08/01 23:21:22 aws Connecting....
2021/08/01 23:21:22 aws save s3
2021/08/01 23:21:22 aws save tfstate for s3
%
まとめ
このようにすることで、M1Macでもterrafomerが利用できるようになります。
そのうち、terrafomerもterraform 1.0系に対応してくると思うそれまでの記事ですが、2021年8月時点では情報も錯綜していて困っている人もいるのではないか?と思ったので記事を作成しました。
何かのお役に立てば幸いです。
参考ページ
https://dev.classmethod.jp/articles/terraformer-version-dependence/
https://zenn.dev/ww24/articles/e52e7a9f3332b4
https://blog.mizukami.sh/entry/2021/01/02/terraform-on-apple-silicon-temp