web-dev-qa-db-ja.com

特定のrdsインスタンスが存在するかどうかをaws cliで確認するにはどうすればよいですか?

特定の名前のAWS RDSインスタンスが既に存在する場合は、bashスクリプトで検出します。

これは私が試したものです:

#!/ usr/bin/env bash 
 
 DBINSTANCEIDENTIFIER = greatdb 
 
 EXISTINGINSTANCE = $(aws rds describe-db-instances\
 --db-instance-identifier = "$ DBINSTANCEIDENTIFIER"\
 --output text\
)

結果として空のリストまたはゼロが予期されますが、エラーメッセージが表示されます。

 DescribeDBInstancesオペレーションを呼び出すときにエラー(DBInstanceNotFound)が発生しました:DBInstance greatdbが見つかりません。

エラーメッセージなしで、インスタンスが存在するかどうかを適切に確認する方法を誰かが知っていますか?

6
hey

--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

したがって、実際にDBが存在することがわかっている場合にのみ、このオプションを使用できます。

クエリを使用する

存在する場合と存在しない場合があるDBを検索するには、--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"
              }
          ]
      }
...
...

フィルターの使用

最初の質問に対するもう1つの簡単な解決策は、--filtersパラメータを使用することです。クエリは、インスタンス識別子(インスタンスが存在する場合)または空の文字列(インスタンスが存在しない場合)を返します。

#!/ usr/bin/env bash 
 
 DBINSTANCEIDENTIFIER = "greatdb" 
 EXISTINGINSTANCE = $(aws rds describe-db-instances\
 --query 'DBInstances [*]。[DBInstanceIdentifier]'\
 --filters Name = db-instance-id、Values = $ DBINSTANCEIDENTIFIER\
 --output text\
)
 
 if [-z $ EXISTINGINSTANCE] 
その後
 echo "インスタンス$ DBINSTANCEIDENTIFIERは存在しません!" 
 else 
 echo "インスタンス$ DBINSTANCEIDENTIFIERが存在します!" 
 fi 

参考文献

9
slm