🐳

AWS CLI使おうと思ったら、[Errno 2] No such file or directory: 'less'と言われた

2022/05/01に公開

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".

なんこれ??と思って調べてみると、こんな記事が見つかった。
https://qiita.com/maip0902/items/d80a302c95fb61af5070

https://dev.classmethod.jp/articles/tips-for-aws-cli-v2-on-container/

要は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