Windowsのコマンドプロンプト(cmd.exe)では、Bashのようなシェル機能がありません。そのため、タイムスタンプを取得する方法や、コマンドの構文に違いがあります。Windowsのコマンドプロンプトでaws logs put-log-eventsコマンドを実行する方法について解決策を提供します。
1. PowerShellを使用する
Windowsの標準コマンドプロンプトではなく、PowerShellを使用することをお勧めします。PowerShellは、UNIXシェルのような高度な機能を提供します。
次の手順でPowerShellを使用してコマンドを実行します。
PowerShellでのタイムスタンプ取得とログ登録
$logGroupName = "/aws/aaa/bbb"
$logStreamName = "my-log-stream"
$logMessage = "This is a test log message"
$timestamp = [math]::round((Get-Date).addseconds(5).ToUniversalTime() - [datetime]'1970-01-01').TotalMilliseconds)
aws logs put-log-events --log-group-name $logGroupName --log-stream-name $logStreamName --log-events timestamp=$timestamp,message=$logMessage
2. コマンドプロンプト(cmd.exe)での方法
もしPowerShellを使用できない場合、コマンドプロンプトでエクスプレッションを解決する別の方法を使用する必要があります。具体的にはdate +%s%3Nの代わりに、Windowsのオブジェクトメソッドやコマンドラインツールpowershellを利用してタイムスタンプを取得できます。
cmd.exeでのスクリプト
以下は、コマンドプロンプトから直接実行できるバッチスクリプトです:
@echo off
set LOG_GROUP_NAME=/aws/aaa/bbb
set LOG_STREAM_NAME=my-log-stream
set LOG_MESSAGE=This is a test log message
:: PowerShellを使用して現在のUNIXタイムスタンプをミリ秒単位で取得
for /f %%i in ('powershell -command "[math]::round((Get-Date).ToUniversalTime() - [datetime]::new(1970,1,1)).TotalMilliseconds"') do set TIMESTAMP=%%i
:: AWS CLIコマンドを実行
aws logs put-log-events --log-group-name %LOG_GROUP_NAME% --log-stream-name %LOG_STREAM_NAME% --log-events timestamp=%TIMESTAMP%,message="%LOG_MESSAGE%"
上記のスクリプトは、ファイル(例: send-log.bat)に保存して実行します。
実行手順
- スクリプトをバッチファイルとして保存(例:
send-log.bat) - コマンドプロンプトを開き、スクリプトを保存したディレクトリに移動します。
- 以下のコマンドを実行してスクリプトを実行します:
send-log.bat
注意点
- Windows のコマンドプロンプトでは環境変数の指定に
%VAR_NAME%を使い、PowerShellでは$VAR_NAMEを使います。 - PowerShell コマンドを利用した部分については、 PowerShell がインストールされていることと、そのパスがコマンドプロンプトからアクセス可能であることを前提としています。
これにより、WindowsのコマンドプロンプトやPowerShellを用いて適切にAWS CLIを使い、ロググループにログを登録することができるはずです。

コメント