Skapa AWS CloudFront på Pay-as-You-Go (inte den kostnadsfria planen)

Skapa CloudFront pay-as-you-go via AWS CLI.

Sidinnehåll

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.

Dokumentationen matchar inte de faktiska leveranserna

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:GetDistributionConfig och cloudfront: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