我希望我的 bash 脚本检测是否已经存在具有特定名称的 AWS RDS 实例。
这是我尝试过的:
/usr/bin/env bash DBINSTANCEIDENTIFIER=greatdb EXISTINGINSTANCE=$(aws rds 描述数据库实例 \ --db-instance-identifier="$DBINSTANCEIDENTIFIER" \ --输出文本\ )
我希望结果是一个空列表或零 - 但我收到一条错误消息:
调用DescribeDBInstances操作时出现错误(DBInstanceNotFound):未找到DBInstance greatdb。
有谁知道如何正确地找出一个实例是否存在而不出现错误消息?
答案1
使用时请注意文档中的约束--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
JSON结构DBINstances
可以在 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 描述数据库实例 \ --查询'DBInstances[*].[DBInstanceIdentifier]' \ --filters 名称=db-instance-id,值=$DBINSTANCEIDENTIFIER \ --输出文本\ ) 如果 [ -z $EXISTINGINSTANCE ] 然后 echo "实例 $DBINSTANCEIDENTIFIER 不存在!" 别的 echo "实例 $DBINSTANCEIDENTIFIER 存在!" 菲