読者です 読者をやめる 読者になる 読者になる

Make Local Happiness

自分の幸せは自分で作る!!!

CloudFormationでDynamoDBのテーブルを10個以上作る

CloudFormation DynamoDB AWS Serverless

Subscriber limit exceeded: Only 10 tables can be created, updated, or deleted simultaneously.

CloudFormationからDynamoDB作ると、こんなエラーがでるんですよね。 しかも結構いい加減で、私の環境では14個までは作成できました。

AWSのサポートに連絡すれば、 上限を緩和することとかできるかな〜と思ったのですが、 DynamoDBのAPIで制限されており、今のところは上限緩和できません。

Limits in DynamoDB - Amazon DynamoDB http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Limits.html

In general, you can have up to 10 CreateTable, UpdateTable, and DeleteTable requests running simultaneously (in any combination). In other words, the total number of tables in the CREATING, UPDATING or DELETING state cannot exceed 10.

解決策

Serverlessを使ってDynamoDBを作成していたのですが、 解決策は2つあって、

  1. Serverlessのプロジェクトを2つ以上に分ける
  2. DependsOn属性を使いテーブルに依存関係を付ける

今回はマスタとなるテーブルが10個以内だったので、 2のDependsOn属性で解決しました。

DependsOn属性を使いテーブルに依存関係を付ける

詳しくは以下のドキュメントをご参照ください。

DependsOn 属性 - AWS CloudFormation

http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-attribute-dependson.html

DependsOn 属性を含む DynamoDB テーブル

http://docs.aws.amazon.com/ja_jp/AWSCloudFormation/latest/UserGuide/aws-resource-dynamodb-table.html#cfn-dynamodb-table-examples-dependson

Resources:
  myFirstTable:
    Type: AWS::DynamoDB::Table
    Properties:
      ...
  mySecondTable:
    Type: AWS::DynamoDB::Table
    DependsOn: myFirstTable
    Properties:
      ...

上記例では、必ず myFirstTable の作成が完了した後に mySecondTable の作成が開始されます。

そのため11個目以降のテーブルに DependsOn 属性をつけることで、 DynamoDB テーブルの同時作成数を 10 個に抑えつつ CloudFormation スタックの作成が可能になります。