키-값 페어를 기반으로 기존 EC2 리소스의 AWS 태그를 변경하려고 합니다. 키-값 쌍이 일치하면 라벨을 추가/수정하세요. AWS CLI를 사용하여 이 작업을 수행합니다.
선언-a 인스턴스 인스턴스=$(aws ec2 설명 인스턴스 | jq ".Reservations[].Instances[].Tags[] | [.Key, .Value]")
이렇게 하면 [ "Name", "TestCLI2" ] [ "Instance", "Trial2" ] [ "Instance", "Trial1" ] [ "Name", "TestCLI1" ]로 출력이 생성됩니다.
이제 모든 인스턴스를 Key="Instance" 및 Value=["Trial1", "Trial2]와 일치시키고 Trial3으로 수정해야 합니다.
루프를 사용하려고 하는데 이 JSON을 구문 분석하여 if 문을 확인하는 방법을 더 이상 진행할 수 없습니다.
for i in "${instance[@]}" # 모든 인스턴스를 반복합니다.
답변1
이 명령을 사용하여 및 태그와 일치하는 모든 ec2 인스턴스를 aws describe
가져올 수 있습니다 .key="Instance"
value=["Trial1", "Trial2"]
$ aws ec2 describe-instances --region <yourRegion> \
--query Reservations[*].Instances[*].[InstanceId] \
--filters "Name=tag:<tagKey>,Values=<tagValue>" --output text
위 명령은 필터 매개변수와 일치하는 인스턴스의 인스턴스 ID를 제공합니다. 다음 단계에서는 리소스 ID를 다음 명령에 전달할 수 있습니다.
$ aws ec2 create-tags --resources <id1> <id2> ... \
--tags 'Key=<tagKey>,Value=<newValue>'
Create-tags
레이블이 없으면 명령은 새 레이블을 만듭니다. 그렇다면 이전 태그 값을 새 태그 값으로 업데이트합니다.
를 사용하면 xargs
이 두 명령을 한 줄로 결합할 수 있습니다.
$ aws ec2 describe-instances --region <yourRegion> \
--query Reservations[*].Instances[*].[InstanceId] \
--filters "Name=tag:<tagKey>,Values=<tagValue>" \
--output text| xargs -n1 -I@ aws ec2 create-tags \
--resources @ --tags 'Key=<tagKey>,Value=<newValue>'
자세한 내용은: