ぶろとよ

ネットワーク系クラウドエンジニア(AWS)の技術ブログ。自動化に興味があるためAWS CLIを勉強&アウトプット中。

AWS CLI: AWS CloudShellで操作ログを取得してローカルPCへ保存する

AWS CloudShell で、操作ログを保存して、作業後にローカルPCへダウンロードする方法のメモ。

目次

検証環境

  • 検証日: 2022/01/08
  • PC環境:
    • Windows10 Home Ver21H1
      • Google Chrome: バージョン: 97.0.4692.71(Official Build) (64 ビット))
        • AWSマネジメントコンソールへログイン

注意事項

  • 本記事の内容はAWS CloudShellで検証しています。
  • AWS CloudShell の AWS CLIはバージョン2を使用しています。
  • コマンド内の変数やパラメータやは検証で使用したものを記載しています。ご自身の環境に合わせ、書き換えて使用してください。
  • 個人で検証しているため実行結果に責任は持てません。必ずご自身でも検証してから使用してください。


1. AWS CloudShellでの操作ログ取得

1.1. scriptコマンド

コマンドの書式

script [オプション] [ファイル名]
ターミナルの操作ログを作成するコマンド。
ファイル名無しで実行するとカレントディレクトリへ typescript というファイルが作成され、そこへ記録される。

オプション 説明
-a, --append 既存ファイルへの追記
-f, --flush コマンド実行毎にファイルへ記録する
指定しない場合は最後にまとめて記録する
-T, --log-timing タイムスタンプの追加
-q, --quiet 開始や終了のメッセージを出力しない

参考にさせていただいたWEBサイト

https://linuxjm.osdn.jp/html/util-linux/man1/script.1.html
【script】Linuxで操作ログを記録するコマンド | UX MILK


1.2. 操作ログ取得で実行するコマンド

AWS CloudShell を開いて以下コマンドを実行すると、操作ログが取得開始します。
※開始中はプロンプトが変わり、変数は引き継がれません。

# 変数にログ名を設定
## SAMPLE:  20220108_135500_CloudShell.log
LOGS_NAME="$(TZ=JST-9 date +%Y%m%d_%H%M%S)_CloudShell.log" && echo "${LOGS_NAME}"

# 操作ログの取得開始
script ${HOME}/${LOGS_NAME}

操作ログの取得停止

# 終了するコマンド(または ctrl + d)
exit

操作ログの保存場所PATHの取得

# 操作ログの保存場所(後で Download file する時に使える)
echo "${HOME}/${LOGS_NAME}"

ダウンロード後に操作ログファイルを削除する。

# 操作ログファイルの削除
rm "${HOME}/${LOGS_NAME}"


1.3. 操作ログファイルをダウンロードする

ダウンロードするためには、操作ログファイルのPATHが必要です。 操作ログを終了した時に表示されるのでcopyしておきます。
※SAMPLE: 下記画像の選択範囲

GUI操作で、AWS CloudShell画面右上の[Actions]から[Download file]をクリックする。

操作ログファイルのPATHを入力して[Download]をクリックすると、操作ログファイルがダウンロードされます。


1.4. 操作ログファイルに [m が混ざる場合

ハイライトされた結果の表示やBackspace等の記録が混ざる場合があります。

ここら辺の仕組みがいまいち解っていないので、邪魔な場合はダウンロードしてから正規表現で置換しています。

(例)サクラエディタでの正規表現置換

置換前: \S\[([0-9]{1,2}(;[0-9]{1,2})*)?[mK]
置換後: (空欄)


2. SAMPLE: 操作ログ

[cloudshell-user@ip-10-0-26-82 ~]$ # 変数にログ名を設定
[cloudshell-user@ip-10-0-26-82 ~]$ LOGS_NAME="$(TZ=JST-9 date +%Y%m%d_%H%M%S)_CloudShell.log" && echo "${LOGS_NAME}"
20220108_142606_CloudShell.log
[cloudshell-user@ip-10-0-26-82 ~]$ 
[cloudshell-user@ip-10-0-26-82 ~]$ 
[cloudshell-user@ip-10-0-26-82 ~]$ # 操作ログ開始前にユーザや変数を見る
[cloudshell-user@ip-10-0-26-82 ~]$ whoami
cloudshell-user
[cloudshell-user@ip-10-0-26-82 ~]$ uname -r
4.14.252-195.483.amzn2.x86_64
[cloudshell-user@ip-10-0-26-82 ~]$ echo ${PS1}
[\u@\h \W]\$
[cloudshell-user@ip-10-0-26-82 ~]$ echo ${LOGS_NAME}
20220108_142606_CloudShell.log
[cloudshell-user@ip-10-0-26-82 ~]$ 
[cloudshell-user@ip-10-0-26-82 ~]$ 
[cloudshell-user@ip-10-0-26-82 ~]$ # 操作ログの取得開始
[cloudshell-user@ip-10-0-26-82 ~]$ script ${HOME}/${LOGS_NAME}
Script started, file is /home/cloudshell-user/20220108_142606_CloudShell.log

sh-4.2$ 
sh-4.2$ # メモ: プロンプトが変更され、変数は引き継がれない。
sh-4.2$ 
sh-4.2$ # 操作ログ開始中にユーザや変数を見る
sh-4.2$ whoami
cloudshell-user
sh-4.2$ uname -r
4.14.252-195.483.amzn2.x86_64
sh-4.2$ echo ${PS1}
\s-\v\$
sh-4.2$ echo ${LOGS_NAME}

sh-4.2$ 
sh-4.2$ 
sh-4.2$ 
sh-4.2$ # 終了するコマンド(または ctrl + d)
sh-4.2$ exit
exit
Script done, file is /home/cloudshell-user/20220108_142606_CloudShell.log
[cloudshell-user@ip-10-0-26-82 ~]$ # 操作ログ終了後にユーザや変数を見る
[cloudshell-user@ip-10-0-26-82 ~]$ whoami
cloudshell-user
[cloudshell-user@ip-10-0-26-82 ~]$ uname -r
4.14.252-195.483.amzn2.x86_64
[cloudshell-user@ip-10-0-26-82 ~]$ echo ${PS1}
[\u@\h \W]\$
[cloudshell-user@ip-10-0-26-82 ~]$ echo ${LOGS_NAME}
20220108_142606_CloudShell.log
[cloudshell-user@ip-10-0-26-82 ~]$ 
[cloudshell-user@ip-10-0-26-82 ~]$ 
[cloudshell-user@ip-10-0-26-82 ~]$ # 操作ログの保存場所(後で Download file する時に使える)
[cloudshell-user@ip-10-0-26-82 ~]$ echo "${HOME}/${LOGS_NAME}"
/home/cloudshell-user/20220108_142606_CloudShell.log
[cloudshell-user@ip-10-0-26-82 ~]$ 
[cloudshell-user@ip-10-0-26-82 ~]$ 
[cloudshell-user@ip-10-0-26-82 ~]$ # 操作ログの中身を見てみる
[cloudshell-user@ip-10-0-26-82 ~]$ # メモ: 課題、Windowsで操作していると改行コードの違いで「[m」が出る時がある。
[cloudshell-user@ip-10-0-26-82 ~]$ cat "${HOME}/${LOGS_NAME}"
Script started on 2022-01-08 05:26:06+0000

sh-4.2$ 
sh-4.2$ # メモ: プロンプトが変更され、変数は引き継がれない。
sh-4.2$ 
sh-4.2$ # 操作ログ開始中にユーザや変数を見る
sh-4.2$ whoami
cloudshell-user
sh-4.2$ uname -r
4.14.252-195.483.amzn2.x86_64
sh-4.2$ echo ${PS1}
\s-\v\$
sh-4.2$ echo ${LOGS_NAME}

sh-4.2$ 
sh-4.2$ 
sh-4.2$ 
sh-4.2$ # 終了するコマンド(または ctrl + d)
sh-4.2$ exit
exit

Script done on 2022-01-08 05:26:23+0000
[cloudshell-user@ip-10-0-26-82 ~]$ 
[cloudshell-user@ip-10-0-26-82 ~]$ ls
20220108_142606_CloudShell.log
[cloudshell-user@ip-10-0-26-82 ~]$ 
[cloudshell-user@ip-10-0-26-82 ~]$ # 操作ログファイルの削除
[cloudshell-user@ip-10-0-26-82 ~]$ rm "${HOME}/${LOGS_NAME}"
[cloudshell-user@ip-10-0-26-82 ~]$ 
[cloudshell-user@ip-10-0-26-82 ~]$ ls
[cloudshell-user@ip-10-0-26-82 ~]$