기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.
에서 HTTP 해석기 사용 AWS AppSync
AWS AppSync 를 사용하면 지원되는 데이터 소스(즉 AWS Lambda, Amazon DynamoDB, Amazon OpenSearch Service 또는 Amazon Aurora)를 사용하여 GraphQL 필드를 해결하기 위한 임의 HTTP 엔드포인트 외에도 다양한 작업을 수행할 수 있습니다. HTTP 엔드포인트를 사용할 수 있게 되면 데이터 소스를 사용하여 엔드포인트에 연결할 수 있습니다. 쿼리, 변형 및 구독 등 GraphQL 작업을 수행하도록 스키마의 해석기를 구성할 수 있습니다. 이 자습서에서는 몇 가지 일반적인 예제를 살펴봅니다.
이 자습서에서는 AWS AppSync GraphQL 엔드포인트와 함께 REST API (Amazon API Gateway 및 Lambda를 사용하여 생성)를 사용합니다.
생성 REST API
다음 AWS CloudFormation 템플릿을 사용하여 이 자습서에서 작동하는 REST 엔드포인트를 설정할 수 있습니다.
AWS CloudFormation 스택은 다음 단계를 수행합니다.
-
마이크로서비스에 대한 비즈니스 로직이 포함된 Lambda 함수를 설정합니다.
-
다음 endpoint/method/content 유형 조합을 REST API 사용하여 API 게이트웨이를 설정합니다.
API 리소스 경로 | HTTP 메서드 | 지원되는 콘텐츠 유형 |
---|---|---|
/v1/사용자 |
POST |
application/json |
/v1/사용자 |
GET |
application/json |
/v1/사용자/1 |
GET |
application/json |
/v1/사용자/1 |
PUT |
application/json |
/v1/사용자/1 |
DELETE |
application/json |
GraphQL 생성 API
에서 GraphQLAPI을 생성하려면 AWS AppSync:
-
AWS AppSync 콘솔을 열고 생성을 API선택합니다.
-
GraphQLAPIs을 선택한 다음 처음부터 설계를 선택합니다. Next(다음)를 선택합니다.
-
API 이름에 를 입력합니다
UserData
. Next(다음)를 선택합니다. -
Create GraphQL resources later
를 선택합니다. Next(다음)를 선택합니다. -
입력을 검토하고 생성을 API선택합니다.
AWS AppSync 콘솔은 API 키 인증 모드를 API 사용하여 새 GraphQL을 생성합니다. 콘솔을 사용하여 GraphQL을 추가로 구성API하고 요청을 실행할 수 있습니다.
GraphQL 스키마 생성
이제 GraphQL 가 있으므로 GraphQL 스키마를 생성API해 보겠습니다. AWS AppSync 콘솔의 스키마 편집기에서 아래 스니펫을 사용합니다.
type Mutation { addUser(userInput: UserInput!): User deleteUser(id: ID!): User } type Query { getUser(id: ID): User listUser: [User!]! } type User { id: ID! username: String! firstname: String lastname: String phone: String email: String } input UserInput { id: ID! username: String! firstname: String lastname: String phone: String email: String }
HTTP 데이터 소스 구성
HTTP 데이터 소스를 구성하려면 다음을 수행합니다.
-
AWS AppSync GraphQL의 데이터 소스 페이지에서 데이터 소스 생성 을 API선택합니다.
-
데이터 소스의 이름(예:
HTTP_Example
)을 입력합니다. -
데이터 소스 유형 에서 HTTP 엔드포인트 를 선택합니다.
-
엔드포인트를 자습서 시작 시 생성된 API Gateway 엔드포인트로 설정합니다. Lambda 콘솔로 이동하여 애플리케이션에서 애플리케이션을 찾으면 스택에서 생성된 엔드포인트를 찾을 수 있습니다. 애플리케이션 설정 내부에 에서 API 엔드포인트가 될 엔드포인트가 표시됩니다 AWS AppSync. 단계 이름을 엔드포인트의 일부로 포함하지 않았는지 확인합니다. 예를 들어 엔드포인트가
https://aaabbbcccd.execute-api.us-east-1.amazonaws.com/v1
인 경우https://aaabbbcccd.execute-api.us-east-1.amazonaws.com
을 입력합니다.
참고
현재 에서는 퍼블릭 엔드포인트만 지원됩니다 AWS AppSync.
AWS AppSync 서비스에서 인식하는 인증 기관에 대한 자세한 내용은 for HTTPS Endpoints 에서 인식하는 인증 기관(CA) AWS AppSync 을 참조하세요.
해석기 구성
이 단계에서는 HTTP 데이터 소스를 getUser
및 addUser
쿼리에 연결합니다.
getUser
해석기를 설정하려면:
-
AWS AppSync GraphQL 에서 스키마 탭을 API선택합니다.
-
스키마 편집기의 오른쪽에 있는 해석기 창의 쿼리 유형 아래에서
getUser
필드를 찾아 연결을 선택합니다. -
해석기 유형을
Unit
으로 유지하고 런타임을APPSYNC_JS
로 유지합니다. -
데이터 소스 이름 에서 이전에 만든 HTTP 엔드포인트를 선택합니다.
-
생성(Create)을 선택합니다.
-
해석기 코드 편집기에서 다음 코드 조각을 요청 핸들러로 추가합니다.
import { util } from '@aws-appsync/utils' export function request(ctx) { return { version: '2018-05-29', method: 'GET', params: { headers: { 'Content-Type': 'application/json', }, }, resourcePath: `/v1/users/${ctx.args.id}`, } }
-
다음 코드 조각을 응답 핸들러로 추가합니다.
export function response(ctx) { const { statusCode, body } = ctx.result // if response is 200, return the response if (statusCode === 200) { return JSON.parse(body) } // if response is not 200, append the response to error block. util.appendError(body, statusCode) }
-
쿼리 탭을 선택한 후, 다음 쿼리를 실행합니다.
query GetUser{ getUser(id:1){ id username } }
그러면 다음과 같은 응답이 반환됩니다.
{ "data": { "getUser": { "id": "1", "username": "nadia" } } }
addUser
해석기를 설정하려면:
-
스키마 탭을 선택합니다.
-
스키마 편집기의 오른쪽에 있는 해석기 창의 쿼리 유형 아래에서
addUser
필드를 찾아 연결을 선택합니다. -
해석기 유형을
Unit
으로 유지하고 런타임을APPSYNC_JS
로 유지합니다. -
데이터 소스 이름 에서 이전에 만든 HTTP 엔드포인트를 선택합니다.
-
생성(Create)을 선택합니다.
-
해석기 코드 편집기에서 다음 코드 조각을 요청 핸들러로 추가합니다.
export function request(ctx) { return { "version": "2018-05-29", "method": "POST", "resourcePath": "/v1/users", "params":{ "headers":{ "Content-Type": "application/json" }, "body": ctx.args.userInput } } }
-
다음 코드 조각을 응답 핸들러로 추가합니다.
export function response(ctx) { if(ctx.error) { return util.error(ctx.error.message, ctx.error.type) } if (ctx.result.statusCode == 200) { return ctx.result.body } else { return util.appendError(ctx.result.body, "ctx.result.statusCode") } }
-
쿼리 탭을 선택한 후, 다음 쿼리를 실행합니다.
mutation addUser{ addUser(userInput:{ id:"2", username:"shaggy" }){ id username } }
getUser
쿼리를 다시 실행하면 다음과 같은 응답이 반환되어야 합니다.{ "data": { "getUser": { "id": "2", "username": "shaggy" } } }
AWS 서비스 호출
HTTP 해석기를 사용하여 AWS 서비스에 대한 GraphQL API 인터페이스를 설정할 수 있습니다. HTTP AWS 가 보낸 사람을 식별할 수 있도록 서명 버전 4 프로세스로 에 대한 요청에 서명해야 AWS 합니다. 는 IAM 역할을 HTTP 데이터 소스와 연결할 때 사용자를 대신하여 서명을 AWS AppSync 계산합니다.
HTTP 해석기를 사용하여 AWS 서비스를 호출하기 위한 두 가지 추가 구성 요소를 제공합니다.
-
AWS 서비스를 호출할 권한이 있는 IAM 역할 APIs
-
데이터 원본의 서명 구성
예를 들어 HTTP 해석기를 사용하여 ListGraphqlApis 작업을 호출하려면 먼저 다음 정책이 연결된 상태로 를 수 AWS AppSync 임하는 IAM 역할을 생성합니다.
{ "Version": "2012-10-17", "Statement": [ { "Action": [ "appsync:ListGraphqlApis" ], "Effect": "Allow", "Resource": "*" } ] }
그런 다음 에 대한 HTTP 데이터 소스를 생성합니다 AWS AppSync. 이 예제에서는 미국 서부(오레곤) 리전 AWS AppSync 에서 를 호출합니다. 서명 리전 및 서비스 이름이 http.json
포함된 라는 파일에서 다음 HTTP 구성을 설정합니다.
{ "endpoint": "https://appsync.us-west-2.amazonaws.com/", "authorizationConfig": { "authorizationType": "AWS_IAM", "awsIamConfig": { "signingRegion": "us-west-2", "signingServiceName": "appsync" } } }
그런 다음 AWS CLI 를 사용하여 다음과 같이 연결된 역할로 데이터 소스를 생성합니다.
aws appsync create-data-source --api-id <API-ID> \ --name AWSAppSync \ --type HTTP \ --http-config file:///http.json \ --service-role-arn <ROLE-ARN>
스키마의 필드에 해석기를 연결할 때 다음 요청 매핑 템플릿을 사용하여 를 호출합니다 AWS AppSync.
{ "version": "2018-05-29", "method": "GET", "resourcePath": "/v1/apis" }
이 데이터 소스에 대해 GraphQL 쿼리를 실행하면 는 제공한 역할을 사용하여 요청에 AWS AppSync 서명하고 요청에 서명을 포함합니다. 쿼리는 해당 AWS 리전의 계정에 APIs 있는 AWS AppSync GraphQL 목록을 반환합니다.