API Gateway의 request validation을 serverless framework로 배포
Api Gateway request validation
api gateway에는 request validation이라는 검증 기능이 있습니다. 물론 api gateway에 붙이는 lambda등으로 요구의 검증을 하는 것도 가능합니다만, lambda에는 비즈니스 로직만을 포함하고 싶다고 하는 경우에는 편리한 기능입니다.
방법
공식 serverless framework에는 request validation 배포가 포함되어 있지 않으므로
serverless-reqvalidator-plugin
와 serverless-aws-documentation
를 결합하여 배포를 실현합니다.최종 코드를 git에 업로드하고 있습니다.
htps : // 기주 b. 코 m / 후 ゔ ぇ 510 / 세 r ゔ ぇ r
a 이번에 사용한 플러그인
htps : // 기주 b. 이 m / da ゔ ぇ ry 헤로 / r r r r ぇ
htps //w w. 음 pmjs. 코 m / Pac 가게 / 세 r
이번은 기사의 등록을 하는 api를 소재로,
author
, contents
, title
구현을 해 봅니다.1. 문서화와 모델 만들기
serverless.yml에 다음과 같이 설명
service: serverless-blog-api
plugins:
- serverless-reqvalidator-plugin
- serverless-aws-documentation
custom:
documentation:
api:
info:
version: '1.0.0'
title: Aritcle API
description: This is article API
tags:
-
name: Article
description: Article Management
models:
- name: articleModel
contentType: "application/json"
schema: ${file(model/article.json)}
model/article.json에 json schema 형식으로 ( htps : // j 그렇습니다. rg/ )로 모델을 기재
{
"title": "articleModel",
"type": "object",
"properties": {
"author": {
"type": "string"
},
"contents": {
"type": "string"
},
"title": {
"type": "string"
}
},
"required": ["author", "contents","title"]
}
2. serverless.yml의 Resource로 RequestValidator 만들기
이번에는 요청 본문 유효성 검사 만 활성화했습니다.
resources:
Resources:
# APIG
ApiGatewayRestApi:
Type: AWS::ApiGateway::RestApi
Properties:
Name: article-api
# APIG Request Validation
onlyBody:
Type: "AWS::ApiGateway::RequestValidator"
Properties:
Name: 'only-body'
RestApiId:
Ref: ApiGatewayRestApi
ValidateRequestBody: true
ValidateRequestParameters: false
3. function에 requestModels로서 RequestValidator를 붙인다
serverless.yml에 다음과 같이 설명
functions:
postArticle:
handler: handlers/article.put_article_handler
name: postArticle
memorySize: 1024
timeout: 300
events:
- http:
path: /article
method: post
integration: lambda-proxy
reqValidatorName: 'onlyBody'
cors:
origin: '*'
headers:
- Content-Type
- X-Amz-Date
- Authorization
- X-Api-Key
- X-Amz-Security-Token
- X-Amz-User-Agent
- Pragma
- Cache-Control
- If-Modified-Since
allowCredentials: true
documentation:
summary: "Post a article"
description: "Post a article"
requestModels:
"application/json": "articleModel"
4. 해당 lambda handler를 작성
import json
def put_article_handler(event,context):
article_info = json.loads(event['body'])
author = article_info['author']
contents = article_info['contents']
title = article_info['title']
return {
"isBase64Encoded": True,
"statusCode": 200,
"headers": {
'Access-Control-Allow-Origin': '*',
'Access-Control-Allow-Credentials': 'true'
},
"body": json.dumps({'msg': 'ok'})
}
5. 배포
친숙한 사람
sls deploy
유효성 검사가 유효한지 확인
api gateway > 리소스 > 테스트
body에 아무것도 포함하지 않고 테스트하면 오류가 반환되는 것을 확인할 수 있습니다.
테스트 어떻게 하는 문제
validation을 lambda 내부에서 가지고 있는 경우는 handler에 이상계의 파라미터를 넣고 있었지만, request validation을 사용하는 경우는 이상계의 테스트는 e2e test로 보충할 필요가 있을 것 같다. 그 경우는 로컬 개발 환경에서 테스트가 완결되지 않기 때문에 staging 환경 있음의 개발이 된다. 미묘.
Reference
이 문제에 관하여(API Gateway의 request validation을 serverless framework로 배포), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/picapica/items/1a47847d3beb689a5740텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)