말 그대로다.. 하루종일 rds cloudformation만 붙잡고 있었다. 분명 이렇게 오래걸릴 일이 아니었는데 어째서? 그냥 cli로 만들걸 그랬나 싶은 생각이 들지 않는 것도 아니지만, 이렇게 한 번 만들어 두면 나중에 훨씬 편할 것 같아서 계속 오류를 수정하기로 했다.
오류 목록은 다음과 같았다.
Error parsing parameter '--template-body':
Unable to load paramfile (CreateRDS.yaml), text contents could not be decoded.
If this is a binary file, please use the fileb:// prefix instead of the file:// prefix.
이건.. 잘 모르겠다...? parsing할 수 없어서 생긴 에러라고 하는데, 좀 있다가 다시 하니까 에러가 뜨지 않았다. 저걸 생성했을 때 팀원분이 잠깐 eks 클러스터를 지우셨어서 오류가 뜬 것 같기도 하다.
aws cloudformation validate-template --template-body file://test.yml
찾아보니까 이렇게 template의 오류를 체크할 수 있는 것 같다.
Properties validation failed for resource DBInstance with message: #
/DBName: failed validation constraint for keyword [pattern]
DBName이 patterns에 부합하지 않아서 생긴 문제이다. 찾아보니 DBName은
"DBName": {
"Default": "mydb",
"Description": "My database",
"Type": "String",
"MinLength": "1",
"MaxLength": "64",
"AllowedPattern": "[a-zA-Z][a-zA-Z0-9]*",
"ConstraintDescription": "Must begin with a letter and contain onlyalphanumeric characters."
},
으로 정의되어 있어서 AllowedPattern대로 다시 이름을 바꾸어 오류를 해결했다.
Resource handler returned message: "DBSubnetGroup 'web-db-subnet-group' not found.
(Service: Rds, Status Code: 404, Request ID: 75f008d5-014c-4d8d-a858-fb42fe181c67)"
(RequestToken: a50db435-d8c4-5b33-74eb-383e386f1c5d, HandlerErrorCode: NotFound)
DBInstance가 생성될 때 DBSubnetGroup이 생성되지 않아서 생긴 문제이다. yaml파일에 입력되어 있는 순서대로 생성되는 줄 알았는데, 역시 완벽하지는 않은 것 같다. 이미 subnetgroup은 subnet에 종속되어 있어서 마지막에 생기기도 하고.. 그래서 DBInstance를 DBSubnetGroup에 종속시키려고 시도해보았다.
Properties validation failed for resource DBInstance with message:#
: extraneous key [DependsOn] is not permitted
시도의 결과로 오류가 났는데, properties 안에 들어가는게 아니라 dbinstance 바로 아래에 들어가야 하는 것이었다. properties 밖으로 빼 줘서 오류를 해결했다. + 종속도 확인했다.
Resource handler returned message: "Invalid storage size for
engine name mysql and storage type gp2: 1
(Service: Rds, Status Code: 400, Request ID: 05ac5cc6-6854-4321-8f9b-f9bc16beda25)"
(RequestToken: df385daa-3347-c849-f7d3-4cccb5c536d8, HandlerErrorCode: InvalidRequest)
gp2타입의 MySQL 용량은 최소 5GiB여야 한다고 한다. 근데 생각해보니 gp3가 더 나을 것 같아서 gp3로 변경했다. 그랬더니 다시 오류가 떴고, 찾아보니 gp3의 경우 최소 용량이 GiB라고 한다. 그걸로 수정해서 오류를 해결하였다.
Resource handler returned message: "The DB subnet group doesn't
meet Availability Zone (AZ) coverage requirement.
Current AZ coverage: ap-northeast-2b. Add subnets to cover at least 2 AZs.
(Service: Rds, Status Code: 400, Request ID: 3b3903e0-0617-4e57-984a-aedbf7d656e6)"
(RequestToken: 71b86e8e-bd79-5159-3d96-08053892da99, HandlerErrorCode: InvalidRequest)
MultiAZ를 true 로 설정했을 때, 서브넷이 AZ의 범위 요구 사항을 충족하지 않는다는 에러이다. 여기서 오늘 시간이 끝나서 클러스터가 내려가 멈춰 있는 상태인데, 내일 서브넷의 IP를 바꿔가면서 확인해 볼 예정이다.
aws ec2 describe-subnets --filters "Name=vpc-id,Values=<VPC-ID>"
명령어를 사용하면 확인해 볼 수 있다고 하므로, 해당 명령어를 사용해볼 것이다.
오늘 만난 오류의 목록은 다음과 같았다. 솔직히 다음엔 무슨 오류가 뜰 지 모르겠다.. 하지만 열심히 찾아보다 보면 다 해결책이 있어서 다행인 것 같다. 내일 RDS와 EKS 연동까지 마무리되면 좋겠다.
내일은 RDS 스택을 일단 마무리하고, Fast API와 React를 이용해 테스트 웹 코드를 만들고 Deploy해 봐야겠다. 또, 여럿이서 작업을 하다 보니 폴더가 충돌하는 경우가 생겨서 폴더 트리를 만들어 봐야할 것 같다. 예전에는 이 트리를 굳이 만들어야 하나 생각했는데, 안 만들고 작업하니까 꼭 있어야 할 것 같다..