참고: https://docs.aws.amazon.com/ko_kr/lambda/latest/dg/with-s3-example.html

 

게임데이 준비하면서 해본 간단한 실습!


  • S3 버킷 생성 및 샘플 객체 업로드

그냥 하고 싶은대로 설정 후 원하는 파일 아무거나 업로드하면 된다.

 

  • Lambda 함수 생성

function blueprint를 사용해 생성할 예정..

샘플 코드를 활용한다고 생각하면 된다!

python으로 진행

위에서 생성했던 버킷으로 트리거를 설정한다.

Amazon S3 가 함수를 호출할 수 있도록 함수의 리소스 기반 정책을 수정하자.

역할 문서를 확인해보자. S3 관련한 정책을 허용하는 내용이 잘 들어가있는지 확인한다.

트리거가 잘 잡혔는지 확인해보자..(나는 위처럼만 하면 트리거 추가가 안되서.. 따로 추가 다시 해줌..)

 

  • Lambda Test

아래 JSON 코드에서 S3 버킷 이름(examplie-bucket)과, 객체 키(test%2Fkey)를 테스트 파일 이름(버킷 안 파일)으로 바꿔준다.

해당 이벤트로 설정 후에 테스트를 해보면

다음과 같이 결과를 얻을 수 있다.

 

  • S3 Trigger Test

S3 버킷에 파일을 업로드할 때 함수를 호출한다.

따라서 파일 업로드를 몇 개 하고 Lambda의 모니터링을 확인해보면

Invocations 그래프의 숫자는 S3 버킷에 업로드한 파일의 수와 일치해야한다.

cloudwatch 로그에서도 확인 가능하다.

참고: https://catalog.us-east-1.prod.workshops.aws/workshops/4a2a9a24-071d-4d96-b9be-0cc57b7db434/en-US

Rekognition에 궁금증이 생겨 좀 다뤄볼까 한다..

(꼭.. us-east-1에서 진행하세요!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!)


Preprocessing

  • S3에 데이터 업로드

버킷을 하나 생성해주고 aws 로고 이미지들을 '버킷/aws' 경로로 올려준다.

 

  • Rekognition 프로젝트 만들기

Rekognition → 사용자 지정 레이블 만들기(Custom Labels)

❗ 프로젝트를 눌러 생성하면 되는데.. 왜 자꾸 처음에 s3 버킷을 생성하라고 뜰까?! ❗

과정을 마치고 해당 버킷으로 돌아와 보면 위 이미지 처럼 객체들이 들어가있다.

아마 생성했던 프로젝트들, 라벨들을 관리(?) 하는 버킷의 느낌이다.

 

 

  • Dataset 생성

single dataset으로 선택 후

아까 생성했던 s3 버킷으로 지정하고 라벨링을 위한 작업을 위해 해당 체크 표시를 해준다.

(Automatically assign image-level labels to images based on the folder name)

 

정책을 복사해 버킷 정책에 붙여 넣는다.

해당 파란색 링크를 클릭하면 알아서 해당 버킷으로 데려가 줌!

정책을 붙여넣고 create dataset 클릭.

 

  • Start labeling

이미지들 선택 후에 Draw bounding boxes 선택(단일 페이지에서만 이미지 선택 가능 - 첫번째 페이지 하고 두번 째)

이런 식으로 aws 로고 선택해주자..

단순 반복 작업...

다 끝내면 Save changes 버튼을 클릭해준다.

 

 

Training

  • Train model

Train model을 클릭한다.

방금 생성한 프로젝트를 선택하고 Train model 클릭

(모델 트레이닝은 50-60분 정도 소요된다...?! 취소하고 싶으면 CLI 환경에서 모델 트레이닝 중지를 시켜야함.. 콘솔 불가)

 

Inference

와... 서울 리전 데모 애플리케이션이 없다... 대충 이런 프로세스 느낌이라는 것만 알면 될 듯...?

(여러분은 us-east-1으로 진행하세요...😥)

https://github.com/aws-samples/amazon-rekognition-custom-labels-demo

과정만 간단히 살펴 보자면..

 모델의 상태가 TRAINING_COMPLETED 인 경우에 훈련이 끝난 것..

모델을 클릭하고 레이블별 성능을 확인해본다. 만족 시 Use model을 클릭해서 사용하면 된다.

 

이후 과정에선 저 위의 링크에 들어가 CloudFormation으로 애플리케이션을 활용해 테스트 해보는 과정인데..

잘못된 리전 선택으로.. 하지 못했..다...ㅠㅠ

무튼 이미지를 넣고 Results에 신뢰도 점수가 표시된다!

그리고 테스트가 끝나면 Stop the model 클릭을 하는 거 까지가 과정이다!!

참고: https://www.youtube.com/watch?v=VDqToPfbuok 

이제 좀 실질적으로 필요한 실습을 진행해보자..(많이 사용할만 한걸로다가 😅)


  • 버킷 생성

이름 알아서 고유하게 잘 설정한다.

이후에 로그 샘플 파일을 업로드 한다.

이와 같은 형태로 주욱 나열되어 있음(의미는 없음)

 

  • Glue Crawler 생성

이름: Demo-Athena-log-crawler

Data store 추가(위에서 생성했던 버킷 경로로!)

IAM Role: 이름 적당히 해서 새로 생성 후 지정

Database는 새로 생성

실행 시키자!

로그 데이터 양에 따라 걸리는 시간이 달라질 것!

 

테이블을 확인해보면,

다음과 같이 로그 파일에 알맞는 스키마가 생성된 것을 확인할 수 있다.

 

  • Athena로 쿼리

해당 버킷을 설정해주자.

테이블 미리보기를 누른 화면이다.. 아까 Glue에서 생성했던 테이블 결과를 확인할 수 있다.

 

원하는 쿼리로 실행해서 잘 이용하면 됨!!!


Athena 사용사례

- 여러 로그파일이 저장된 S3에서 필요한 데이터를 조회

- 정형화된 메타데이터 혹은 저장 데이터를 조회

- 이벤트 데이터에서 필요한 정보를 추출(A/B테스트) 등

 

❗ 지금은 로그 샘플 파일이라 적고 별거 없지만, 실제 프로젝트 로그의 경우 아주 많기 때문에 오류나 이런거 찾기에 좋을듯! ❗

AWS 솔루션을 설계하는 동안 데이터 전송 요금을 놓치는 경우가 많다. 이를 고려하면 비용 절감에 도움을 준다.

조건 하나하나 따져볼 예정..

참고: https://aws.amazon.com/ko/blogs/architecture/overview-of-data-transfer-costs-for-common-architectures/


AWS와 인터넷 간의 데이터 전송

인터넷 → AWS(인바운드): 요금 부과 X

AWS → 인터넷(아웃바운드): 요금 부과

 

AWS 내 데이터 전송

  • 워크로드와 다른 AWS 서비스 간의 데이터 전송
    • 워크로드가 AWS 서비스에 액세스할 때: 요금 부과
  • 동일한 AWS 리전 내 서비스 액세스
    •  IGW를 사용해 AWS의 퍼블릭 엔드포인트 액세스: 요금 부과 X
    • NGW를 사용해 AWS의 퍼블릭 엔드포인트 액세스: 요금 부과(게이트웨이를 통과하는 데이터에 대해)

 

  • AWS 리전에서 서비스 액세스
    • 워크로드가 다른 리전의 서비스에 액세스: 요금 부과

  • 워크로드의 다양한 구성 요소 내에서 데이터 전송
    • 워크로드의 서로 다른 구성 요소 간에 데이터 전송이 있는 경우 요금 부과
  • 동일한 AWS 리전의 워크로드 구성 요소(AZ 관련)
    • 동일한 AZ 내 데이터 전송: 요금 부과 X
    • 고가용성 - 여러 AZ 배포: 요금 부과

  • VPC 피어링 연결(AWS 네트워크의 여러 VPC에 워크로드를 배포)
    • 동일한 AZ 내 VPC 피어링 연결: 요금 부과 X
    • AZ를 교차한 VPC 피어링 연결: 요금 부과

  • Transit Gateway(연결된 VPC, DX, Site-to-Site VPN 요금 포함)

  • 다양한 AWS 리전의 워크로드 구성 요소(리전 간)
    • VPC 피어링: 요금 부과
    • Transit Gateway: 피어의 한쪽에서만 요금 부과

AWS와 온프레미스 데이터 센터 간의 데이터 전송

  • AWS Site-to-Site VPN

  • AWS Direct Connect

  • 여러 리전의 Direct Connect


요금 팁

  • VPC 엔드포인트를 사용하여 AWS 내에서 AWS 서비스에 연결할 때 인터넷을 통한 트래픽 라우팅을 피해라
    • VPC 게이트웨이 엔드포인트를 사용하면 동일한 리전 내에서 데이터 전송 요금 없이 S3, DynamoDB 통신 가능
    • VPC 인터페이스 엔드포인트는 일부 AWS 서비스에서 사용 가능, 시간당 서비스 요금 + 데이터 전송 요금 발생
  • 온프레미스 네트워크에 데이터를 보낼 때 인터넷 대신 Direct Connect 사용
  • AZ 경계를 넘는 트래픽에는 일반적으로 데이터 전송 요금이 부과됨
  • 리전 경계를 넘는 트래픽에도 일반적으로 데이터 전송 요금이 부과됨
  • AWS 프리티어를 활용하라
  • AWS 요금 계산기를 활용하라
  • https://wellarchitectedlabs.com/cost/200_labs/200_enterprise_dashboards/3_create_data_transfer_cost_analysis/ :관련한 워크숍

외부 dns 주소를 생성해야한다. 나는 무료 DNS 주소를 생성할 예정!

https://www.freenom.com/en/index.html?lang=en 

(not available error의 경우 국가 최상위 주소까지 함께 입력하면 된다!)

로그인 후에 구매를 완료하면 된다.(0달러 인거 꼭 확인하기!)

 

Route 53에서 호스팅 영역을 생성하자.

위의 NS(네임서버)를 Freenom Nameserver에 등록해서 연결을 시켜야한다.

 

Freenom 사이트 Service → My Domains → Management Tools → Nameservers

 

AWS에서 해당 호스팅 영역에서 레코드를 생성해보자.

(Test를 위해 퍼블릭 ip가 활성화된 인스턴스를 하나 생성했다. 이를 값에 넣어주자.)

ping 테스트 해볼건데 이를 위해선 생성했던 인스턴스 보안그룹에 icmp 넣어줘야한다.

 

ping test

 

정리를 해보면!

1. 다른 dns 서버에서 도메인 구매(이미 구매했던 도메인도 가능)

2. AWS Route53에 호스팅 영역 생성

3. Route53에서 생성된 레코드 중 NS를 구매했었던 도메인 dns 서버에 등록

4. Route53에서 레코드 생성해서 원하는 값들 설정 후 사용

 

 

❗ 나는 무료로 구매하려고 freenom을 사용했지만 가비아, 카페 24 등 유료 도메인도 똑같이 작업해주면 된다! ❗

'Cloud > AWS' 카테고리의 다른 글

[AWS] Amazon Athena로 S3의 로그 쿼리 하기(easy)  (0) 2022.09.22
[AWS] 데이터 전송 비용  (0) 2022.09.21
[AWS] Route 53 서비스 개념  (0) 2022.09.20
[AWS] ECS Task Network Mode  (0) 2022.09.19
[AWS] Cloud9 - Github 연동  (0) 2022.09.16

최근에 Route 53을 하다가 현타가 와서 개념부터해서 싹 정리해보려 한다.

여기서는 AWS에서 할 수 있는 것들에 대해 정리해보자!

❗ 다음 포스팅에서는 실습들 (AWS 서비스 엔드포인트나 도메인을 어떻게 다른 dns로 연결할지 / 외부 도메인을 AWS로 어떻게 가져올지 등..) 정리해보려 한다. ❗


Amazon Route 53

  • 높은 가용성과 확장성이 뛰어난 클라우드 DNS 웹 서비스
  • 기능
    • Route 53 Resolver: VPC 및 온프레미스 네트워크에 대한 재귀 DNS 확보
    • Route 53 Resolver DNS Firewall: 도메인 목록을 생성하고 이러한 규칙에 대해 아웃바운드 DNS 트래픽을 필터링하는 방화벽 규칙
    • Route 53 Application Recovery Controller: 리소스 복구할 준비가 되어있는지 확인
    • 트래픽 흐름: 시각적으로 트래픽을 보여줌
    • 이 밖에도 기본적으로 도메인 등록, 상태 확인 및 모니터링, ELB 통합 등의 기능이 있다.
  • 라우팅 정책

 

Route 53 Resolver

  • 네트워크의 DNS와 쉽게 통합되는 VPC용 DNS 해석기 서비스
  • 엔드포인트 구성: DNS 쿼리 방향을 정한다(인바운드/아웃바운드)
    • 인바운드 엔드포인트: DNS 해석기가 DNS 쿼리를 Route 53 Resolver에 전달(Route 53 프라이빗 호스팅 영역의 AWS 리소스의 도메인 이름을 쉽게 해석 가능)
    • 아웃바운드 엔드포인트: Resolver가 쿼리를 내트워크의 해석기에 조건부로 전달
  • 규칙 생성: 아웃바운드 트래픽에 대한 규칙
  • VPC용 하이브리드 클라우드 DNS 구성을 위해 필요한 서비스 느낌?
  • 이와 관련해서 실습을 진행해볼 예정...(언젠가ㅎㅎ)

 

Application Recovery Controller

  • 준비 점검: 애플리케이션이 장애조치에 대해 얼마나 준비가 된 상태인지 볼 수 있음.
    • 1) 준비 상태: 복구 그룹의 전체 준비 상태는 그룹 내 리전이나 가용 영역의 리소스에 주의가 필요한지 알려줌
    • 2) 셀 및 중첩 셀: 셀은 하나의 리전이나 가용 영역의 애플리케이션 리소스를 나타내며 리소스 위치에 따라 정렬됨
    • 3) 리소스: ASG나 DDB 테이블과 같은 리소스는 별도의 리소스 세트로 그룹화됨

  • 라우팅 제어: 라우팅을 켜고 끄면서 복구가 잘 되는지 확인을 위한 것?
    • 1) Route 53 상태 확인과 통합
    • 2) Control panel: 하나의 애플리케이션에 대해 그룹화한 라우팅 컨트롤이 포함됨
    • 3) Routing control: 특정 애플리케이션 셀(리전/AZ)로의 트래픽 흐름을 켜거나 끌 수 있음
    • 4) Cluster: 5개 리전에 개별 API 엔드포인트가 있는 고가용성 데이터 영역

 

여기까지는 뭔가 Route 53의 기능 소개 정도, 다음 내용부턴 좀 실용적인(?) 내용을 다뤄볼까 한다.


일단 AWS에 나는 'realyun99.com' 도메인을 등록한 상태이다.

(.com 기준으로 1년에 12달러이다.)

Route 53의 '등록된 도메인' 메뉴에 들어가면 등록 및 리스트를 확인할 수 있다. 해당 등록은 DNS가 AWS로 진행된다.

 

메뉴의 '호스팅 영역'에 들어가보면 등록된 도메인들이 나오고 해당 도메인을 클릭해보면 레코드를 생성할 수 있는 화면이 나온다.

  • 호스팅 영역: 레코드의 컨테이너(퍼블릭 / 프라이빗)
    • 퍼블릭 호스팅 영역: 인터넷에서 트래픽을 라우팅하고자 하는 방법을 지정하는 레코드를 포함
    • 프라이빗 호스팅 영역: Amazon VPC에서 트래픽을 라우팅하고자 하는 방법을 지정하는 레코드를 포함
  • 레코드: 특정 도메인과 그 하위 도메인의 트래픽을 라우팅하는 방식에 대한 정보

 

지금은 단순하게 뭐 CloudFront 배포나 EC2 배포, ELB 배포 등 과 같이 AWS 서비스 배포를 위한 레코드를 생성을 하는 방법을 소개하려고 한다.

레코드 생성을 클릭하고 '단순 라우팅' 정책을 선택한 뒤 '단순 레코드 정의' 를 클릭하자.

그러면 기본적으로 레코드 유형A로 되어 있을 것이다.(레코드 유형은 뒤에서 간단하게 소개하겠다.)

값/트래픽 대상의 경우

이와 같이 원하는 AWS 리소스를 선택하거나 IP 주소를 직접 입력할 수 있다. 이후에 선택했던 리소스로 돌아가 대체 도메인과 인증서를 등록해주면 된다. 

 

인증서 등록 방법을 간단히 봐보자.(HTTPS를 위해선 필요하다!)

인터넷에 배포를 위해선 ACM(AWS Certificate Manager) 서비스를 활용해보자. 퍼블릭 인증서를 요청할 것이다.

배포할 도메인 이름을 넣고 보통 DNS 검증으로 많이 사용한다.

(*.realyun99.com의 경우 앞에 *는 어떤 문자나 사용할 수 있도록..)

생성을 누르고 인증서 보기를 클릭하면,

검증 대기중을 확인할 수 있다. 이를 Route 53에서 레코드 생성을 해야 인증서 등록에 성공한다!

 

  • DNS 레코드 유형
    • A : 정규화된 도메인 이름/호스트명을 IPv4에 연결한다.(도메인 이름 → ip 주소)
    • AAAA: 호스트를 IPv6에 연결한다.(도메인 이름 →  IPv6)
    • CNAME: 실제 호스트명(A 레코드)과 연결되는 별칭, 별명을 정의한다.
    • MX: 메일 서버에 도달할 수 있는 라우팅 정보(메일 서버)를 제공한다.
    • SRV: 비슷한 TCP/IP 서비스를 제공하는 다수의 서버 위치 정보를 제공한다.
    • PTR: 다른 DNS 레코드를 가리킴, 역방향 조회에서 A 레코드를 가리킬 때 사용한다.(IP 주소 → 도메인 이름)
    • SOA: DNS 영역의 주 DNS 서버를 정의하며 일련번호를 통해 영역의 변경사항을 기록한다. 보조영역의 새로고침 및 다시시도 간격 등을 정의, 영역의 기본 TTL 값을 정의한다.
    • NS: 영역을 풀이할 수 있는 DNS 서버의 목록을 가지고 있다.

 

정리를 해보자면!

1. 호스팅 영역 생성

2. 레코드 생성

3. 인증서 발급

4. 해당 AWS 서비스로 돌아가 대체 도메인 등록과 인증서 등록

(CloudFront의 경우 인증서는 버지니아 북부에 있어야한다..)

https://realyun99.tistory.com/134 를 참고하라..

 

 

❗ 해봐야할 실습 정리 ❗

1. 외부 dns 도메인 AWS 리소스와 연결하기

2. AWS 리소스 엔드포인트, ip를 외부 dns로 연결하기

3. Route 53 Resolver, Application Recovery Controller 사용해보기

'Cloud > AWS' 카테고리의 다른 글

[AWS] 데이터 전송 비용  (0) 2022.09.21
[AWS] Route 53 실습 -1(외부 도메인을 Route53에 연결하기)  (0) 2022.09.20
[AWS] ECS Task Network Mode  (0) 2022.09.19
[AWS] Cloud9 - Github 연동  (0) 2022.09.16
[AWS] ECS 실습 -2(ECS 구축)  (0) 2022.09.15

+ Recent posts