1
/
5

森田ドラゴンのインターンシップ ~31日目~ SwaggerとCORS

こんにちは、高知からリモートインターンしている森田ドラゴンです。この前からSwaggerとCORSの連携で戸惑っています。結論からいうと、実装できなかったので今回は見送ることになりました。できたら、かっこよかったんですが、残念です😇

詰まっていた箇所としては、CORSを許可する設定をSAMに追加する際に、Swaggerと不整合を起こしてエラーが起きていました。

CORSを許可するコード

  Api:
    Cors:
      AllowMethods: "'OPTIONS,POST,GET'"
      AllowHeaders: "'Content-Type'"
      AllowOrigin: "*" 

AWS SAMでCORSを許可するには、上の設定をGlobalセクションか、AWS::Serverless::Apiセクションに追加してあげれば動作するはずです。はず、というのはこの設定を追加したところ、deploy時に以下のエラーを吐いて、検証できていないからです。

エラー

Errors found during import: 
Unable to put integration on 'GET' for resource at path '/weather_list': 
Invalid integration URI specified (Service: AmazonApiGateway; Status Code: 400;
 Error Code: BadRequestException; Request ID: xxxxxxx

このエラーは前回も載せたかもしれません。前回は上記のエラーが「CORSの記述をミスしているから起きているエラー」なのか、「記述が足りていないが故に起きているエラー」なのか、切り分けができていなかったので、エラーの調査に手間取っていました。

とりあえずエラー文をそのまま調べてみるとGithubのissueがヒットします。

エラー文的には、"SAMで生成される、LambdaのバックエンドのURIをハードコーディングしないと、上のエラーがでるよ〜"とかいてあります。(翻訳ミスっていたらすいません)一応ハードコーディングしてみたものの、エラー文は変わらず。リンクは忘れましたが、Fn::Subを用いれば動的にURIを生成可能であるとの報告も発見しました。

方針をざっくり出してみる

エラー文がヒットしなかったので、値を変えつつ、Swagger と aws samのOpenApi(Swagger)拡張について調べていました。なんとなく方針が思いついたので、書き出します。

1. Swagger3.0にアップデートする

エラー文の関連で調べると、https://github.com/awslabs/serverless-application-model/issues/1161 このissueにぶつかりました。内容は、「2.0では使えたけど、3.0では使えない〜」といった内容です。ここではバグだという結論に達していて、解決するかどうかは微妙ですが、新しいバージョンの方がサポートが豊富だと思いますし、書き方も最適化されているはずなので、悪くない選択肢だと思います。

ちなみに変更点は、パラメータの区分けが変わっているみたいなので、結構がっつり変わってます。

2. {proxy+}パラメータについて詳しく調べる

エラー文をちゃんと読んでみると、統合リクエストの設定でエラーが起きているみたいです。統合でリクエストの全てを受け止めることができるパラメータが{proxy+}だそうです。ワイルドカード的な扱いができるのであれば、こちらで細かい設定をしなくてもよしなにやってくれるのでは?と思っています。

3. 諦めてSAMで書く

「Swaggerは今回のオプション課題なので、できなくても無問題」とメンターの森さんが言ってくれました。一番確実性が高いのがこの案なので、今回はSAMだけでやろうと思います。

Swaggerで各メリットは、OpenApiの仕様で記述できることなので、そもそもOpenApiを知らない僕からしたらあまりメリットがないです。Apiの設定等は勉強になったので、完成させたかったです。残念です、CORSがなければ上手くできていたんですかね?Swaggerの定義とSAMの定義がダブっているような箇所があり、そこの検証を後回しにしていたので、まだSwaggerを理解できていません。また勉強し直したいと思います。

株式会社サーバーワークス's job postings

Weekly ranking

Show other rankings
Invitation from 株式会社サーバーワークス
If this story triggered your interest, have a chat with the team?