AWS 확대가 있는 직접 Lambda 분해기

AWS Amplify 대박이다.클라우드 기반 웹 응용 프로그램을 구축하고 제공하는 것은 여태까지 쉽지 않았다.Amplify의 가장 좋은 기능 중 하나는 AWS AppSync를 사용하여 GraphQL API를 신속하게 생성하고 구축하며 패턴 기반 조회와 돌연변이를 사용하여 앞부분과 틈새 없이 협업할 수 있도록 하는 것이다.
기본적으로 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 해상도를 사용하는 것도 마찬가지로 쉽습니다. 우리가 보듯이.

좋은 웹페이지 즐겨찾기