나의 졸업 프로젝트인 LipRead는 Lambda+API gateway로 이루어져 있다.
프로젝트를 시작하던 당시 나는
1. 이러한 AWS의 서비스에 익숙치 못했고,
2. 대부분의 블로그, 참고 자료 등이 AWS 콘솔을 사용했기에 콘솔 사용에 익숙함을 느꼈고,
3. Serverless Framework를 또 공부해야하는 데 시간를 쏟아야 한다는 점으로 인해
졸업 프로젝트를 진행하던 때는 AWS 콘솔을 이용해 AWS의 서비스를 관리했다.
하지만 프로젝트 진행 당시에 서비스 자체들을 생성하는데에는 큰 어려움이 없었지만, Lambda를 수정 후 재배포할 때 사소한 귀찮음이 생겼다.
당시 Lambda를 재배포 하려면
1. 코드를 zip파일로 만들고, AWS 콘솔로 들어가 직접 업로드를 해야한다는 점,
2. 로컬로는 Lambda를 실행하지 못하기 때문에 배포 전에는 테스트를 못해 개발에 어려움이 생긴다는 점,
으로 인해 Serverless Framework 같은 배포 자동화 방식에 관심이 가기 시작했다.
결국 Serverless Framework를 한번 사용해보기로 했다.
결론부터 말하자면 Serverless Framework 테스트는 현재 실패했다...😥
그래도 지금까지의 도전기를 정리해보자.
Installation
npm i serverless -g
serverless --version
파워셸에 스크립트 실행 권한이 제한되어 오류 발생. -> 해결법
파워셸을 관리자로 실행하기를 한 후 Set-ExecutionPolicy RemoteSigned 명령어를 통해 권한 상태를 변경한다.
첫 프로젝트 생성
Create AWS IAM Role
서버리스 프레임워크에서 리소스를 AWS 계정에 배포하는 데 사용할 AWS IAM 역할을 생성하는 방법이다.
AWS IAM 역할은 머신이 아닌 서버리스 프레임워크 대시보드에 저장됩니다. 이를 통해 팀과 공유하고 특정 서비스 및 단계의 기본값으로 설정할 수 있다.
서버리스 프레임워크가 실행될 때마다 먼저 서버리스 프레임워크 대시보드에서 배포 중인 서비스 및 스테이지에 적합한 공급자를 가져오고 프레임워크에서 사용할 임시 AWS 계정 자격 증명을 반환하므로 가장 안전한 옵션이다.
시작하려면 서버리스 프레임워크와 함께 사용하려는 AWS 계정에 로그인하고 아래 URL로 이동하여 미리 채워진 템플릿이 있는 AWS Cloudformation 페이지를 열어 다음을 생성한다.
사용할 서버리스 프레임워크용 IAM 역할을 만든다. 페이지 하단에서 확인란을 선택하여 AWS CloudFormation이 IAM 리소스를 생성할 수 있음을 인정하고 '스택 만들기'를 클릭한다.
CloudFormation의 템플릿 yml 파일 의 내용이 궁금해 확인해 보았다.
Description: This stack creates an IAM role that can be used by Serverless Framework for use in deployments.
Resources:
SFRole:
Type: AWS::IAM::Role
Properties:
AssumeRolePolicyDocument:
Version: '2012-10-17'
Statement:
- Effect: Allow
Principal:
AWS: arn:aws:iam::486128539022:root
Action:
- sts:AssumeRole
Condition:
StringEquals:
sts:ExternalId: !Sub 'ServerlessFramework-${OrgUid}'
Path: /
RoleName: !Ref RoleName
ManagedPolicyArns:
- arn:aws:iam::aws:policy/AdministratorAccess
ReporterFunction:
Type: Custom::ServerlessFrameworkReporter
Properties:
ServiceToken: 'arn:aws:lambda:us-east-1:486128539022:function:sp-providers-stack-reporter-custom-resource-prod-tmen2ec'
OrgUid: !Ref OrgUid
RoleArn: !GetAtt SFRole.Arn
Alias: !Ref Alias
Outputs:
SFRoleArn:
Description: 'ARN for the IAM Role used by Serverless Framework'
Value: !GetAtt SFRole.Arn
Parameters:
OrgUid:
Description: Serverless Framework Org Uid
Type: String
Alias:
Description: Serverless Framework Provider Alias
Type: String
RoleName:
Description: Serverless Framework Role Name
Type: String
- SFRole은 특정 AWS 계정의 루트 사용자가 맡을 수 있도록 설정된 IAM 역할로, Serverless Framework 배포에 필요한 권한을 제공한다.
- ReporterFunction 리소스는, ServiceToken 속성에 지정된 Lambda 함수를 호출하여 특정 작업을 수행한다.
결과
serverless 에서 권고하는 그대로 따라했는데 AWS credentials appear to be invalid 관련 에러가 발생한다.
serverless 대쉬보드에서도 생성한 IAM role을 확인할 수 있는데 어떤 이유로 발생하는지 모르겠다...
해결한 다른 에러
이러한 오류가 계속해서 발생해서 serverless도 삭제하고, serverless 회원도 탈퇴하여 재시도 했다.
그런데 serverless 회원 탈퇴 이후 serverless 로그인, 회원가입을 하지못하는 문제가 발생했다.
말그대로 serverless 로그인, 회원가입 창에 접속하면 무한 로딩이 발생한다.
처음에는 로컬에서 serverless 관련 파일이 남아있구나 생각했는데 그건 아니었다.
이후 serverless 사이트에서 쿠키들을 전부 삭제하고 다시 시도하니 회원 가입 창에 들어갈 수 있었다.
위의 에러를 해결하고 나서도 그대로 AWS credentials appear to be invalid가 발생했다.
serverless deploy --debug 명령어를 실행하는데 User session을 . serverlessrc 파일에서 확인한다는 것을 확인했다.
해당 파일을 확인했는데 새로 생긴 유저 정보를 포함해 이전에 탈퇴한 유저 정보가 그래도 적혀 있었다.
탈퇴한 회원 정보를 삭제했지만 해결되지 않았다.
'Graduation Project' 카테고리의 다른 글
프롬프트 엔지니어링 (0) | 2024.07.08 |
---|---|
S3 + CloudFront 비디오 스트리밍 (0) | 2024.07.03 |
AWS APIgateway+ 응답 HTTP status 변경하기 (0) | 2024.06.28 |
DynamoDB 키 디자인 패턴 적용하기 (1) | 2024.06.25 |
Oauth란 (0) | 2024.06.24 |