😽
Dockerのamazon/aws-cliでSessionManagerPlugin is not foundエラーを回避する方法
はじめに
以下の環境で動作検証しました。
- ホストマシンは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-cli
をaws-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$
Discussion