Skapa AWS CloudFront på Pay-as-You-Go (inte den kostnadsfria planen)
Skapa CloudFront pay-as-you-go via AWS CLI.
AWS Free-plan fungerar inte för mig och
Pay-as-you-go är dold för nya CloudFront-distributioner på AWS-konsolen.
När du värstår Hugo-baserade webbplatser på AWS, sätter du vanligtvis bucketen bakom CloudFront och kopplar en Lambda@Edge-funktion så att begäran till katalogvägar (t.ex. /blog/) omvandlas till /blog/index.html för S3-webbplats-typiska källor. Du kan sedan använda hugo deploy eller distribuera med AWS CLI för att synkronisera den byggda webbplatsen. Den här lösningen: du behöver en CloudFront-distribution som använder den här Lambda-funktionen, och om du vill undvika fasta prisplaner, pay-as-you-go-prisning. Konsolen tillåter inte längre att du väljer den – endast Free eller Pro-planer.

Det här inlägget visar hur du skapar en pay-as-you-go-distribution genom att återanvända en befintlig distributionskonfiguration via AWS CLI och skripten i den här artiklens scripts-mapp.
När konsolen endast erbjuder Free eller Pro
Amazon introducerade CloudFronts fasta prisplaner (Free, Pro, Business, Premium) som kombinerar CDN med WAF, DDoS-skydd, Route 53 och andra tjänster för en fast månadskostnad utan överskridanden. I CloudFront-konsolen visas nu endast Free eller Pro (och högre) planalternativ när du skapar en ny distribution. Pro-planen börjar vid 15 USD/månad; det finns ingen synlig “pay-as-you-go”-alternativ där.
Pay-as-you-go är fortfarande standard när du skapar en distribution via CloudFront API eller AWS CLI (create-distribution). Så om du redan har skapat en distribution tidigare (eller via CLI) och vill ha en annan med samma beteende – till exempel S3-webbplatskälla plus Lambda@Edge för index.html – kan du exportera den befintliga distributionskonfigurationen, justera den och skapa en ny distribution. Den nya distributionen kommer att vara pay-as-you-go om du inte kopplar den till en fast prisplan senare.
Vad du behöver
- En befintlig CloudFront-distribution vars konfiguration du kan kopiera (t.ex. en som används för en annan Hugo-webbplats, eller en skapad före ändringen i konsolen).
- AWS CLI installerat och konfigurerat med autentiseringsuppgifter som kan köras
cloudfront:GetDistributionConfigochcloudfront:CreateDistribution. - jq (eller liknande) för att redigera JSON-konfigurationen.
Exempelskript som används nedan finns i den här artiklens scripts-mapp: current-distribution-config.json, new-distribution-config.json, updated-distribution-config.json och final-distribution-config.json.
Steg 1: Hämta den befintliga distributionskonfigurationen
Hämta den fullständiga distributionskonfigurationen (inklusive ETag) och spara den:
# Ersätt ABCDEFG med din befintliga distributions-ID
aws cloudfront get-distribution-config --id ABCDEFG > current-distribution-config.json
get-distribution-config returnerar ett omgivande objekt med ETag och DistributionConfig. För att skapa en ny distribution skickar du endast det inre DistributionConfig, så extraherar vi det:
jq '.DistributionConfig' < current-distribution-config.json > new-distribution-config.json
På detta steg ser new-distribution-config.json ut som följer (kortfattat).
Den innehåller CallerReference, Aliases, Origins, DefaultRootObject och DefaultCacheBehavior med Lambda@Edge.
För exempelwebbplatsens domännamn har jag ut micro.com:
{
"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
}
]
}
}
}
Steg 2: Ange en unik CallerReference
Varje distribution måste ha en unik CallerReference. Att återanvända samma värde som en annan distribution gör att API:et förkastar begäran. Använd en ny sträng eller en tidsstämpel:
NEW_CALLER_REF="new-distr-$(date +%s)"
jq --arg ref "$NEW_CALLER_REF" '.CallerReference = $ref' new-distribution-config.json > updated-distribution-config.json
Steg 3: Justera alias och källor (valfritt)
Om den nya webbplatsen använder en annan domän eller S3-bucket, uppdatera Aliases och Origins i updated-distribution-config.json så att de matchar (t.ex. nya buckets webbplats-slutpunkt och aliaslista). Om du vill ha en distribution utan anpassad domän för närvarande, rensa aliasen:
jq '.Aliases = {"Quantity": 0, "Items": []}' updated-distribution-config.json > final-distribution-config.json
Om du behöver peka till en annan S3-webbplats-slutpunkt, redigera Origins-avsnittet i samma fil (t.ex. ändra Id och DomainName till den nya buckets webbplatsvärddomän och ställ in DefaultCacheBehavior.TargetOriginId till samma Id).
Steg 4: Skapa den nya distributionen
Skapa distributionen från den slutgiltiga konfigurationen:
aws cloudfront create-distribution --distribution-config file://final-distribution-config.json
Svaret innehåller den nya distributionens Id, ARN, DomainName och Status. Den nya distributionen använder pay-as-you-go-prisning som standard. Du kan sedan peka din DNS (eller Route 53) till den nya CloudFront-domänen och, om du använder den för Hugo, distribuera med Hugo deploy eller AWS CLI som vanligt.
Snabbreferens: fullständigt skript
Sammankopplad (med en befintlig distributions-ID och rensad alias), flödet är:
# 1) Exportera och extrahera DistributionConfig
aws cloudfront get-distribution-config --id EABCDEFGZ > current-distribution-config.json
jq '.DistributionConfig' < current-distribution-config.json > new-distribution-config.json
# 2) Unik 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) Valfritt: ingen anpassad domän
jq '.Aliases = {"Quantity": 0, "Items": []}' updated-distribution-config.json > final-distribution-config.json
# 4) Skapa (pay-as-you-go) distribution
aws cloudfront create-distribution --distribution-config file://final-distribution-config.json
Pay-as-you-go vs fast prisplan (sammanfattning)
- Pay-as-you-go: Du betalar för dataöverföring och begäran; CloudFronts oförändrade kostnadsfria nivå inkluderar 1 TB dataöverföring och 10M HTTP/HTTPS-begäran per månad. Inga månadskostnader.
- Fast prisplaner: Dokumenterat här. Den kostnadsfria planen har lägre tillåtelse (t.ex. 1M begäran, 100 GB); Pro startar vid 15 USD/månad med mer kapacitet och inbyggd WAF, Route 53 osv. Inga överskridanden.
Om din trafik passar inom pay-as-you-go kostnadsfria nivå och du inte behöver de inbyggda fast prisplanerna, skapa distributioner via CLI som ovan håller dig på pay-as-you-go medan konsolen endast visar Free/Pro.
Några användbara länkar
- Distribuera Hugo-genererad webbplats till AWS S3
- Distribuera Hugo-webbplats till AWS S3 med AWS CLI
- Amazon CloudFront pay-as-you-go-priser
- CloudFront fast prisplaner (Utvecklarguide)
- Introduktion av fast prisplaner utan överskridanden (AWS-blogg)
- create-distribution (AWS CLI)
- get-distribution-config (AWS CLI)