AWS 확대가 있는 직접 Lambda 분해기
기본적으로 Velocity 템플릿은 Amplify를 통해 AppSync API를 만들 때 파서로 사용되며 기본 데이터베이스에서 간단한 CRUD 작업을 수행합니다.이러한 해석기 템플릿은 개발자에게 기본적으로 블랙박스이기 때문에 심상치 않은 일을 많이 하지 않기 때문에 간단한 CRUD 조작이 아니라 다른 부분을 찾아야 한다.
다행히도, 우리는 AWS Amplify를 통해 Lambda 해상도를 쉽게 제공하고 관리함으로써 이 일을 완성할 수 있다.나는 너희들에게 이 점을 실현하는 가장 간단한 방법을 보여줄 것이다.
프로비저닝
Amplify를 통해 간단한GraphQL API를 만든 후에 제Todo
에는 간단한schema.graphql
모델이 있는데 그 구조는 다음과 같습니다.
type Todo @model {
id: ID!
name: String!
description: String
}
예를 들어 만약에 우리가 추가Todo
할 때 사용자에게 이메일을 보내거나 다른 AWS 서비스와 상호작용을 하기를 원한다면.제공된 AppSync 파서가 부족합니다.이것이 바로 Lambda 해석기의 용무이다. Amplify의 편의성으로 우리는 amplify add function
를 사용하여 쉽게 배치할 수 있다. 아래와 같다.
% amplify add function
? Select which capability you want to add: Lambda function (serverless function)
? Provide a friendly name for your resource to be used as a label for this category in the project: addTodo
? Provide the AWS Lambda function name: addTodo
? Choose the runtime that you want to use: NodeJS
? Choose the function template that you want to use: Hello World
? Do you want to access other resources in this project from your Lambda function? Yes
? Select the category storage
Storage category has a resource called Todo:@model(appsync)
? Select the operations you want to permit for Todo:@model(appsync) create
You can access the following resource attributes as environment variables from your Lambda function
API_DIRECTRESOLVER_GRAPHQLAPIIDOUTPUT
API_DIRECTRESOLVER_TODOTABLE_ARN
API_DIRECTRESOLVER_TODOTABLE_NAME
ENV
REGION
? Do you want to invoke this function on a recurring schedule? No
? Do you want to configure Lambda layers for this function? No
? Do you want to edit the local lambda function now? No
Successfully added resource addTodo locally.
위의 예시에서, 우리는 Lambda 함수를 설정했고, 다이나마이드 테이블에 데이터를 만들 수 있는 권한을 주었다. 왜냐하면 우리는 거기에 데이터를 기록하기를 원하기 때문이다.여기서 우리는 AWS에 인프라를 제공하기 위해 amplify push
를 실행할 수 있다.
모드 변경
이 때 Lambda 함수는 설정되어 있고 사용할 수 있지만 AppSync API를 통해 실제로 액세스할 수는 없습니다.이를 위해, schema.graphql
에서 새로운 돌연변이와 입력 형식을 만들고, @function
명령을 Lambda 함수를 호출할 돌연변이에 적용합니다.
input AddTodoInput {
name: String!
description: String
}
type Mutation {
addTodo(input: AddTodoInput!): Todo @function(name: "addTodo-${env}")
}
방금 Lambda 함수에 위조 논리를 포함했습니다. 호출할 때 하나의 대상만 되돌려줍니다. 그러나 다이나마이드 테이블에 기록을 삽입하고 다른 논리를 포함하기를 원할 수도 있습니다.(DynamoDB에 데이터를 삽입하는 방법this page을 사용할 수 있습니다.
exports.handler = async (event) => {
// TODO include any additional logic here
return {
id: "1234",
name: "Finish blog post",
description: "AWS Amplify is great",
};
};
다시 한 번, 우리는 변경 사항을 업데이트하기 위해 amplify push
를 실행해야 한다.그런 다음 AppSync 콘솔에 들어가서 변종을 실행하고 다음 결과를 볼 수 있습니다.
이렇게 간단하지, 그렇지!
결과 파서
기술적으로 말하자면, 그것은 제목이 말한 것처럼 직접적인 람바다 해석기가 아니다.AppSync 모드를 보면 Amplify가 실제로 만들어 놓은 것을 볼 수 있습니다Pipeline resolver.
파이핑 파서에서는 여러 함수를 GraphQL API에 대한 단일 호출로 조합할 수 있습니다.함수에 앞서 Velocity 템플릿을 호출하여 GraphQL이 입력한 데이터를 Lambda 이벤트에 비추는 것을 실현합니다.각 함수 뒤에 다른 Velocity 템플릿을 실행하여 이전 함수의 데이터를GraphQL 응답에 매핑합니다.
내가 보기에 이것은 반드시 나쁜 일은 아니다.호출 해상도는 현재 Lambda 함수가 실행되기 전과 그 다음에 Velocity 템플릿을 실행해야 하기 때문에, 최소한의 실행 속도를 희생할 수 있습니다. 그러나 링크 함수가 추가 논리를 포함하도록 실행하는 등 중요한 일을 할 수 있습니다.
예를 들어, 우리가 메시지를 보내는 논리를 추가하고 삭제하려면, 메시지를 보내는 함수를 만들고 여러 해상도에서 다시 사용할 수 있습니다.
type Mutation {
addTodo(input: AddTodoInput!): Todo
@function(name: "addTodo-${env}")
@function(name: "sendMessage-${env}")
removeTodo(id: ID!): Todo
@function(name: "removeTodo-${env}")
@function(name: "sendMessage-${env}")
}
Todo
를 사용하여 변경 사항을 밀어 넣고 AppSync 콘솔을 보면 파이프 해석기를 형성하는 두 가지 함수를 연결할 수 있습니다.
AWS Amplify는 새로운 AppSync API를 만들고 제공하는 것을 매우 쉽게 할 뿐만 아니라, 상자를 열면 바로 사용할 수 있는 해상도가 당신의 모든 요구를 충족시키지 못하면, Lambda 해상도를 사용하는 것도 마찬가지로 쉽습니다. 우리가 보듯이.
Reference
이 문제에 관하여(AWS 확대가 있는 직접 Lambda 분해기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/aws-builders/direct-lambda-resolvers-with-aws-amplify-3af3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
type Todo @model {
id: ID!
name: String!
description: String
}
% amplify add function
? Select which capability you want to add: Lambda function (serverless function)
? Provide a friendly name for your resource to be used as a label for this category in the project: addTodo
? Provide the AWS Lambda function name: addTodo
? Choose the runtime that you want to use: NodeJS
? Choose the function template that you want to use: Hello World
? Do you want to access other resources in this project from your Lambda function? Yes
? Select the category storage
Storage category has a resource called Todo:@model(appsync)
? Select the operations you want to permit for Todo:@model(appsync) create
You can access the following resource attributes as environment variables from your Lambda function
API_DIRECTRESOLVER_GRAPHQLAPIIDOUTPUT
API_DIRECTRESOLVER_TODOTABLE_ARN
API_DIRECTRESOLVER_TODOTABLE_NAME
ENV
REGION
? Do you want to invoke this function on a recurring schedule? No
? Do you want to configure Lambda layers for this function? No
? Do you want to edit the local lambda function now? No
Successfully added resource addTodo locally.
이 때 Lambda 함수는 설정되어 있고 사용할 수 있지만 AppSync API를 통해 실제로 액세스할 수는 없습니다.이를 위해,
schema.graphql
에서 새로운 돌연변이와 입력 형식을 만들고, @function
명령을 Lambda 함수를 호출할 돌연변이에 적용합니다.input AddTodoInput {
name: String!
description: String
}
type Mutation {
addTodo(input: AddTodoInput!): Todo @function(name: "addTodo-${env}")
}
방금 Lambda 함수에 위조 논리를 포함했습니다. 호출할 때 하나의 대상만 되돌려줍니다. 그러나 다이나마이드 테이블에 기록을 삽입하고 다른 논리를 포함하기를 원할 수도 있습니다.(DynamoDB에 데이터를 삽입하는 방법this page을 사용할 수 있습니다.exports.handler = async (event) => {
// TODO include any additional logic here
return {
id: "1234",
name: "Finish blog post",
description: "AWS Amplify is great",
};
};
다시 한 번, 우리는 변경 사항을 업데이트하기 위해 amplify push
를 실행해야 한다.그런 다음 AppSync 콘솔에 들어가서 변종을 실행하고 다음 결과를 볼 수 있습니다.이렇게 간단하지, 그렇지!
결과 파서
기술적으로 말하자면, 그것은 제목이 말한 것처럼 직접적인 람바다 해석기가 아니다.AppSync 모드를 보면 Amplify가 실제로 만들어 놓은 것을 볼 수 있습니다Pipeline resolver.
파이핑 파서에서는 여러 함수를 GraphQL API에 대한 단일 호출로 조합할 수 있습니다.함수에 앞서 Velocity 템플릿을 호출하여 GraphQL이 입력한 데이터를 Lambda 이벤트에 비추는 것을 실현합니다.각 함수 뒤에 다른 Velocity 템플릿을 실행하여 이전 함수의 데이터를GraphQL 응답에 매핑합니다.
내가 보기에 이것은 반드시 나쁜 일은 아니다.호출 해상도는 현재 Lambda 함수가 실행되기 전과 그 다음에 Velocity 템플릿을 실행해야 하기 때문에, 최소한의 실행 속도를 희생할 수 있습니다. 그러나 링크 함수가 추가 논리를 포함하도록 실행하는 등 중요한 일을 할 수 있습니다.
예를 들어, 우리가 메시지를 보내는 논리를 추가하고 삭제하려면, 메시지를 보내는 함수를 만들고 여러 해상도에서 다시 사용할 수 있습니다.
type Mutation {
addTodo(input: AddTodoInput!): Todo
@function(name: "addTodo-${env}")
@function(name: "sendMessage-${env}")
removeTodo(id: ID!): Todo
@function(name: "removeTodo-${env}")
@function(name: "sendMessage-${env}")
}
Todo
를 사용하여 변경 사항을 밀어 넣고 AppSync 콘솔을 보면 파이프 해석기를 형성하는 두 가지 함수를 연결할 수 있습니다.
AWS Amplify는 새로운 AppSync API를 만들고 제공하는 것을 매우 쉽게 할 뿐만 아니라, 상자를 열면 바로 사용할 수 있는 해상도가 당신의 모든 요구를 충족시키지 못하면, Lambda 해상도를 사용하는 것도 마찬가지로 쉽습니다. 우리가 보듯이.
Reference
이 문제에 관하여(AWS 확대가 있는 직접 Lambda 분해기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://dev.to/aws-builders/direct-lambda-resolvers-with-aws-amplify-3af3
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
type Mutation {
addTodo(input: AddTodoInput!): Todo
@function(name: "addTodo-${env}")
@function(name: "sendMessage-${env}")
removeTodo(id: ID!): Todo
@function(name: "removeTodo-${env}")
@function(name: "sendMessage-${env}")
}
Reference
이 문제에 관하여(AWS 확대가 있는 직접 Lambda 분해기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/aws-builders/direct-lambda-resolvers-with-aws-amplify-3af3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)