シェルスクリプトを実行すると、次のエラーが発生します。(Bash)
An error occurred (InvalidID) when calling the CreateTags operation: The ID ‘{‘ is not valid”
そのため、シェルスクリプトを見てみると、問題を引き起こす2行のスクリプトがあり、私の場合、行1の出力が行2(--resource $ remote_snapshot_id)の入力として使用されたことがわかりました。
ライン1:
remote_snapshot_id=$(aws ec2 copy-snapshot --region us-east-1 --source-region $region --source-snapshot-id $snapshot_id --description $snapshot_id)
2号線:
aws ec2 create-tags --region us-east-1 --resource $remote_snapshot_id --tags Key=CreatedBy,Value=AutomatedBackup
Linux 端末で 1 行目を 1 つのコマンドで実行しようとすると、次のようになります。
aws --region us-east-1 ec2 copy-snapshot --source-region us-west-1 --source-snapshot-id snap-00220030300040 --description "Automated_Backup_425"
出力:
{
"SnapshotId": "snap-00880090900090"
}
ただし、2行目には1行目の出力のsnap-00880090900090値のみが必要です。 (現在「{」で始まる出力全体を選択しているため、snap-00880090900090のみを使用しているため、このようなエラーが発生します)
私の質問は、snap-00880090900090をgrepし、2行目(--resource $ remote_snapshot_id)に使用する出力を保存する方法です。
この問題を解決するのに役立つ人はいますか?
答え1
snap-00880090900090 [from]をどうやってgrepしますか
{ "SnapshotId": "snap-00880090900090" }
?
抽出する形式はJSONなので、JSON認識ツールを使用してこれを行うのが最善です。jq
インストールできる場合は、以下をお勧めします。
command | jq -r .SnapshotId
command
上記のJSONフラグメントを出力すると、コマンドはオプションのために引用符や「生」なしでjq
出力されます。snap-00880090900090
-r
適切なJSON認識ツールをインストールできず、より脆弱なソリューションに対応でき、スナップショットIDが常に例に示されている形式(「snap-」の後に一連の数字がオーム)を持つことがわかっている場合は、次のようにGNU grepを使用しますできます。
command | grep -o 'snap-[0-9]\+'