Puncte:1

CloudFront nu pare să invoce funcția lambda@edge

drapel in

Am o distribuție CloudFront. Originea este o găleată S3 care utilizează OAI.

Am creat o funcție lambda@edge urmând instrucțiunile de la https://aws.amazon.com/blogs/compute/implementing-default-directory-indexes-in-amazon-s3-backed-amazon-cloudfront-origins-using-lambdaedge/

Practic, vreau ca funcția lambda@edge să redirecționeze adresele URL care se termină în / către /index.html. Acționând ca Apache DirectroyIndex.

Distribuția CloudFront funcționează pentru adrese URL fără cerința de redirecționare. Dar CloudFront nu pare să invoce funcția mea lamba@edge.

M-am asigurat că există o asociere corectă între distribuția CloudFront și versiunea funcției labda@edge.

Am făcut mai multe solicitări de testare:

curl -I https://www.sudheer.net/blog/
HTTP/2 403 
tip de conținut: aplicație/xml
data: sâmbătă, 19 februarie 2022 14:35:38 GMT
server: AmazonS3
x-cache: eroare de la cloudfront
prin: 1.1 5d840d432727e3561fd1a3de915212ca.cloudfront.net (CloudFront)
x-amz-cf-pop: EWR53-C2
x-amz-cf-id: leub-Kgu4Bh9xH4Rn5o7bxs62B1NBO4ViEu6hv-_xtGG7DSQlBFEXw=

Primesc 403.Nu am găsit niciun jurnal lambda@edge în nicio regiune.

Care ar putea fi problema? Cum să o găsesc?

Funcția Lambda@Edge are principiile:

    „Versiune”: „2012-10-17”,
    "Afirmație": [
        {
            „Sid”: „”,
            „Efect”: „Permite”,
            „Principal”: {
                „Serviciul”: [
                    „edgelambda.amazonaws.com”,
                    „lambda.amazonaws.com”
                ]
            },
            „Acțiune”: „sts:AssumeRole”
        }
    ]
}

Puncte:0
drapel cn

De fapt, puteți face acest lucru cu CloudFront Functions. Autopromovare nerușinată, dar am întâlnit exact această problemă și am scris despre ea blogul meu.

În mod eficient:

am găsit această postare SO, care mi-a arătat că trebuie să creez această funcție:

function handler(eveniment) {
    var cerere = event.request;
    var uri = request.uri;
    
    // Verificați dacă URI-ului lipsește un nume de fișier.
    dacă (uri.endsWith('/')) {
        request.uri += 'index.html';
    } 
    // Verificați dacă URI-ului îi lipsește o extensie de fișier.
    else if (!uri.includes('.')) {
        request.uri += '/index.html';
    }

    cerere de retur;
}

Folosește Funcții element din meniul din stânga din serviciul CloudFront pentru a salva + publica această funcție, apoi editați comportamentul implicit al distribuției dvs. și a schimbat asocierea funcției de solicitare a vizualizatorului la noua funcție.

Sudheer Satyanarayana avatar
drapel in
Mulțumesc @shearn89. De fapt, problema mea a fost ordinea incorectă a comportamentelor din cache. Dar am simplificat configurarea, datorită funcțiilor CloudFront. Am renunțat la Lambda@Edge în favoarea unei soluții mai simple.
drapel cn
Simțiți-vă liber să împărtășiți soluția dvs. și să o acceptați pentru vot pozitiv!

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.