AWS CLIを使って作業を行うとき、しばしばJSON文字列を引数として渡す必要があります。しかし、これが難しい場合もあります。特に文字列内にエスケープが必要な文字(バックスラッシュなど)が含まれている場合です。
今回は、エスケープなしのJSON文字列をAWS CLIに直接渡す方法を紹介します。
ヒアドキュメントの使用
ヒアドキュメント(Here Document)は、シェルスクリプトのリダイレクトの一種で、複数行のテキストを直接スクリプト内に記述するための方法です。
ヒアドキュメント内部では、一部のエスケープシーケンスが解釈されずバックスラッシュがただの文字として扱われます。
これを利用すると、バックスラッシュを含む文字列をエスケープせずに直接AWS CLIに渡すことが可能になります。
具体的には、以下のようにします:
aws sqs send-message --profile your-profile --queue-url "your-queue-url" --message-group-id "your-message-group-id" --message-body "$(cat <<EOF
{
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
EOF
)"
ここで、
$(cat <<EOF ... EOF)
がヒアドキュメントの部分で、これが完全に展開された後で
aws sqs send-message
コマンドが実行されます。ヒアドキュメント内のJSON文字列はエスケープなしでそのまま扱われるため、特殊文字を含むパスでも問題なくAWS CLIに渡すことができます。
まとめ
AWS CLIでエスケープが必要な文字を含むJSONを扱う際には、ヒアドキュメントが非常に便利です。ヒアドキュメントを使うと、エスケープなしで文字列をそのまま扱うことができるので、コマンドラインでの作業が少し楽になります。