20160624 jaws-ug名古屋 第12回 api gateway 事始め

104
API Gateway 事始め 触って覚えるAPI Gateway 2016/06/24 JAWS-UG名古屋 AWS勉強会 12

Upload: aoike-toshiaki

Post on 14-Apr-2017

594 views

Category:

Internet


3 download

TRANSCRIPT

Page 1: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

API Gateway 事始め〜 触って覚えるAPI Gateway 〜

2016/06/24 JAWS-UG名古屋 AWS勉強会 第12回

Page 2: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

自己紹介青池 利昭

 ▷ 兵庫県尼崎市出身

 ▷ cloudpack 大阪で MSP開発 やってます

 ▷ お酒が大好きです!!

 ▷ facebook: aoike.toshiaki

facebookでC3(Can Convenience Club) やってます!

Page 3: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

アジェンダ

❏ API Gatewayの特徴

❏ API Gatewayの使い方(ハンズオン)

❏ API Gatewayのハマリどころ

Page 4: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ー API Gatewayの特徴 ー

Page 5: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

API Gatewayの特徴

❏ API の作成、配布等をマネージドに管理

❏ APIのステージ、バージョン管理

❏ いろいろと出来るセキュリティ機能

❏ 既存のサービスのフロントエンドにもなる

❏ Lambdaを使えばEC2レスなサービスの作成が可能

etc…

Page 6: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

API Gatewayの特徴

何はなくともマネージド!!

Page 7: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

API Gatewayの特徴

ロジックに集中出来る

これが重要!!

Page 8: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ー API Gatewayの使い方 ー

Page 9: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

API Gatewayの使い方

   APIの作成

   リソースとメソッドを設定

   ステージにデプロイ(ここで初めて外部に公開可能となる)

1

2

3

Page 10: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ー まずは説明 ー

Page 11: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

APIの用意

❏ New API(1から自分で作成)

❏ Clone from existing API(既存のAPIからクローンを作成)

❏ Import from Swagger(Swaggerの定義から生成)

❏ Example API(提供されているサンプルを使って作成)

etc…

Page 12: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

New API

❏ 自分で一から設定していく

❏ 特に難しいことはない

Page 13: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Clone from existing API

❏ 既存のAPIの複製を作成 実はハマリどころ有り

Page 14: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Import from Swagger

❏ Swagger Spec Fileを取り込んで作成

Page 15: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

What is Swagger ?

❏ RESTful APIの記述標準化を目指す規格

Page 16: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

RESTful ?❏ RESTの定義に従った REpresentational State Transfer

❏ リソースベースでURIをもってアクセス

❏ HTTPメソッドを利用したCRUD

etc…

Page 17: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Web API❏ よくあるXMLやJSONで結果を返すたりしてくれるサービスなど

❏ RESTといえばだいたいこっちを指している事が多い

etc…

Page 18: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Swaggerのメリット

❏ 仕様書のフォーマットの統一

❏ テキストベースで編集も可能

❏ コードと一緒にバージョン管理が可能

❏ 複製が作りやすい

❏ Swagger UIを利用してAPIの動作確認が出来る

etc…

Page 19: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Example API

❏ サンプルから作成(このサンプルのJSONは編集できない)

Page 20: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Example API

❏ このようにリソースとメソッドが自動で作成される

Page 21: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

メソッド

❏ 定義可能なメソッド

代表的なものは利用可能

DELETE PATCH

GET POST

HEAD PUT

OPTIONS

Page 22: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

機能

❏ 利用可能な機能

Lambda

HTTP Proxy

Mock

AWS Proxy

Page 23: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ー ここからハンズオン ー

Page 24: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

1st Step

Page 25: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

1st Step

❏ New API を選択して API name に handson と入力して Create API を押下

Page 26: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Resourceを準備

Page 27: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

GET Methodを追加

Page 28: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Mock Integrationを指定して保存

Page 29: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Integration Response を選択

Page 30: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Integration Response を選択

Page 31: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ダミーのレスポンスを返す設定を実施

Page 32: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ここまで出来たら一旦テスト

Page 33: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

テストを実行するとMockに設定した値が取得出来る

Page 34: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

APIをデプロイ

Page 35: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ステージを設定してデプロイ

Page 36: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

デプロイ完了

Page 37: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ブラウザで確認

Page 38: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Lambdaを作成

Page 39: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Lambdaを作成

Page 40: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Lambdaを作成

Page 41: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Lambdaを作成(コードは https://goo.gl/DEKa2c からダウンロードできます)

Page 42: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Lambdaを作成

Page 43: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Lambdaを作成

Page 44: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Lambdaを作成

Page 45: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Lambdaを作成

Page 46: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Lambdaを作成

Page 47: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Mock→Lambdaに変更

Page 48: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Mock→Lambdaに変更

Page 49: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Mock→Lambdaに変更

Page 50: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

重要!!

Page 51: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

Mock→Lambdaに変更

Page 52: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

テスト

Page 53: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

APIをデプロイ

Page 54: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ステージを設定してデプロイ

Page 55: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

デプロイ完了

Page 56: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ブラウザで確認

❏ キャッシュが効いている場合は値がMockのままになるのでブラウザをスーパーリ

ロードするかセッションを分けてアクセスして下さい。

Page 57: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ー API キーを設定 ー

Page 58: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

APIキーを作成

Page 59: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

APIキーを作成

Page 60: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

APIキーの利用設定

Page 61: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

APIキーの利用設定

Page 62: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

APIをデプロイ

Page 63: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ステージを設定してデプロイ

Page 64: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

デプロイ完了

Page 65: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ブラウザで確認

❏ キャッシュが効いている場合は値がMockのままになるのでブラウザをスーパーリ

ロードするかセッションを分けてアクセスして下さい。

Page 66: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

APIキーの確認

Page 67: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

APIキーをヘッダに指定してリクエストを送信

❏ リクエストヘッダに x-api-key を追加して API キーを指定すると期待している結果

を得ることができる。

Page 68: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

APIキーをヘッダに指定してリクエストを送信

Page 69: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ー CORS (Cross-Origin Resource Sharing) 設定 ー

Page 70: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

CORSを有効にする

Page 71: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

CORSを有効にする

Page 72: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

CORSを有効にする

Page 73: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

CORSを有効にする

Page 74: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

APIをデプロイ

Page 75: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ステージを設定してデプロイ

Page 76: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

デプロイ完了

Page 77: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ー WAF ー

Page 78: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ルールの新規作成

Page 79: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ルールの新規作成

Page 80: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ルールの設定(IP制限)

Page 81: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ルールの設定(IP制限)

Page 82: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ルールの完成

Page 83: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ACLの作成

Page 84: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

デフォルトのまま

Page 85: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

先に作ったルールを割り当て

Page 86: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ACLを作成

Page 87: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

これにてWAFの作成完了

Page 88: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

CloudFrontの作成

Page 89: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

CloudFrontの作成

Page 90: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

CloudFrontの作成

Page 91: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

CloudFrontの作成

Page 92: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

CloudFrontの作成

Page 93: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

CloudFrontの作成

Page 94: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

CloudFrontの作成

Page 95: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

アクセスしてみる

Page 96: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

アクセスしてみる(未許容のIP)

Page 97: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ー API Gatewayのハマリどころ ー

Page 98: 20160624 JAWS-UG名古屋 第12回 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…

Page 99: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ー 参考 ー

Page 100: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

参考

❏ IP制限できないの?

→ CloudFront(WAF)+ APIキー認証で絞りましょう

→ マッピングテンプレートを使ってSourceIpを取得しコードでブロック

❏ HTTPでアクセスしたい

→ CloudFrontでHTTPからHTTPSにリダイレクトしましょう

❏ 後ろがLambda(Python 2.7)の場合にJson形式以外の値を処理したい

→ マッピングテンプレートを使ってJson形式に変更しちゃいましょう

Page 101: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

AWS Black Belt Tech シリーズ 2015 - Amazon API Gateway

❏ http://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-tech-

2015-amazon-api-gateway

Page 102: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

最後に

Page 103: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

cloudpack wants you !!

開発・インフラ・デザイナーを募集しています

https://cloudpack.jp/recruit/

Page 104: 20160624 JAWS-UG名古屋 第12回 API Gateway 事始め

ご清聴ありがとうございました