Aws-cli: νƒœκ·Έ κ°’μ˜ ν•˜μœ„ λ¬Έμžμ—΄μ„ μΌμΉ˜μ‹œμΌœ μΈμŠ€ν„΄μŠ€λ₯Ό ν•„ν„°λ§ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2016λ…„ 09μ›” 29일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: aws/aws-cli

λ‚˜λŠ” 이것에 λŒ€ν•΄ λ‚΄ 머리카락을 뽑을 μ˜ˆμ •μ΄λ‹€. λ‚΄ λͺ¨λ“  μΈμŠ€ν„΄μŠ€μ—λŠ” "Data"λΌλŠ” νƒœκ·Έκ°€ 있고 "Data" 값은 "foo=yes,bar=yes", "foo=yes,bar=no", "foo=no,bar" 쀑 ν•˜λ‚˜μž…λ‹ˆλ‹€. =yes", "foo=no,bar=no", "foo=yes"λ₯Ό ν¬ν•¨ν•˜λŠ” νƒœκ·Έ "Data" 값이 μžˆλŠ” λͺ¨λ“  μΈμŠ€ν„΄μŠ€μ— λŒ€ν•΄ InstanceIdλ₯Ό λ°˜ν™˜ν•˜λŠ” --query λ₯Ό μ‹€ν–‰ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€. κ·Έλž˜μ„œ λ­”κ°€

aws --region us-east-1 ec2 describe-instances --query 'Reservations[].Instances[].[?contains(Tags[?Key==`Data`].Value, `foo=yes` == `true`)].InstanceId'

ν•˜μ§€λ§Œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

guidance

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

그것은 ν™•μ‹€νžˆ κΉŒλ‹€λ‘œμš΄ κ²ƒμž…λ‹ˆλ‹€! λ‚˜λŠ” λ‹€μŒκ³Ό 같은 ν‘œν˜„μœΌλ‘œ 그것을 κ΄€λ¦¬ν–ˆλ‹€.

"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"
  }
]

이제 값이 "Data"인 ν‚€κ°€ μžˆλŠ” νƒœκ·Έκ°€ ν•„μš”ν•©λ‹ˆλ‹€. .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λ₯Ό μ„ νƒν•˜κΈ° "Reservations[].Instances[?Tags[?Key == 'Data' && contains(Value, 'foo=yes')][]][].InstanceId" ν•˜λ©΄ λ©λ‹ˆλ‹€.

[
  "id-target1",
  "id-target2"
]

그리고 μš°λ¦¬λŠ” λλ‚¬μŠ΅λ‹ˆλ‹€!

λͺ¨λ“  3 λŒ“κΈ€

그것은 ν™•μ‹€νžˆ κΉŒλ‹€λ‘œμš΄ κ²ƒμž…λ‹ˆλ‹€! λ‚˜λŠ” λ‹€μŒκ³Ό 같은 ν‘œν˜„μœΌλ‘œ 그것을 κ΄€λ¦¬ν–ˆλ‹€.

"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"
  }
]

이제 값이 "Data"인 ν‚€κ°€ μžˆλŠ” νƒœκ·Έκ°€ ν•„μš”ν•©λ‹ˆλ‹€. .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λ₯Ό μ„ νƒν•˜κΈ° "Reservations[].Instances[?Tags[?Key == 'Data' && contains(Value, 'foo=yes')][]][].InstanceId" ν•˜λ©΄ λ©λ‹ˆλ‹€.

[
  "id-target1",
  "id-target2"
]

그리고 μš°λ¦¬λŠ” λλ‚¬μŠ΅λ‹ˆλ‹€!

λŒ€λ‹¨ν•΄! Tags[?Key == 'Data' && contains(Value, 'foo=yes')] λ‹¨κ³„λŠ” λ‚΄κ°€ νƒˆμ„ ν•œ κ³³μž…λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€!

* μ—…λ°μ΄νŠΈ *

λ‚΄ λͺ©μ μ„ μœ„ν•΄ λ‹€μŒμ€ 훨씬 μ‰¬μš΄ μ ‘κ·Ό λ°©μ‹μ΄μ—ˆμŠ΅λ‹ˆλ‹€(이것은 2λ…„ 이상 된 μŠ€λ ˆλ“œμ— μ•‘μ„ΈμŠ€ν•˜μ—¬ 얻은 κ²ƒμž…λ‹ˆλ‹€).

--filter "Name=tag:aws:cloudformation:stack-name,Values=*$1*"
* 원본 λ©”μ‹œμ§€ *

더 이상 μž‘λ™ν•˜μ§€ μ•ŠλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. [?Tagsκ°€ .Tags둜 λŒ€μ²΄λœ λ§ˆμ§€λ§‰ λ‹¨κ³„κΉŒμ§€ 계속 μž‘λ™ν–ˆμŠ΅λ‹ˆλ‹€. λ‚΄ 유슀 μΌ€μ΄μŠ€μ— λŒ€ν•΄ μ‹€ν–‰ν•  λ•Œ 빈 μ„ΈνŠΈλ₯Ό μ–»μŠ΅λ‹ˆλ‹€.
Reservations[].Instances[].Tags[?Key == 'aws:cloudformation:stack-name' && contains(Value, 'target')][]

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰