さっくり解説するAmazon API Gateway

## はじめに
今回はAmazon API Gateway編です。
今まで以上に用語が多いですが、なるべく分かりやすい解説をしてみようと思います。

# Amazon API Gatewayとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/392337/417f63ac-7cfc-b52a-a95a-949bd3636ac1.png)



公式ドキュメントによると、

>フルマネージド型サービスの Amazon API Gateway を利用すれば、デベロッパーは規模にかかわらず簡単に API の作成、公開、保守、モニタリング、保護を行えます。API は、アプリケーションがバックエンドサービスからのデータ、ビジネスロジック、機能にアクセスするための「フロントドア」として機能します。API Gateway を使用すれば、リアルタイム双方向通信アプリケーションを実現する RESTful API および WebSocket API を作成することができます。API Gateway は、コンテナ化されたサーバーレスのワークロードやウェブアプリケーションをサポートします。

Amazon API Gateway(以下、API Gateway)とは、AWSが提供する
[API](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%95%E3%82%A7%E3%83%BC%E3%82%B9)の作成および諸々の管理を行えるサービスのことです。

また[フルマネージドサービス](https://e-words.jp/w/%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%89%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9.html#:~:text=%E3%83%95%E3%83%AB%E3%83%9E%E3%83%8D%E3%83%BC%E3%82%B8%E3%83%89%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%20(fully%20managed%20service))なので、利用者側はAPIの作成や管理といった作業にだけ集中することができます。


:::note 
API Gatewayは、AWSが提供する「APIの作成および管理を簡単に行える」フルマネージドサービスである。
:::

# API Gatewayの特徴

## APIの作成

API Gatewayでは、HTTP API または REST APIを使用して、[RESTful](https://aws.amazon.com/jp/what-is/restful-api/)なAPIを作成することができます。
また[WebSocket API](https://developer.mozilla.org/ja/docs/Web/API/WebSockets_API)の作成も可能です。

ちなみにAPIの種類によって利用できる機能も異なります。
例えば、HTTP APIだとMock(ダミー用のAPI)やAPIキーが使えなかったりします。

詳しくはこちら。

https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/http-api-vs-rest.html

よく使われるものとして、[AWS Lambda](https://aws.amazon.com/jp/lambda/)(以下、Lambda)と連携しサーバレスなアーキテクチャも実現できます。

イメージとしてはリクエストの受口としてAPI Gatewayがあり、
そこからLambda関数を呼び出してバックエンドの処理を行うという感じでしょうか。

他のAWSバックエンドサービスだと個人的には、[Amazon S3](https://aws.amazon.com/jp/s3/?trk=f044c534-a689-47c3-ae52-5e4027585385&sc_channel=ps&sc_campaign=acquisition&sc_medium=ACQ-P|PS-GO|Brand|Desktop|SU|Storage|S3|JP|JP|Text&s_kwcid=AL!4422!3!591554235288!e!!g!!s3&ef_id=Cj0KCQjw4uaUBhC8ARIsANUuDjWjjPEE_c3mK3Y-lzQthiUMboS10vZPr4P44kLTlo0jBi6q8nrxKCkaAmDLEALw_wcB:G:s&s_kwcid=AL!4422!3!591554235288!e!!g!!s3&gclid=Cj0KCQjw4uaUBhC8ARIsANUuDjWjjPEE_c3mK3Y-lzQthiUMboS10vZPr4P44kLTlo0jBi6q8nrxKCkaAmDLEALw_wcB)や[Amazon SNS](https://aws.amazon.com/jp/sns/?whats-new-cards.sort-by=item.additionalFields.postDateTime&whats-new-cards.sort-order=desc)と連携するのが多い気がします。


LambdaとS3ついてはこちらでも解説しています。

https://qiita.com/shimajiri/items/1f3f2a0994423d689485

https://qiita.com/shimajiri/items/01ab61a08b58c2cb8acf

:::note
現在は、HTTP API、REST APIおよびWebSocket APIがサポートされており、
それらのAPIを作成することができる。
AWS Lambdaと連携し、サーバレスアーキテクチャも実現できる。
:::

## APIの管理

トラフィック管理や、CORSのサポート、
リソースポリシーで認可とアクセス制御、APIのモニタリング、APIのバージョン管理、
APIコールの受け入れとその処理などが行えます。

用語ばかりですね…

さっくり用語解説

:::note warn
・トラフィック管理
ネットワーク上で転送されるデータ量を監視・制御などする運用のこと
:::

:::note warn
・CORS(オリジン間リソース共有)
異なるオリジンへのHTTPリクエストが発生する際に、相手側オリジンからの許可を得ることでアクセス可能とするプロトコルのこと(脆弱性を回避する仕組み)
:::

:::note warn
・モニタリング
通信のオペレーションが問題なく実行されているかどうかを記録・監視すること
問題発生時の詳細や原因の調査、性能改善などのために利用される
:::

## 料金
>Amazon API Gateway では、お客様の API が使用されている分のみお支払いいただきます。最低料金や前払いの義務はありません。HTTP API および REST API に関しては、受信した API コール数と、転送データ量に対してのみ料金が発生します。プライベート API のデータ転送に料金は発生しません。ただし、AWS PrivateLink の料金は、API Gateway でプライベート API を使用するときに適用されます。API Gateway にはオプションのデータキャッシュ機能があり、選択するキャッシュサイズに応じて、時間単位で料金が計算されます。WebSocket API に関しては、受送信したメッセージ数および分単位の接続時間に基づいて API 使用の従量制でご請求いたします。

:::note
まとめると、
・HTTP & RESTのAPIは、受信したAPIコール数と、転送データ量に料金が発生する。
・データキャッシュしたら、サイズに応じて時間単位で料金が発生する。
・WebSocket APIは、受送信メッセージ数と接続時間により従量制で料金が発生する。
:::

ということになります。

リージョンによって細かい料金が異なるのですが、
参考までにアジアパシフィック(東京)のREST APIの場合で算出してみます。

条件は、以下とします。

・月に1,000,000リクエスト
・キャッシュメモリサイズ (GB)は0.5

```
1,000,000 リクエスト x 0.0000042500 USD = 4.25 USD
0.028 1 時間あたり USD x 730 時間 (1 か月間) = 20.44 キャッシュメモリの USD
専用キャッシュメモリの料金合計額: 20.44 USD

4.25 USD + 20.44 USD = 24.69 USD

REST API のコスト (毎月): 24.69 USD となりました。
```

見積もりツールも用意されているのでオススメです↓

https://calculator.aws/#/

また、API Gatewayでは以下のような、最大一年間の無料利用枠が用意されています。

月間のHTTP APIのコール数 100万件、REST APIのコール数 100万件、メッセージ数 100万件 (送信または受信) および接続時間 750,000分


## まとめ

API Gatewayは、一言でいうと
Webサーバーのフルマネージドサービスといったところでしょうか。

REST通信やAPI周りの知識が必要で、
解説するのも、初心者が概要を理解するのも特に難しいと思います。

少しでも参考になれば幸いです。

# 参考
https://aws.amazon.com/jp/api-gateway/

https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/welcome.html

# こちらもどうぞ
https://qiita.com/shimajiri/items/1f3f2a0994423d689485

https://qiita.com/shimajiri/items/01ab61a08b58c2cb8acf