Jak sprawdzić za pomocą aws cli, czy istnieje konkretna instancja rds?

5

Chcę, aby mój skrypt bash wykrył, czy instancja AWS RDS o określonej nazwie już istnieje.

Oto, co próbowałem:

#! / usr / bin / env bash

DBINSTANCEIDENTIFIER = greatdb

EXISTINGINSTANCE = $ (aws rds description-db-instances \
    --db-instance-identifier = "$ DBINSTANCEIDENTIFIER" \
    - tekst wyjściowy \
    )

Spodziewałbym się pustej listy lub w rezultacie zera - ale pojawia się komunikat o błędzie:

Wystąpił błąd (DBInstanceNotFound) podczas wywoływania operacji DescribeDBInstances: DBInstance greatdb nie znaleziono.

Czy ktoś wie, jak prawidłowo dowiedzieć się, czy instancja istnieje, czy nie, bez komunikatu o błędzie?

gdzie
źródło

Odpowiedzi:

8

Zwróć uwagę na ograniczenie w dokumentach, gdy używasz --db-instance-indentifier:

--db-instance-identifier (string)

  The user-supplied instance identifier. If this parameter is specified, 
  information from only the specific DB instance is returned. This parameter 
  isn't case-sensitive.

Constraints:   
  - If supplied, must match the identifier of an existing DBInstance

Możesz więc użyć tej opcji tylko wtedy, gdy wiesz, że DB faktycznie istnieje.

Korzystanie z zapytań

Aby wyszukać DB, która może istnieć lub nie, musisz użyć --queryopcji:

$ aws rds describe-db-instances \
    --query 'DBInstances[*].[DBName,DBInstanceIdentifier]' --output text

Struktura DBINstancesJSON jest dostępna w pomocy awscli:

$ aws rds describe-db-instances help --output text
...
...
       {
          "DBInstances": [
              {
                  "PubliclyAccessible": false,
                  "MasterUsername": "mymasteruser",
                  "MonitoringInterval": 0,
                  "LicenseModel": "general-public-license",
                  ...
                  ...
                  "DBName": "sample",
                  ...
                  ...
                  "DBInstanceStatus": "stopped",
                  "EngineVersion": "5.6.27",
                  "AvailabilityZone": "us-east-1e",
                  "StorageType": "standard",
                  "StorageEncrypted": false,
                  "DBInstanceClass": "db.t2.micro",
                  "DbInstancePort": 0,
                  "DBInstanceIdentifier": "mydbinstance-1"
              }
          ]
      }
...
...

Korzystanie z filtrów

Innym prostym rozwiązaniem pierwszego pytania jest użycie --filtersparametru. Zapytanie zwróci identyfikator instancji (jeśli instancja istnieje) lub pusty ciąg (jeśli nie istnieje):

#! / usr / bin / env bash

DBINSTANCEIDENTIFIER = "greatdb"
EXISTINGINSTANCE = $ (aws rds description-db-instances \
    --query „DBInstances [*]. [DBInstanceIdentifier] '\
    --filters Nazwa = db-instance-id, Wartości = $ DBINSTANCEIDENTIFIER \
    - tekst wyjściowy \
    )

jeśli [-z $ EXISTINGINSTANCE]
następnie
    echo „instancja $ DBINSTANCEIDENTIFIER nie istnieje!”
jeszcze
    echo „instancja $ DBINSTANCEIDENTIFIER istnieje!”
fi

Bibliografia

slm
źródło