AWS로 블로그 배포하기

1. AWS Route53로 커스텀 도메인 구입
구매 방법
- AWS Route53 링크 접속
- 좌측 사이드바에 등록된 도메인 클릭

- 우측 상단에 도메인 등록 클릭

- 원하는 도메인을 검색후 검색결과에서 검색된 도메인과 요금을 확인후 선택 클릭 후 결제 진행

- 그후 도메인 등록될때가지 기다리면 완료
2. AWS Amplify로 리엑트 프로젝트 배포하기
- AWS Amplify 링크 접속
- 링크로 접속후 앱 배포 클릭

- Amplify로 배포시 GitHub을 사용해서 배포

- 깃헙 로그인후 모든 레파지토리 혹은 레파지토리 선택해서 연동하기

- 가져온 레파지토리, 사용할 브랜치 선택

- 배포할 앱과 빌드 커맨드랑 빌드 디렉토리 설정

- 마지막 확인후 검토

- 배포된 프로젝트에 커스텀 도메인으로 AWS Route53으로 구매한 도메인을 등록하여 원하는 도메인에 프로젝트 배포 완료
3. 기존에 사용하던 FireBaseStorage 대신 AWS-S3로 마이그레이션 하기
ㄱ. S3 버킷 생성하기
- 버킷이름은 원하는 이름으로 생성하여 일단 생성하고
- 모든 퍼블릭 엑세스 차단 설정을 아래처럼 수정해줌
`{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "PublicReadGetObject",
"Effect": "Allow",
"Principal": "",
"Action": "s3:GetObject",
"Resource": "arn:aws:s3:::chacha-tech-blog/"
}
]
}`
- CORS 설정도 아래처럼 수정해줌
[ { "AllowedHeaders": ["*"], "AllowedMethods": ["GET", "PUT", "POST", "DELETE"], "AllowedOrigins": ["*"], "ExposeHeaders": [] } ]
ㄴ. IAM 생성하기
- 원하는 이름으로 IAM을 생성후
- 아래 정책을 적용해줌
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:PutObject", "s3:PutObjectAcl", "s3:GetObject", "s3:DeleteObject" ], "Resource": "arn:aws:s3:::chacha-tech-blog/*" }, { "Effect": "Allow", "Action": [ "s3:ListBucket" ], "Resource": "arn:aws:s3:::chacha-tech-blog" } ] } - 그후 엑세스 키를 생성하여 Access Key ID와 Secret Access Key 저장
- 그후 프로젝트에서 복사한 ACCESS_KEY랑 SECRET_ACCESS_KEY를 환경변수로 선언하고
npm install aws-sdk패키지 설치하여 사용하면됨
4. 트러블 슈팅
ㄱ. Amplify 리다이렉션 설정
- 에러 : 배포후 /login /about 페이지 등으로 도메인으로 들어가거나 페이지 이동후 새로고침시 404가 뜨는 에러
- 원인 : 정확한 이유는 모르겟지만 /login 으로 입력시 빌드된 폴더에서 login이라는 폴더를 찾고 그걸 route 하려고 하는데 없어서 나는 에러라나 뭐라나..
- 해결 :
- Amplify에 리디렉션 관리에 설정을 수정

- 배포한 프로젝트에 amplify.yml을 만들고 아래 코드를 붙여넣어서 문제를 해결
- Amplify에 리디렉션 관리에 설정을 수정
version: 1 frontend: phases: preBuild: commands: - npm ci build: commands: - npm run build artifacts: baseDirectory: build files: - "**/*" customHeaders: - pattern: "**/*" headers: - key: "Cache-Control" value: "max-age=0, no-cache, no-store, must-revalidate" redirects: - source: '</^[^.]+$|\\.(?!(css|gif|ico|jpg|js|png|txt|svg|woff|ttf|map|json)$)([^.]+$)/>' target: "/index.html" status: "200"