Amplify Console에서 Next를 클릭합니다.js ISR 재생성 실패 시 처리 방법

3101 단어 Next.jsAmplifytech
Amplify Console에서 Next를 클릭합니다.js의 ISR 코드를 디버깅할 때revalidate에서 지정한 초가 지나면 재생성할 수 없습니다. ISR 페이지에 503 오류가 발생하는 이벤트는 매우 곤란합니다.
이 사건이 발생한 이유와 대응 방법을 기록하다.

재생성을 하지 않는 이유


결론은DefaultLambda@Edgefor Next CloudFront distribution에서 Next로 이동합니다.SQS에 메시지를 보내는 데 실패하여 js Regeneration Lambda에 불이 났습니다.
먼저 Amplify Constore는 Next입니다.js를 설계할 때 내부적으로 Serverless Next를 설정합니다.js Component를 사용하고 있습니다.
Serverless Next.js Component 제작의 리소스에 대해 다음과 같은 글을 읽으면 쉽게 이해할 수 있습니다.
이번 보도에서DefaultLambda@Edge의 다음 부분이 중요합니다.
ISR 처리가 발생하면 Lambda는 "Next.js Regeneration Lambda"에 불을 붙이기 위해 SQS에 메시지를 보냅니다.
https://zenn.dev/laiso/articles/8c619c38bd7b7b
Amplify Constore는 코드를 분석하여 필요한 자원을 만들지만, 첫 번째 디버깅 시 ISR 코드(getStaticPropos에서 되돌아오는 대상이revalidate를 지정하지 않음)를 사용하지 않은 상태에서 depro를 하고, 두 번째 이후 depro에서 ISR 코드를 depro한 후SendMessage 권한이 할당되지 않은 이유는 무엇입니까?
따라서 두 번째 이후 프로그램에서 ISR을 진행하는 코드로 처음 변경하면 첫 번째 요청에 캐시가 존재하지 않기 때문에 SSR의 결과를 리validate에서 지정한 초수 분간 되돌려주고 캐시하기 때문에 잠시 정상적으로 보일 수 있습니다Default Lambda는 SQS에 재생성 처리 메시지를 보냈으나 권한이 할당되지 않아 오류가 발생하고 503 오류가 반환되었습니다.

해소 방법


2021/11/24시Default Lambda에 sqs:SendMessage 권한을 수동으로 지정할 수 있습니다.
Amplify Constore에서 생성된 리소스(Lambda와 SQS 등)의 정보는 Amplify Console의 대시보드의 deployment 탭에서 확인할 수 있습니다.
AWS 콘솔에서Default Lambda로의 화면 설정 방법을 결합해 소개한다.
https://github.com/aws-amplify/amplify-console/blob/main/FAQ.md#access-lambda-edge-logs
이 설정 옵션에서 실행 작용을 편집할 수 있습니다. 다음 정책과 결합하십시오.
4
        {
            "Effect": "Allow",
            "Resource": "arn:aws:sqs:us-east-1:253925498289:<SQS-ID>.fifo",
            "Action": [
                "sqs:SendMessage"
            ]
        }
sqs:SendMessage의 권한이 분배되면Default Lambda에서 SQS로 메시지를 보내고 ISR의 재생성을 진행하며 페이지도 정상적으로 표시됩니다.

앞으로 Amplify Console에 대응할 수 있기를 바랍니다.


같은 issue가 몇 개 서 있기 때문에, 똑같이 괴로워하는 사람도 있다.
저는 첫 번째 deproy 이후에 ISR을 진행하는 코드로 완전히 바꾼 경우가 있다고 생각합니다. 개인적으로 Amplify Consile가 코드의 변경을 감지하고 sqs:SendMessage의 권한을 자동으로 분배하기를 바랍니다.
https://github.com/aws-amplify/amplify-console/issues/2347

좋은 웹페이지 즐겨찾기