😽

Dockerのamazon/aws-cliでSessionManagerPlugin is not foundエラーを回避する方法

2023/01/05に公開

はじめに

以下の環境で動作検証しました。

  • ホストマシンはarm64アーキテクチャのMacBook Pro
  • Docker Desktop for macOS 4.12.0 (85629)
  • Docker version 20.10.17, build 100c701

問題

EC2のインスタンスに接続するにはaws ssmコマンドを利用すれば良いそうです。しかし、ツールをあれこれインストールしてホストマシンの環境を散らかすのは避けたいところ。

幸い、amazon公式のDockerイメージとしてamazon/aws-cliが提供されています。これを使いましょう。

$ docker run --rm -it -v "$HOME/.aws:/root/.aws" amazon/aws-cli \
  ssm start-session --target "${ec2_instance_id}"

上記のコマンドを実行します。

...
SessionManagerPlugin is not found. Please refer to SessionManager Documentation here: http://docs.aws.amazon.com/console/systems-manager/session-manager-plugin-not-found

エラーが発生しました!!!

解決策

Session Manager Pluginを追加したカスタムイメージを作成します。以下の内容でDockerfileを作成してください。

FROM amazon/aws-cli

RUN curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_arm64/session-manager-plugin.rpm" \
  -o session-manager-plugin.rpm \
  && yum install -y ./session-manager-plugin.rpm

(注意)上記はarm64アーキテクチャのMacBook Proで実行する想定のDockerfileです。ホストマシンのアーキテクチャに応じてcurlに渡すURLを選んでください。

  • x86→curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_32bit/session-manager-plugin.rpm" -o "session-manager-plugin.rpm"
  • x86_64→curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_64bit/session-manager-plugin.rpm" -o "session-manager-plugin.rpm"
  • arm64→curl "https://s3.amazonaws.com/session-manager-downloads/plugin/latest/linux_arm64/session-manager-plugin.rpm" -o "session-manager-plugin.rpm"

詳細については公式ドキュメントを参照してください。

Dockerfileを作成したら、イメージをビルドします。名前はaws-cli-with-session-manager-pluginとします。

$ docker build -t aws-cli-with-session-manager-plugin .

冒頭のコマンドのamazon/aws-cliaws-cli-with-session-manager-pluginに置き換えます。これでEC2のインスタンスに接続できます。

$ docker run --rm -it -v "$HOME/.aws:/root/.aws" aws-cli-with-session-manager-plugin \
  ssm start-session --target "${ec2_instance_id}"

以下のようにシェルのプロンプトが表示されたら成功です。

...
Starting session with SessionId: koyanagi-admin-03166c27c3a31abea
sh-4.2$

参考資料

  1. Include SessionManagerPlugin in Docker image - Issue #5373 - aws/aws-cli
  2. (Optional) Install the Session Manager plugin for the AWS CLI - AWS Systems Manager

Discussion