Cleanup and Important Note
CDK Destroy
# Destroy all stacks
cdk destroy --all
Alternative way (manual)
# Delete Campaign
personalize.delete_campaign(campaignArn=campaign_arn)
# Delete Solution
personalize.delete_solution(solutionArn=solution_arn)
# Delete Dataset
personalize.delete_dataset(datasetArn=dataset_arn)
# Delete Schema
personalize.delete_schema(schemaArn=schema_arn)
# Delete Dataset Group
personalize.delete_dataset_group(datasetGroupArn=dataset_group_arn)
Important Note - Billing
For Campaigns:
When you create a campaign, you set minProvisionedTPS (minimum provisioned transactions per second).
Default value (minimum): 1 TPS.
You are billed for whichever is greater:
- Your minimum provisioned capacity (1 TPS = 3,600 requests/hour).
- Your actual GetRecommendations API calls.
For Recommenders:
When you create a recommender, you set minRecommendationRequestsPerSecond.
Default value (minimum): 1 request per second and same billing logic applies.
My Billing
In this project, my bill shows 291,300 requests and charged $6.18 (111,300 requests and 180,000 in free tier).
The Key Point
Even if you make ZERO GetRecommendations API calls, you still get billed for the minimum provisioned capacity as long as your campaign/recommender is ACTIVE.
How to Avoid This
- Set
minProvisionedTPS/minRecommendationRequestsPerSecondto 1 (minimum allowed). - Delete campaigns/recommenders when not in use.
- Use batch recommendations instead if you don't need real-time responses.