terraformの公式Docker imageでAWS CLIを使うときの注意点
今時点の結論
hashicorpが提供するterraformがビルドされている公式イメージは軽量で有名なAlpineをベースにしているので、どうもAWS CLI v2と相性が悪いらしい。
なので、普通にapkでpy-pipを入れて、pipでawscliをインストールする方が安定します。(つまり、AWS CLI v1を使う)
※後述しますが、AWS CLI v2が使うglicとの相性が悪いからというのが原因のようです。
ワークアラウンドでいろいろできるみたいですが、どうもDockerをビルドしてもうまく動かなかったです(ただ、いろいろ試行錯誤しすぎたせいでバグってしまっただけかもしれない)。
普通にこんな感じでやるのがいいでしょう。バージョンをいじればterraformの最新バージョンでも動作しました。
FROM hashicorp/terraform:latest
RUN apk add --no-cache \
bash \
py-pip \
jq \
&& pip install --upgrade \
pip \
awscli
ENTRYPOINT ["/bin/bash"]
※公式TerraformのDocker ImageはENTRYPONTがterraformになっているので、お好みでbashに変更できます。※bashはterraformのビルド時に入っているので追加インストールは不要です。
Alpineとglibcの相性の悪さ
ちなみにGitHub上でissueが上がっているので見てみてください。
【参考】
こちらで無理やり消し去るという方法もあるようです。こっちは試していないです。
どうしてもAWS CLI v2を使う必要がある場合は別のディストリビューションのDocker Imageを使った方がいいかもですね。
せっかくなので、AWS CLI v1とv2の違いについて調査してみた。
※調査の観点はterraformでAWSを管理するうえで重要なポイントです。
たぶんクリティカルに違うのはAWS Identity Center (旧AWS SSO) の認証情報を使えないとかでしょうか?
軽量のAlpineで使わなければAWS CLI v2を使えるのでは?と思って、手なじみのいいubuntuでTerraformの環境を作ってみた方法もおいておきます。
FROM ubuntu:22.04
WORKDIR /tmp
# 共通利用のパッケージのインストール
RUN apt-get update && \
apt-get upgrade -y && \
apt-get install -y less vim curl unzip git
# aws cli v2 のインストール
# https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-linux.html
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
RUN unzip awscliv2.zip
RUN ./aws/install
RUN rm awscliv2.zip
# terraformのインストール(バイナリを落としてきてパスの通っているところに解凍する方法)
ENV TF_VERSION=1.3.7
RUN curl "https://releases.hashicorp.com/terraform/${TF_VERSION}/terraform_${TF_VERSION}_linux_amd64.zip" -o "terraform.zip"
RUN unzip -d /usr/local/bin/ terraform.zip
RUN rm terraform.zip
まだ、22.04のリポジトリにterraformが登録されていないようなので、curlでとってきてunzipしました。