Maak AWS CloudFront aan op Pay-as-You-Go (niet het Gratis Plan)
Maak CloudFront pay-as-you-go via AWS CLI aan.
Het AWS Free plan werkt niet voor mij en Pay-as-you-go is verborgen voor nieuwe CloudFront Distributions op de AWS Console .
Wanneer je Hugo-gebaseerde sites host op AWS, plaats je meestal de bucket achter CloudFront en voeg je een Lambda@Edge-functie toe zodat aanvragen naar directorypaden (bijvoorbeeld /blog/) worden omgezet naar /blog/index.html voor S3 website-style-origines. Je kunt dan hugo deploy gebruiken of deployen met de AWS CLI om de gebouwde site te synchroniseren. De catch: je hebt een CloudFront-distributie nodig die deze Lambda gebruikt en, als je wilt vermijden dat je je commit aan een flat-rate plan, pay-as-you-go-tarieven. De console laat je nu niet meer kiezen voor dat—alleen Free of Pro plans.

Deze post laat zien hoe je een pay-as-you-go-distributie kunt maken door een bestaande distributieconfiguratie te hergebruiken via de AWS CLI en de scripts in de scripts-map van dit artikel.
Wanneer de console alleen Free of Pro aanbiedt
Amazon introduceerde CloudFront flat-rate tarievenplannen (Free, Pro, Business, Premium) die de CDN combineren met WAF, DDoS-bescherming, Route 53 en andere diensten voor een vaste maandelijkse prijs zonder overuren. In de CloudFront console zie je nu alleen Free of Pro (en hoger) planopties wanneer je een nieuwe distributie maakt. Het Pro-plan begint bij $15 per maand; er is geen zichtbare “pay-as-you-go”-optie daar.
Pay-as-you-go is nog steeds de standaard wanneer je een distributie maakt via de CloudFront API of AWS CLI (create-distribution). Dus als je al een distributie hebt gemaakt (of via CLI) en een andere wilt met hetzelfde gedrag—bijvoorbeeld S3 website-origine plus Lambda@Edge voor index.html—dan kun je de configuratie van die distributie exporteren, aanpassen en een nieuwe distributie maken. De nieuwe zal pay-as-you-go zijn tenzij je hem later aan een flat-rate plan koppelt.
Wat je nodig hebt
- Een bestaande CloudFront-distributie waarvan je de configuratie kunt kopiëren (bijvoorbeeld een die wordt gebruikt voor een ander Hugo-site, of een die is aangemaakt voordat de console veranderde).
- AWS CLI geïnstalleerd en geconfigureerd met credentials die
cloudfront:GetDistributionConfigencloudfront:CreateDistributionkunnen uitvoeren. - jq (of vergelijkbaar) om de JSON-configuratie te bewerken.
Voorbeeldencripts die hieronder worden gebruikt bevinden zich in de scripts-map van dit artikel: current-distribution-config.json, new-distribution-config.json, updated-distribution-config.json, en final-distribution-config.json.
Stap 1: De bestaande distributieconfiguratie ophalen
Haal de volledige distributieconfiguratie op (inclusief ETag) en sla deze op:
# Vervang ABCDEFG met de ID van je bestaande distributie
aws cloudfront get-distribution-config --id ABCDEFG > current-distribution-config.json
get-distribution-config retourneert een wrapperobject met ETag en DistributionConfig. Voor het maken van een nieuwe distributie geef je alleen het binnenste DistributionConfig door, dus we extraheren het:
jq '.DistributionConfig' < current-distribution-config.json > new-distribution-config.json
Op dit moment ziet new-distribution-config.json er ongeveer zo uit (verkort).
Het bevat CallerReference, Aliases, Origins, DefaultRootObject, en DefaultCacheBehavior met Lambda@Edge.
Voor het voorbeeld domein heb ik micro.com gebruikt:
{
"CallerReference": "8b2b19eb-6d41-4fc0-8d04-a1313e23e2d7",
"Aliases": {
"Quantity": 1,
"Items": ["micro.com"]
},
"DefaultRootObject": "index.html",
"Origins": {
"Quantity": 1,
"Items": [
{
"Id": "micro.com.s3.us-west-2.amazonaws.com",
"DomainName": "micro.com.s3-website-us-west-2.amazonaws.com",
"OriginPath": "",
"CustomOriginConfig": {
"HTTPPort": 80,
"HTTPSPort": 443,
"OriginProtocolPolicy": "http-only"
}
}
]
},
"DefaultCacheBehavior": {
"TargetOriginId": "micro.com.s3.us-west-2.amazonaws.com",
"ViewerProtocolPolicy": "redirect-to-https",
"LambdaFunctionAssociations": {
"Quantity": 1,
"Items": [
{
"LambdaFunctionARN": "arn:aws:lambda:us-east-1:...your-lambda-arn",
"EventType": "origin-request",
"IncludeBody": false
}
]
}
}
}
Stap 2: Stel een unieke CallerReference in
Elke distributie moet een unieke CallerReference hebben. Het hergebruiken van dezelfde waarde als een andere distributie leidt ertoe dat de API de aanvraag afwijst. Gebruik een nieuw string of een tijdstip:
NEW_CALLER_REF="new-distr-$(date +%s)"
jq --arg ref "$NEW_CALLER_REF" '.CallerReference = $ref' new-distribution-config.json > updated-distribution-config.json
Stap 3: Aanpassen van aliases en origines (optioneel)
Als de nieuwe site een verschillend domein of S3-bucket gebruikt, pas Aliases en Origins in updated-distribution-config.json aan om overeen te komen (bijvoorbeeld nieuwe bucket website-eindpunt en aliaslijst). Als je een distributie zonder aangepast domein wilt, leeg je de aliases:
jq '.Aliases = {"Quantity": 0, "Items": []}' updated-distribution-config.json > final-distribution-config.json
Als je naar een ander S3-website-eindpunt moet wijzen, bewerk dan de Originssectie in hetzelfde bestand (bijvoorbeeld verander Id en DomainName in de website-hostnaam van de nieuwe bucket, en stel DefaultCacheBehavior.TargetOriginId in op diezelfde Id).
Stap 4: Maak de nieuwe distributie aan
Maak de distributie aan vanuit de eindconfiguratie:
aws cloudfront create-distribution --distribution-config file://final-distribution-config.json
Het antwoord bevat de Id, ARN, DomainName, en Status van de nieuwe distributie. De nieuwe distributie gebruikt standaard pay-as-you-go-tarieven. Je kunt dan je DNS (of Route 53) wijzen naar het nieuwe CloudFront-domein en, als je het gebruikt voor Hugo, zoals gebruikelijk deployen met Hugo deploy of AWS CLI.
Snelle verwijzing: volledige script
Als geplakt (met behulp van een bestaande distributie-ID en lege aliases), is de stroom als volgt:
# 1) Exporteer en extraheer DistributionConfig
aws cloudfront get-distribution-config --id EABCDEFGZ > current-distribution-config.json
jq '.DistributionConfig' < current-distribution-config.json > new-distribution-config.json
# 2) Unieke CallerReference
NEW_CALLER_REF="new-distr-$(date +%s)"
jq --arg ref "$NEW_CALLER_REF" '.CallerReference = $ref' new-distribution-config.json > updated-distribution-config.json
# 3) Optioneel: geen aangepast domein
jq '.Aliases = {"Quantity": 0, "Items": []}' updated-distribution-config.json > final-distribution-config.json
# 4) Maak (pay-as-you-go) distributie aan
aws cloudfront create-distribution --distribution-config file://final-distribution-config.json
Pay-as-you-go versus flat-rate (samenvatting)
- Pay-as-you-go: Je betaalt voor dataoverdracht en aanvragen; CloudFront’s eeuwige gratis tier bevat 1 TB dataoverdracht en 10M HTTP/HTTPS-aanvragen per maand. Geen maandelijkse planprijs.
- Flat-rate plans: Documentatie hier. Gratis plan heeft lagere toegestane hoeveelheden (bijvoorbeeld 1M aanvragen, 100 GB); Pro begint bij $15 per maand met meer capaciteit en ingepakte WAF, Route 53, enzovoort. Geen overuren.
Als je verkeer binnen de gratis tier van pay-as-you-go past en je de ingepakte flat-rate functies niet nodig hebt, maken van distributies via de CLI zoals hierboven houdt je op pay-as-you-go terwijl de console alleen Free/Pro toont.
Nuttige links
- Deploy Hugo-generatie website naar AWS S3
- Deploy Hugo-site naar AWS S3 met AWS CLI
- Amazon CloudFront pay-as-you-go tarieven
- CloudFront flat-rate tarievenplannen (Developer Guide)
- Introducing flat-rate pricing plans with no overages (AWS Blog)
- create-distribution (AWS CLI)
- get-distribution-config (AWS CLI)