Cannot perform more than one GSI creation or deletion in a single updateが出た時の対処方法

2020-11-12
中野渡 卓也
#
DynamoDB
#
serverless
#

結論

結論を先にいうと
GSIを削除するデプロイを行った後にGSIを作成するデプロイを行うとエラーが出なくなります。  

エラー発生まで

この日はserverlessでグローバルセカンダリインデックスを作成し、デプロイしました。  

GlobalSecondaryIndexes:
          - IndexName: Search
            KeySchema:
              - AttributeName: email
                KeyType: HASH
            Projection:
              ProjectionType: ALL

ですがインデックス名をもっと具体的にした方がいいと思い、インデックス名を変えてデプロイしました。

GlobalSecondaryIndexes:
          - IndexName: SearchUserByEmailGSI
            KeySchema:
              - AttributeName: email
                KeyType: HASH
            Projection:
              ProjectionType: ALL

すると以下のようなエラーが出ました。

An error occurred: テーブル名 - Cannot perform more than one GSI creation or deletion in a single update.

解決

中3の英語文法すら怪しい英語力なのでperformをみた瞬間英訳するのをやめ、googleの検索フォームにエラー内容をコピーしていました。

調べた結果、削除と作成を別々に行うといいということがわかりました。

GSI名を変えただけだと思っていたのですがserverless的には削除と作成を同時に行おうとしていたのですね

結論

結論を先にいうと
GSIを削除するデプロイを行った後にGSIを作成するデプロイを行うとエラーが出なくなります。  

エラー発生まで

この日はserverlessでグローバルセカンダリインデックスを作成し、デプロイしました。  

GlobalSecondaryIndexes:
          - IndexName: Search
            KeySchema:
              - AttributeName: email
                KeyType: HASH
            Projection:
              ProjectionType: ALL

ですがインデックス名をもっと具体的にした方がいいと思い、インデックス名を変えてデプロイしました。

GlobalSecondaryIndexes:
          - IndexName: SearchUserByEmailGSI
            KeySchema:
              - AttributeName: email
                KeyType: HASH
            Projection:
              ProjectionType: ALL

すると以下のようなエラーが出ました。

An error occurred: テーブル名 - Cannot perform more than one GSI creation or deletion in a single update.

解決

中3の英語文法すら怪しい英語力なのでperformをみた瞬間英訳するのをやめ、googleの検索フォームにエラー内容をコピーしていました。

調べた結果、削除と作成を別々に行うといいということがわかりました。

GSI名を変えただけだと思っていたのですがserverless的には削除と作成を同時に行おうとしていたのですね

株式会社グランドリームでは、AWSを駆使した開発からUI/UXデザインまで、Webアプリケーションに関するすべての要望に応えます。
まずは一度お気軽にご相談ください。

お問い合わせはこちら