hey*_*hey 6 bash amazon-rds aws-cli
我希望我的 bash 脚本能够检测是否已经存在具有特定名称的 AWS RDS 实例。
这是我尝试过的:
#!/usr/bin/env bash
DBINSTANCEIDENTIFIER=greatdb
EXISTINGINSTANCE=$(aws rds describe-db-instances \
--db-instance-identifier="$DBINSTANCEIDENTIFIER" \
--输出文本\
)
我希望得到一个空列表,或者结果为零 - 但我收到一条错误消息:
调用 DescribeDBInstances 操作时发生错误 (DBInstanceNotFound):未找到 DBInstance greatdb。
有谁知道如何在没有错误消息的情况下正确找出实例是否存在?
slm*_*slm 10
使用时请注意文档中的约束--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
Run Code Online (Sandbox Code Playgroud)
因此,只有在您知道 DB 确实存在的情况下才能使用此选项。
要搜索可能存在或不存在的数据库,您必须使用以下--query选项:
$ aws rds describe-db-instances \
--query 'DBInstances[*].[DBName,DBInstanceIdentifier]' --output text
Run Code Online (Sandbox Code Playgroud)
该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"
}
]
}
...
...
Run Code Online (Sandbox Code Playgroud)
初始问题的另一个简单解决方案是使用--filters参数。查询将返回实例标识符(如果实例存在)或空字符串(如果它不存在):
#!/usr/bin/env bash
DBINSTANCEIDENTIFIER="greatdb"
EXISTINGINSTANCE=$(aws rds describe-db-instances \
--query 'DBInstances[*].[DBInstanceIdentifier]' \
--filters Name=db-instance-id,Values=$DBINSTANCEIDENTIFIER \
--输出文本\
)
如果 [ -z $EXISTINGINSTANCE ]
然后
echo "实例 $DBINSTANCEIDENTIFIER 不存在!"
别的
echo "实例 $DBINSTANCEIDENTIFIER 存在!"
菲