serverless-domain-manager delete_domain 에서 credentials 에러가 날 때
このコンテンツはまだ日本語訳がありません。
Issue
섹션 제목: “Issue”serverless framework로 관리하던 API Gateway + AWS Lambda 스택을 삭제하려고 했는데, serverless-domain-manager 플러그인 때문에 커스텀 도메인을 먼저 지워야 했다.
이때 sls delete_domain을 실행하자 아래 에러가 났다.
Error:Error: Unable to delete domain 'XXXXX.com':Unable to list hosted zones in Route53.Could not load credentials from any providers...실제로는 API Gateway의 Custom Domain은 삭제됐지만, Route53의 A, AAAA 레코드는 그대로 남았다.
Cause
섹션 제목: “Cause”이번 경우에는 serverless.yaml의 provider.profile을 플러그인이 제대로 읽지 못해서 생긴 문제로 봤다.
즉 로컬에 default credential이 없거나, default credential 권한이 부족한 상태에서 플러그인이 serverless.yaml의 provider.profile을 읽지 못하고 default credential을 보다가 에러가 난 상황이었다.
Resolution
섹션 제목: “Resolution”해결 방법은 AWS_PROFILE을 shell 환경변수로 직접 지정한 뒤 다시 실행하는 것이었다.
export AWS_PROFILE=프로파일명그 다음 커스텀 도메인을 먼저 지우고, 이후 스택 리소스를 삭제했다.
sls delete_domain -c serverless.yamlsls delete_domain -c serverless.yaml -s stagingsls delete_domain -c serverless.yaml -s production
sls remove -c serverless.yamlsls remove -c serverless.yaml -s stagingsls remove -c serverless.yaml -s production핵심은 커스텀 도메인을 만들 때의 반대 순서로 지우는 것이다.
sls delete_domain- Route53의
A,AAAA레코드 삭제- 해당 도메인 이름으로 지정되어 있던 A 레코드와 AAAA 레코드를 호스팅 영역(Hosted Zone)에서 삭제
- API Gateway의
CustomDomainName삭제- AWS API Gateway 콘솔의 사용자 정의 도메인 이름(Custom Domain Name) 리소스 자체를 삭제한다. 이때 도메인에 종속되어 있던 베이스 패스 매핑(Base Path Mapping) 설정도 구조상 함께 지워진다.
- Route53의
sls remove- API Gateway, Lambda, CloudWatch Logs 삭제
serverless.yaml에서 생성한 S3 버킷, IAM Role도 삭제
Notes
섹션 제목: “Notes”1) 커스텀 도메인이 실제로 삭제됐는지 확인하는 방법
섹션 제목: “1) 커스텀 도메인이 실제로 삭제됐는지 확인하는 방법”- API Gateway의 Custom Domain Name 목록에 삭제한 도메인이 남아 있는지 확인한다.
- AWS CLI로도 확인할 수 있다.
# REST API를 사용하는 경우aws apigateway get-domain-names
# HTTP API 또는 WebSocket API를 사용하는 경우aws apigatewayv2 get-domain-names# REST API 도메인인 경우aws apigateway get-domain-name --domain-name yourdomain.com
# HTTP API 또는 WebSocket API 도메인인 경우aws apigatewayv2 get-domain-name --domain-name yourdomain.comhttps://example.com(❌ 잘못된 입력)://example.com(❌ 잘못된 입력)example.com(⭕ 올바른 입력)
2) 생성할 때는 반대 순서다
섹션 제목: “2) 생성할 때는 반대 순서다”sls create_domain -c serverless.yamlsls create_domain -c serverless.yaml -s stagingsls create_domain -c serverless.yaml -s production
sls deploy -c serverless.yamlsls deploy -c serverless.yaml -s stagingsls deploy -c serverless.yaml -s production즉 생성할 때는 create_domain -> deploy, 삭제할 때는 delete_domain -> remove 순서로 보면 된다.
3) 참고 문서
섹션 제목: “3) 참고 문서”- AWS CLI
apigateway get-domain-names - AWS CLI
apigateway get-domain-name - AWS CLI
apigatewayv2 get-domain-names - AWS CLI
apigatewayv2 get-domain-name