기본 쿼리 생성(JavaScript) - AWS AppSync

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

기본 쿼리 생성(JavaScript)

GraphQL 해석기는 형식 스키마의 필드를 데이터 원본에 연결합니다. 해석기는 요청을 이행하는 메커니즘입니다.

GraphQL 표현식을 데이터 소스가 사용할 수 있는 형식으로 변환하는 JavaScript 데 AWS AppSync 사용되는 해석기입니다. 또는 매핑 템플릿을 Apache Velocity 템플릿 언어(VTL)로 작성하여 GraphQL 표현식을 데이터 소스가 사용할 수 있는 형식으로 변환할 수 있습니다.

이 섹션에서는 를 사용하여 해석기를 구성하는 방법을 설명합니다 JavaScript. 해석기 자습서(JavaScript) 섹션에서는 를 사용하여 해석기를 구현하는 방법에 대한 자세한 자습서를 제공합니다 JavaScript. 해석기 참조(JavaScript) 섹션에서는 JavaScript 해석기와 함께 사용할 수 있는 유틸리티 작업에 대한 설명을 제공합니다.

앞서 언급한 자습서를 사용하기 전에 이 안내서를 확인하는 것이 좋습니다.

이 섹션에서는 쿼리와 변형을 위한 해석기를 만들고 구성하는 방법을 살펴보겠습니다.

참고

이 안내서에서는 스키마를 만들었으며 쿼리 또는 변형이 하나 이상 있다고 가정합니다. 구독(실시간 데이터)을 찾고 있다면 안내서를 참조하세요.

이 섹션에서는 아래 스키마를 사용하는 예제와 함께 해석기 구성을 위한 몇 가지 일반적인 단계를 제공합니다.

// schema.graphql file input CreatePostInput { title: String date: AWSDateTime } type Post { id: ID! title: String date: AWSDateTime } type Mutation { createPost(input: CreatePostInput!): Post } type Query { getPost: [Post] }

기본 쿼리 해석기 생성

이 섹션에서는 기본 쿼리 해석기를 생성하는 방법을 보여 줍니다.

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

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

    2. 사이드바에서 스키마를 선택합니다.

  2. 스키마와 데이터 원본의 세부 정보를 입력합니다. 자세한 내용은 스키마 설계데이터 원본 연결 섹션을 참조하세요.

  3. 스키마 편집기 옆에는 해석기라는 창이 있습니다. 이 상자에는 스키마 창에 정의된 형식 및 필드 목록이 있습니다. 필드에 해석기를 연결할 수 있습니다. 주로 필드 작업에 해석기를 연결하게 될 것입니다. 이 섹션에서는 간단한 쿼리 구성을 살펴보겠습니다. 쿼리 유형에서 쿼리 필드 옆에 있는 연결을 선택합니다.

  4. 해석기 연결 페이지의 해석기 유형에서 파이프라인 또는 단위 해석기 중에서 선택할 수 있습니다. 이러한 유형에 대한 자세한 내용은 해석기를 참조하세요. 이 안내서에서는 pipeline resolvers를 활용합니다.

    작은 정보

    파이프라인 해석기를 생성하면 데이터 원본이 파이프라인 함수에 연결됩니다. 함수는 파이프라인 해석기를 생성한 후에 생성되므로 이 페이지에는 설정을 위한 옵션이 없습니다. 단위 해석기를 사용하는 경우 데이터 원본이 해석기에 직접 연결되므로 이 페이지에서 설정하게 됩니다.

    Resolver 런타임 에서 APPSYNC_JS를 선택하여 JavaScript 런타임을 활성화합니다.

  5. 이 에 대해 캐싱을 활성화할 수 있습니다API. 그러나 지금은 이 기능을 끄는 것이 좋습니다. 생성(Create)을 선택합니다.

  6. 해석기 편집 페이지에는 해석기 핸들러 및 응답(사전 및 사후 단계)에 대한 로직을 구현할 수 있게 해주는 해석기 코드라는 코드 편집기가 있습니다. 자세한 내용은 JavaScript 해석기 개요 를 참조하세요.

    참고

    이 예에서는 요청을 비워 두고 컨텍스트의 마지막 데이터 원본 결과를 반환하도록 응답을 설정해 보겠습니다.

    import {util} from '@aws-appsync/utils'; export function request(ctx) { return {}; } export function response(ctx) { return ctx.prev.result; }

    이 섹션 아래에는 함수라는 테이블이 있습니다. 함수를 사용하면 여러 해석기에서 재사용할 수 있는 코드를 구현할 수 있습니다. 코드를 계속 다시 작성하거나 복사하는 대신, 소스 코드를 함수로 저장하여 필요할 때마다 해석기에 추가되도록 할 수 있습니다.

    함수는 파이프라인 작업 목록의 대부분을 구성합니다. 해석기에서 여러 함수를 사용하는 경우 함수 순서를 설정하면 해당 순서대로 순차적으로 실행됩니다. 이러한 함수는 요청 함수가 실행된 후와 응답 함수가 시작되기 전에 실행됩니다.

    새 함수를 추가하려면 함수에서 함수 추가를 선택한 다음 새 함수 생성을 선택합니다. 또는 선택할 수 있는 함수 생성 버튼이 표시될 수도 있습니다.

    1. 데이터 원본을 선택합니다. 이 항목은 해석기가 작동하는 데이터 원본이 됩니다.

      참고

      이 예제에서는 idPost 객체를 검색하는 getPost에 대한 해석기를 연결합니다. 이 스키마에 대한 DynamoDB 테이블을 이미 설정했다고 가정해 보겠습니다. 파티션 키는 id로 설정되어 있고 비어 있습니다.

    2. Function name을 입력합니다.

    3. 함수 코드에서 함수의 동작을 구현해야 합니다. 헷갈릴 수도 있지만 각 함수에는 고유한 로컬 요청 및 응답 핸들러가 있습니다. 요청이 실행되면 요청을 처리하기 위한 데이터 원본 간접 호출이 수행되고, 응답 핸들러가 데이터 원본 응답을 처리합니다. 결과는 컨텍스트 객체에 저장됩니다. 이후에는 목록의 다음 함수가 실행되거나 마지막 함수인 경우 사후 단계 응답 핸들러로 전달됩니다.

      참고

      이 예제에서는 데이터 원본에서 Post 객체 목록을 가져오는 getPost에 해석기를 연결합니다. 요청 함수는 테이블에서 데이터를 요청하고, 테이블은 컨텍스트(ctx)에 응답을 전달한 다음, 응답은 컨텍스트에 결과를 반환합니다. AWS AppSync의 강점은 다른 AWS 서비스와의 상호 연결성에 있습니다. DynamoDB를 사용하고 있기 때문에 이와 같은 작업을 단순화할 수 있는 일련의 작업이 있습니다. 다른 데이터 원본 유형에 대한 몇 가지 보일러플레이트 예제도 있습니다.

      코드는 다음과 같습니다.

      import { util } from '@aws-appsync/utils'; /** * Performs a scan on the dynamodb data source */ export function request(ctx) { return { operation: 'Scan' }; } /** * return a list of scanned post items */ export function response(ctx) { return ctx.result.items; }

      이 단계에서는 두 가지 함수를 추가했습니다.

      • request: 요청 핸들러는 데이터 원본에 대해 검색 작업을 수행합니다. 인수에는 컨텍스트 객체(ctx) 또는 특정 작업을 수행하는 모든 해석기에 사용할 수 있는 일부 데이터가 포함됩니다. 예를 들어 권한 부여 데이터, 해석 중인 필드 이름 등이 포함될 수 있습니다. 반환 문은 Scan 작업을 수행합니다(예시는 여기를 참조). DynamoDB로 작업 중이므로 해당 서비스의 일부 작업을 사용할 수 있습니다. 스캔은 테이블 내 모든 항목에 대한 기본 가져오기를 수행합니다. 이 작업의 결과는 응답 핸들러로 전달되기 전에 컨텍스트 객체에 result 컨테이너로 저장됩니다. request는 파이프라인에서 응답보다 먼저 실행됩니다.

      • response: request의 출력을 반환하는 응답 핸들러입니다. 인수는 업데이트된 컨텍스트 객체이고, 반환 문은 ctx.prev.result입니다. 이 시점에서는 이 값에 익숙하지 않을 수 있습니다. ctx는 컨텍스트 객체를 나타냅니다. prev는 파이프라인에서의 이전 작업을 나타내며, 여기에서는 request였습니다. result에는 파이프라인을 통과하는 해석기의 결과가 포함됩니다. 종합해 보면 ctx.prev.result는 마지막으로 수행된 작업, 즉 요청 핸들러의 결과를 반환합니다.

    4. 완료했으면 생성을 선택합니다.

  7. 해석기 화면으로 돌아가서 함수 아래에서 함수 추가 드롭다운을 선택하고 함수를 함수 목록에 추가합니다.

  8. 저장을 선택하여 해석기를 업데이트합니다.

CLI

함수를 추가하는 방법

  • create-function 명령을 사용하여 파이프라인 해석기용 함수를 생성합니다.

    이 특정 명령에 대해 몇 가지 파라미터를 입력해야 합니다.

    1. api-id 의 API.

    2. AWS AppSync 콘솔name에 있는 함수의 .

    3. data-source-name 또는 함수가 사용할 데이터 원본의 이름. 이미 생성되어 AWS AppSync 서비스의 GraphQLAPI에 연결되어 있어야 합니다.

    4. runtime 또는 함수의 환경 및 언어. JavaScript의 경우 이름은 APPSYNC_JS이고 런타임은 이어야 합니다1.0.0.

    5. code 또는 함수의 요청 및 응답 핸들러. 수동으로 입력할 수도 있지만 .txt 파일(또는 유사한 형식)에 추가한 다음 인수로 전달하는 것이 훨씬 쉽습니다.

      참고

      쿼리 코드는 인수로 전달되는 파일에 있습니다.

      import { util } from '@aws-appsync/utils'; /** * Performs a scan on the dynamodb data source */ export function request(ctx) { return { operation: 'Scan' }; } /** * return a list of scanned post items */ export function response(ctx) { return ctx.result.items; }

    예를 들어 명령은 다음과 같을 수 있습니다.

    aws appsync create-function \ --api-id abcdefghijklmnopqrstuvwxyz \ --name get_posts_func_1 \ --data-source-name table-for-posts \ --runtime name=APPSYNC_JS,runtimeVersion=1.0.0 \ --code file://~/path/to/file/{filename}.{fileType}

    출력이 에 반환됩니다CLI. 다음은 그 예입니다.

    { "functionConfiguration": { "functionId": "ejglgvmcabdn7lx75ref4qeig4", "functionArn": "arn:aws:appsync:us-west-2:107289374856:apis/abcdefghijklmnopqrstuvwxyz/functions/ejglgvmcabdn7lx75ref4qeig4", "name": "get_posts_func_1", "dataSourceName": "table-for-posts", "maxBatchSize": 0, "runtime": { "name": "APPSYNC_JS", "runtimeVersion": "1.0.0" }, "code": "Code output goes here" } }
    참고

    함수를 해석기에 연결하는 데 사용되므로 functionId를 어딘가에 기록해 두어야 합니다.

해석기 생성

  • create-resolver 명령을 실행하여 Query에 대한 파이프라인 함수를 생성합니다.

    이 특정 명령에 대해 몇 가지 파라미터를 입력해야 합니다.

    1. api-id 의 API.

    2. type-name 또는 스키마의 특수 객체 유형(쿼리, 변형, 구독).

    3. field-name 또는 해석기를 연결하려는 특수 객체 유형 내의 필드 작업.

    4. 단위 또는 파이프라인 해석기를 지정하는 kind. 파이프라인 함수를 활성화하려면 이 값을 PIPELINE으로 설정합니다.

    5. pipeline-config 또는 해석기에 연결할 함수. 함수의 functionId 값을 알고 있어야 합니다. 목록 순서가 중요합니다.

    6. runtimeAPPSYNC_JS ()였습니다JavaScript. runtimeVersion은 현재 1.0.0입니다.

    7. code로, 사전 및 사후 단계 핸들러를 포함합니다.

      참고

      쿼리 코드는 인수로 전달되는 파일에 있습니다.

      import { util } from '@aws-appsync/utils'; /** * Sends a request to `put` an item in the DynamoDB data source */ export function request(ctx) { const { id, ...values } = ctx.args; return { operation: 'PutItem', key: util.dynamodb.toMapValues({ id }), attributeValues: util.dynamodb.toMapValues(values), }; } /** * returns the result of the `put` operation */ export function response(ctx) { return ctx.result; }

    예를 들어 명령은 다음과 같을 수 있습니다.

    aws appsync create-resolver \ --api-id abcdefghijklmnopqrstuvwxyz \ --type-name Query \ --field-name getPost \ --kind PIPELINE \ --pipeline-config functions=ejglgvmcabdn7lx75ref4qeig4 \ --runtime name=APPSYNC_JS,runtimeVersion=1.0.0 \ --code file:///path/to/file/{filename}.{fileType}

    출력이 에 반환됩니다CLI. 다음은 그 예입니다.

    { "resolver": { "typeName": "Mutation", "fieldName": "getPost", "resolverArn": "arn:aws:appsync:us-west-2:107289374856:apis/abcdefghijklmnopqrstuvwxyz/types/Mutation/resolvers/getPost", "kind": "PIPELINE", "pipelineConfig": { "functions": [ "ejglgvmcabdn7lx75ref4qeig4" ] }, "maxBatchSize": 0, "runtime": { "name": "APPSYNC_JS", "runtimeVersion": "1.0.0" }, "code": "Code output goes here" } }
CDK
작은 정보

를 사용하기 전에 의 CDK 참조 와 함께 AWS AppSync의 CDK 공식 설명서를 검토하는 CDK것이 좋습니다.

아래 나열된 단계는 특정 리소스를 추가하는 데 사용되는 스니펫의 일반적인 예시만 보여줍니다. 프로덕션 코드에서는 이 예시가 올바르게 작동하는 솔루션이 아닙니다. 또한 이미 작동하는 앱을 가지고 있는 것으로 가정합니다.

기본 앱에는 다음 항목이 필요합니다.

  1. 서비스 가져오기 지시문

  2. 스키마 코드

  3. 데이터 원본 생성기

  4. 함수 코드

  5. 해석기 코드

스키마 설계데이터 원본 연결 섹션을 통해 스택 파일에 다음과 같은 형식의 가져오기 지시문이 포함된다는 것을 알 수 있습니다.

import * as x from 'x'; # import wildcard as the 'x' keyword from 'x-service' import {a, b, ...} from 'c'; # import {specific constructs} from 'c-service'
참고

이전 섹션에서는 AWS AppSync 구성 요소를 가져오는 방법만 설명했습니다. 실제 코드에서는 앱을 실행하는 것만으로도 더 많은 서비스를 가져와야 합니다. 이 예제에서는 매우 간단한 CDK 앱을 만들려면 DynamoDB 테이블인 데이터 소스와 함께 AWS AppSync 서비스를 가져와야 합니다. 또한 앱을 배포하기 위해 몇 가지 추가 구성을 가져와야 했습니다.

import * as cdk from 'aws-cdk-lib'; import * as appsync from 'aws-cdk-lib/aws-appsync'; import * as dynamodb from 'aws-cdk-lib/aws-dynamodb'; import { Construct } from 'constructs';

각 내용을 요약하면 다음과 같습니다.

  • import * as cdk from 'aws-cdk-lib';: 이렇게 하면 CDK 앱과 스택과 같은 구성을 정의할 수 있습니다. 여기에는 메타데이터 조작과 같은 애플리케이션에 유용한 유틸리티 함수도 포함되어 있습니다. 이 가져오기 지시문에 익숙하지만 여기에서 cdk 코어 라이브러리가 사용되지 않는 이유가 궁금하다면 마이그레이션 페이지를 참조하세요.

  • import * as appsync from 'aws-cdk-lib/aws-appsync';: AWS AppSync 서비스를 가져옵니다.

  • import * as dynamodb from 'aws-cdk-lib/aws-dynamodb';: DynamoDB 서비스를 가져옵니다.

  • import { Construct } from 'constructs';: 루트 구성을 정의하는 데 필요합니다.

가져오기 유형은 호출하는 서비스에 따라 달라집니다. 예제는 CDK 설명서를 참조하는 것이 좋습니다. 페이지 상단의 스키마는 CDK 앱의 개별 파일이 됩니다.graphql. 스택 파일에서 다음 형식을 사용하여 새 GraphQL과 연결할 수 있습니다.

const add_api = new appsync.GraphqlApi(this, 'graphQL-example', { name: 'my-first-api', schema: appsync.SchemaFile.fromAsset(path.join(__dirname, 'schema.graphql')), });
참고

범위 에서 new 키워드 뒤에 를 API 사용하여 새 GraphQL을 add_api추가합니다appsync.GraphqlApi(scope: Construct, id: string , props: GraphqlApiProps). 범위는 이고this, CFN ID는 이며graphQL-example, 프롭은 my-first-api (콘솔API에서 의 이름) 및 schema.graphql (스키마 파일의 절대 경로)입니다.

데이터 원본을 추가하려면 먼저 데이터 원본을 스택에 추가해야 합니다. 그런 다음 소스별 메서드를 API 사용하여 GraphQL과 연결해야 합니다. 해석기 함수를 만들면 연결이 이루어집니다. 그 동안 dynamodb.Table을 사용하여 DynamoDB 테이블을 생성하는 예제를 살펴보겠습니다.

const add_ddb_table = new dynamodb.Table(this, 'posts-table', { partitionKey: { name: 'id', type: dynamodb.AttributeType.STRING, }, });
참고

이 예제에서 이 를 사용하는 경우 ID가 CFN 이고 파티션 키가 인 새 DynamoDB 테이블posts-table이 추가됩니다id (S).

다음으로 스택 파일에 해석기를 구현해야 합니다. 다음은 DynamoDB 테이블의 모든 항목을 스캔하는 간단한 쿼리의 예입니다.

const add_func = new appsync.AppsyncFunction(this, 'func-get-posts', { name: 'get_posts_func_1', add_api, dataSource: add_api.addDynamoDbDataSource('table-for-posts', add_ddb_table), code: appsync.Code.fromInline(` export function request(ctx) { return { operation: 'Scan' }; } export function response(ctx) { return ctx.result.items; } `), runtime: appsync.FunctionRuntime.JS_1_0_0, }); new appsync.Resolver(this, 'pipeline-resolver-get-posts', { add_api, typeName: 'Query', fieldName: 'getPost', code: appsync.Code.fromInline(` export function request(ctx) { return {}; } export function response(ctx) { return ctx.prev.result; } `), runtime: appsync.FunctionRuntime.JS_1_0_0, pipelineConfig: [add_func], });
참고

먼저 add_func라는 함수를 만들었습니다. 이 생성 순서는 다소 직관적이지 않은 것처럼 보일 수 있지만, 해석기 자체를 만들기 전에 파이프라인 해석기에 함수를 만들어야 합니다. 함수는 다음과 같은 형식을 따릅니다.

AppsyncFunction(scope: Construct, id: string, props: AppsyncFunctionProps)

범위는 , this CFN ID는 func-get-posts, 소품에는 실제 함수 세부 정보가 포함되어 있습니다. 속성 안에는 다음이 포함되었습니다.

  • AWS AppSync 콘솔name()에 있을 함수의 입니다get_posts_func_1.

  • 이전에 API 생성한 GraphQL(add_api).

  • 데이터 소스. 데이터 소스를 GraphQL API 값에 연결한 다음 함수에 연결하는 지점입니다. 생성한 테이블(add_ddb_table)을 GraphqlApi 메서드() 중 하나를 사용하여 GraphQLAPI(add_api)에 연결합니다addDynamoDbDataSource. ID 값(table-for-posts)은 AWS AppSync 콘솔에 있는 데이터 원본의 이름입니다. 소스별 메서드 목록은 다음 페이지를 참조하세요.

  • 코드에는 간단한 스캔 및 반환인 함수의 요청 및 응답 핸들러가 포함되어 있습니다.

  • 런타임은 APPSYNC_JS 런타임 버전 1.0.0을 사용하도록 지정합니다. 이 버전은 현재 APPSYNC_JS에 사용할 수 있는 유일한 버전입니다.

다음으로 함수를 파이프라인 해석기에 연결해야 합니다. 다음과 같은 형식을 사용하여 해석기를 생성했습니다.

Resolver(scope: Construct, id: string, props: ResolverProps)

범위는 , this CFN ID는 pipeline-resolver-get-posts, 소품에는 실제 함수 세부 정보가 포함되어 있습니다. 속성 안에는 다음이 포함되었습니다.

  • 이전에 API 생성한 GraphQL(add_api).

  • 특수 객체 유형 이름. 쿼리 작업이므로 Query 값을 추가하기만 하면 됩니다.

  • 필드 이름(getPost)은 Query 유형 아래의 스키마에 있는 필드 이름입니다.

  • 코드에는 사전 및 사후 핸들러가 포함되어 있습니다. 이 예제는 함수가 작업을 수행한 후 컨텍스트에 있었던 모든 결과를 반환합니다.

  • 런타임은 APPSYNC_JS 런타임 버전 1.0.0을 사용하도록 지정합니다. 이 버전은 현재 APPSYNC_JS에 사용할 수 있는 유일한 버전입니다.

  • 파이프라인 구성에는 생성한 함수(add_func)에 대한 참조가 포함되어 있습니다.

이 예제에서 발생한 일을 요약하기 위해 요청 및 응답 핸들러를 구현한 AWS AppSync 함수를 보았습니다. 함수는 데이터 원본과의 상호 작용을 담당했습니다. 요청 핸들러는 DynamoDB 데이터 소스에 대해 수행할 Scan 작업에 대해 AWS AppSync지시하는 작업을 에 보냈습니다. 응답 핸들러는 항목의 목록(ctx.result.items)을 반환했습니다. 그런 다음 항목 목록이 Post GraphQL 유형에 자동으로 매핑되었습니다.

기본 변형 해석기 생성

이 섹션에서는 기본 변형 해석기를 생성하는 방법을 보여 줍니다.

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

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

    2. 사이드바에서 스키마를 선택합니다.

  2. 해석기 섹션 및 변형 유형에서 필드 옆에 있는 연결을 선택합니다.

    참고

    이 예제에서는 테이블에 Post 객체를 추가하는 createPost에 대한 해석기를 연결합니다. 마지막 섹션과 동일한 DynamoDB 테이블을 사용한다고 가정해 보겠습니다. 파티션 키는 id로 설정되어 있고 비어 있습니다.

  3. 해석기 연결 페이지의 해석기 유형에서 pipeline resolvers를 선택합니다. 참고로 해석기에 대한 추가 정보는 여기에서 확인할 수 있습니다. Resolver 런타임 에서 APPSYNC_JS를 선택하여 JavaScript 런타임을 활성화합니다.

  4. 이 에 대해 캐싱을 활성화할 수 있습니다API. 그러나 지금은 이 기능을 끄는 것이 좋습니다. 생성(Create)을 선택합니다.

  5. 함수 추가를 선택한 다음 새 함수 생성을 선택합니다. 또는 선택할 수 있는 함수 생성 버튼이 표시될 수도 있습니다.

    1. 데이터 원본을 선택합니다. 변형을 사용하여 조작할 데이터가 들어 있는 원본이어야 합니다.

    2. Function name을 입력합니다.

    3. 함수 코드에서 함수의 동작을 구현해야 합니다. 이는 변형이므로 요청은 간접적으로 호출된 데이터 원본에서 일부 상태 변경 작업을 수행하는 것이 이상적입니다. 결과는 응답 함수에 의해 처리됩니다.

      참고

      createPost는 파라미터를 데이터로 사용하여 테이블에 새 Post를 추가하거나 '퍼팅'합니다. 다음과 같이 추가할 수 있습니다.

      import { util } from '@aws-appsync/utils'; /** * Sends a request to `put` an item in the DynamoDB data source */ export function request(ctx) { return { operation: 'PutItem', key: util.dynamodb.toMapValues({id: util.autoId()}), attributeValues: util.dynamodb.toMapValues(ctx.args.input), }; } /** * returns the result of the `put` operation */ export function response(ctx) { return ctx.result; }

      이 단계에서 requestresponse 함수도 추가했습니다.

      • request: 요청 핸들러는 컨텍스트를 인수로 받아들입니다. 요청 핸들러 반환 문은 내장된 DynamoDB 작업인 PutItem 명령을 수행합니다(예시는 여기 또는 여기 참조). PutItem 명령은 파티션 key 값(util.autoid()에서 자동으로 생성됨)과 컨텍스트 인수 입력의 attributes(요청 시 전달할 값)를 가져와 DynamoDB 테이블에 Post 객체를 추가합니다. keyid이고 attributesdatetitle 필드 인수입니다. 둘 다 DynamoDB 테이블에서 작동하도록 util.dynamodb.toMapValues 도우미를 통해 미리 형식이 지정되어 있습니다.

      • response: 응답은 업데이트된 컨텍스트를 수락하고 요청 핸들러의 결과를 반환합니다.

    4. 완료했으면 생성을 선택합니다.

  6. 해석기 화면으로 돌아가서 함수 아래에서 함수 추가 드롭다운을 선택하고 함수를 함수 목록에 추가합니다.

  7. 저장을 선택하여 해석기를 업데이트합니다.

CLI

함수를 추가하는 방법

  • create-function 명령을 사용하여 파이프라인 해석기용 함수를 생성합니다.

    이 특정 명령에 대해 몇 가지 파라미터를 입력해야 합니다.

    1. api-id 의 API.

    2. AWS AppSync 콘솔name에 있는 함수의 .

    3. data-source-name 또는 함수가 사용할 데이터 원본의 이름. 이미 생성되어 AWS AppSync 서비스의 GraphQLAPI에 연결되어 있어야 합니다.

    4. runtime 또는 함수의 환경 및 언어. JavaScript의 경우 이름은 APPSYNC_JS이고 런타임은 이어야 합니다1.0.0.

    5. code 또는 함수의 요청 및 응답 핸들러. 수동으로 입력할 수도 있지만 .txt 파일(또는 유사한 형식)에 추가한 다음 인수로 전달하는 것이 훨씬 쉽습니다.

      참고

      쿼리 코드는 인수로 전달되는 파일에 있습니다.

      import { util } from '@aws-appsync/utils'; /** * Sends a request to `put` an item in the DynamoDB data source */ export function request(ctx) { return { operation: 'PutItem', key: util.dynamodb.toMapValues({id: util.autoId()}), attributeValues: util.dynamodb.toMapValues(ctx.args.input), }; } /** * returns the result of the `put` operation */ export function response(ctx) { return ctx.result; }

    예를 들어 명령은 다음과 같을 수 있습니다.

    aws appsync create-function \ --api-id abcdefghijklmnopqrstuvwxyz \ --name add_posts_func_1 \ --data-source-name table-for-posts \ --runtime name=APPSYNC_JS,runtimeVersion=1.0.0 \ --code file:///path/to/file/{filename}.{fileType}

    출력이 에 반환됩니다CLI. 다음은 그 예입니다.

    { "functionConfiguration": { "functionId": "vulcmbfcxffiram63psb4dduoa", "functionArn": "arn:aws:appsync:us-west-2:107289374856:apis/abcdefghijklmnopqrstuvwxyz/functions/vulcmbfcxffiram63psb4dduoa", "name": "add_posts_func_1", "dataSourceName": "table-for-posts", "maxBatchSize": 0, "runtime": { "name": "APPSYNC_JS", "runtimeVersion": "1.0.0" }, "code": "Code output foes here" } }
    참고

    함수를 해석기에 연결하는 데 사용되므로 functionId를 어딘가에 기록해 두어야 합니다.

해석기 생성

  • create-resolver 명령을 실행하여 Mutation에 대한 파이프라인 함수를 생성합니다.

    이 특정 명령에 대해 몇 가지 파라미터를 입력해야 합니다.

    1. api-id 의 API.

    2. type-name 또는 스키마의 특수 객체 유형(쿼리, 변형, 구독).

    3. field-name 또는 해석기를 연결하려는 특수 객체 유형 내의 필드 작업.

    4. 단위 또는 파이프라인 해석기를 지정하는 kind. 파이프라인 함수를 활성화하려면 이 값을 PIPELINE으로 설정합니다.

    5. pipeline-config 또는 해석기에 연결할 함수. 함수의 functionId 값을 알고 있어야 합니다. 목록 순서가 중요합니다.

    6. runtimeAPPSYNC_JS ()였습니다JavaScript. runtimeVersion은 현재 1.0.0입니다.

    7. code로, 사전 및 사후 단계를 포함합니다.

      참고

      쿼리 코드는 인수로 전달되는 파일에 있습니다.

      import { util } from '@aws-appsync/utils'; /** * Sends a request to `put` an item in the DynamoDB data source */ export function request(ctx) { const { id, ...values } = ctx.args; return { operation: 'PutItem', key: util.dynamodb.toMapValues({ id }), attributeValues: util.dynamodb.toMapValues(values), }; } /** * returns the result of the `put` operation */ export function response(ctx) { return ctx.result; }

    예를 들어 명령은 다음과 같을 수 있습니다.

    aws appsync create-resolver \ --api-id abcdefghijklmnopqrstuvwxyz \ --type-name Mutation \ --field-name createPost \ --kind PIPELINE \ --pipeline-config functions=vulcmbfcxffiram63psb4dduoa \ --runtime name=APPSYNC_JS,runtimeVersion=1.0.0 \ --code file:///path/to/file/{filename}.{fileType}

    출력이 에 반환됩니다CLI. 다음은 그 예입니다.

    { "resolver": { "typeName": "Mutation", "fieldName": "createPost", "resolverArn": "arn:aws:appsync:us-west-2:107289374856:apis/abcdefghijklmnopqrstuvwxyz/types/Mutation/resolvers/createPost", "kind": "PIPELINE", "pipelineConfig": { "functions": [ "vulcmbfcxffiram63psb4dduoa" ] }, "maxBatchSize": 0, "runtime": { "name": "APPSYNC_JS", "runtimeVersion": "1.0.0" }, "code": "Code output goes here" } }
CDK
작은 정보

를 사용하기 전에 의 CDK 참조 와 함께 AWS AppSync의 CDK 공식 설명서를 검토하는 CDK것이 좋습니다.

아래 나열된 단계는 특정 리소스를 추가하는 데 사용되는 스니펫의 일반적인 예시만 보여줍니다. 프로덕션 코드에서는 이 예시가 올바르게 작동하는 솔루션이 아닙니다. 또한 이미 작동하는 앱을 가지고 있는 것으로 가정합니다.

  • 변형을 만들려면 같은 프로젝트에 참여하고 있다고 가정하고 쿼리처럼 스택 파일에 추가하면 됩니다. 테이블에 새 Post를 추가하는 변형에 대한 수정된 함수와 해석기는 다음과 같습니다.

    const add_func_2 = new appsync.AppsyncFunction(this, 'func-add-post', { name: 'add_posts_func_1', add_api, dataSource: add_api.addDynamoDbDataSource('table-for-posts-2', add_ddb_table), code: appsync.Code.fromInline(` export function request(ctx) { return { operation: 'PutItem', key: util.dynamodb.toMapValues({id: util.autoId()}), attributeValues: util.dynamodb.toMapValues(ctx.args.input), }; } export function response(ctx) { return ctx.result; } `), runtime: appsync.FunctionRuntime.JS_1_0_0, }); new appsync.Resolver(this, 'pipeline-resolver-create-posts', { add_api, typeName: 'Mutation', fieldName: 'createPost', code: appsync.Code.fromInline(` export function request(ctx) { return {}; } export function response(ctx) { return ctx.prev.result; } `), runtime: appsync.FunctionRuntime.JS_1_0_0, pipelineConfig: [add_func_2], });
    참고

    이 변형과 쿼리는 구조가 비슷하므로 변형을 만들기 위해 변경한 내용만 설명하겠습니다.

    함수에서 테이블에 추가하는 사실을 반영하기 add_posts_func_1 위해 CFN IDfunc-add-post를 로, 이름을 Posts 로 변경했습니다. 데이터 소스에서는 addDynamoDbDataSource 메서드에 필요하기 table-for-posts-2 때문에 AWS AppSync 콘솔의 테이블(add_ddb_table)에 새로 연결했습니다. 이 새 연결은 이전에 생성한 것과 동일한 테이블을 계속 사용하고 있지만 이제 AWS AppSync 콘솔에 두 개의 연결이 있습니다. 하나는 쿼리용table-for-posts이고 다른 하나는 돌연변이용입니다table-for-posts-2. id 값을 자동으로 생성하고 나머지 필드에 대해 클라이언트의 입력을 수락하여 Post를 추가하도록 코드가 변경되었습니다.

    테이블에 Posts를 추가한다는 사실을 반영하기 위해 해석기에서 id 값을 pipeline-resolver-create-posts로 변경했습니다. 스키마에 변형를 반영하기 위해 유형 이름은 Mutation으로, 이름은 createPost로 변경되었습니다. 파이프라인 구성이 새 변형 함수 add_func_2로 설정되었습니다.

이 예제에서 일어나는 일을 요약하기 위해 는 createPost 필드에 정의된 인수를 GraphQL 스키마에서 DynamoDB 작업으로 AWS AppSync 자동으로 변환합니다. 이 예제에서는 util.autoId() 도우미를 사용하여 자동으로 생성되는 id의 키를 사용하여 DynamoDB에 레코드를 저장합니다. AWS AppSync 콘솔 또는 기타에서 수행된 요청의 컨텍스트 인수(ctx.args.input)에 전달하는 다른 모든 필드는 테이블의 속성으로 저장됩니다. 키와 특성 모두 util.dynamodb.toMapValues(values) 도우미를 사용하여 호환되는 DynamoDB 형식에 자동으로 매핑됩니다.

AWS AppSync 는 해석기 편집을 위한 테스트 및 디버그 워크플로도 지원합니다. 모의 context 객체를 사용하여 간접 호출 전에 템플릿의 변환된 값을 확인할 수 있습니다. 선택적으로 쿼리를 실행할 때 대화식으로 데이터 원본에 대한 전체 요청을 볼 수 있습니다. 자세한 내용은 해석기 테스트 및 디버깅(JavaScript)모니터링 및 로깅을 참조하세요.

고급 해석기

스키마 설계의 선택적 페이지 매김 섹션을 따르는 경우에도 페이지 매김을 사용하려면 요청에 해석기를 추가해야 합니다. 이 예제에서는 한 번에 요청된 항목 중 일부만 반환하도록 getPosts라는 쿼리 페이지 매김을 사용했습니다. 해당 필드의 해석기 코드는 다음과 같을 수 있습니다.

/** * Performs a scan on the dynamodb data source */ export function request(ctx) { const { limit = 20, nextToken } = ctx.args; return { operation: 'Scan', limit, nextToken }; } /** * @returns the result of the `put` operation */ export function response(ctx) { const { items: posts = [], nextToken } = ctx.result; return { posts, nextToken }; }

요청에서는 요청의 컨텍스트를 전달합니다. 는 limit입니다.20즉, 첫 번째 쿼리Posts에서 최대 20개를 반환합니다. nextToken 커서는 데이터 원본의 첫 번째 Post 항목에 고정됩니다. 이러한 값은 인수로 전달됩니다. 그런 다음 요청은 첫 번째 Post부터 시작하여 스캔 제한 횟수까지 스캔을 수행합니다. 데이터 원본은 결과를 컨텍스트에 저장하고, 이 결과는 응답에 전달됩니다. 응답은 검색된 Posts를 반환한 다음 nextToken을 한도 바로 뒤의 Post 항목으로 설정합니다. 정확히 동일한 작업을 수행하지만 첫 번째 쿼리 직후의 오프셋부터 시작하도록 다음 요청이 전송됩니다. 이러한 종류의 요청은 병렬로 수행되지 않고 순차적으로 수행된다는 점에 유의하세요.