🐳
M1 MacのTerraform(docker経由)が遅いのをなんとかする
この記事は、下記の記事をベースに、自分のワークフローにマッチする形にカスタマイズしただけなので、まずはこちらを見るのが良いと思います。
はじめに
Terraformを使うときはプロジェクトによって使用バージョンが異なるため、実務ではtfenvかdocker経由で実行することになると思います。
今の仕事場ではこんな感じのMakeコマンドを作って、透過的にdockerコマンドを使用できるようにしています。
# 実際は使っているクラウドサービスによって認証情報が必要
terraform=docker run -it --rm -v $$(pwd):/app/ -w /app/ hashicorp/terraform:1.1.7
tf-init: ## terraform init
$(terraform) init
tf-plan: ## terraform plan
$(terraform) plan
...
これはこれで非常に便利なのですが、hashicorp/terraformのイメージはarmアーキテクチャをサポートしておらず、一応動作はするもののエミュレータ経由なので少し遅いです。
毎回こんなWARNINGも出るのでどうにかしたい。
WARNING: The requested image's platform (linux/amd64) does not match the detected host platform (linux/arm64/v8) and no specific platform was requested
自前でビルドする
ということで、自前でビルドしちゃいます。
Dockerfile
はこんな感じ(公式を少し変えただけ)。
FROM alpine:latest as build
ARG TERRAFORM_VERSION=UNSPECIFIED
RUN apk add --no-cache curl git openssh && \
curl -O https://releases.hashicorp.com/terraform/${TERRAFORM_VERSION}/terraform_${TERRAFORM_VERSION}_linux_arm.zip && \
unzip terraform_${TERRAFORM_VERSION}_linux_arm.zip -d /bin
FROM alpine:latest as final
ARG TERRAFORM_VERSION=UNSPECIFIED
RUN apk add --no-cache git openssh
COPY ["/bin/terraform", "/bin/terraform"]
ENTRYPOINT ["/bin/terraform"]
ビルドして、公式リポジトリと同じタグを打ちます。
docker build -t hashicorp/terraform:1.1.8 --build-arg TERRAFORM_VERSION=1.1.8 .
問題無くビルドできたら、Makefileで使用しているバージョンのイメージを作成しておきます。
これで、Makefileはそのままで、M1用のイメージを使ってTerraformを叩くことができます。
Discussion