Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2....
Transcript of Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2....
![Page 1: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/1.jpg)
Build, Deploy & Manage your APIsAmazon API Gateway概要
Amazon Data Service Japan K.K.
Solutions Architect
Keisuke Nishitani(@Keisuke69)
2015.08.25 update
![Page 2: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/2.jpg)
自己紹介{
"Name" : "西谷圭介",
"Twitter" : "@Keisuke69",
"Profile" : {
"Role" : "Solution Architect",
"Customers": [
"Web Services",
"Start-up"
],
"Services" : [
"AWS Lambda",
"Amazon API Gateway",
"All Mobile Services"
]
}
}
![Page 3: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/3.jpg)
Look Back API, again
![Page 4: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/4.jpg)
API
• Application Programming Interface
• アプリケーションから利用する処理のためのインターフェース
• WebAPI– Webベースのシステムで用意される
– HTTPをベースにデータをやり取りする
– SOAP、REST
![Page 5: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/5.jpg)
急速に増えるAPI
2418
10302
0
2000
4000
6000
8000
10000
12000
6-0
5
10
-05
2-0
6
6-0
6
10
-06
2-0
7
6-0
7
10
-07
2-0
8
6-0
8
10
-08
2-0
9
6-0
9
10
-09
2-1
0
6-1
0
10
-10
2-1
1
6-1
1
10
-11
2-1
2
6-1
2
10
-12
2-1
3
6-1
3
10
-13
*Data from ProgrammableWeb
http://www.programmableweb.com/
![Page 6: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/6.jpg)
APIの重要性
• エコシステムを形成できる• システム間連携
– 外部サービスとの連携– その逆も
• 疎結合(マイクロサービス)– フロントエンドとバックエンドのデカップリング
• フロントエンドの多様化– HTML5/JS– モバイルアプリ
• IoTによる接続されるデバイスの多様化
![Page 7: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/7.jpg)
AWSには数多くのAPI
AWS自身がAPIを提供する中で多くの教訓を得ている
![Page 8: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/8.jpg)
API管理の課題
![Page 9: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/9.jpg)
API管理の課題
提供するAPIのバージョン管理
API利用状況のモニタ、管理とマネタイズ
APIに対する認証とアクセス権の管理
トラフィック管理とAPIエンドポイントのアタックからの保護
インフラのセットアップおよび管理とメンテナンス
![Page 10: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/10.jpg)
クラウドネイティブ世代のAPI管理サービス
![Page 11: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/11.jpg)
Amazon API Gateway
![Page 12: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/12.jpg)
Amazon API Gateway
提供するAPIのバージョン管理
API利用状況のモニタ、管理とマネタイズ
APIに対する認証とアクセス権の管理
トラフィック管理とAPIエンドポイントのアタックからの保護
インフラのセットアップおよび管理とメンテナンス
![Page 13: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/13.jpg)
Amazon API Gateway
複数バージョンとステージ
API利用状況のモニタ、管理とマネタイズ
APIに対する認証とアクセス権の管理
トラフィック管理とAPIエンドポイントのアタックからの保護
インフラのセットアップおよび管理とメンテナンス
![Page 14: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/14.jpg)
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
APIに対する認証とアクセス権の管理
トラフィック管理とAPIエンドポイントのアタックからの保護
インフラのセットアップおよび管理とメンテナンス
![Page 15: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/15.jpg)
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利用
トラフィック管理とAPIエンドポイントのアタックからの保護
インフラのセットアップおよび管理とメンテナンス
![Page 16: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/16.jpg)
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利用
リクエストのスロットリングとモニタリング
インフラのセットアップおよび管理とメンテナンス
![Page 17: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/17.jpg)
Amazon API Gateway
複数バージョンとステージ
APIキーの作成と配布
リクエスト時におけるAWS SigV4の利用
リクエストのスロットリングとモニタリング
バックエンドとしてAWS Lambdaが利用可能
![Page 18: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/18.jpg)
AWS Lambda
![Page 19: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/19.jpg)
AWS Lambda
• インフラを一切気にすることなくアプリケーションコードを実行できるコンピュートサービス– 実行基盤は全てAWSが管理
– AWSサービスと連携させることで簡単にイベントドリブンなアプリケーションを実装可能
– コード実行時間に対しての課金でありコスト効率が非常に高い
![Page 20: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/20.jpg)
Amazon API Gateway
レスポンスをキャッシュ可能
CloudFrontを利用したレイテンシの軽減とDDoS対策
iOS、AndroidとJavaScript向けSDKの自動生成
Swaggerのサポート
Request / Responseにおけるデータ変換
![Page 21: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/21.jpg)
従来のアーキテクチャ
・認証API
・データ保存API
Web DB
LB
![Page 22: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/22.jpg)
クラウドネイティブなアーキテクチャ
Lambda(ロジック)
API GatewayDynamoDB(データ保存)
![Page 23: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/23.jpg)
サーバレスで全部できます
![Page 24: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/24.jpg)
サーバレスで全部できます
やりたいことだけに集中できる
![Page 25: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/25.jpg)
サーバレスで全部できます
ビジネスロジックだけに集中できる
![Page 26: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/26.jpg)
![Page 27: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/27.jpg)
クラウドファーストからクラウドネイティブへ
![Page 28: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/28.jpg)
REST APIについて
![Page 29: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/29.jpg)
RESTとは
• Representational State Transfer
• Roy Fieldingが提唱したWebのソフトウェアアーキテクチャの1つ
• RESTの原則に則ったAPIをRESTfulという
![Page 30: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/30.jpg)
RESTの特徴
• リソース指向
• URIによるリソースの識別
• ステートレス
• HTTPメソッドを利用した操作
![Page 31: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/31.jpg)
リソース指向
• リソースとは名前を持つあらゆる情報のこと– 東京の天気– 今日のニュース– Amazonの株価
• 全てのリソースはURIで表現する– URIがリソースそのものを示す– URIとは1対1の関係
• 時間、条件によって「状態」は変わり得るが、その「意味」は変わることはない
![Page 32: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/32.jpg)
URI
• Uniform Resource Identifier
• リソースを特定するもの– 例)https://api.example.com/resouces/1234
• 名詞で構成– 表現するのはあくまでもリソースでありアクションではない
– URIのパス内に動詞が存在しないのが基本(名詞のみ)
![Page 33: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/33.jpg)
ステートレス
• クライアントとサーバ間の接続に状態を持たない
• (理想は)リクエストの1つ1つにそれを処理するにあたって必要な情報を全て含むこと
• 状態を持たないのでスケーラビリティの確保が容易になる
![Page 34: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/34.jpg)
例:ステートフルなやり取り
いらっしゃいませ。○○バーガーへようこそ
ハンバーガーセットをください
サイドメニューはいかがなさいますか?
ポテトをください
ドリンクはいかがなさいますか?
はい
コーラをお願いします
以上でよろしいですか?
お会計は◯◯円になります
![Page 35: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/35.jpg)
例:ステートレスなやり取り
いらっしゃいませ。○○バーガーへようこそ
ハンバーガーセットをください
サイドメニューはいかがなさいますか?
ハンバーガーセットをポテトでお願いします
ドリンクはいかがなさいますか?
ハンバーガーセットをポテトとコーラでお願いします
ハンバーガーセットをポテトとコーラでお願いします
以上でよろしいですか?
お会計は◯◯円になります
![Page 36: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/36.jpg)
HTTPメソッド
• URIで示すリソースに対して何を行うかで利用するメソッドを選択する
• HTTPで定義されているメソッドを利用• GET/POST/PUT/DELETEおよびPATCHを主に利用する
HTTPメソッド 意味 CRUDとの対応
GET リソースの取得 READ
POST 子リソースの作成 CREATE
PUT リソースの更新(既存URI)リソースの作成(新規URI)
UPDATE
CREATE
DELETE リソースの削除 DELETE
PATCH リソースの部分更新 UPDATE
![Page 37: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/37.jpg)
POST、PUTそしてPATCH
• POSTとPUTはともにリソースの作成が行える– リソースの作成には一般的にはPOSTを利用
– PUT• クライアントが指定したURIのリソースを作成
• クライアント側でリソース名を作成する
• サーバ側の命名規則等を知っている必要がある(密結合と言える)
• 冪等
– POST• リソース名はサーバによって作成される
• クライアントが指定するURIはあくまでも親リソース
• サーバによって子リソースのURIが作成される
• PUTとPATCH– PUTは指定したリソース全体を更新、PATCHはリソースの一部を更新
![Page 38: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/38.jpg)
HTTPステータスコード
• 処理の実行結果はHTTPステータスコードで表現– HTTPステータスコードに意図を込める
• 400系はクライアント系のエラー– クライアントのリクエストに問題がある場合
– 指定されたリソースが見つからない、など
• 500系はサーバサイドのエラー– サーバがリクエストの処理を失敗した場合
![Page 39: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/39.jpg)
HTTPステータスコードHTTPステータスコード 意味 例
200 OK リクエストに成功し、情報とともにレスポンスを返す場合 GETによるリソース情報の参照
201 CREATED リクエストは成功し、新しく作成されたリソースが返される POSTによるリソース作成
204 NO CONTENT リクエストに成功したが、レスポンスのエンティティが何もない場合
DELETEによる削除
400 BAD REQUEST リクエスト不正。クライアントのリクエストがおかしい場合 定義されていないメソッドを使用した場合、リクエストボディのJSONフォーマットがおかしい場合
401 UNAUTHORIZED 認証が必要 認証が必要なURLに対して、未認証でアクセスした場合
403 FORBIDDEN リソースへのアクセスが拒否された アクセス権のないリソースにアクセスした場合
404 NOT FOUND リソースが見つからなかった場合 存在しないリソースへのGET
409 CONFRICT 現在のリソースと競合する場合 作成・更新しようとしたデータがユニーク制約等でエラーになる場合
500 INTERNAL
SERVER ERROR
サーバ内部エラー 処理中の例外などサーバ側エラー全般
![Page 40: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/40.jpg)
Amazon API Gatewayの動作
![Page 41: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/41.jpg)
APIコールの流れ
Internet
Mobile Apps
Websites
Services
API
Gateway
AWS Lambda
functions
AWS
API Gateway
Cache
Endpoints on
Amazon EC2 /
Amazon
Elastic
Beanstalk
Any other publicly
accessible endpointAmazon
CloudWatch
Monitoring
![Page 42: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/42.jpg)
API作成の流れ
1. 新規APIセットを作成
2. リソースおよびメソッドを定義– メソッドを作成した時点でテスト可能となる– 外部に公開はまだされていない状態
3. ステージへのデプロイ– ステージは本番、開発といったデプロイ環境の管理を楽にしてくれる概念– 各ステージごとにロギング、スロットリング、モニタリング、キャッシュの設定が可能
4. クローン– 既存のものをクローンして新規バージョンとしてデプロイすることが可能
5. ロールバック– 各ステージごとに300回分のデプロイ履歴を保持しており、いつでも過去バージョンに戻すことが可能
![Page 43: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/43.jpg)
API詳細
• API自身を最上位とした階層構造になっている
• API内にリソースを定義– 複数定義
– リソース名がURLのパスの一部となる
– ネストすることも可能 ex) /pets/{petId}
• 各リソースにメソッドを定義– メソッドはリソース+HTTPメソッドで構成される
– スタンダードな7つのHTTPメソッドをサポート
Pet Store
/pets
/pets/{petId}
• GET
• POST
• PUT
![Page 44: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/44.jpg)
APIのデプロイ
• APIはステージにデプロイされる
• ステージはそれぞれ個別の環境を表す
• ステージ名はURIの一部となる– 例:
Dev (e.g. awsapigateway.com/dev)
Beta (e.g. awsapigateway.com/beta)
Prod (e.g. awsapigateway.com/prod)
Pet Store
dev
beta
gamma
prod
![Page 45: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/45.jpg)
APIの複数バージョンとステージ
API 1 (v1)
Stage (dev)
Stage (prod)
API 2 (v2)
Stage (dev)
![Page 46: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/46.jpg)
APIの呼び出し
• デプロイ後から呼び出し可能– 呼び出したいメソッドにも寄るがシンプルなGETなどの場合ブラウザ上からも可能
• my-api-id– API作成時に払い出される識別子
• region-id– APIが作成されたリージョン
• stage-name– 呼び出したいAPIがデプロイされているステージ
https://my-api-id.execute-api.region-id.amazonaws.com/stage-name/{resourcePath}
![Page 47: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/47.jpg)
独自ドメイン
• エンドポイントとして独自ドメインを利用可能– 独自ドメインでAPI提供が可能
– SSL証明書を用意し、API Gatewayにアップロードする
– 利用しているDNSにDistribution Domain Nameに対するCNAMEとして登録する
• API全体だけでなく、特定環境(ステージ)のみを独自ドメインで
提供することも可能
• 全ステージにアクセス可能なAPIの指定– Beta (e.g. yourapi.com/beta)
– Prod (e.g. yourapi.com/prod)
• “prod”ステージを直接指定– Prod (e.g. yourapi.com/)
![Page 48: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/48.jpg)
ダッシュボード
• API Calls– 呼び出し回数
• Latency– リクエストを受け取ってから応答するまでの時間(ミリ秒)
• 4xx Error– 4xxを返した回数
• 5xx Error– 5xxを返した回数
![Page 49: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/49.jpg)
メソッド設定
![Page 50: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/50.jpg)
メソッド設定
![Page 51: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/51.jpg)
Method Request
![Page 52: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/52.jpg)
Method Request
• Authorization type– NONEもしくはAWS_IAMを選択– AWS_IAMの場合、正しいIAMロールがセットされているIAMユーザのみがメソッド実行可能とな
り、リクエストに署名が必要となる
• API Key Required– API Keyが必要かどうかをtrue/falseで選択
• URL Query String Parameters– 受け付けるクエリストリングを指定
• HTTP Request Headers– 受け付けるヘッダを指定
• Request Models– GET以外の場合は利用するモデルを選択し、content-typeを指定する
![Page 53: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/53.jpg)
URL Query String Parametersの例
• この場合、/<resource>?hoge=fugaといったリクエストを受け付ける
![Page 54: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/54.jpg)
IAMロール
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"apigateway:method-type"
],
"Resource": [
"resource-statement"
]
}
]
}
• method-type
• メソッドのタイプ(GET/POSTなど)を指定• resource-statement
• Authorization Settings内に表示されているARNを指定
![Page 55: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/55.jpg)
Integration Request
![Page 56: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/56.jpg)
Integration Request
• バックエンドとのやり取りに関する設定• Integration Type
– 利用するバックエンドの種別と関連する情報を設定
• Integration TypeがLambda以外の場合は以下の設定も可能– URL Path Parameters– URL Query String Parameters– HTTP Headers– それぞれMethodRequestで指定したパラメータとマッピングする
• Mapping Templates– Content-Typeを設定した上で、Input passthroughもしくはマッピングテンプレート(後述)を指定
– Input passthroughを選択すると受け取ったデータをそのままバックエンドに渡す
– 標準ではapplication/jsonでInput passthroughとなっている
![Page 57: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/57.jpg)
Integration Request(Integration Type)
• Lambdaファンクション
• HTTP Proxy– EC2上で構築したWebAPIなどを利用する場合– 外部のWebサービスを呼び出すことも可能– エンドポイントとして呼び出し先のURLとHTTPメソッドを指定– 現時点ではアクセス先はPublic IPを持っている必要あり
• AWS Service Proxy– AWSのサービスを直接呼び出すことが可能– 各サービスで用意されているアクションを実行可能
![Page 58: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/58.jpg)
Method Response
![Page 59: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/59.jpg)
Method Response
• 返すHTTPステータスコードごとにカスタムヘッダやカスタムデータを返すことが可能
• シンプルに200だけをOutput passthoroughで返すのであれば設定しなくても問題ない
![Page 60: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/60.jpg)
Integration Response
![Page 61: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/61.jpg)
Integration Response
• バックエンドの結果を元に特定のHTTPステータスコードを返すための設定– 標準ではステータスコード200についてのみ設定されている– バックエンドがLambdaファンクションの場合、エラーメッセージの正規表現で指定する。– HTTP Proxyの場合はバックエンドが返すHTTPステータスコードを正規表現で指定
• 以下の設定も可能– Header Mappings– Mapping Template– それぞれMethod Responseで設定した値を指定する
• Mapping Templates– Content-Typeを設定した上で、Output passthroughもしくはマッピングテンプレート(後述)を指定
– Output passthroughを選択するとバックエンドから受け取ったデータをそのままレスポンスする
– 標準ではapplication/jsonでOutput passthroughとなっている
![Page 62: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/62.jpg)
Integration Response(Lambdaの場合)
![Page 63: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/63.jpg)
Integration Response(HTTP Proxyの場合)
![Page 64: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/64.jpg)
APIキーの使用
![Page 65: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/65.jpg)
APIキー
• APIキーを有効にすることでAPI Gatewayが払い出すAPIキーを使用した
メータリングが可能– 正しいAPIキーを含まないリクエストはエラーになる
– API/ステージレベルで設定可能
• リクエストのヘッダにAPIキーを含める
x-api-key: bkayZOMvuy8aZOhIgxq94K9Oe7Y70Hw55
• CloudWatchによりAPIキーごとの使用量を計測可能
• 認可のために用いないこと– あくまで計測目的として用意されている
– 認可はAPI Signature Version 4もしくは自前でOauth等のメカニズムを用意して行う
![Page 66: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/66.jpg)
認可
![Page 67: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/67.jpg)
AWS Sigv4の活用、もしくはカスタムヘッダの利用
• APIコールの署名と認可にAWS Sigv4を利用可能
– Amazon CognitoとAWS Security Token Service(STS)のようなテンポラリ
クレデンシャルを利用
– IAMロールと紐づく形で認証・認可が行われる
– 生成されたクライアントSDKを利用することで自動的に利用可能
• OAuthもしくはその他の認可メカニズムはカスタムヘッ
ダを用いて対応
– バックエンドに対してカスタムヘッダをフォワードするよう構成
![Page 68: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/68.jpg)
スロットリングとキャッシュ
![Page 69: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/69.jpg)
スロットリング
• メソッド単位でのスロットリングを提供– ステージ単位で全体的に同一設定にすることも、個々のメソッドに対して個別
に設定することも可能
– スロットリングによりバックエンドのパフォーマンスと可用性を維持
– 許容するリクエスト/秒を指定
– バーストを許容する設定も可能
– トークンバケットアルゴリズムによる実装
• リミットを超えたリクエストがスロットリングされる– HTTPステータス429をレスポンス
– 生成したSDKを使う場合、自動でリトライする
![Page 70: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/70.jpg)
レスポンスのキャッシング
• レイテンシ減とバックエンドへのトラフィック軽減
– キャッシュがあった場合、バックエンドを呼び出すことなくレスポンス
• ステージ単位のキャッシュプロビジョニング
– 0.5GBから最大237GBの間でプロビジョニング
• 細やかな設定
– メソッド単位で暗号化とTTLを設定
– クエリパラメータ、ヘッダ、パスパラメータ単位でキャッシュ有無を設定
• キャッシュアルゴリズムはLRU(Least Recently Used)
![Page 71: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/71.jpg)
リクエストの処理フロー
Receive incoming request
•Check for item in dedicated cache
• If found return cached item
Check throttling configuration
•Check current RPS rate
• If above allowed rate return 429
Execute backend call
![Page 72: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/72.jpg)
モデル
• リクエスト/レスポンスで扱われるデータのスキー
マを定義したもの
– テンプレートとマッピングして使う
– JSON形式で定義
• モデルの情報を元にSDKを生成
• API内で複数メソッドをまたがってモデルを再利用
可
![Page 73: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/73.jpg)
モデル例:元データ{"department": "produce","categories": ["fruit","vegetables"
],"bins": [{"category": "fruit","type": "apples","price": 1.99,"unit": "pound","quantity": 232
},{"category": "fruit","type": "bananas","price": 0.19,"unit": "each","quantity": 112
},{"category": "vegetables","type": "carrots","price": 1.29,"unit": "bag","quantity": 57
}]
}
• トップレベル• department(string)• categories(配列)• bins(配列)
• categoriesにはstringのコレクションが含まれる
• binsはオブジェクトのコレクションを含む• 各オブジェクトは以下の要素を持つ
• category(string)• type(string)• price(number)• unit(string)• quantity(number)
![Page 74: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/74.jpg)
モデル例
{"$schema": "http://json-schema.org/draft-04/schema#","title": "GroceryStoreInputModel","type": "object","properties": {"department": { "type": "string" },"categories": {
"type": "array","items": { "type": "string" }
},"bins": {
"type": "array","items": {"type": "object","properties": {"category": { "type": "string" },"type": { "type": "string" },"price": { "type": "number" },"unit": { "type": "string" },"quantity": { "type": "integer" }
}}
}}
}
• title – モデルの識別子
• トップレベルのdepartment、categories、binsをpropertiesとして指定• それぞれの型をtypeで指定
• Categories、binsに含まれるオブジェクトをitemsとして定義• 各項目ごとにtypeを指定
![Page 75: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/75.jpg)
マッピングテンプレート
• あるデータを別の形式に変換することが可能
• インプットとアウトプットそれぞれのマッピングテンプレートを作成
• マッピングテンプレートはVelocity Template Language (VTL) およびJSONPathで定義
• 以下のようなユースケースで利用する– レガシーなバックエンドからのレスポンスをフィルタ
• プライベートなものや不必要なデータを削除
– GETリクエストのクエリストリングを元にPOSTのボディを生成し、バックエンドをPOSTで呼び出し• バックエンドがRPC形式でPOSTのリクエストしか受け付けない場合
– LambdaファンクションからJSONを受け取り、XMLに変換
![Page 76: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/76.jpg)
変換例: JSONからXMLに
API Gateway Backend
GET - /peoples/1234Lambda fn
get_people
/peoples/1234
{
“name” : “John”
}
<xml>
<name>
John
</name>
</xml>
#set($root = $input.path('$'))
<xml>
<name>
$root.name
</name>
</xml>
マッピングテンプレート
![Page 77: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/77.jpg)
SDKの生成
![Page 78: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/78.jpg)
クライアントSDKの自動生成
• ステージごとに生成可能
• API設定を元に自動生成
– モデルの設定を元にIn/Outのマーシャリングに関する処理も含ま
れる
• スロットリング時のリトライやリクエストの署名
に関する処理を含む
• Android、iOS、JavaScriptをサポート
![Page 79: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/79.jpg)
価格
• 100万リクエストあたり$3.50
• AWS無料枠に含まれる– 100万リクエスト/月を12ヶ月間
• 外向きデータ転送量(AWSの標準価格)– 10TBまで$0.09/GB
– 次の40TBまで$0.085/GB
– 次の100TBまで$0.07/GB
– 次の350TBまで$0.05/GB
![Page 80: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/80.jpg)
価格 – キャッシュ
Cache Memory
Size (GB)
Price per Hour
(USD)
0.5 $0.020
1.6 $0.038
6 $0.200
13 $0.250
28 $0.500
58 $1.000
118 $1.900
237 $3.800
![Page 81: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/81.jpg)
制限事項
• 利用可能なリージョン– US East (N. Virginia)
– US West (Oregon)
– EU West (Dublin)
• アカウントあたり最大で60APIまで
• APIあたり300リソースまで
• APIあたり10ステージまで
![Page 82: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/82.jpg)
Amazon API Gateway
http://aws.amazon.com/apigateway/
Build, Deploy & Manage your APIs NOW
![Page 83: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/83.jpg)
参考文献
• Developer Guidehttp://docs.aws.amazon.com/apigateway/latest/developerguide/welcome.html
• AWS Lambdahttp://docs.aws.amazon.com/lambda/latest/dg/welcome.html
• Roy Fieldingの博士論文「Architectural Styles and the Design of Network-based Software Architectures」第5章http://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm
![Page 84: Build, Deploy & Manage your APIs · 1. 新規apiセットを作成 2. リソースおよびメソッドを定義 – メソッドを作成した時点でテスト可能となる –](https://reader031.fdocuments.net/reader031/viewer/2022011915/5fc78e8071595639b014561c/html5/thumbnails/84.jpg)