구글맵 API 사용하기
[소소한 개발 일지] serverless-next.js를 사용한 배포에서 새로운 Role이 계속 생성되는 문제 해결하기
2021-03-18
Explanation
오늘은 serverless-next.js를 사용한 프로젝트 배포에서 새로운 Role이 계속 생성되는 문제를 해결하는 방법에 대하여 적어보려 합니다.
간단한 글이지만, 이전에 작성했던 https://falsy.me/새로운-버전-serverless-framework를-사용하여-nextjs-프로젝트를-aws-lambda를-통/ 글에서 사용한 serverless.yml 파일을 가지고 이어서 사용합니다.
1 2 3 4 5 6 7 8 9 10 |
// serverless.yml falsyExempleServerlessNext: component: "@sls-next/serverless-component@1.18.0" inputs: bucketName: "falsy-exemple-s3" cloudfront: distributionId: ABCDEFG.. name: defaultLambda: "falsy-exemple-default-lambda" apiLambda: "falsy-exemple-api-lambda" |
이전 글에서 적었던 것 처럼 위와 같은 설정으로 배포를 하면,
이렇게 xxxxxx-xxxxxxx 형식의 이름으로 매번 배포할 때마다 Role이 생성된답니다.
우선 깃헙에서 관련한 내용을 확인해보니
https://github.com/serverless-nextjs/serverless-next.js
1 2 3 4 5 |
// serverless.yml myNextApplication: component: "@sls-next/serverless-component@{version_here}" inputs: roleArn: "arn:aws:iam::123456789012:role/MyCustomLambdaRole" |
위와 같이 role을 지정해주면 된다고 써있답니다.
우선 Role에 적용할 Policy를 만들어야겠죠?
AWS의 IAM에서 ‘정책’ 메뉴로 가서 ‘정책 생성’ 버튼을 눌러서 새로운 정책을 만들어 줍니다.
정책은 JSON 탭으로 가서 아래와 같이 만들어 줍니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Resource": "*", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents" ] }, { "Effect": "Allow", "Resource": "arn:aws:s3:::falsy-exemple-s3/*", "Action": [ "s3:GetObject", "s3:PutObject" ] } ] } |
arn:aws:s3:::falsy-exemple-s3/*
여기에 버킷 이름을 적어주세요.
이름은 falsy-exemple-policy 로 할게요.
이어서 Role을 만들어 줍니다.
AWS의 IAM에서 ‘역할’ 메뉴로 가서 ‘역할 만들기’ 버튼을 눌러서 새로운 역할을 만들어 줍니다.
사용 사례에 Lambda를 선택하고 다음 탭에서 조금 전에 만들었던 falsy-exemple-policy를 선택해줍니다.
이름은 falsy-exemple-role 로 할게요.
다음으로 만들어진 falsy-exemple-role을 선택한후 ‘신뢰 관계’ 탭으로 가서, ‘신뢰 관계 편집’ 버튼을 눌러서
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "lambda.amazonaws.com", "edgelambda.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] } |
edgelambda.amazonaws.com – 엣지람다도 추가해줍니다.
이렇게 역할을 만드는 건 끝났고 이제 위 ‘역할 ARN’ 을 복사합니다.
대충 arn:aws:iam::123456789012:role/falsy-exemple-role 이런식이겠죠?
이제 다시 serverless.yml에 깃헙에서 봤던 것처럼 roleArn을 지정해줍니다.
1 2 3 4 5 6 7 8 9 10 11 |
// serverless.yml falsyExempleServerlessNext: component: "@sls-next/serverless-component@1.18.0" inputs: roleArn: "arn:aws:iam::123456789012:role/falsy-exemple-role" bucketName: "falsy-exemple-s3" cloudfront: distributionId: ABCDEFG.. name: defaultLambda: "falsy-exemple-default-lambda" apiLambda: "falsy-exemple-api-lambda" |
이제 다시 배포를 해보면 새로운 역할이 생성되지 않…
을 줄 알았지만. 왠 걸 roleArn 이 적용되지 않고 새로운 또 xxxxxx-xxxxxxx 역할이 추가되었습니다…
다시 깃헙으로 가서 이슈를 찾아본 결과.
https://github.com/serverless-nextjs/serverless-next.js/issues/854
‘evangow’님께서 1.19.0-alpha.30 버전에서 새로운 롤이 생기는 문제가 있다라고 이야기 해주셨고
‘dphang’님께서 업데이트 해주셨다고 2월 11일에 답변을 달아주셨답니다.
그리고 Releases를 확인해보니 2월 11일에 1.19.0-alpha.31 버전이 프리 릴리스 된 것으로 보아 alpha.31 버전부터 해당 문제가 해결되었을 거 같아요. 그리고 이왕 알파버전을 사용하는 거 최신 버전(alpha.37)으로 적용하면.
1 2 3 4 5 6 7 8 9 10 11 |
// serverless.yml falsyExempleServerlessNext: component: "@sls-next/serverless-component@1.19.0-alpha.37" inputs: roleArn: "arn:aws:iam::123456789012:role/falsy-exemple-role" bucketName: "falsy-exemple-s3" cloudfront: distributionId: ABCDEFG.. name: defaultLambda: "falsy-exemple-default-lambda" apiLambda: "falsy-exemple-api-lambda" |
이제 다시 npx serverless 커맨드를 통해 배포하면 람다에 falsy-exemple-role 역할이 적용되고 새로운 역할이 만들어지지 않는답니다!