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

최종 업데이트 날짜: 2020년 2월 27일

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

간략한 설명

로컬 확인자를 사용하여 데이터 원본 호출을 트리거할 필요 없이 외부 데이터베이스 변경 사항을 구독자에게 즉시 알립니다. 이 기능은 구독자가 최신 요금 및 항공편 시간이 필요한 항공사 앱과 같이 실시간 데이터를 필요로 하는 경우에 유용합니다.

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

해결 방법

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

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

1.    AWS AppSync 콘솔을 엽니다.

2.    [Create API(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(생성)]을 선택하십시오.

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.    원래 브라우저 탭 또는 창에서 재생 버튼(Execute Query(쿼리 실행))을 선택한 다음 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(생성)]을 선택하십시오.

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

스키마에 변형 추가

데이터베이스 업데이트를 [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 브로커로 사용할 수 있습니다.

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


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?