AWS 구축 순서 & 에러 사항들

AWS

목록 보기
16/16

aws 구축 순서 (rds, iam 등 설정은 돼있다고 가정)

  • 보안그룹 만들기 (ec2 만들 때 넣어줘야함) -> rds 보안그룹은 이미 있다고 가정.
    1. ec2
    • 인바운드
      • ALL TCP - alb
      • ssh - bastion
    • 아웃바운드
      • mySQL - rds 보안그룹
      • ALL TCP (nat 게이트웨이 통해서 데이터 다운로드 받을 때 필요))
    1. alb
    • 인바운드
      • HTTPS
    • 아웃바운드
      • ALL TCP - ec2 보안그룹
    1. rds
      • rds 인바운드에 ec2 보안그룹 넣어주기
    • 인바운드에 bastion 추가
  • ec2 만들기
    • ec2 보안에 ec2 보안그룹 위에서 설정한 것 넣어주기!
  • 파라미터 스토어에 키 등록 (kms 잘 설정했는지 확인)
  • codedeploy 배포 애플리케이션 & 배포그룹 설정
  • S3 깃허브 액션 용 버킷 만들기
    • buckey key : disabled
  • 대상그룹
  • 로드밸런서 (alb 보안그룹 필요, 대상그룹 (HTTPS 443 필요))
  • route53 (로드밸런서 필요)
  • certificate manager 에서 route53에 등록한 인증서 발급하고 완료되면 해당 alb에 등록 필요
  • ec2에 telnet 설치 필요 → 어떻게 쓰는지 몰라서 안썼음

++ 코드에서 작성해야하는 것

  • application-prod.yaml
  • deploy.yml + github AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY


  • parameter store 제대로 설정됐는지 확인하려면, ec2 들어가서
    • aws ssm get-parameters-by-path --path "$PARAMETER_STORE_PATH" --with-decryption --recursive
    • 쳐보기! 안뜨면 안된것 → 보안그룹이거나 라우팅 테이블 문제 (아웃바운드가 안됨)
    • NAT 게이트 웨이에 서브넷을 설정해줘야함 (dev, dev-sham이랑 서브넷이 다름!) -> 나는 이 문제는 아니였음.
    • 못가져오는거 ec2 보안에서 아웃바운드에 ‘모든 트래픽’ 설정 됐는지 확인! -> 이 문제 였음.
  • private ec2에서
    aws ssm get-parameters-by-path --path "$PARAMETER_STORE_PATH" --with-decryption --recursive 를 요청했을 때 아래와 같은 에러가 발생!!

    An error occurred (AccessDeniedException) when calling the GetParametersByPath operation: User: arn:aws:sts::155965728688:assumed-role/dev-ec2/i-019013be520d703a9 is not authorized to perform: kms:Decrypt on resource: arn:aws:kms:ap-northeast-2:155965728688:key/86e678a0-7ec6-4762-a26e-916b0b72b048 because no identity-based policy allows the kms:Decrypt action (Service: AWSKMS; Status Code: 400; Error Code: AccessDeniedException; Request ID: 37f177e6-0748-41f8-addf-6c5646b260da; Proxy: null)

-----> 근데 내문제는 이게 아니라 파라미터 스토어에 파라미터를 생성할 때,
KMS 키 소스에 KMS 키 ID를 alias/aws/ssm (aws ssm을 가져와야함) 을 준게 아니라 다른 임시로 만들었던 키를 넣어줘서 decrypt가 안됐던 것임.
(aws ssm get-parameters-by-path --path "$PARAMETER_STORE_PATH" --with-decryption --recursive) 여기서 —with-decryption 을 빼고 하니까 잘 나옴 → decrypt 가 안됨 → 키를 잘못 쓰고 있던 것!

parameter store 에서 key 만들 때 화면. KMS Key ID 에서 잘 선택했는지 확인해야함!!


  • com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure 에러
    • ec2의 보안 그룹 id를 rds 인바운드 규칙에 추가하지 않아서 발생한 문제
    • https://velog.io/@doforme/프로젝트-배포-중-발생한-이슈들
    • 그리고 또 다른 것 구축할 때 생겼던 문제는, 인바운드는 잘 넣어줬는데 profile을 prod를 넣어줘야하는데 잘못해서 dev로 넣어줘서 생겼었음..

https:// 가 안되는 이유는 인증서가 없기(or 안맞기) 때문!

  • 인증서 Certification Manager 에서 발급받아서 alb에서 기본 SSL/TLS인증서 에서 바꿔줘야함
  • 인증서 발급받는데 오래걸리니까 미리미리 해두기!

  • alb에서 SSL/TLS를 해당 DNS에 맞는 인증서로 바꿔줘야함 (현재는 dev.sham을 써야하는데 dev 꺼를 쓰고있어서 DNS가 달라서 안됐던거임)
  • 검증 대기중에서 너무 오래 걸릴 때....
    AWS Certificate Manager 에서
  1. 인증서 들어가기
  2. 도메인 -> Route53에서 레코드 생성
  3. 해당 도메인 클릭 -> 레코드 생성
    후 조금 기다리면 적격 으로 바뀐다!

갑자기 배포 안될 때!

# AWS 자격증명 파일 삭제
$ sudo rm -rf /root/.aws/credentials

# codedeploy-agent 재시작
$ sudo systemctl restart codedeploy-agent

++ 참고사항

  • 서버에서 개발안할거니까 jdk 필요없고 jre만 하면 됨
  • NACL이랑 보안그룹 아웃바운드 건들지 말고 라우팅 테이블에서 설정해줘야함!
  • mysql은 다운 안받아도 되고, 텔넷 이라는것 이용하면 될 것
  • ec2들어가서 deploy 잘 됐는지 확인하고 alb랑 연결해야함!
  • alb에서 https를 연결해놓으면 내부의 서버 인스턴스 ec2는 http 만 신경쓰면됨.
profile
백엔드를 공부하고 있습니다.

0개의 댓글