Amazon ECSのコンテナを踏み台として使うのにECS Execを多用していたのですが、リンク先のとおりIAM権限を付与してもうまくログがS3やCloudWatch Logsに出力されない場合がありました。
自分の場合はAmazon Linux 2023のコンテナイメージをカスタマイズして使っていたわけだがドキュメントに記載のある script コマンドがが入っていなかった模様。
解決方法を備忘録として記録します。
コマンドログを Amazon S3 または CloudWatch Logs に正しくアップロードするには、コンテナイメージに script と cat をインストールする必要があります。
Amazon Linux 2023 ベースイメージの状態
本記事記載時点の最新イメージ Amazon Linux 2023.7.20250512 で必須コマンドが入っているか確認してみます。
$ podman run --rm -d --name al2023 public.ecr.aws/amazonlinux/amazonlinux:2023.7.20250512.0 sleep 999 9ec24a2a340b... $ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 9ec24a2a340b public.ecr.aws/amazonlinux/amazonlinux:2023.7.20250512.0 sleep 999 6 seconds ago Up 6 seconds al2023 $ podman exec -it al2023 bash bash-5.2# dnf install -y which ... Complete! bash-5.2# bash-5.2# which cat /usr/bin/cat bash-5.2# which script /usr/bin/which: no script in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin)
cat は入っているが、script は入っていないことがわかります。
パッケージをコンテナイメージにインストール
script コマンドは util-linux パッケージをインストールすることで利用可能です。
Dockerfileでの定義例を以下に示します。
FROM public.ecr.aws/amazonlinux/amazonlinux:2023.7.20250512.0 RUN <<EOF # Common Utility dnf install -y which vim jq unzip gzip tar # 今回はこれを入れるべし dnf install -y util-linux # Cleanup dnf clean all EOF # 立ち上げたままにする ENTRYPOINT [ "tail", "-f", "/dev/null" ]
util-linuxインストール済みのコンテナイメージを立ち上げてみると、scriptコマンドも使えるようになっていました。 ログも無事にS3やCloudWatch Logsに送信できています。
bash-5.2# which script /usr/bin/script bash-5.2# script --version script from util-linux 2.37.4
参考情報
「ECS 踏み台」で調べると以下の記事がヒットしますが、Amazon Linux 2023 ではなくUbuntuやAmazon Linux 2の例でした。
以上。