vague memory

うろ覚えを無くしていこうともがき苦しむ人の備忘録

AWS CLI v2 で alpine glibc 問題に遭遇

alpine で AWS CLI v2 を使おうとしたら地味に嵌り、 結果、有名な(?) glibc 問題だったというオチでした。

結論

公式がイメージを配布しているので、そちらを使いましょう。 (CLI用のentrypointになっているので、必要に応じてオーバーライド)

もしくはサポートしているディストリビューションのイメージへインストールしましょう。

alpineへ不足ライブラリを入れる事でも実現可能ですが、拘り無いなら上記2点で良いのかなと思います。

経緯

alpine へ公式ドキュメント通りにインストール。
一部略してますが、buildのログは以下のような感じに、 Successfully となってはいます。

Step 1/3 : FROM python:3.8-alpine
Step 2/3 : RUN apk --update --no-cache add   curl
Step 3/3 : RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" && unzip awscliv2.zip && ./aws/install
Archive:  awscliv2.zip
   creating: aws/
   creating: aws/dist/

・・・略

  inflating: aws/dist/botocore/data/comprehendmedical/2018-10-30/paginators-1.json
./aws/install: line 78: /aws/dist/aws: not found
You can now run: /usr/local/bin/aws --version
Successfully built xxxxxxxxxxxxx

コンテナの中身を見てみると、ファイル自体は存在し、パスも通っているが、実行時に not found となる。

/ # which aws
/usr/local/bin/aws
/ # aws --version
sh: aws: not found
/ # /usr/local/bin/aws
sh: /usr/local/bin/aws: not found
/ # ls -l /usr/local/bin/aws
lrwxrwxrwx    1 root     root            37 May  3 05:44 /usr/local/bin/aws -> /usr/local/aws-cli/v2/current/bin/aws
/ # ls -l /usr/local/aws-cli/v2/current/bin/aws
lrwxrwxrwx    1 root     root            11 May  3 05:44 /usr/local/aws-cli/v2/current/bin/aws -> ../dist/aws
/ # ls -l /usr/local/aws-cli/v2/dist/aws
-rwxr-xr-x    1 root     root       4099736 May  3 05:44 /usr/local/aws-cli/v2/dist/aws
/ #

原因

AWS CLI v2 は glibc を使用するが、alpine は glibc でなく musl-libc を使っているため、単純にインストールするだけでは動作しない。

参考

AWS CLI v2 のリポジトリに同エラーが issue として挙がってます。