AWS CloudFront unter Pay-as-You-Go (nicht den Free Plan) erstellen
„Erstellen Sie CloudFront pay-as-you-go über die AWS CLI.“
Die AWS Free-Plan-Funktion funktioniert nicht für mich und
Pay-as-you-go ist bei neuen CloudFront-Distributionen versteckt auf der AWS-Konsole.
Wenn Sie Hugo-basierte Websites auf AWS hosten, legen Sie normalerweise den Bucket hinter CloudFront und fügen eine Lambda@Edge-Funktion hinzu, sodass Anfragen an Verzeichnispfade (z. B. /blog/) in /blog/index.html umgeschrieben werden, um S3-Website-Origins zu verwenden. Sie können dann hugo deploy oder mit dem AWS CLI deployen verwenden, um die erstellte Website zu synchronisieren. Der Haken: Sie benötigen eine CloudFront-Distribution, die diese Lambda verwendet, und wenn Sie Verpflichtungen zu Flat-Rate-Plänen vermeiden möchten, Pay-as-you-go-Preise. Die Konsole erlaubt Ihnen nicht mehr, diese auszuwählen – nur Free oder Pro-Pläne.

Dieser Beitrag zeigt, wie Sie eine Pay-as-you-go-Distribution erstellen können, indem Sie die Konfiguration einer vorhandenen Distribution über die AWS CLI und die Skripte im scripts-Ordner dieses Artikels wiederverwenden.
Wenn die Konsole nur Free oder Pro anbietet
Amazon hat CloudFront-Flat-Rate-Preispläne eingeführt (Free, Pro, Business, Premium), die CDN, WAF, DDoS-Schutz, Route 53 und andere Dienste für einen festen monatlichen Preis ohne Übergebühren kombinieren. In der CloudFront-Konsole sehen Sie jetzt nur Free- oder Pro- (und höhere) Planoptionen, wenn Sie eine neue Distribution erstellen. Der Pro-Plan beginnt bei 15 $/Monat; die Option Pay-as-you-go ist dort nicht sichtbar.
Pay-as-you-go ist immer noch die Voreinstellung, wenn Sie eine Distribution über die CloudFront-API oder AWS CLI (create-distribution) erstellen. Wenn Sie bereits eine Distribution erstellt haben (oder über die CLI) und eine weitere mit demselben Verhalten erstellen möchten – z. B. S3-Website-Origin plus Lambda@Edge für index.html – können Sie die Konfiguration dieser Distribution exportieren, anpassen und eine neue Distribution erstellen. Die neue Distribution ist Pay-as-you-go, es sei denn, Sie verbinden sie später mit einem Flat-Rate-Plan.
Was Sie benötigen
- Eine bestehende CloudFront-Distribution, deren Konfiguration Sie kopieren können (z. B. eine, die für eine andere Hugo-Website verwendet wird, oder eine, die vor der Änderung der Konsole erstellt wurde).
- AWS CLI installiert und konfiguriert mit Anmeldeinformationen, die
cloudfront:GetDistributionConfigundcloudfront:CreateDistributionausführen können. - jq (oder ähnliche Software), um die JSON-Konfiguration zu bearbeiten.
Beispiele für Skripte, die unten verwendet werden, befinden sich im scripts-Ordner dieses Beitrags: current-distribution-config.json, new-distribution-config.json, updated-distribution-config.json und final-distribution-config.json.
Schritt 1: Holen Sie sich die bestehende Distribution-Konfiguration
Holen Sie sich die vollständige Distribution-Konfiguration (einschließlich ETag) und speichern Sie sie:
# Ersetzen Sie ABCDEFG mit der ID Ihrer bestehenden Distribution
aws cloudfront get-distribution-config --id ABCDEFG > current-distribution-config.json
get-distribution-config gibt ein Wrapper-Objekt mit ETag und DistributionConfig zurück. Für die Erstellung einer neuen Distribution übergeben Sie nur das innere DistributionConfig, also extrahieren wir es:
jq '.DistributionConfig' < current-distribution-config.json > new-distribution-config.json
In diesem Moment sieht new-distribution-config.json wie folgt aus (abgekürzt).
Es enthält CallerReference, Aliases, Origins, DefaultRootObject und DefaultCacheBehavior mit Lambda@Edge.
Für den Beispiel-Domain-Namen habe ich micro.com verwendet:
{
"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
}
]
}
}
}
Schritt 2: Setzen Sie eine eindeutige CallerReference
Jede Distribution muss eine eindeutige CallerReference haben. Die Wiederverwendung desselben Werts bei einer anderen Distribution führt dazu, dass die API die Anfrage ablehnt. Verwenden Sie eine neue Zeichenfolge oder einen Zeitstempel:
NEW_CALLER_REF="new-distr-$(date +%s)"
jq --arg ref "$NEW_CALLER_REF" '.CallerReference = $ref' new-distribution-config.json > updated-distribution-config.json
Schritt 3: Anpassen von Aliases und Origins (optional)
Wenn die neue Website einen anderen Domain-Namen oder S3-Bucket verwendet, aktualisieren Sie Aliases und Origins in updated-distribution-config.json, um sie anzupassen (z. B. neue Bucket-Website-Endpunkt und Alias-Liste). Wenn Sie eine Distribution ohne benutzerdefinierte Domain erstellen möchten, löschen Sie die Aliase:
jq '.Aliases = {"Quantity": 0, "Items": []}' updated-distribution-config.json > final-distribution-config.json
Wenn Sie auf einen anderen S3-Website-Endpunkt verweisen müssen, bearbeiten Sie den Origins-Abschnitt in derselben Datei (z. B. Id und DomainName in den neuen Bucket-Website-Hostname ändern und DefaultCacheBehavior.TargetOriginId auf denselben Id setzen).
Schritt 4: Erstellen Sie die neue Distribution
Erstellen Sie die Distribution aus der endgültigen Konfiguration:
aws cloudfront create-distribution --distribution-config file://final-distribution-config.json
Die Antwort enthält die Id, ARN, DomainName und Status der neuen Distribution. Die neue Distribution verwendet standardmäßig Pay-as-you-go-Preise. Sie können dann Ihre DNS (oder Route 53) auf die neue CloudFront-Domain verweisen und, wenn Sie sie für Hugo verwenden, wie gewohnt mit Hugo deploy oder AWS CLI deployen.
Schnellreferenz: vollständiges Skript
Wenn Sie es zusammenkleben (mit einer bestehenden Distribution-ID und leeren Aliases), ist der Ablauf wie folgt:
# 1) Exportieren und Extrahieren von DistributionConfig
aws cloudfront get-distribution-config --id EABCDEFGZ > current-distribution-config.json
jq '.DistributionConfig' < current-distribution-config.json > new-distribution-config.json
# 2) Eindeutige 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) Optional: Keine benutzerdefinierte Domain
jq '.Aliases = {"Quantity": 0, "Items": []}' updated-distribution-config.json > final-distribution-config.json
# 4) Erstellen (Pay-as-you-go) Distribution
aws cloudfront create-distribution --distribution-config file://final-distribution-config.json
Pay-as-you-go vs. Flat-Rate (Zusammenfassung)
- Pay-as-you-go: Sie zahlen für Datenübertragung und Anfragen; CloudFronts kostenlose Ebene umfasst 1 TB Datenübertragung und 10 Mio. HTTP/HTTPS-Anfragen pro Monat. Keine monatliche Plangebühr.
- Flat-Rate-Pläne: Dokumentation hier. Der kostenlose Plan hat geringere Grenzwerte (z. B. 1 Mio. Anfragen, 100 GB); Pro beginnt bei 15 $/Monat mit mehr Kapazität und gebündelten WAF, Route 53 usw. Keine Übergebühren.
Wenn Ihr Verkehr innerhalb der kostenlosen Ebene von Pay-as-you-go passt und Sie die gebündelten Flat-Rate-Funktionen nicht benötigen, erstellen Sie Distributionen über die CLI wie oben beschrieben, um weiterhin auf Pay-as-you-go zu bleiben, während die Konsole nur Free/Pro anzeigt.