CrazySoftware2014. 6. 21. 00:07

*  S3

S3는 스토리지이다. 가상의 공간에 파일 등의 기타 자료를 올릴 수 있다.


S3에는 버킷을 생성 할 수 있다. 버킷은 여러개의 폴더 및 파일을 담는 통으로 생각하면 된다.


버킷은 특성을 가지도록 하는 것이 좋다. 왜냐하면 나중에 이 버킷을 기준으로 CloudFront 서버를 생성 할 수 있기 때문이다.


* Cloud Front

CF는 CDN서비스라고 할 수 있다. CDN은 중간에 정적 데이터를 미리 캐시해서 서비스 해준다. 특히 아마존 같은 경우에는 전세계에 흩어진 40여개의 Edge에 미리 캐시 했다가 땡겨오는 식이다. 한국에도 이 Edge가 생겨서 요새는 이쪽도 좋은 것 같다.


* S3 버켓 생성 및 파일 업로드


AWS에 S3 메뉴에 들어가면 이런식으로 버켓을 생성 할 수 있다.


버켓을 만들 때는 이름을 '.'과 숫자, 영문을 제외 하고는 사용하지 않는 것이 좋다. 왜냐하면 CF하고 붙일 때 다시 만들어야 할 수도 있다.



그리고 버켓을 클릭해서 들어간 다음에 파일을 업로드 하자. 



* Cloud Front 생성

마찬 가지로 상단의 Services를 클릭해서 Cloud Front를 클릭하면 된다. 그리고 좌측에 있는 Distribution을 누르면 아래 같은 화면이 뜨는데 여기서 Create Distribution을 누르면 된다. 그리고 나면 헬게이트가 열린다.

 "아, 난 졸라 가벼운 마음으로 세팅하러 왔는데 이거 뭐지..." 하는 생각이 절로 든다.


Step 1: Select delivery method

여기서는 Web과 RTMP중 하나를 선택하게 되는데, 어도비 플래시 미디어 서버의 RTMP 프로토콜을 쓰면 RTMP를 선택하고, 나머지는 Web을 가벼운 마음으로 선택하면 된다.


Step 2:Create distribution

여기서 진짜가... ㄷㄷ


먼저 Origin Domain Name을 선택 한다. 바로 아마존 S3 버킷을 선택 하면 , Origin ID도 자동으로 등록 된다.


Viewer Protocol Policy는 HTTP와 HTTPS를 모두 쓰게 하는 것, HTTP로 들어오면 HTTPS로 포워딩, HTTPS만 사용 3가지가 있다. 그냥 HTTP and HTTPS 쓰면 편한것 같다.


Allowed HTTP Method에는 GET, HEAD와 다른 HTTP 프로토콜을 같이 사용하는 메뉴가 있다. 낌새만 봐도 알 수 있듯이 DELETE나 POST같은 걸로 파일을 올리거나 삭제 할 수도 있는것같다. 하지만 CDN에다가 파일 업로드하는 경우가 있나?

그래서 그냥 GET, HEAD 선택 하면 좋다.

Object Caching은  Use Origin Cache Headers와 Customize 2종류가 있다. 아까말한 것 처럼, CF는 CDN을 빙자하고 있기 때문에, S3 스토리지를 캐시 한다. Customize를 선택하면 아래 TTL을 설정하는데, 이 시간만큼 이미지를 캐시 한다. Use Origin Cache Headers를 선택하면 S3에서 Cache-Controle 헤더를 설정해서 CF에 캐시되어 있는 시간을 정할 수 있다.

Forward Cookies는 잘 모르기도 하고.. S3에서는 지원도 안하기 때문에 그냥 넘어 간다.


Smooth Streaming은 Microsoft Smooth Streaming을 사용하면 Yes를 누르면 된다.


Restrict Viewer Access(Use Signed URLs) 여기서 말하는 Signed URLs는 제한된 유저에게만 접근 하도록 할 떄 사용한다. Signed URLs에 대한 자세한 내용은 찾아보자. 보통 CDN은 대부분의 사람이 접속해서 데이터를 접근 하므로 No를 선택 한다.


Price Class는 사용하는 edge의 수를 제한하는 옵션이자 돈이 걸린 문제이다. edge는 여기저기 퍼져 있는데 전세계 모든 edge를 사용 할 지, 특정 부분의 edge만 사용할지 선택하면 된다.


Alternate Domain Names. CNAMEs을 선택 하면 됩니다. 도메인을 가지고 있으면, 도메인을 CF기본 도메인 대신 쓸 수 있다.


SSL Certificate. AWS에 IAM에 SSL 인증서를 등록해 놓았다면 기본 인증서 대신 사용 할 수 있다.


Default RootObject는 잘못된 이미지 경로로 접근 했을 떄 볼 수 있는 페이지를 등록 할 수 있습니다.


Logging은 취향에 따라서 On/Off하시고 이제 Create DIstribution을 클릭 하면 됩니다.


생성하고나면 아래 같은 화면을 볼 수 있습니다. 시간은 한 10분 15분 정도 걸린다.

CF가 준비 되면 이제 CF로 접속해보자. 아까 내가 올린 파일은 play.png였다.

d3kq9c1qyaz6nw.cloudfront.net 이므로, 접근 하기 위해서는 d3kq9c1qyaz6nw.cloudfront.net/play.png 로 접속하면 된다.

자 에러 메세지가 나온다. AccessDenied가 뜬다. 이제 S3에 권한을 추가 할 차례다.

S3에 접속해서 버켓을 선택하고 오른쪽 위에 있는 Properties를 선택하고, 아래에 Permission을 선택한다.

그리고 Add bucket policy를 클릭하자. 그리고 아래에 있는 링크에서 보고 원하는 권한에 따라 정책을 설정 하면 된다.

https://docs.aws.amazon.com/AmazonS3/latest/dev/example-bucket-policies.html

CDN으로만 쓰려면, CF에서 GetObject 할 수 있는 권한만 있으면 된다. 이걸 설정 하려면, Edit bucket policy를 선택해서 나온 창에서 AWS Policy Generator를 사용하면 쉽다.

아래는 간단한 CDN을 위해서만 기능을 한정해서 정책 설정을 한 것이다.


{

"Id": "Policy1403276359730",

"Statement": [

{

"Sid": "Stmt1403276358543",

"Action": [

"s3:GetObject"

],

"Effect": "Allow",

"Resource": "arn:aws:s3:::springofmylife.blog/*",

"Principal": {

"AWS": [

"*"

]

}

}

]

}


Action은 허용 할 액션을 설정 하는 것이고, Effect는 Allow 또는 Deny이다. Rseource에는 ARN이라는 것을 넣어준다.

여기서 사용 하는건 S3이고 버켓이름은 springofmylife.blog이므로 arn:aws:s3:::springofmylife.blog 가 된다.

Principal은 접근 할 수 있는 대상을 지정하는 것인데, 우리는 AWS내에 있는 CF에서만 접근 할 것이므로, AWS로 한정 한다.


자세한 설명은 아래 링크를 참고하면 된다. 


http://docs.aws.amazon.com/IAM/latest/UserGuide/AccessPolicyLanguage_ElementDescriptions.html#Sid


이제 다시한번 CF로 접속해보자.


d3kq9c1qyaz6nw.cloudfront.net/play.png


이제 잘 된다.

* 중요( 삽질 경험담 )

CF를 사용 할 때 클라우드 프론트 파일 경로에 버켓 이름을 쓰는 바람에 상당히 괴롭게 됐는데. 전혀 그럴 필요 없다.

http://<클라우드 프론트 도메인>/<파일이름>

그리고 버켓안에 폴더가 또 있다면, 

http://<클라우드 프론트 도메인>/<폴더 이름>/<파일이름>

버켓 이름은 쓸 필요가 없다!

Posted by Arnold Arnny

댓글을 달아 주세요

  1. 감사합니다. ㅇ_ㅇ;; 내용을 정리해봤습니다.
    https://docs.google.com/presentation/d/1SD319Kfb982b8WT2PSfW-MXfHr7MWdbHO4PT2Jgdbg8/edit?usp=sharing

    2014.07.02 09:16 신고 [ ADDR : EDIT/ DEL : REPLY ]
    • 프리젠테이션 잘 봤습니다 :)
      근데, S3에서 CF로 연결하실때 Make a public하지않으셔도 보기만하는 건지장 없는 것같아요.

      2014.07.02 18:11 신고 [ ADDR : EDIT/ DEL ]
  2. 네. 그런 기능이. 있다는걸 알려주고 싶어서요. ㅇ_ㅇ;;

    2014.07.03 00:58 신고 [ ADDR : EDIT/ DEL : REPLY ]