클라이언트 측 변이를 통해 수행되지 않은 외부 데이터베이스 업데이트를 AWS AppSync 구독자에게 알리려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2021년 10월 6일

클라이언트 측 변이를 통해 수행되지 않는 외부 데이터베이스 변경이 이루어지면 실시간으로 앱 클라이언트를 업데이트해야합니다. AWS AppSync를 사용하여 구독자에게 이러한 변경 사항을 알리려면 어떻게 해야 합니까?

간략한 설명

로컬 확인자를 사용하여 데이터 원본을 호출할 필요 없이 실시간으로 외부 데이터베이스 변경 사항을 구독자에게 알립니다.

다음 지침에 따라 Amazon DynamoDB 테이블 데이터 원본에 데이터가 작성될 때 구독자를 실시간으로 업데이트하는 예제 GraphQL API를 생성합니다.

참고: 로컬 확인자를 사용하면 구독자가 실시간 데이터를 필요로 할 때 유용할 수 있습니다. 예를 들어, 로컬 확인자는 최근 요금 및 비행 시간으로 정기적으로 업데이트해야 하는 항공사 앱에 유용합니다.

해결 방법

마법사를 사용하여 GraphQL API 생성

AWS AppSync 안내 스키마 마법사를 사용하여 새 GraphQL API를 생성합니다. 자세한 내용은 GraphQL API 설계를 참조하십시오.

1.    AWS AppSync 콘솔을 엽니다.

2.    [API 생성]을 선택합니다.

3.    [Getting Started(시작하기)] 페이지의 [Customize your API or import from Amazon DynamoDB(API 사용자 지정 또는 Amazon DynamoDB에서 가져오기)]에서 [Create with wizard(마법사로 생성)]를 선택한 다음 [Start(시작)]를 선택합니다.

4.    [Create a model(모델 만들기)] 페이지에서 다음을 수행합니다.
[Name the model(모델 이름 지정)]에서 모델 이름을 입력할 수 있습니다. 이 예제 설정의 경우 모델 이름(MyModelType)을 변경하지 않고 그대로 둡니다.
[Configure model fields(모델 필드 구성)]에서 앱의 데이터 형식을 정의할 수 있습니다. 이 예제 설정의 경우 기본 필드 이름(idtitle)과 유형을 변경하지 않고 그대로 둡니다.
(선택 사항) [Configure model table(optional)(모델 테이블 구성(선택 사항))]을 확장하여 인덱스를 추가합니다.
[생성(Create)</t1>]을 선택합니다.

5.    [Create resources(리소스 생성)] 페이지에서 API 이름을 입력한 다음 [Create(생성)]를 선택합니다. AWS AppSync는 지정된 대로 API를 생성하고 API의 [쿼리(Queries)] 페이지를 엽니다.

테스트 구독 생성

1.    AWS AppSync 콘솔에서 API의 [Queries(쿼리)] 페이지에서 복제 브라우저 탭 또는 창을 엽니다.

2.    복제 브라우저 탭 또는 창의 쿼리 편집기에서 다음을 입력합니다.

subscription sub1 {
  onCreateMyModelType{
    id
    title
  }
}

이 작업은 createMyModelType 변형에 대한 구독을 생성합니다.

3.    재생 버튼(Execute Query(쿼리 실행))을 선택한 다음 sub1을 선택합니다. 복제 브라우저 탭 또는 창이 변형을 구독합니다.

4.    원래 브라우저 탭 또는 창에서 재생 버튼(쿼리 실행)을 선택한 다음 [createMyModelType]을 선택합니다. 이것은 변이를 일으켰습니다. 원본 및 복제(구독) 브라우저 탭 또는 창에서 결과를 볼 수 있습니다.

5.    구독 동작이 표시된 후 중복 브라우저 탭 또는 창을 닫습니다.

None 유형 데이터 원본 생성

None 데이터 원본 유형은 요청 매핑 템플릿응답 매핑 템플릿으로 직접 전달합니다.

1.    원래 브라우저 탭 또는 창의 AWS AppSync 콘솔의 왼쪽 탐색 창에서 [Data Sources(데이터 원본)]를 선택합니다.

2.    [Create Data Source(데이터 원본 생성)]를 선택합니다.

3.    [New Data Source(새 데이터 원본)] 페이지의 [Create new Data Source(새 데이터 원본 생성)]에서 다음을 수행합니다.
[Data source name(데이터 원본 이름)]에 이름을 입력합니다. 예를 들어 real_time_data입니다.
[Data source type(데이터 원본 유형)]에서 [None(없음)]을 선택합니다.

4.    [생성(Create)</t1>]을 선택합니다.

자세한 내용은 데이터 원본 연결을 참조하세요.

스키마에 변형 추가

데이터베이스 업데이트를 [없음(None)] 유형 데이터 원본으로 전달하는 변형을 통해 스키마를 업데이트합니다.

1.    AWS AppSync 콘솔의 왼쪽 탐색 창에서 [Schema(스키마)]를 선택합니다.

2.    스키마 편집기의 type Mutation {에서 다음을

createMyModelType(input: CreateMyModelTypeInput!): MyModelType

다음으로 덮어 씁니다.

addMyModelType(id : ID! , title : String!): MyModelType

3.    스키마 편집기의 type Subscription {에서 다음을

@aws_subscribe(mutations: ["createMyModelType"])

다음으로 덮어 씁니다.

@aws_subscribe(mutations: ["addMyModelType"])

참고: 이러한 변형 유형을 덮어쓰는 대신 새 변형 유형과 해당 구독을 생성할 수도 있습니다.

4.    [스키마 저장(Save Schema)]을 선택합니다.

자세한 내용은 스키마 설계를 참조하세요.

구독에 확인자 연결

1.    AWS AppSync 콘솔에서 API의 Schema(스키마) 페이지에 있는 Resolvers(확인자)에서 Mutation(변형)까지 스크롤 다운합니다. 또는 [Filter types(필터 유형)]에서 Mutation을 입력합니다.

2.    addMyModelType(...): MyModelType 옆의 [Resolver(확인자)]에서 [Attach(연결)]를 선택합니다.

3.    [Create new Resolver(새 확인자 생성)] 페이지의 [Data source name(데이터 원본 이름)]에서 이전에 생성한 None 유형 데이터 원본의 이름을 선택합니다. (예: real_time_data)

4.    [요청 매핑 템플릿 구성(Configure the request mapping template)]에서 다음을

"payload": {
    "hello": "local",
}

다음으로 덮어 씁니다.

"payload": $util.toJson($context.args)

4.    [확인자 저장(Save Resolver)]을 선택합니다.

자세한 내용은 확인자 구성을 참조하세요.

새 테스트 구독 생성

1.    AWS AppSync 콘솔의 왼쪽 탐색 창에서 [Queries(쿼리)]를 선택합니다.

2.    API의 [Queries(쿼리)] 페이지에서 복제 브라우저 탭 또는 창을 엽니다.

3.    복제 브라우저 탭 또는 창의 쿼리 편집기에서 다음을

mutation createMyModelType($createmymodeltypeinput: CreateMyModelTypeInput!) {
  createMyModelType(input: $createmymodeltypeinput) {
    id
    title
  }
}

다음으로 덮어 씁니다.

subscription sub1 {
  onCreateMyModelType{
    id
    title
  }
}

4.    재생 버튼(Execute Query(쿼리 실행))을 선택한 다음 sub2를 선택합니다. 복제 브라우저 탭 또는 창이 변형을 구독합니다.

새 테스트 변형 생성

1.    원래 브라우저 탭 또는 창에 있는 API의 [쿼리(Queries)] 페이지에 있는 쿼리 편집기에서 다음을

mutation createMyModelType($createmymodeltypeinput: CreateMyModelTypeInput!) {
  createMyModelType(input: $createmymodeltypeinput) {
    id
    title
  }
}

다음으로 덮어 씁니다.

mutation mutation1 {
  addMyModelType(id:"5",title:"new update"){
    id
    title
  }
}

이 작업은 addMyModelType 변형을 생성합니다.

2.    재생 버튼(Execute Query(쿼리 실행))을 선택한 다음 mutation1을 선택합니다.

3.    복제(구독) 브라우저 탭 또는 창에서 구독자가 업데이트를 실시간으로 수신하는지 확인합니다.

(선택 사항) 예제 사용 사례 참조

클라이언트 앱을 구축하고 이러한 개념을 적용할 때 요금 및 항공편 시간을 제공하는 항공사 앱의 예제 사용 사례를 고려합니다. 이 경우 DynamoDB 테이블에서 항공편 세부 정보가 변경될 때 구독 클라이언트에 알리려면 다음을 수행합니다.

1.    DynamoDB 스트림을 트리거로 사용하는 AWS Lambda 함수를 생성합니다. DynamoDB 테이블에 대한 업데이트가 있을 때마다 Lambda 함수가 호출됩니다. 자세한 내용은 Amazon DynamoDB에서 AWS Lambda 사용을 참조하세요.

2.    Lambda 함수 코드에 적절한 업데이트를 필터링하고 AWS AppSync에 대한 변형 호출을 수행하는 로직을 포함합니다. 그러면 AWS AppSync가 구독을 통해 구독자에게 알립니다. 자세한 내용은 자습서: AWS Lambda 확인자를 참조하세요.

3.    AWS AppSync에서 로컬 확인자를 사용하여 새 변형 필드(예: publishPrice라는 이름)를 추가합니다.

4.    구독 필드(예: onPriceUpdate라는 이름)에서 해당 변형을 구독합니다.

예제 스키마

type flightDetails {
  id: ID!
  src: String!
  destn: String!
  price : Int
}

type Mutation {
   # A local resolver targeting a None data source that publishes the message to subscribed clients.
  publishPrice(price: Int): flightDetails
}

type Subscription {
  # Notified whenever *publishPrice* is called.
  onPriceUpdate: Message
    @aws_subscribe(mutations: ["publishPrice"])
}

type Query { ... }

자세한 내용은 스키마 설계를 참조하세요.

5.    DynamoDB 스트림을 트리거로 사용하는 다른 AWS Lambda 함수를 생성합니다. 이 함수에서 publishPrice 변형을 호출합니다. publishPrice 변형에는 로컬 확인자가 있으므로 데이터가 DynamoDB에 다시 기록되지 않습니다. 이러한 방식으로 AWS AppSync를 PubSub 브로커로 사용할 수 있습니다.

자세한 내용과 다른 예제 사용 사례는 자습서: 로컬 화인자를 참조하세요.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?