LamveryにSwaggerベースのちょっとリッチな機能付きAPI Gateway integrationを追加しました
経緯
API Gatewayの"x-amazon-apigateway-integration"っていう独自要素に色々突っ込んでるSwagger記述サンプルを見て複雑な気持ちになってる
— Masashi Terui (@marcy_terui) April 11, 2016
書いたコードをサクッと上げてサクッとWebから叩ける用にしたいだけなのに何故こんなにJSONを書かないといけないのか
— Masashi Terui (@marcy_terui) April 11, 2016
ということでサクッとAPIが定義できるようにしました。
ここで説明しないインストール方法や使い方の詳しい情報はGitHubのREADMEやQiitaの記事でご確認ください。
使い方(コマンド)
lamvery api [-d] [-n] [-r] [-s <stage-name>] [-w]
-d
は恒例のDry run!!-n
が後述の自動オプション付加の無効化-r
で削除-s
はAPI Gatewayで言うステージ(dev,prod環境使い分けるとかに使う)-w
で新規作成時に設定ファイルにAPIを識別する番号を保存(更新する時に指定しなくて良いようにする)
設定
こんな感じで設定を書きます。
api_id: myipugal74 stage: dev cors: origin: '*' methods: - GET - OPTION headers: - Content-Type - X-Amz-Date - Authorization - X-Api-Key configuration: swagger: '2.0' info: title: Sample API schemes: - https paths: /: get: produces: - application/json parameters: - name: sample in: query required: false type: string responses: '200': description: 200 response schema: $ref: '#/definitions/Sample' definitions: Sample: type: object
ちなみにこれとほぼ同じ雛形は以下のコマンドで生成できます。
lamvery init
で、本来ならこれをAPI Gateway
でLambda
backendによって動かすためには x-amazon-apigateway-integration
っていう要素に色々突っ込まないといけないわけですが、その辺は同じくLamvery
でデプロイしたFunctionに向くように自動でよしなにやってくれるという感じです。
差分表示
こんな感じでDiffっぽくSwagger定義の差分が見れます。Dry runにすれば事前に確認だけすることが可能。
最後に
これぐらいサクッと書いてサクッとAPI公開できると「ああ、サーバレスっていいなあ」って思えそうな感じ。
ただ、認証の定義とかは未対応だし、自動オプション付加のやり方とかもうちょっとスマートに出来ないか悩み中で、もしアイデアあればいただけると嬉しいです。
-n
(x-amazon-apigateway-integration
の自動付加をしないオプション)をつければ単純に差分表示&Dry run対応のSwagger importerとしても使えるので、良かったら使ってみてご意見ください。
明日、ぺちかん北海道なのに俺、何やってんだ。。。