API Gateway 事始め〜 触って覚えるAPI Gateway 〜
2016/06/24 JAWS-UG名古屋 AWS勉強会 第12回
自己紹介青池 利昭
▷ 兵庫県尼崎市出身
▷ cloudpack 大阪で MSP開発 やってます
▷ お酒が大好きです!!
▷ facebook: aoike.toshiaki
facebookでC3(Can Convenience Club) やってます!
アジェンダ
❏ API Gatewayの特徴
❏ API Gatewayの使い方(ハンズオン)
❏ API Gatewayのハマリどころ
ー API Gatewayの特徴 ー
API Gatewayの特徴
❏ API の作成、配布等をマネージドに管理
❏ APIのステージ、バージョン管理
❏ いろいろと出来るセキュリティ機能
❏ 既存のサービスのフロントエンドにもなる
❏ Lambdaを使えばEC2レスなサービスの作成が可能
etc…
API Gatewayの特徴
何はなくともマネージド!!
API Gatewayの特徴
ロジックに集中出来る
これが重要!!
ー API Gatewayの使い方 ー
API Gatewayの使い方
APIの作成
リソースとメソッドを設定
ステージにデプロイ(ここで初めて外部に公開可能となる)
1
2
3
APIの用意
❏ New API(1から自分で作成)
❏ Clone from existing API(既存のAPIからクローンを作成)
❏ Import from Swagger(Swaggerの定義から生成)
❏ Example API(提供されているサンプルを使って作成)
etc…
New API
❏ 自分で一から設定していく
❏ 特に難しいことはない
Clone from existing API
❏ 既存のAPIの複製を作成 実はハマリどころ有り
Import from Swagger
❏ Swagger Spec Fileを取り込んで作成
What is Swagger ?
❏ RESTful APIの記述標準化を目指す規格
RESTful ?❏ RESTの定義に従った REpresentational State Transfer
❏ リソースベースでURIをもってアクセス
❏ HTTPメソッドを利用したCRUD
etc…
Web API❏ よくあるXMLやJSONで結果を返すたりしてくれるサービスなど
❏ RESTといえばだいたいこっちを指している事が多い
etc…
Swaggerのメリット
❏ 仕様書のフォーマットの統一
❏ テキストベースで編集も可能
❏ コードと一緒にバージョン管理が可能
❏ 複製が作りやすい
❏ Swagger UIを利用してAPIの動作確認が出来る
etc…
Example API
❏ サンプルから作成(このサンプルのJSONは編集できない)
Example API
❏ このようにリソースとメソッドが自動で作成される
メソッド
❏ 定義可能なメソッド
代表的なものは利用可能
DELETE PATCH
GET POST
HEAD PUT
OPTIONS
機能
❏ 利用可能な機能
Lambda
HTTP Proxy
Mock
AWS Proxy
1st Step
❏ New API を選択して API name に handson と入力して Create API を押下
Mock Integrationを指定して保存
Integration Response を選択
Integration Response を選択
ダミーのレスポンスを返す設定を実施
テストを実行するとMockに設定した値が取得出来る
Lambdaを作成(コードは https://goo.gl/DEKa2c からダウンロードできます)
ブラウザで確認
❏ キャッシュが効いている場合は値がMockのままになるのでブラウザをスーパーリ
ロードするかセッションを分けてアクセスして下さい。
ブラウザで確認
❏ キャッシュが効いている場合は値がMockのままになるのでブラウザをスーパーリ
ロードするかセッションを分けてアクセスして下さい。
APIキーをヘッダに指定してリクエストを送信
❏ リクエストヘッダに x-api-key を追加して API キーを指定すると期待している結果
を得ることができる。
APIキーをヘッダに指定してリクエストを送信
ー CORS (Cross-Origin Resource Sharing) 設定 ー
ー API Gatewayのハマリどころ ー
API Gatewayのハマリどころ
❏ APIをクローンしたまま使うとLambdaのアクセス権限が付与されておらずぱっと見
問題無い設定に見えるが動かない
❏ Lambda呼び出しの際に「Invoke with caller credentials」を指定するとリクエスト時
のIAM指定してLambdaを実行出来るが、このIAMにLambdaの実行権限がないと
Lambdaが発火しない
❏ Lambda(Python2.7)をバックエンドにするとRequestデータがJSON形式でないと
発火しない
❏ API Gateway UIの使いにくさ(設定変更時に レ を押さないと反映されない)
etc…
etc…
参考
❏ IP制限できないの?
→ CloudFront(WAF)+ APIキー認証で絞りましょう
→ マッピングテンプレートを使ってSourceIpを取得しコードでブロック
❏ HTTPでアクセスしたい
→ CloudFrontでHTTPからHTTPSにリダイレクトしましょう
❏ 後ろがLambda(Python 2.7)の場合にJson形式以外の値を処理したい
→ マッピングテンプレートを使ってJson形式に変更しちゃいましょう
AWS Black Belt Tech シリーズ 2015 - Amazon API Gateway
❏ http://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-tech-
2015-amazon-api-gateway
cloudpack wants you !!
開発・インフラ・デザイナーを募集しています
https://cloudpack.jp/recruit/