2016-05-19 39 views
4

こんにちはDynamoDBでテーブルを作成する必要があります。問題は、存在する場合、createTableの応答です。どのように私はそれを避けるのですか?私はエラーが発生したときに通知を投げるので、この場合、私はしたくありません。DynamoDB createTableが存在しない場合

ResourceInUseExceptionがあまりにも曖昧であるため、エラーコードを比較したくありません。また、私は、記述表の要求を最初に送信することは本当に適切な解決策ではないと思います。

createIfNotExistsには方法がありますか?

+0

既存のテーブルを一覧表示できます。多分あなたはそれを確認できますか? http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/WorkingWithTables.html#WorkingWithTables.ListingAndDescribing –

+0

エラーをキャッチして調べるか、前もって 'describeTable'や' listTables'のような呼び出しを行う必要がありますテーブルを作成しようとしています。 DynamoDBに "テーブルが存在しない場合"の機能はありません。 –

答えて

4

describeTable()が好きではないので、私はlistTables()があなたの唯一のオプションだと思います。あなたは100の以上のテーブルを持っている場合

const tableName = // ... 
const tablePromise = dynamodb.listTables({}) 
    .promise() 
    .then((data) => { 
     const exists = data.TableNames 
      .filter(name => { 
       return name === tableName; 
      }) 
      .length > 0; 
     if (exists) { 
      return Promise.resolve(); 
     } 
     else { 
      const params = { 
       TableName: tableName, 
       // more params 
      }; 
      return dynamodb.createTable(params).promise(); 
     } 
    }); 

注は、結果がページングされると、あなたは、詳細についてはapi docsExclusiveStartTableNameLastEvaluatedTableNameを参照して、繰り返しlistTables()を呼び出す必要があります。

1

もう1つの解決策は、err.codeとerr.messageをチェックすることです。 "err.message"はあなたに正確な理由を示します。

if (err.code === "ResourceInUseException" && err.message === "Cannot create preexisting table") { 
     console.log("message ====>" + err.message); 
    } else { 
     console.error("Unable to create table. Error JSON:", JSON.stringify(err, null, 2)); 
    } 
+0

さて、私はすでにそれをやっています。申し訳ありませんが私はそれを言及すべきでした。問題は、文字列を変更すると壊れるかもしれないということです。 'ResourceInUseException'と' ResourceAlreadyExistsException'のように –

関連する問題