# TIL-20210421

# Today

  • aws S3 https deploy

# Content

S3를 통해 정적 페이지를 배포하는것이 가능하다. (이전 포스트에서 다루었다. 어제 TIL )
기본적으로 S3를 통한 배포는 http만 지원 한다.

S3에서 https 배포 S3만을 이용해서 https를 배포하는 것은 불가능하다.
아마존에서 제공하는 서비스 중 몇 가지를 추가해 https를 적용하기로 했다.

  1. cloudfront http요청을 https요청으로 redrection 해줄 수 있는 서비스 이다.
    CDN(Content Delivery Network)의 일종이다.

  2. Route 53 나의 서비스를 DNS서버의 엔드포인트와 연결해주는 서비스 이다.
    외부 도메인을 구입해 해당 도메인에 접속 시 내가 배포하는 서비스에 접속 할 수 있게 해준다.

  3. certificate Manager 인증서 관리 서비스 이다.
    특정 도메인에 대한 인증서를 발급해 해당 도메인을 사용할 시 필요한 인증서를 관리해주는 서비스 이다.

배포 과정 cloudfront를 통해 https 통신을 지원해야 하기 때문에,
새로운 distribution을 설정해야 한다.

origin을 배포할 s3로 설정한다. (REST API endpoint로 설정 된다.)
http redirect to https로 설정한다.
default object를 index.html (s3 버킷 메인 페이지랑 같은 파일)로 설정한다.

미리 외부 도메인 (route 53을 통해 구매하지 않은 도메인)을 인증 받았다면,
alternate domain names에 추가한다. (exampel.com)

인증 받지 못했다면 일단 생성하고 다음으로 넘어간다.

client에서 react-router-dom을 사용하는 경우 이 경우에는 메인 페이지에서 react-router-dom을 통해 redirect가 일어나기 때문에, 403에러가 발생할 수 있다.
때문에, 생성한 cloudfront distribution에서 error page에 대한 핸들링이 필요하다.

403, 404에러를 index.html 경로로 redirect 세팅을 해주고 200 response state로 변경한다.

외부 도메인 인증 route 53을 통해 일단 도메인의 nameserver를 생성해 외부 도메인 제공업체에 등록을 해야한다. route 53에서 새로운 호스팅을 생성하고, 내가 만든 도메인을 등록한다.

등록한 이후에는 NS, SOA 두 가지 유형의 레코드가 생성된다.
NS에 등록된 트래픽 대상을 내가 도메인을 구매한 곳에서 Nameserver로 등록해준다.

이제 certificate manager를 통해서 인증서를 발급한다. 내가 구매한 도메인(example.com) + 서브도메인을 포함한 도메인 (www.example.com)을 인증서에 등록하고 DNS를 통한 인증일 진행한다.

이 단계에서 꽤 오랜 시간이 소요된다. (인증까지)

https 설정을 위한 엔드포인트 설정 이전에 생성했던 cloudfront distribute를 수정하기 위해 edit을 통해 CNAMEs에 인증서를 생성한 도메인 두 가지 (example.com, wwww.example.com)을 등록하고 그리고 해당 도메인을 통해 받은 SSL인증서를 등록한다. 등록이 완료되면 다시 route 53으로 돌아가 새로운 레코드를 생성하면 설정이 완료된다.

route 53에서 새로운 레코드는 두 가지를 생성해준다. 서브도메인을 사용한 주소와 내가 사용한 도메인 주소 두 가지를 모두 route를 등록한다.

레코드명을 도메인으로 등록하고 라우팅 대상을 별칭 옵션을 활성화 해 cloudfront 별칭을 찾아서 등록하면 된다.