如何通过 aws cli 检查特定的 rds 实例是否存在?

如何通过 aws cli 检查特定的 rds 实例是否存在?

我希望我的 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 存在!"

参考

相关内容