이 블로그 에서 코드 샘플을 통해 몇 가지 서버리스 개념을 설명했습니다:
- AWS Lambda 및 Java를 사용한 서버리스 FaaS
- AWS IoT Button, 람다 및 카우치베이스
- AWS API 게이트웨이, AWS Lambda 및 Couchbase를 사용한 마이크로서비스
- AWS 서버리스 애플리케이션 모델과 카우치베이스를 사용한 마이크로서비스
이 특정 블로그 항목에서는 AWS Lambda를 사용하여 트위터 사용자의 트윗을 다음 위치에 저장하는 방법을 보여줍니다. 카우치베이스. 다음은 높은 수준의 구성 요소입니다:
핵심 개념은 다음과 같습니다:
- 다음을 사용하여 배포된 람다 함수 서버리스 애플리케이션 모델
- 다음을 사용하여 3시간마다 트리거됨 예약된 이벤트
- 용도 Twitter4J 마지막 가져오기 이후 새 트윗을 쿼리하는 API
- 사용 카우치베이스 자바 SDK API 를 사용하여 JSON 문서를 카우치베이스 서버
이 블로그의 전체 샘플 코드는 다음 링크에서 확인할 수 있습니다. github.com/arun-gupta/twitter-n1ql.
서버리스 애플리케이션 모델
서버리스 애플리케이션 모델또는 SAM은 서버리스 리소스를 표현하기 위한 간소화된 구문을 정의합니다. SAM은 다음을 확장합니다. AWS 클라우드포메이션 에
API 게이트웨이, AWS Lambda 및 Amazon DynamoDB에 대한 지원을 추가합니다. 자세한 내용은 AWS 서버리스 애플리케이션 모델과 카우치베이스를 사용한 마이크로서비스.
애플리케이션의 경우 SAM 템플릿은 다음에서 사용할 수 있습니다. github.com/arun-gupta/twitter-n1ql/blob/master/template-example.yml 를 클릭하고 아래와 같이 표시합니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
AWSTemplateFormatVersion : '2010-09-09' 변환: AWS::서버리스-2016-10-31 설명: 트위터 피드 분석 사용 카우치베이스/N1QL 리소스: 트럼프피드: 유형: AWS::서버리스::기능 속성: 핸들러: org.샘플.트위터.트위터 요청 핸들러 런타임: java8 CodeUri: s3://arungupta.me/twitter-feed-1.0-SNAPSHOT.jar 시간 초과: 30 메모리 크기: 1024 환경: 변수: COUCHBASE_HOST: 카우치베이스_버킷_비밀번호: 역할: arn:aws:iam::598307997273:역할/마이크로서비스 역할 이벤트: 타이머: 유형: 일정 속성: 일정: rate(3 시간) |
여기서 무엇을 볼 수 있을까요?
- 기능이 패키지화되어 S3 버킷으로 제공됩니다.
- 핸들러 클래스는
org.sample.twittter.TwitterRequestHandler
에 있으며 github.com/arun-gupta/twitter-n1ql/blob/master/twitter-feed/src/main/java/org/sample/twitter/TwitterRequestHandler.java.
그런 것 같습니다:
12345678910111213public 클래스 트위터 요청 핸들러 구현 요청 핸들러<요청, 문자열> {@오버라이드public 문자열 핸들 요청(요청 요청, 컨텍스트 컨텍스트) {만약 (요청.getName() == null)요청.setName("realDonaldTrump");int 트윗 = new 트위터피드().readFeed(요청.getName());반환 "업데이트됨 " + 트윗 + " 트윗 + 요청.getName() + "!";}}
기본적으로 이 클래스는 다음과 같은 트위터 핸들을 읽습니다. 도널드 트럼프. 이에 대한 자세한 내용은 다음 블로그에서 더 자세히 다룰 예정입니다. COUCHBASE_HOST
그리고카우치베이스_버킷_비밀번호
는 카우치베이스 데이터베이스가 실행되는 EC2 호스트와 버킷의 비밀번호를 제공하는 환경 변수입니다.- 기능은 다양한 이벤트에 의해 트리거될 수 있습니다. 저희의 경우 3시간마다 트리거됩니다. 여기에 사용된 표현식에 대한 자세한 내용은 Rate 또는 Cron을 사용한 스케줄 표현식.
트위터4J를 사용하여 트윗 가져오기
트윗은 다음을 사용하여 읽습니다. Twitter4J API를 사용합니다. 비공식 트위터 API로, 다음과 같은 Java 추상화를 제공합니다. 트위터 REST API. 다음은 간단한 예입니다:
1 2 3 |
트위터 트위터 = getTwitter(); 페이징 페이징 = new 페이징(페이지, 카운트, sinceId); 목록 목록 = 트위터.사용자 타임라인 가져오기(사용자, 페이징); |
트위터4J 문서 그리고 자바독스 는 매우 포괄적입니다. 트위터 API는 최근 200개의 트윗만 읽을 수 있습니다. 람다 함수는 3시간마다 호출됩니다.
트윗 빈도 리얼도널드트럼프 는 적어도 아직 3시간마다 200은 아닙니다. 위험한 수준에 도달하면 람다 기능을 더 자주 트리거하도록 속도를 조정할 수 있습니다.
각 트윗의 JSON 표현은 다음을 사용하여 Couchbase 서버에 저장됩니다. 카우치베이스 자바 SDK. AWS Lambda는 Node, Python 및 C#를 지원합니다. 그래서
를 사용할 수 있습니다. 카우치베이스 노드 SDK, 카우치베이스 파이썬 SDK 또는
카우치베이스 .NET SDK 를 사용하여 이러한 함수를 작성할 수도 있습니다. 트위터4J API를 사용하면 특정 트윗의 아이디부터 트윗을 가져올 수 있습니다. 이를 통해 다음을 수행할 수 있습니다.
중복 트윗이 가져오지 않도록 합니다. 이를 위해서는 모든 트윗을 특정 순서로 정렬한 다음 가장 최근 트윗의 아이디를 선택해야 합니다. 이 문제는 간단한 N1QL 쿼리:
1 |
선택 id FROM 트위터 주문 BY id DESC LIMIT 1 |
구문은 매우 SQL과 유사합니다. 이에 대한 자세한 내용은 다음 블로그에서 확인할 수 있습니다.
카우치베이스에 트윗 저장하기
마지막 항목은 검색된 트윗을 카우치베이스에 저장하는 것입니다. 의 값 COUCHABSE_HOST
환경 변수를 사용하여 카우치베이스 인스턴스에 연결합니다. 환경 변수의 값은 카우치베이스_버킷_비밀번호
환경 변수
는 모든 JSON 문서가 저장된 보안 버킷에 연결하는 것입니다. 버킷을 비밀번호로 보호하고 소스 코드에 직접 지정하지 않는 것이 매우 중요합니다. 이에 대한 자세한 내용은 다음 블로그에서 확인할 수 있습니다. JSON 문서
는 Couchbase Java API를 사용하여 Couchbase에서 업서트(삽입 또는 업데이트)됩니다:
1 |
버킷.업서트(jsonDocument); |
이 람다 함수는 현재 며칠 동안 실행되고 있으며 다음에서 258개의 트윗을 캡처했습니다. 리얼도널드트럼프.
그의 트윗에 대한 흥미로운 분석이 곧 공개될 예정입니다!
문의하세요:
이 블로그의 전체 샘플 코드는 다음 링크에서 확인할 수 있습니다. github.com/arun-gupta/twitter-n1ql.