特定の名前の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が見つかりません。
エラーメッセージなしで、インスタンスが存在するかどうかを適切に確認する方法を誰かが知っていますか?
--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