CloudFormationで大量のKinesis作ったら失敗した


はじめに

今回は、CloudFormationKinesis Stream作ろうとしたら失敗したので
対策したお話です。
作ろうとしたのは1個ではなく、7個です。

ここが重要。7個....

どうやら、非同期的に作成できるKinesis Stream5個までのようです。

aws公式の資料はここです

CreateStream、DeleteStream、ListStreams は、1 秒間に最大 5 件のトランザクションを提供できます。

らしいです。

対策案1

  1. CloudFormationのスタックを分割する。
  2. kinesis1.template, kinesis2.templateのような感じに。

対策案2

  1. CloudFormationのスタックを分割する。`
  2. kinesis1.template, kinesis2.templateのような感じに。
  3. 上記の1, 2チェーン実行する。
チェーン実行.template
{
  "AWSTemplateFormatVersion" : "2010-09-09",

  "Description" : "exec-chain",

  "Resources" : {
    "Bucket" : {
      "Type" : "AWS::S3::Bucket"
    },
    "BucketPolicy" : {
      "Type" : "AWS::CloudFormation::Stack",
      "Properties" : {
        "TemplateURL" : "https://s3-us-east-1.amazonaws.com/hoge/kinesis1.template",
        "Parameters" : {
          "BucketName" : { "Ref" : "Bucket" }
        }
      }
    }
  },
  "Outputs" : {
    "kinesis1" : {
      "Value" : { "Fn::GetAtt" : ["BucketPolicy", "Outputs.kinesis1"]}
    }
  }
}

チェーン実行はこんな感じにしたらできます。
あとは、Create Stackする間隔をあけれてあげれば良いです。
公式はこちら良い感じに待機してくれそうです。

おわりに

現状、対策1しかできていないですが、
今後、対策2も完成させて公開できればと思っております。
みなさま、運用していく中で、もっと良い方法あるよ!等ありましたら、ご教授ください。