Bash
如果存在特定的 rds 實例,如何通過 aws cli 檢查?
我希望我的 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
DBINstances
JSON 結構可在 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 存在!" 是
參考