CLUSTER_NAME=<CLUSTER_NAME>
AWS_ACCOUNT_ID=$(aws sts get-caller-identity --query Account --output text)
Shell
복사
aws dynamodb create-table \
--table-name keda-events \
--attribute-definitions \
AttributeName=event_type,AttributeType=S \
AttributeName=id,AttributeType=S \
--key-schema \
AttributeName=event_type,KeyType=HASH \
AttributeName=id,KeyType=RANGE \
--billing-mode PAY_PER_REQUEST \
--region ap-northeast-2
Shell
복사
cat << EOF > iam_policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "DynamoDBAccess",
"Effect": "Allow",
"Action": [
"dynamodb:DescribeTable",
"dynamodb:Query",
"dynamodb:Scan",
"dynamodb:GetItem",
"dynamodb:PutItem",
"dynamodb:UpdateItem",
"dynamodb:DeleteItem"
],
"Resource": "arn:aws:dynamodb:ap-northeast-2:$AWS_ACCOUNT_ID:table/keda-events"
}
]
}
EOF
Shell
복사
aws iam create-policy \
--policy-name DynamoDBPolicy \
--policy-document file://iam_policy.json
Shell
복사
eksctl create iamserviceaccount \
--cluster=$CLUSTER_NAME \
--namespace=keda-dynamodb-guidance \
--name=keda-operator \
--role-name=keda-operator-role \
--attach-policy-arn=arn:aws:iam::$AWS_ACCOUNT_ID:policy/DynamoDBPolicy \
--approve
Shell
복사
helm repo add kedacore https://kedacore.github.io/charts
helm repo update
helm install keda kedacore/keda \
-n keda-dynamodb-guidance \
--set serviceAccount.operator.create=false \
--set serviceAccount.operator.name=keda-operator
Shell
복사
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: aws-dynamodb-table-scaledobject
namespace: keda-dynamodb-guidance
spec:
scaleTargetRef:
name: nginx-deployment
minReplicaCount: 2
maxReplicaCount: 100
pollingInterval: 10
cooldownPeriod: 90
triggers:
- type: aws-dynamodb
metadata:
awsRegion: ap-northeast-2
tableName: keda-events
expressionAttributeNames: '{ "#k" : "event_type"}'
keyConditionExpression: "#k = :key"
expressionAttributeValues: '{ ":key" : {"S":"scaling_event"}}'
targetValue: "5"
identityOwner: operator
YAML
복사
kubectl apply -f scaledobject.yaml
Shell
복사
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-deployment
namespace: keda-dynamodb-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
YAML
복사
kubectl apply -f deployment.yaml
Shell
복사