🐳
AWS CLI使おうと思ったら、[Errno 2] No such file or directory: 'less'と言われた
Nestjs, Serverless Framework, DynamoDBで簡単なアプリケーション作ろうと思って、remote-containerのためのDockerfileを作成していた。
Dockerfile
FROM node:18.0.0
# devcontainer上で操作するユーザーを指定
ARG username="node"
ARG ACCESS_KEY
ARG SECRET_KEY
# AWS CLIのインストール
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
RUN unzip awscliv2.zip
RUN ./aws/install
RUN rm -f awscliv2.zip
# serverlessをinstall
RUN npm i -g serverless
# pingのインストール
RUN apt-get update
RUN apt-get install -y iputils-ping
# serverlessの認証情報を設定
RUN serverless config credentials --provider aws --key $ACCESS_KEY --secret $SECRET_KEY
docker-compose.yml
version: '3.9'
services:
dynamodb-local:
command: "-jar DynamoDBLocal.jar -sharedDb -dbPath ./data"
image: "amazon/dynamodb-local:1.18.0"
container_name: dynamodb-local
ports:
- "8000:8000"
volumes:
- "./dynamodb:/home/dynamodblocal/data"
working_dir: /home/dynamodblocal
demo-app:
container_name: demo-app
build:
context: .
dockerfile: Dockerfile
args:
- ACCESS_KEY=${ACCESS_KEY}
- SECRET_KEY=${SECRET_KEY}
command: /bin/sh -c "while sleep 1000; do :; done"
volumes:
- "../:/workspaces/demo"
depends_on:
- dynamodb-local
dynamodb-admin:
container_name: dynamodb-admin
image: aaronshaf/dynamodb-admin:latest
environment:
- DYNAMO_ENDPOINT=dynamodb-local:8000
ports:
- 8001:8001
depends_on:
- dynamodb-local
dymanodb-adminからはdynamodbの操作ができたので、demo-app
のコンテナの中からAWS CLIでdynamodbを参照しようとしたら、以下のようなエラーが
$ aws dynamodb list-tables --endpoint-url http://dynamodb-local:8000
Unable to redirect output to pager. Received the following error when opening pager:
[Errno 2] No such file or directory: 'less'
Learn more about configuring the output pager by running "aws help config-vars".
なんこれ??と思って調べてみると、こんな記事が見つかった。
要はAWS CLI v2からは実行するのにlessが必要になったよということである。
解決策
大きく解決策としては
- ページャーを無効化する
- lessを入れる
の2つの解決策があるようだが、私は後者で解決した。
Dockerfileを以下のように変更してあげて解決
Dockerfile(変更後)
FROM node:18.0.0
# devcontainer上で操作するユーザーを指定
ARG username="node"
ARG ACCESS_KEY
ARG SECRET_KEY
# AWS CLIのインストール
RUN curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
RUN unzip awscliv2.zip
RUN ./aws/install
RUN rm -f awscliv2.zip
# serverlessをinstall
RUN npm i -g serverless
# pingのインストール
RUN apt-get update
RUN apt-get install -y iputils-ping
RUN apt-get install -y less
# serverlessの認証情報を設定
RUN serverless config credentials --provider aws --key $ACCESS_KEY --secret $SECRET_KEY
めでたしめでたし
こういうのは記事にしておかないと後々自分が困るのでね。
Discussion