BashのJSONドキュメントから価値を得る方法は?

BashのJSONドキュメントから価値を得る方法は?

AWS で未使用のボリュームを探すスクリプトを作成したいと思います。 (使用されているボリュームの「状態」は「使用中」です。)

たとえば、aws ec2 explain-volumes --filters Name=status,Values=available を使用すると、次の応答が表示されます。

{ "Volumes": [ { "Attachments": [], "AvailabilityZone": "us-east-1a", "CreateTime": "2022-04-21T08:45:29.704000+00:00", "Encrypted": false, "Size": 1, "SnapshotId": "", "State": "available", "VolumeId": "vol-0e81644ad6193439f", "Iops": 100, "Tags": [ { "Key": "sre", "Value": "test" } ], "VolumeType": "gp2", "MultiAttachEnabled": false } ] }

状態、VolumeId、ラベルを保存したいです。

ベストアンサー1

これを行うコマンドが利用できないと仮定すると、awsJSONパーサーを使用して必要jqなデータを個人的に抽出します。

jq '.Volumes[] | { State: .State, VolumeId: .VolumeId, Tags: .Tags }'

配列内の各項目について、そのVolumes項目で保持したいフィールドのみを含む新しいJSONオブジェクトが作成されます。

与えられたJSONドキュメントを入力として使用すると、次の結果が得られます。

{
  "State": "available",
  "VolumeId": "vol-0e81644ad6193439f",
  "Tags": [
    {
      "Key": "sre",
      "Value": "test"
    }
  ]
}

または以下を使用する場合jq -c

{"State":"available","VolumeId":"vol-0e81644ad6193439f","Tags":[{"Key":"sre","Value":"test"}]}

...同等のファイルです。

おすすめ記事