본문 바로가기
카테고리 없음

클라우드 데이터 파이프라인 - (2) Api-GW, Kinesis, S3

by 16비트 2023. 5. 31.

2주차 실습

API-GW

Kinesis Stream은 샤드만 늘리면 병렬처리할 수 있다

Kinesis Firehose 버퍼 역할

 

저장 아키텍처 설계 방식

  • 저장용량무제한이다 (S3 사용)
  • 요청에 의한 데이터 파이프라인을 쉽게 구성 데이터 수집 저장이 가능함.
  • 요청이 많아져도 Kinesis Stream 의 shard 조정만으로 빠른 scalability 처리.
  • 데이터 유실에 대한 Kinesis Stream 에서 기본적으로 24시간의 데이터보존기능
  • S3 에 반 정형화된 JSON 형식의 데이터로 저장하므로 가변적 값의 데이터 수집(Query Parameter값이 변화에 대해서)에 대한 유연한 분석이 가능.
  • Server!ess 의 운영비용 감소

 

실습 구성도

EC2에서 발생한 데이터를 API Gateway-Kinesis Streams-Kinesis Firehose-S3에 저장

 

API-GW 생성

 

 

v1에 HTTP의 POST 메서드로 데이터를 받을 것

들어온 데이터를 AWS 서비스의 Kinesis로 보낸다

작업 'Put Record'    // 하나의 레토드가 들어오면 하나를 넘겨주는 명령어. API에서 Kinesis로 데이터를 넘길 때 약속된 명령어

실행 역할 '    // 서비스들도 권한 없이 실행을 요청할 수 없다. IAM을 생성해줘야한다

IAM 콘솔로 넘어가서 먼저 역할부터 만들어주자

생성한 IAM 역할에 Kinesis 정책 연결하기

 

다시 API-GW 콘솔로 돌아와서 붙여넣기

메시지가 왔을 때 메시지를 어떻게 처리할 것인지 통합 요청을 작업해줘야한다. 

 

어떤 타입인지 HTTP 헤더에 쓰기. Amazon JSON형태이다

매핑 템플릿은 컨텐츠에 대한 데이터 형태. JSON이다

Content-Type - 'application/x-amz-json-1.1'

 

큐에 데이터가 들어왔을 때 엔터값을 넣지 않으면 다음 row로 넘어가지 않아서 넣어줬다

들어오는 JSON 형태의 데이터를 받아서 Kinesis에게 넘기는 방식.

base64로 인코딩한다. 하는 이유는 데이터에는 특수 문자도 많기 때문에 문장이 짤릴 수 있어서 인코딩해준다

파티션 키는 샤드가 순서대로 처리되지 않을 수 있을 때 Kinesis가 샤드에 시퀀스 넘버를 넣어주면서 순서대로 처리하게 함

어느 스

#set ( $enter = "
")
#set($json = "$input.json('$')$enter")
{
    "Data": "$util.base64Encode("$json")",
    "PartitionKey": "$input.params('X-Amzn-Trace-Id')",
    "StreamName": "class-stream"
}

 

CloudWatch 로그에 대한 쓰기 액세스 권한도 등록해줘야한다

 

 

대외 서비스이기 때문에 배포를 해야한다

배포하면 외부에서 접속할 때 엔드포인트가 나온다

'조절 활성화' 옵션을 체크하면 DDoS 공격같은걸 인지해서 접속을 차단해버린다. 실제 서비스를 운영할 때는 옵션을 체크 해제해줘야 한다

 

curl 테스트할 때 사용할 POST 엔드포인트

curl -d "{\"value\":\"30\",\"type\":\"Tip 3\"}" -H "Content-Type: application/json" -X POST https://15zlyvb865.execute-api.ap-northeast-2.amazonaws.com/PROD/v1

 

API에 대한 로그가 CloudWatch로 나오게 된다. 

CloudWatch에 대한 권한을 부여해줘야함

아까 API-GW IAM 역할을 생성하면서 default로 CloudWatch 역할이 추가된다.

CloudWatch에 대한 권한을 API-GW에 붙여넣기

오류 원인 - 역할에 두 가지의 정책을 넣어서 Cross-account pass role 허용되지 않음

 

Kinesis 역할과 CloudWatch 역할을 따로따로 만들어줘야함...

다시 CloudWatch와 연결하면 된다

 

Kinesis Streams 생성하기

 

Kinesis Firehose 생성하기

 

파케이 ORC 빅데이터용의 압축 데이터 형식. 대량의 데이터를 읽기 편함

파케이는 라이브러리 없이도 쓸 수 있어서 많이 사용한다

Firehose가 S3에 저장할 때 IAM을 AWS가 자동으로 만들어준다.

 

실습 테스트

 

EC2 하나 만들기

SSH 접속

 

외부에서 AWS 서비스를 연결시켜줘야함

데이터를 쏘는 명령

curl -d "{\"value\":\"30\",\"type\":\"Tip 3\"}" -H "Content-Type: application/json" -X POST https://15zlyvb865.execute-api.ap-northeast-2.amazonaws.com/PROD/v1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글