Bash

如果存在特定的 rds 實例,如何通過 aws cli 檢查?

  • July 4, 2018

我希望我的 bash 腳本檢測是否已經存在具有特定名稱的 AWS RDS 實例。

這是我嘗試過的:

#!/usr/bin/env bash

DBINSTANCEIDENTIFIER=greatdb

EXISTINGINSTANCE=$(aws rds 描述-db-instances \
--db-instance-identifier="$DBINSTANCEIDENTIFIER" \
--輸出文本\
)

我希望一個空列表,或者結果為零 - 但我收到一條錯誤消息:

呼叫DescribeDBInstances操作時發生錯誤(DBInstanceNotFound):未找到DBInstance greatdb。

有誰知道如何在沒有錯誤消息的情況下正確找出實例是否存在?

使用時請注意文件中的約束--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

因此,如果您知道數據庫實際上存在,則只能使用此選項。

使用查詢

要搜尋可能存在或不存在的數據庫,您必須使用以下--query選項:

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

DBINstancesJSON 結構可在 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"
             }
         ]
     }
...
...

使用過濾器

初始問題的另一個簡單解決方案是使用--filters參數。查詢將返回實例標識符(如果實例存在)或空字元串(如果不存在):

#!/usr/bin/env bash

DBINSTANCEIDENTIFIER="greatdb"
EXISTINGINSTANCE=$(aws rds 描述-db-instances \
--query 'DBInstances[*].[DBInstanceIdentifier]' \
--filters 名稱=db-instance-id,值=$DBINSTANCEIDENTIFIER \
--輸出文本\
)

如果 [ -z $EXISTINGINSTANCE ]
然後
echo "實例 $DBINSTANCEIDENTIFIER 不存在!"
別的
echo "實例 $DBINSTANCEIDENTIFIER 存在!"
是

參考

引用自:https://serverfault.com/questions/919264