API 및 Lambda 증폭

2 부



좋습니다. 이제 DynamoDB 테이블로 데이터 스트리밍이 생겼는데 어떻게 사용합니까? 다른 사람들이 이 동일한 데이터에 액세스할 수 있도록 허용하려면 어떻게 해야 합니까? 애플리케이션의 프런트 엔드에서 최신 가격을 표시할 수 있습니다.

AppSync.



여기에서 앱 동기화가 시작됩니다. 사용자가 이 표를 검색하여 최신 가격을 얻을 수 있기를 바랍니다.

VScode로 돌아가서...

이제 amplify add api를 실행합니다.

amplify add api



? Please select from one of the below mentioned services: GraphQL
? Provide API name: marketdataapi
? Choose the default authorization type for the API API key
? Enter a description for the API key: thisisatestapikeyformarketdata
? After how many days from now the API key should expire (1-365): 30
? Do you want to configure advanced settings for the GraphQL API No, I am done.
? Do you have an annotated GraphQL schema? No
? Choose a schema template: Single object with fields (e.g., “Todo” with ID, name, description)
? Do you want to edit the schema now? Yes


이제 schema.graphql이라는 파일이 열려 있어야 합니다. 처음에는 다음과 같이 보일 것입니다.

type Todo @model {
  id: ID!
  name: String!
  description: String
}


이제 테이블 스키마를 포함하도록 업데이트합니다.

type Company @model {
  id: ID!
  symbol: String
  name: String
  price: String
  daily_change: String
  yearly_change: String
  marketcap: String
  timestamp: String
}


이번에는 API를 생성하고 일부 쿼리 구독 및 변형이 포함된 graphql이라는 새 폴더도 생성합니다.

이것이 작동하는지 테스트하기 위해 콘솔에 로그인하고 새로 생성된 테이블에 항목을 생성해 보겠습니다.
Amplify는 끝에 문자열을 추가하여 이 테이블이 마지막 테이블과 다르게 보이도록 합니다.



앱 동기화 콘솔을 엽니다.



Explorer를 query에서 Mutation으로 변경하고 + 버튼을 클릭합니다.

이제 3가지 옵션이 표시됩니다.
회사를 만들다
회사 삭제
업데이트 회사

새로운 변형에 이것을 입력하십시오

mutation MyMutation {
  createCompany(
    input: {
      daily_change: "10%"
      id: "123"
      marketcap: "145 B"
      name: "MarketData Company"
      price: "$8.00"
      symbol: "MDC"
      timestamp: "2021-03-16T08:55:21.827Z"
      yearly_change: "300%"
    }
  ) {
    createdAt
    id
    daily_change
    marketcap
    name
    price
    symbol
    timestamp
    updatedAt
    yearly_change
  }
}


실행을 클릭하면 다음 JSON이 반환되는 것을 볼 수 있습니다.

{
  "data": {
    "createCompany": {
      "createdAt": "2021-03-17T04:37:21.519Z",
      "id": "123",
      "daily_change": "10%",
      "marketcap": "145 B",
      "name": "MarketData Company",
      "price": "$8.00",
      "symbol": "MDC",
      "timestamp": "2021-03-16T08:55:21.827Z",
      "updatedAt": "2021-03-17T04:37:21.519Z",
      "yearly_change": "300%"
    }
  }
}


이제 DynamoDB 테이블에 1개의 새 항목이 있어야 합니다.

항목 가져오기를 수행하려면 방금 만든 레코드를 반환하는 쿼리getCompany(id: "123")만 수행하면 됩니다.
또는 listCompanys 테이블의 모든 회사 목록을 반환합니다.

이제 몇 가지 다른 필드가 있으며 새 테이블에 쓰기 위해 람다 함수를 전환해야 합니다.

{
  "__typename": "Company",
  "createdAt": "2021-03-17T04:37:21.519Z",
  "updatedAt": "2021-03-17T04:37:21.519Z"
}


이들은 다른 람다 전용 테이블에서 제외된 3개의 필드입니다. 이제 다른 함수를 업데이트하고 포함할 수 있습니다.

이제 개봉합니다amplify/backend/function/addMarketDatatoDb/src/index.js
테이블 및 항목 업데이트

TableName: "Company-xpssoal4fbaadbdtx3urmue33m-dev", // UPDATE THIS WITH THE ACTUAL NAME OF THE FORM TABLE ENV VAR (set by Amplify CLI)
    Item: {
      "__typename": "Company",
      "createdAt": timestamp,
      "updatedAt": timestamp,
      id: context.awsRequestId,
      timestamp: timestamp,
      ...parsedBody,
    },


amplify push를 다시 실행하여 람다 함수를 업데이트합니다.

amplify push --y


이제 함수를 업데이트해야 합니다. DynamoDB에 대한 액세스를 허용하도록 함수를 업데이트해야 합니다. 생성된 IAM 역할로 이동하여 DynamoDB에 대한 액세스 권한을 부여하거나 잠그려면 ARN과 dynamodb:putItem만 포함하면 됩니다. 봐

Lambda를 다시 열고 테스트로 이동하여 marketdataPuppeteer-dev 함수를 다시 호출합니다.

이제 회사 테이블을 확인하면 10개의 새 항목이 있어야 합니다!



잘 작동합니다. 이제 AppSync에서 목록 항목 쿼리를 실행하겠습니다.

콘솔 창에서 실행

query MyQuery {
  listCompanys {
    items {
      id
      createdAt
      daily_change
      marketcap
      name
      price
      symbol
      timestamp
      updatedAt
      yearly_change
    }
  }
}


이제 테이블의 모든 항목에 대한 json 목록을 가져와야 합니다!

{
  "data": {
    "listCompanys": {
      "items": [
        {
          "id": "85cb6706-6be8-562d-9bb1-3fcdf98cef44",
          "createdAt": "2021-03-17T05:14:12.777Z",
          "daily_change": "-0.05%",
          "marketcap": "$63.15 B",
          "name": "FMG Fortescue Metals Group Ltd",
          "price": "$20.51",
          "symbol": "FMG",
          "timestamp": "2021-03-17T05:14:12.777Z",
          "updatedAt": "2021-03-17T05:14:12.777Z",
          "yearly_change": "+91.86%"
        },
        {
          "id": "65a4e33a-5030-5ca3-a8a0-bbf1c2548bb0",
          "createdAt": "2021-03-17T05:14:12.646Z",
          "daily_change": "-0.32%",
          "marketcap": "$154.17 B",
          "name": "CBA Commonwealth Bank of Australia",
          "price": "$86.90",
          "symbol": "CBA",
          "timestamp": "2021-03-17T05:14:12.646Z",
          "updatedAt": "2021-03-17T05:14:12.646Z",
          "yearly_change": "+28.47%"
        },
        etc...
      ]
    }
  }
}


이제 Appsync를 통해 데이터를 가져올 수 있고 백엔드가 완료되었으며 프런트 엔드에서 사용하도록 모두 설정되었습니다.

좋은 웹페이지 즐겨찾기