API Gateway AppSync

API Gateway

・最大数十万個のAPI同時呼び出し・受付が可能 

DDoS攻撃対応やスロットリングによるバックエンド保護 

・EC2/Lambda/任意のウェブアプリケーションのワークロード処理を実行する 

・Swagger/Open API(共にRESTfulAPIを記述するためのインターフェース記述言語)のインポートによってAPIを定義 

・WebSocketを利用したリアルタイムかつ双方向通信の APIも処理可能

 

●料金

・HTTP API 

使用した API コールの分だけ料金が発生

・Restful API

受信した API コールと、転送データ量に対してのみ料金が 発生

・WebSocket API

受送信したメッセージ数および分単位の接続合計時間から料金が発生

 

APIのタイプ

・HTTP API

REST API よりも低いレイテンシーとコストで RESTful API を作成する。

LambdaプロキシまたはHTTPプロキシのいずれか。

・Restful API

HTTP エンドポイント、Lambda 関数、その他の AWS のサー ビスを使用する。

その他AWSサービスを利用したい場合はRestful APIを選択

CORSにも対策可能

・WebSocket API

チャットアプリ、コラボレーションプラットフォーム、マルチプレイヤーゲー ム、

金融取引プラットフォームなどのリアルタイムアプリに使用。

 

●統合タイプ

APIメソッドがバックエンドエンドポイントと統合するタイプが4つ存在する。

・Lambda統合

Lambda プロキシ統合または Lambda カスタム統合を使用できます。

Lambda カスタム統合は、AWS 統合の特殊なケース。

・HTTP統合

HTTP プロキシ統合または HTTP カスタム統合を使用できます。

・プライベート統合

VPC 内にある HTTP/HTTPS リソースを VPC 外のクライアントがアクセスできるように簡単に公開できます。

API Gateway がサポートする認証方法よりAPIへのアクセスを制御できる。

・Mock統合

※モック=試作品

バックエンドを統合することなく、API Gateway から直接 API レスポンスを 生成できる統合方式。 

API のテストに便利

バックエンドの使用料金が発生することなく、統合設定のテストに使用したり、API の共同開発に使用したりできるため

参考:

全体

https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-api-integration-types.html

プライベート統合

https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/set-up-private-integration.html

 

APIエンドポイントのタイプ

APIが実行される場所

○エッジ最適化 API エンドポイント

CloudFrontと連携してグローバルにクライアントが分散している場合に 最適にルーティングする。

API リクエストは最寄りの CloudFront POP (Point Of Presence) にルーティングされる。 

REST API のデフォルトのエンドポイントタイプ

CloudFront は、リクエストをオリジンに転送する前に、Cookie 名の自然な順序で HTTP Cookie を並べ替える。

○リージョナル API エンドポイント

EC2 インスタンスまたは API と同じリージョン内のサービスから送られる場合使用する。

同じリージョンのクライアントに最適なルーティングをする。

接続のレイテンシーが少なくなる。

○プライベート API エンドポイント

VPCからしかアクセ スできないAPI エンドポイント。

インターフェイス VPC エンドポイント にはVPC 内に作成するエンドポイントネットワークインターフェイス (ENI) を利用する。 リソースポリシーを利用してアクセスを制御できる。

参考:

https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-api-endpoint-types.html

 

●キャッシュ機能の利用 

ステージに対して有効。

APIキャッシュのデフォルトのTTL値は300秒、最大TTL値は3600秒

エンドポイントへの呼び出しの数 を減らし、API へのリクエストのレイテンシーを短くできる。

 

●スロットリングの利用 

リクエスト数が多すぎる場合、制限をかけることで、トラ フィックの急増に対してバックエンドサービスを守る。

○サーバー側のスロット リング制限

全てのクライアントに対するリクエストを制限する。

全体 のリクエストが多すぎるために バックエンドサービスが処 理しきれなくなることを防ぐことができる。

○クライアントあたりの スロットリング制限

クライアントごとに「使用量プラン」に応じて制限を行う。 

各ステージごとにブースト機能などを設定できる。

特定のユーザーからのリクエストが多い場合に有効

 

API Gatewayの認証方式

・リソースポリシー (REST APIのみ)

特定のソース IP アドレスまたは VPC エンドポイントから、

API およびメソッドへのアクセスを許可、または拒否するリソースベースのポリシーを作成

・IAM認証

APIメソッドでIAM認証を有効化する

・Lambda オーソライザー

Lambda関数を認証方法を記載する。

・Cognito オーソライザー

Cognitoユーザープールを用いて、 APIへのアクセス制御をメソッド単位で実施

 

AppSync

GraphQLのエンドポイントを提供するサービス

リアルタイム処理に向いている。

AppSyncの料金は従量課金

REST API 形式だとAPI Gatewayで複数エンドポイントを提供するが、AppSyncは1つのエンドポイントを提供する。

AppSyncは直接DynamoDBの値を取得・更新・削除することができる。

従来のAPI Gatewayだと、AWS Lambda が間に必要でしたが、

AppSyncは Lambda レス でDynamoDBへのアクセスが可能

AppSync内のリゾルバーという領域にロジックを記述。

・GraphQL

Facebookが開発しているWeb APIのための規格

REST API は、1URLに対し1つのAPIや情報を提供できるのに対し、

GraphQL は欲しいデータをクエリとして発行すると、欲しいデータを欲しいObject形式で得ることができる

 

●用語

・リソース=APIのパス

usersリソースを追加し、https://api.example.com/usersで使用できるようにする。

・メソッド=リソースに対してのアクション(GET, POST等)

・ステージ=ステージにデプロイする。

エンドポイントとデプロイバージョンを紐付けるエイリアス

ステージを分けることでエンドポイントを分けることが可能(本番と開発環境を分けることが可能)

参考:

https://dev.classmethod.jp/articles/getting-start-api-gateway/