CLUSTER_NAME=<CLUSTER_NAME>
AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
aws kinesis create-stream \\
  --stream-name demo-stream \\
  --shard-count 2 \\
  --region ap-northeast-2
cat << EOF > iam_policy.json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "KinesisAccess",
            "Effect": "Allow",
            "Action": [
                "kinesis:DescribeStream",
                "kinesis:DescribeStreamSummary",
                "kinesis:GetShardIterator",
                "kinesis:GetRecords",
                "kinesis:ListStreams",
                "kinesis:PutRecord",
                "kinesis:PutRecords"
            ],
            "Resource": "arn:aws:kinesis:ap-northeast-2:$AWS_ACCOUNT_ID:stream/demo-stream"
        }
    ]
}
EOF
aws iam create-policy \\
    --policy-name KinesisPolicy \\
    --policy-document file://iam_policy.json
eksctl create iamserviceaccount \\
  --cluster=$CLUSTER_NAME \\
  --namespace=keda-kinesis-guidance \\
  --name=keda-operator \\
  --role-name=keda-operator-role \\
  --attach-policy-arn=arn:aws:iam::$AWS_ACCOUNT_ID:policy/KinesisPolicy \\
  --approve
helm repo add kedacore <https://kedacore.github.io/charts>
helm repo update
helm install keda kedacore/keda \\
  -n keda-kinesis-guidance \\
  --set serviceAccount.operator.create=false \\
  --set serviceAccount.operator.name=keda-operator
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: aws-kinesis-stream-scaledobject
  namespace: keda-kinesis-guidance
spec:
  scaleTargetRef:
    name: nginx-deployment
  minReplicaCount: 2
  maxReplicaCount: 100
  pollingInterval: 10
  cooldownPeriod: 90
  triggers:
    - type: aws-kinesis-stream
      metadata:
        # Required
        streamName: demo-stream
        # Required
        awsRegion: "ap-northeast-2"
        # Optional: Default: 2
        shardCount: "2"
        identityOwner: operator
kubectl apply -f scaledobject.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-deployment
  namespace: keda-kinesis-guidance
  labels:
    app: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      serviceAccountName: keda-operator
      containers:
        - name: nginx
          image: nginx:latest
          ports:
            - containerPort: 80
kubectl apply -f deployment.yaml