HTTP POST에서 API Gateway를 통해 SQS에 대기열

APIGateway의 AWS Service Proxy(API Integration/AWS Service)를 사용하면 비교적 간단하게 SQS의 입구를 APIGateway에서 자작할 수 있으므로 Serverless Framework 이용하는 방법을 씁니다.

이미지client ==HttpPost(json)==> API Gateway ==AwsServiceProxy==> SQS
ServerlessFreamwork를 사용한다면 API Gateway -> Lambda -> SQS라는 방법도 취할 수 있지만 API Gateway의 AWS Service Proxy를 사용하면 Lambda를 사이에 만들 필요가 없습니다. 자작 API에 대한 요청 증가하면 Lambda 개입하지 않는 것이 압도적으로 저렴합니다. 복잡한 인증 등 필요하지 않다면 AWS Service Proxy를 사용하는 것이 좋습니다.
AWS Service Proxy의 난점으로서는 설정 항목을 알기 어려운 곳입니까.

설정



serverless의 도입이나 serverless를 두드리는 iam 주위는 생략합니다.

serverless.yml



거의 CloudFormation입니다. yml은 Gist에 넣었습니다.

APIGateway->SQS · GitHub
  • Serverless에서 API Gateway를 만들기 위해 사용하지 않는 LambdaProxy 만들기 (mock)
  • 나중에 SQS 메시지 속성에 임의 값을 부여 할 수 있도록 json에서 post
  • CORS 용 Mock 통합 유형으로 OPTIONS 메소드 설정
  • APIGateway의 APIKey 불필요로 기재되어 있지만 기본적으로 이용 권장
  • IAM Policy는 SQS FullAccess에서 가바가바

  • deploy


    $ serverless deploy
    

    말할 필요도 없다.

    테스트



    기기에서 API 끝점으로 POST에서 JSON 문자열을 보내 확인

    request(post)
    $ curl -i -X POST -d "{"message":"test"}" \
    -H "Content-Type: application/json" \
    https://<apigateway-endpint>/dev/send
    

    response
    HTTP/1.1 200 OK
    Content-Type: application/json
    Content-Length: 276
    Connection: keep-alive
    Date: Sun, 06 May 2018 17:17:22 GMT
    ......
     略
    ......
    
    {"SendMessageResponse":{"ResponseMetadata":{"RequestId":"50238bdd-aa56-55b7-9675-d8b490b428b5"},"SendMessageResult":{"MD5OfMessageAttributes":null,"MD5OfMessageBody":"098f6bcd4621d373cade4e832627b4f6","MessageId":"ac3b9630-cd8c-4ae5-89db-5699c7874fda","SequenceNumber":null}}}
    

    메시지 도달 확인



    관리 콘솔에서


    와요. OK입니다.



    비동기로 SQS를 폴링하고 뭔가하는 구조는 별도 준비하는 느낌으로.

    ServerlessFreamwork용 AWS ServiceProxy (2018/05)



    2018/5 현재 ServerlessFreamwork 표준으로 Lambda를 만들지 않고 AWS Service Proxy를 사용하는 방법은 현재 무사합니다. ( 관련 이슈 )

    이번에 거의 CloudFormation 밖에 사용하지 않고, 같은 일을 하는 경우에 감히 Serverless를 사용할 필요는 없다고 생각합니다. 지금은 Serverless에서 이미 작성하고 있는 API와 같은 엔드포인트를 이용하고 싶은 경우, 코드 관리에서 방식 통일하고 싶을 때 등에는 Serverless를 사용하는 이점이 있을지도 모릅니다.

    참고


  • AWS 통합으로 API Gateway API 빌드 - Amazon API Gateway
  • Connect AWS Api Gateway to SQS – Daws Blog
  • Creating an AWS Service Proxy for Amazon SQS - DZone Cloud
  • 좋은 웹페이지 즐겨찾기