ec2 인스턴스를 함께 aws cli에서 중지

5398 단어 stopcliEC2aws-cliAWS
잊기 쉽기 때문에 메모 메모

1. 우선 확인



지정된 이름 태그를 포함하는 인스턴스 ID와 이름을 검색합니다.
태그에 포함된 이러한 문자열 XXXXXX를 지정합니다.

bash
$ aws ec2 describe-instances | jq '.Reservations[].Instances[]
  | select(.Tags[].Key == "Name" and (.Tags[].Value | test("XXXXXX")))
  |  {"InstanceName":(.Tags[] | select(.Key=="Name").Value) ,"instance-id": .InstanceId}'

{
  "InstanceName": "XXXXXX-28",
  "instance-id": "i-0791d3f5e36351883"
}
{
  "InstanceName": "XXXXXX-22",
  "instance-id": "i-03c6f00bd51f7dbcd"
}
{
  "InstanceName": "XXXXXX-23",
  "instance-id": "i-0c5cf083435cb6070"
}
{
  "InstanceName": "XXXXXX-30",
  "instance-id": "i-0151fcf7f29fb0876"
}
{
  "InstanceName": "XXXXXX-25",
  "instance-id": "i-0d0360a9c2b6c8bae"
}

다른 인스턴스는 포함되어 있지 않은 것 같습니다.

2. 중지 인스턴스 ID 목록 작성


--cli-input-json

를 사용해도 좋지만 JSON 파일을 만들지 않으면 갈 수 없으므로 이번에는 --instance-ids 로 편하게 지정합니다. 그래서 1을 수정하고,
"instance-id1""instance-id2"
한 줄로 변환합니다.

먼저 인스턴스 ID만 검색합니다.

bash
$ aws ec2 describe-instances | jq '.Reservations[].Instances[]
  | select(.Tags[].Key == "Name" and (.Tags[].Value | test("XXXXXX")))
  |  {"InstanceName":(.Tags[] | select(.Key=="Name").Value) ,"instance-id": .InstanceId}'

{
  "instance-id": "i-0791d3f5e36351883"
}
{
  "instance-id": "i-03c6f00bd51f7dbcd"
}
{
  "instance-id": "i-0c5cf083435cb6070"
}
{
  "instance-id": "i-0151fcf7f29fb0876"
}
{
  "instance-id": "i-0d0360a9c2b6c8bae"

나쁘지 않아.
이것을 sed로 ID 만 추출합니다.

bash
$ aws ec2 describe-instances | jq '.Reservations[].Instances[]
  | select(.Tags[].Key == "Name" and (.Tags[].Value | test("XXXXXX")))
  |  {"instance-id": .InstanceId}' | sed -n -e 's/.*"instance-id": "\(.*\)"/\1/p'

i-0791d3f5e36351883
i-03c6f00bd51f7dbcd
i-0c5cf083435cb6070
i-0151fcf7f29fb0876
i-0d0360a9c2b6c8bae

개행이 들어 있기 때문에 삭제하고 공백으로 변환합니다.

bash
$ aws ec2 describe-instances | jq '.Reservations[].Instances[]
  | select(.Tags[].Key == "Name" and (.Tags[].Value | test("XXXXXX")))
  |  {"instance-id": .InstanceId}' | sed -n -e 's/.*"instance-id": "\(.*\)"/\1/p' | tr '\n' ' '
i-0791d3f5e36351883 i-03c6f00bd51f7dbcd i-0c5cf083435cb6070 i-0151fcf7f29fb0876 i-0d0360a9c2b6c8bae

"instance-id1""instance-id2"형식입니다.

3. 정지 명령 발행



그럼 $ aws ec2 stop-instances 를 사용합시다.
처음에는 Dry-run이라고 붙여 두면 좋을 것입니다.
$ aws ec2 stop-instances --dry-run --instance-ids $(2のコマンドを入れる)

다음과 같습니다.

bash
aws ec2 stop-instances --dry-run --instance-ids $(
aws ec2 describe-instances | jq '.Reservations[].Instances[]
  | select(.Tags[].Key == "Name" and (.Tags[].Value | test("XXXXXX")))
  |  {"instance-id": .InstanceId}' | sed -n -e 's/.*"instance-id": "\(.*\)"/\1/p' | tr '\n' ' ')

이런 느낌입니다. 2의 부분을 --instance-ids 의 뒤에\$() 로 Bash의 전개를 이용해 지정하고 있습니다.
위의 명령에서는 $() 부분이 실행되어 실제로는 2의 인스턴스 ID 목록이 됩니다.
이제 --dry-run을 제거합니다.

bash
aws ec2 stop-instances --instance-ids $(aws ec2 describe-instances | jq '.Reservations[].Instances[]
  | select(.Tags[].Key == "Name" and (.Tags[].Value | test("XXXXXX")))
  |  {"instance-id": .InstanceId}' | sed -n -e 's/.*"instance-id": "\(.*\)"/\1/p' | tr '\n' ' ')

{
    "StoppingInstances": [
        {
            "InstanceId": "i-0a011f82414e366bd",
            "CurrentState": {
                "Code": 64,
                "Name": "stopping"
            },
            "PreviousState": {
                "Code": 16,
                "Name": "running"
            }
        },
        {
            "InstanceId": "i-0528abc7952480f4c",
            "CurrentState": {
                "Code": 64,
                "Name": "stopping"
            },
            "PreviousState": {
                "Code": 16,
                "Name": "running"
            }
        },
        {
            "InstanceId": "i-0f049840b8939d681",
            "CurrentState": {
                "Code": 64,
                "Name": "stopping"
            },
            "PreviousState": {
                "Code": 16,
                "Name": "running"
            }
        },
    <<<<<中略>>>>>
    ]
}

좋은 것 같습니다. 콘솔에서도 확인합니다.



괜찮습니다.

좋은 웹페이지 즐겨찾기