【小ネタ】CloudWatch Logs の AWS CLI コマンドの --filter-pattern オプションでハイフンで始まる値を指定する方法

【小ネタ】CloudWatch Logs の AWS CLI コマンドの --filter-pattern オプションでハイフンで始まる値を指定する方法

CloudWatch Logs の AWS CLI のオプション `--filter-pattern` にハイフンで始まる除外条件を指定すると、AWS CLI がオプションとして解釈しエラーになります。`--filter-pattern="-INFO"` のように `=` でオプション名と値を繋げることで解決できます。
2026.07.02

困っていた内容

CloudWatch Logs の AWS CLI のオプション --filter-pattern で、ハイフンで始まる除外条件(例: -INFO)を指定したいです。

--filter-pattern "-INFO" のように記述すると、AWS CLI がハイフンで始まる値をコマンドオプションとして解釈し、expected one argument エラーが発生します。

$ aws logs filter-log-events \
   --log-group-name /test \
   --log-stream-names test-stream \
   --filter-pattern "-INFO"

aws: [ERROR]: An error occurred (ParamValidation): argument --filter-pattern: expected one argument

usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:

  aws help
  aws <command> help
  aws <command> <subcommand> help

どう対応すればいいの?

--filter-pattern="-INFO" のように、オプション名と値を = で繋げて指定してください。

--filter-pattern="-INFO"

なぜスペース区切りだとエラーになるのか

--filter-pattern "-INFO" のようにスペースで区切ると、AWS CLI はハイフンで始まる -INFO を別のオプション名として解釈しようとしてエラーになります。

一方、= で繋ぐとその右側全体が「そのオプションの値」として扱われるため、値がハイフンで始まっていてもオプションとして解釈されません。

この = 記法は AWS CLI の公式ドキュメントに記載されています。

引数を使用する各オプションには、オプション名から引数を分離するスペースまたは等号 (=) が必要です。

Command line options - AWS CLI User Guide

オプションとして、パラメータ名と値をスペースの代わりに等号 = で区切ることができます。通常、これはパラメータの値がハイフンで始まる場合にのみ必要です。
$ aws ec2 delete-key-pair --key-name=-mykey

設定例

aws logs filter-log-events \
  --log-group-name /your-log-group \
  --filter-pattern="-INFO"

別解: 全マッチ条件と組み合わせる方法

" " -INFO のように、全マッチ条件(" ")と除外条件を組み合わせる方法でも動作します。この場合、フィルターパターン内のダブルクォーテーションをエスケープします。

--filter-pattern "\" \" -INFO"

公式ドキュメント の「Include and exclude terms」の例では、除外条件(-)は他のマッチ条件と組み合わせて使用する形で記載されています。ただし、検証の結果 -INFO 単独でも除外フィルターとして機能することを確認しています。

GUI から設定する場合

マネジメントコンソールから設定する場合は = 記法やエスケープは不要です。フィルターパターン入力欄に以下をそのまま入力してください。

-INFO

注意事項

  • この = 記法は --filter-pattern に限らず、AWS CLI の全オプションで使用できます

やってみた

filter-log-events コマンドを使って、フィルターパターンの動作を確認します。

1. テスト用のロググループとログストリームを作成

aws logs create-log-group --log-group-name /test
aws logs create-log-stream --log-group-name /test --log-stream-name test-stream

2. テストログを投入

ERRORINFOWARN を含むログイベントを投入します。

TIMESTAMP=$(date +%s000)
aws logs put-log-events \
  --log-group-name /test \
  --log-stream-name test-stream \
  --log-events \
    "[{\"timestamp\":${TIMESTAMP},\"message\":\"[ERROR] something went wrong\"},{\"timestamp\":$((TIMESTAMP+1)),\"message\":\"[INFO] application started\"},{\"timestamp\":$((TIMESTAMP+2)),\"message\":\"[WARN] connection timeout\"}]"

3. いったん全件取得テストをする

aws logs filter-log-events \
  --log-group-name /test \
  --log-stream-names test-stream
取得結果
{
    "events": [
        {
            "logStreamName": "test-stream",
            "timestamp": 1782958999000,
            "message": "[ERROR] something went wrong",
            "ingestionTime": 1782959002294,
            "eventId": "39761314336126216109434224747335139860999758272121864192"
        },
        {
            "logStreamName": "test-stream",
            "timestamp": 1782958999001,
            "message": "[INFO] application started",
            "ingestionTime": 1782959002294,
            "eventId": "39761314336148516854632755370476675579272406633627844609"
        },
        {
            "logStreamName": "test-stream",
            "timestamp": 1782958999002,
            "message": "[WARN] connection timeout",
            "ingestionTime": 1782959002294,
            "eventId": "39761314336170817599831285993618211297545054995133825026"
        }
    ],
    "searchedLogStreams": []
}

4. 除外フィルターを適用して確認

aws logs filter-log-events \
  --log-group-name /test \
  --log-stream-names test-stream \
  --filter-pattern="-INFO"
取得結果
{
    "events": [
        {
            "logStreamName": "test-stream",
            "timestamp": 1782958999000,
            "message": "[ERROR] something went wrong",
            "ingestionTime": 1782959002294,
            "eventId": "39761314336126216109434224747335139860999758272121864192"
        },
        {
            "logStreamName": "test-stream",
            "timestamp": 1782958999002,
            "message": "[WARN] connection timeout",
            "ingestionTime": 1782959002294,
            "eventId": "39761314336170817599831285993618211297545054995133825026"
        }
    ],
    "searchedLogStreams": []
}

INFO を含むログが除外され、ERRORWARN のみが返却されることを確認できました。

参考情報


AWSテクニカルサポートノートについて

過去にクラスメソッドのAWS総合支援サービスで頂いたお問合せの中から、通常のAWS利用時でも有益になりうる情報をテクニカルサポートチームがTIPSとしてご紹介しています。技術サポートは、無料でご提供しております。詳細は下記ボタンからご覧ください。

クラスメソッドのAWSサポートの詳細を見る

この記事をシェアする

関連記事