16
5

More than 5 years have passed since last update.

HTTP POSTでAPI Gatewayを経由してSQSにエンキューする

Posted at

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}}}

メッセージ到達確認

マネジメントコンソールから
sendsqs-dev-message-test.jpg

来てますね。OKです。

おわり

非同期でSQSをポーリングして何かする仕組みは別途用意する感じで。

ServerlessFreamworkのAWS ServiceProxy (2018/05)

2018/5現在でServerlessFreamwork標準でLambda作らずAWS Service Proxyを使う方法は現在無さげです。(関連issue)

今回ほぼCloudFormationしか使っておらず、同じことをやる場合に敢えてServerlessを使う必要はないと思います。今の所はServerlessで既に作成しているAPIと同じエンドポイントを利用したいケース、コード管理でやり方統一したいとき等にはServerlessを使う利点があるかもしれません。

参考

16
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
16
5