(JavaScript)에서 AWS AppSync 해석기 테스트 및 디버깅 - AWS AppSync

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

(JavaScript)에서 AWS AppSync 해석기 테스트 및 디버깅

AWS AppSync 는 데이터 소스에 대해 GraphQL 필드에서 해석기를 실행합니다. 파이프라인 해석기로 작업할 때 함수는 데이터 소스와 상호 작용합니다. JavaScript 해석기 개요 에 설명된 대로 함수는 APPSYNC_JS 런타임에 작성되고 실행 중인 요청 및 응답 핸들러를 사용하여 데이터 소스 JavaScript 와 통신합니다. 이를 통해 데이터 소스와 통신하기 전과 후에 사용자 지정 로직 및 조건을 제공할 수 있습니다.

개발자가 이러한 해석기를 작성, 테스트 및 디버깅할 수 있도록 AWS AppSync 콘솔은 모의 데이터를 사용하여 GraphQL 요청 및 응답을 개별 필드 해석기로 생성하는 도구도 제공합니다. 또한 AWS AppSync 콘솔에서 쿼리, 돌연변이 및 구독을 수행하고 Amazon 에서 전체 요청의 자세한 로그 스트림을 볼 수 있습니다 CloudWatch. 여기에는 데이터 소스의 결과가 포함됩니다.

모의 데이터를 사용하여 테스트

GraphQL 해석기가 호출되는 경우 이 해석기에는 요청에 대한 관련 정보를 포함하는 context 객체가 들어 있습니다. 여기에는 클라이언트의 인수, 자격 증명 정보 및 상위 GraphQL 필드의 데이터가 포함됩니다. 또한 데이터 소스의 결과를 저장하며, 이러한 결과는 응답 핸들러에서 사용할 수 있습니다. 이 구조와 프로그래밍 시 사용할 수 있는 헬퍼 유틸리티에 대한 자세한 내용은 해석기 컨텍스트 객체 참조 단원을 참조하세요.

해석기 함수를 작성하거나 편집할 때 mock 또는 test context 객체를 콘솔 편집기로 전달할 수 있습니다. 이렇게 하면 데이터 원본에 대해 실행하지 않고도 요청과 응답 핸들러가 어떻게 평가되는지 알아볼 수 있습니다. 예를 들면 테스트 firstname: Shaggy 인수를 전달하고 템플릿 코드에서 ctx.args.firstname을 사용하면 이 인수가 어떻게 평가되는지 볼 수 있습니다. 또한 util.autoId() 또는 util.time.nowISO8601() 같은 유틸리티 헬퍼의 평가도 테스트할 수 있습니다.

해석기 테스트

이 예제에서는 AWS AppSync 콘솔을 사용하여 해석기를 테스트합니다.

  1. 에 로그인 AWS Management Console 하고 AppSync 콘솔 을 엽니다.

    1. APIs 대시보드 에서 GraphQL 을 선택합니다API.

    2. 사이드바에서 함수를 선택합니다.

  2. 기존 함수를 선택합니다.

  3. 함수 업데이트 페이지 상단에서 테스트 컨텍스트 선택을 선택한 다음 새 컨텍스트 생성을 선택합니다.

  4. 아래 테스트 컨텍스트 구성 창에서 샘플 컨텍스트 객체를 선택하거나 를 JSON 수동으로 채웁니다.

  5. 텍스트 컨텍스트 이름을 입력합니다.

  6. 저장 버튼을 선택합니다.

  7. 이 모의 컨텍스트 객체를 사용하여 해석기를 평가하려면 테스트 실행을 선택합니다.

보다 실용적인 예로, 객체에 대한 자동 ID 생성을 사용하고 이를 Amazon DynamoDB에 저장하는 Dog의 GraphQL 유형을 저장하는 앱이 있다고 가정해 보겠습니다. 또한 GraphQL 뮤테이션의 인수에서 일부 값을 작성하고 특정 사용자만 응답을 볼 수 있도록 허용하려고 합니다. 다음 코드 조각은 스키마의 모양을 보여줍니다.

type Dog { breed: String color: String } type Mutation { addDog(firstname: String, age: Int): Dog }

AWS AppSync 함수를 작성하여 addDog 해석기에 추가하여 돌연변이를 처리할 수 있습니다. AWS AppSync 함수를 테스트하려면 다음 예제와 같이 컨텍스트 객체를 채울 수 있습니다. 다음 객체에는 nameage 클라이언트의 인수와 identity 객체에 채워진 username이 있습니다.

{ "arguments" : { "firstname": "Shaggy", "age": 4 }, "source" : {}, "result" : { "breed" : "Miniature Schnauzer", "color" : "black_grey" }, "identity": { "sub" : "uuid", "issuer" : " https://cognito-idp.{region}.amazonaws.com/{userPoolId}", "username" : "Nadia", "claims" : { }, "sourceIp" :[ "x.x.x.x" ], "defaultAuthStrategy" : "ALLOW" } }

다음 코드를 사용하여 함수를 테스트할 수 있습니다 AWS AppSync.

import { util } from '@aws-appsync/utils'; export function request(ctx) { return { operation: 'PutItem', key: util.dynamodb.toMapValues({ id: util.autoId() }), attributeValues: util.dynamodb.toMapValues(ctx.args), }; } export function response(ctx) { if (ctx.identity.username === 'Nadia') { console.log("This request is allowed") return ctx.result; } util.unauthorized(); }

평가된 요청 및 응답 핸들러에는 테스트 컨텍스트 객체의 데이터와 util.autoId()에서 생성된 값이 포함됩니다. 또한, usernameNadia 이외의 값으로 변경해야 했다면 권한 부여 확인이 실패하므로 결과가 반환되지 않습니다. 세분화된 액세스 제어에 대한 자세한 내용은 권한 부여 사용 사례 단원을 참조하세요.

AWS AppSync를 사용하여 요청 및 응답 핸들러 테스트 APIs

EvaluateCode API 명령을 사용하여 모의 데이터로 코드를 원격으로 테스트할 수 있습니다. 명령어를 시작하려면 정책에 appsync:evaluateMappingCode 권한을 추가했는지 확인하세요. 예:

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "appsync:evaluateCode", "Resource": "arn:aws:appsync:<region>:<account>:*" } ] }

AWS CLI 또는 를 사용하여 명령을 활용할 수 있습니다AWS SDKs. 예를 들어 이전 섹션에서 Dog 스키마와 해당 AWS AppSync 함수 요청 및 응답 핸들러를 사용합니다. 로컬 스테이션CLI의 를 사용하여 코드를 라는 파일에 저장code.js한 다음 context 객체를 라는 파일에 저장합니다context.json. 쉘에서 다음 명령을 실행합니다.

$ aws appsync evaluate-code \ --code file://code.js \ --function response \ --context file://context.json \ --runtime name=APPSYNC_JS,runtimeVersion=1.0.0

응답에는 핸들러가 반환한 페이로드가 포함된 evaluationResult가 포함되어 있습니다. 또한 평가 중에 핸들러가 생성한 로그 목록이 들어 있는 logs 객체도 포함되어 있습니다. 이렇게 하면 코드 실행을 쉽게 디버깅하고 평가에 대한 정보를 확인하여 문제를 해결하는 데 도움이 됩니다. 예:

{ "evaluationResult": "{\"breed\":\"Miniature Schnauzer\",\"color\":\"black_grey\"}", "logs": [ "INFO - code.js:13:5: \"This request is allowed\"" ] }

를 로 구문 분석할 evaluationResult 수 있으며JSON, 이는 다음을 제공합니다.

{ "breed": "Miniature Schnauzer", "color": "black_grey" }

를 사용하면 선호하는 테스트 제품군의 테스트를 쉽게 통합하여 핸들러의 동작을 검증할 SDK수 있습니다. Jest 테스트 프레임워크를 사용하여 테스트를 생성하는 것을 권장하지만, 어떤 테스트 도구도 사용 가능합니다. 다음 코드 조각은 가상의 검증 실행을 보여줍니다. 평가 응답은 유효할 것으로 예상JSON되므로 JSON.parse를 사용하여 문자열 응답JSON에서 검색할 수 있습니다.

const AWS = require('aws-sdk') const fs = require('fs') const client = new AWS.AppSync({ region: 'us-east-2' }) const runtime = {name:'APPSYNC_JS',runtimeVersion:'1.0.0') test('request correctly calls DynamoDB', async () => { const code = fs.readFileSync('./code.js', 'utf8') const context = fs.readFileSync('./context.json', 'utf8') const contextJSON = JSON.parse(context) const response = await client.evaluateCode({ code, context, runtime, function: 'request' }).promise() const result = JSON.parse(response.evaluationResult) expect(result.key.id.S).toBeDefined() expect(result.attributeValues.firstname.S).toEqual(contextJSON.arguments.firstname) })

이 결과는 다음과 같아야 합니다.

Ran all test suites. > jest PASS ./index.test.js ✓ request correctly calls DynamoDB (543 ms) Test Suites: 1 passed, 1 total Tests: 1 passed, 1 total Snapshots: 0 totalTime: 1.511 s, estimated 2 s

라이브 쿼리 디버깅

프로덕션 애플리케이션을 디버깅하기 위한 테스트 및 로깅을 대체할 수 없습니다. Amazon 을 end-to-end 사용하여 오류 및 전체 요청 세부 정보를 로깅할 수 AWS AppSync 있습니다 CloudWatch. 또한 AWS AppSync 콘솔을 사용하여 각 요청에 대한 GraphQL 쿼리, 돌연변이 및 구독과 라이브 스트림 로그 데이터를 쿼리 편집기로 다시 테스트하여 실시간으로 디버깅할 수 있습니다. 구독의 경우 로그는 연결-시간 정보를 표시합니다.

이를 수행하려면 모니터링 및 로깅 에 설명된 대로 Amazon CloudWatch 로그를 미리 활성화해야 합니다. 그런 다음 AWS AppSync 콘솔에서 쿼리 탭을 선택한 다음 유효한 GraphQL 쿼리를 입력합니다. 오른쪽 하단 섹션에서 로그 창을 클릭하고 드래그하여 로그 보기를 엽니다. 페이지 맨 위에 있는 "재생" 화살표 아이콘을 선택하여 GraphQL 쿼리를 실행합니다. 몇 분 후 작업에 대한 전체 요청 및 응답 로그가 이 섹션으로 스트리밍되어 사용자가 콘솔에서 볼 수 있습니다.