рдореИрдВ рдЗрд╕ рдкрд░ рдЕрдкрдиреЗ рдмрд╛рд▓реЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реВрдБред рдореЗрд░реЗ рд╕рднреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ "рдбреЗрдЯрд╛" рдирд╛рдо рдХрд╛ рдПрдХ рдЯреИрдЧ рд╣реИ, рдФрд░ "рдбреЗрдЯрд╛" рдХрд╛ рдорд╛рди рдирд┐рдореНрди рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ: "foo=yes,bar=yes", "foo=yes,bar=no", "foo=no,bar =yes", "foo=no,bar=no", рдореИрдВ рдПрдХ --query
рдЪрд▓рд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдХрд┐рд╕реА рднреА рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП InstanceId рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ "рдбреЗрдЯрд╛" рдорд╛рди рдЯреИрдЧ рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ "foo=yes" рд╣реЛрддрд╛ рд╣реИред рддреЛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣
aws --region us-east-1 ec2 describe-instances --query 'Reservations[].Instances[].[?contains(Tags[?Key==`Data`].Value, `foo=yes` == `true`)].InstanceId'
рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ! рдореИрдВрдиреЗ рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛:
"Reservations[].Instances[?Tags[?Key == 'Data' && contains(Value, 'foo=yes')][]][].InstanceId"
рдпрд╣ рдПрдХ рд▓рдВрдмрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдЯреБрдХрдбрд╝реЗ-рдЯреБрдХрдбрд╝реЗ рдХрд░ рджреВрдВрдЧрд╛ред рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЗрд╕ рдирдореВрдирд╛ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
{
"Reservations": [{"Instances": [
{
"InstanceId": "id-target1",
"Tags": [
{"Key": "Data", "Value": "foo=yes,bar=no"},
{"Key": "Name", "Value": "target"}
]
},
{
"InstanceId": "id-target2",
"Tags": [
{"Key": "Data", "Value": "foo=yes,bar=yes"},
{"Key": "Name", "Value": "target"}
]
},
{
"InstanceId": "id-invalid1",
"Tags": [
{"Key": "Data", "Value": "foo=no,bar=no"},
{"Key": "Name", "Value": "invalid"}
]
},
{
"InstanceId": "id-invalid2",
"Tags": [
{"Key": "Data", "Value": "foo=no,bar=yes"},
{"Key": "Name", "Value": "invalid"}
]
}
]}]
}
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо Reservations[].Instances[]
:
[
{
"Tags": [
{
"Value": "foo=yes,bar=no",
"Key": "Data"
},
{
"Value": "target",
"Key": "Name"
}
],
"InstanceId": "id-target1"
},
{
"Tags": [
{
"Value": "foo=yes,bar=yes",
"Key": "Data"
},
{
"Value": "target",
"Key": "Name"
}
],
"InstanceId": "id-target2"
},
{
"Tags": [
{
"Value": "foo=no,bar=no",
"Key": "Data"
},
{
"Value": "invalid",
"Key": "Name"
}
],
"InstanceId": "id-invalid1"
},
{
"Tags": [
{
"Value": "foo=no,bar=yes",
"Key": "Data"
},
{
"Value": "invalid",
"Key": "Name"
}
],
"InstanceId": "id-invalid2"
}
]
рдЕрдм рд╣рдо рдЯреИрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ "рдбреЗрдЯрд╛" рдорд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рдХреБрдВрдЬреА рд╣реИ: .Tags[?Key == 'Data']
рдкреВрд░реНрдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ Reservations[].Instances[].Tags[?Key == 'Data']
рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП:
[
[
{
"Value": "foo=yes,bar=no",
"Key": "Data"
}
],
[
{
"Value": "foo=yes,bar=yes",
"Key": "Data"
}
],
[
{
"Value": "foo=no,bar=no",
"Key": "Data"
}
],
[
{
"Value": "foo=no,bar=yes",
"Key": "Data"
}
]
]
рдЕрдм рд╣рдо рдпрд╣ рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЙрд╕ рдЯреИрдЧ рдХрд╛ рдорд╛рди "foo=yes" рд╣реЛ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдкреВрд░реНрдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ Reservations[].Instances[].Tags[?Key == 'Data' && contains(Value, 'foo=yes')]
рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рд╢рд░реНрдд && contains(Value, 'foo=yes')
рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
[
[
{
"Value": "foo=yes,bar=no",
"Key": "Data"
}
],
[
{
"Value": "foo=yes,bar=yes",
"Key": "Data"
}
],
[],
[]
]
рдареАрдХ рд╣реИ, рдЕрдм рдкреВрд░реНрдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ Reservations[].Instances[].Tags[?Key == 'Data' && contains(Value, 'foo=yes')][]
рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдЙрд╕ рд╕реВрдЪреА рдХреЛ []
рд╕рд╛рде рд╕рдорддрд▓ рдХрд░реЗрдВ:
[
{
"Value": "foo=yes,bar=no",
"Key": "Data"
},
{
"Value": "foo=yes,bar=yes",
"Key": "Data"
}
]
рдареАрдХ рд╣реИ, рддреЛ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡реЗ рдЯреИрдЧ рд╣реИрдВ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдкреВрд░реНрдг рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдбреЗрдЯрд╛ рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рддреЛ рдЪрд▓рд┐рдП рдЙрд╕ рдЯреИрдЧ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред рддреЛ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдЕрдм рдкреВрд░реНрдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ Reservations[].Instances[?Tags[?Key == 'Data' && contains(Value, 'foo=yes')][]]
:
[
[
{
"Tags": [
{
"Value": "foo=yes,bar=no",
"Key": "Data"
},
{
"Value": "target",
"Key": "Name"
}
],
"InstanceId": "id-target1"
},
{
"Tags": [
{
"Value": "foo=yes,bar=yes",
"Key": "Data"
},
{
"Value": "target",
"Key": "Name"
}
],
"InstanceId": "id-target2"
}
]
]
рдереЛрдбрд╝рд╛ рдФрд░ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, ?
рдПрдХ рд╕рдЪреНрдЪреЗ рдореВрд▓реНрдп рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЙрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдЙрдЪрд┐рдд рдЯреИрдЧ рдирд╣реАрдВ рд╣реИ, ?Tags[?Key == 'Data' && contains(Value, 'foo=yes')][]
рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ null
, рдПрдХ рдорд┐рдереНрдпрд╛ рдорд╛рдиред
рдЕрдм рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИ рдХрд┐ рдЙрд╕ рд╕реВрдЪреА рдХреЛ рд╕рдорддрд▓ рдХрд░реЗрдВ рдФрд░ рдкреВрд░реНрдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ "Reservations[].Instances[?Tags[?Key == 'Data' && contains(Value, 'foo=yes')][]][].InstanceId"
рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП [].InstanceId
рд╕рд╛рде рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдЖрдИрдбреА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ:
[
"id-target1",
"id-target2"
]
рдФрд░ рд╣рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ!
рдмрд╣реБрдд рдмрдврд╝рд┐рдпрд╛! Tags[?Key == 'Data' && contains(Value, 'foo=yes')]
рдХрджрдо рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдореИрдВ рдкрдЯрд░реА рд╕реЗ рдЙрддрд░ рдЧрдпрд╛ред рд╢реБрдХреНрд░рд┐рдпрд╛!
* рдЕрдкрдбреЗрдЯ рдХрд░реЗрдВ *
рдореЗрд░реЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдПрдХ рдмрд╣реБрдд рдЖрд╕рд╛рди рджреГрд╖реНрдЯрд┐рдХреЛрдг рдерд╛ (рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рдореБрдЭреЗ 2+ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдХреЗ рдзрд╛рдЧреЗ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдорд┐рд▓рддрд╛ рд╣реИ):
--filter "Name=tag:aws:cloudformation:stack-name,Values=*$1*"
* рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдиреНрджреЗрд╢ *
рдпрд╣ рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИред рдЗрд╕рдиреЗ рдЕрдВрддрд┐рдо рдЪрд░рдг рддрдХ рдХрд╛рдо рдХрд┐рдпрд╛, рдЬрд╣рд╛рдВ [?рдЯреИрдЧ рдХреЛ .tags рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
Reservations[].Instances[].Tags[?Key == 'aws:cloudformation:stack-name' && contains(Value, 'target')][]
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ! рдореИрдВрдиреЗ рдЗрд╕реЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдкреНрд░рдмрдВрдзрд┐рдд рдХрд┐рдпрд╛:
рдпрд╣ рдПрдХ рд▓рдВрдмрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдЯреБрдХрдбрд╝реЗ-рдЯреБрдХрдбрд╝реЗ рдХрд░ рджреВрдВрдЧрд╛ред рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рдЗрд╕ рдирдореВрдирд╛ рдбреЗрдЯрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рдЗрдВрд╕реНрдЯреЗрдВрд╕ рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо
Reservations[].Instances[]
:рдЕрдм рд╣рдо рдЯреИрдЧ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ "рдбреЗрдЯрд╛" рдорд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рдХреБрдВрдЬреА рд╣реИ:
.Tags[?Key == 'Data']
рдкреВрд░реНрдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐Reservations[].Instances[].Tags[?Key == 'Data']
рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП:рдЕрдм рд╣рдо рдпрд╣ рднреА рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдЙрд╕ рдЯреИрдЧ рдХрд╛ рдорд╛рди "foo=yes" рд╣реЛ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдкреВрд░реНрдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
Reservations[].Instances[].Tags[?Key == 'Data' && contains(Value, 'foo=yes')]
рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рд╢рд░реНрдд&& contains(Value, 'foo=yes')
рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:рдареАрдХ рд╣реИ, рдЕрдм рдкреВрд░реНрдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
Reservations[].Instances[].Tags[?Key == 'Data' && contains(Value, 'foo=yes')][]
рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдЙрд╕ рд╕реВрдЪреА рдХреЛ[]
рд╕рд╛рде рд╕рдорддрд▓ рдХрд░реЗрдВ:рдареАрдХ рд╣реИ, рддреЛ рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡реЗ рдЯреИрдЧ рд╣реИрдВ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдкреВрд░реНрдг рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдбреЗрдЯрд╛ рдХреНрдпрд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рддреЛ рдЪрд▓рд┐рдП рдЙрд╕ рдЯреИрдЧ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдкрд░ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рд▓реЗ рдЬрд╛рддреЗ рд╣реИрдВред рддреЛ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд╕рд╛рде рдЕрдм рдкреВрд░реНрдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
Reservations[].Instances[?Tags[?Key == 'Data' && contains(Value, 'foo=yes')][]]
:рдереЛрдбрд╝рд╛ рдФрд░ рд╕рдордЭрд╛рдиреЗ рдХреЗ рд▓рд┐рдП,
?
рдПрдХ рд╕рдЪреНрдЪреЗ рдореВрд▓реНрдп рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд░рд╣рд╛ рд╣реИред рдЙрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдЙрдЪрд┐рдд рдЯреИрдЧ рдирд╣реАрдВ рд╣реИ,?Tags[?Key == 'Data' && contains(Value, 'foo=yes')][]
рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛null
, рдПрдХ рдорд┐рдереНрдпрд╛ рдорд╛рдиредрдЕрдм рдмрд╕ рдЗрддрдирд╛ рдХрд░рдирд╛ рдмрд╛рдХреА рд╣реИ рдХрд┐ рдЙрд╕ рд╕реВрдЪреА рдХреЛ рд╕рдорддрд▓ рдХрд░реЗрдВ рдФрд░ рдкреВрд░реНрдг рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
"Reservations[].Instances[?Tags[?Key == 'Data' && contains(Value, 'foo=yes')][]][].InstanceId"
рдФрд░ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП[].InstanceId
рд╕рд╛рде рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдЖрдИрдбреА рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ:рдФрд░ рд╣рдо рдХрд░ рд░рд╣реЗ рд╣реИрдВ!