はじめに
こんにちは!
株式会社BFT名古屋支店、新米エンジニアのプリンとDUKEです。
APIの勉強のためにAWSでAPI GatewayとLambdaを使ってREST APIを作ったのですが、今回はその際に調べたAPI Gatewayの設定値についてまとめてみました!
以下のLambda編の記事では、運勢をランダム表示させるためのPythonコードの書き方を解説しているので興味がある方はぜひそちらもご覧ください。
bftnagoya.hateblo.jp
目次
API Gateway作成時の設定値
エンドポイント・タイプとは
API GatewayのコンソールでAPIを作成をクリックすると、画面のようにまずエンドポイントタイプを設定する必要があります。
結論から言うとエンドポイントタイプとは、APIを呼び出す際の接続先についての設定をする項目です。
エンドポイントタイプの説明をする前に、まずエンドポイントについて説明します。
エンドポイントとは、APIを呼び出すための接続先のことで、具体的にはURL(URI)のことです。
そのURL(URI)を叩くとAPIに接続できます。
AWSにおけるエンドポイントの形式は以下の通りです。
{api-id}.execute-api.{region}.amazonaws.com</span>
そしてエンドポイントタイプでは、「どういうルートでエンドポイントにアクセスするか」を【リージョン・エッジ最適化・プライベート】の3つから設定することができます。
リージョン
直接リージョンにルーティング(データを転送)する
→同じリージョンからAPIを呼び出す場合に適している
CloudFlontを経由して最適なリージョンにルーティングする
→いろんなリージョンからAPIを呼び出す場合に適している
プライベート
VPC内からVPC エンドポイント経由でのみアクセスできる
→セキュリティを高めたい場合に適している
参考:API Gateway でメソッドリクエストをセットアップする - Amazon API Gateway
今回は東京リージョンに作成したAPIGatewayのエンドポイントに日本国内からアクセスする想定だったので、エンドポイントタイプはリージョンを選びました。API Gateway設定時の設定値
さて、これでAPIの作成ができました!
しかし、作っただけではAPIは使えません。
いろいろ設定してあげなければならないことがあります。
「メソッドの作成」とは
まずは、メソッドの作成です。
前提としてAPIを使うときって、「データを取得したい」、「データを渡したい」、「データを削除したい」などいろんな使い方がありますよね。
メソッド(HTTPメソッド)とはそういった「何をしてほしいか」という要求を表す種類のことです。
アクションタブをクリックしてメソッドの作成を選択すると、
こんなふうにプルダウンでいろんなHTTPメソッドが表示されます。
ANY:適切なメソッドで処理する*1
DELETE:データを削除して
GET:データを表示して
HEAD:ヘッダー情報だけほしいな
OPTIONS:あなたの通信オプション教えて
POST:データあげる(好きに使っていいよ)
PUT:データあげる(置き換えといて)
今回はLambdaの実行結果を表示してほしかったので、GETを選びました。
GETを選択するとこんな画面になるかと思いますので、それぞれ解説していきます。
「統合タイプ」とは
統合タイプとはAPIのクライアントとバックエンドのサーバやサービス間の通信方法を定義したものです。
選択したものによって何と通信するかが決まってくるので、目的に合わせて選択してください。
それぞれの設定値の意味はこんな感じです。
Lambda関数:AWS Lambdaと連携する
HTTP:外部のHTTPエンドポイントに連携する
Mock:バックエンドのサービスがない場合や、開発中に仮のレスポンスを返してほしいときに使用します
AWSサービス:DynamoDBやS3などAWSサービスと連携します
VPCリンク:プライベートネットワーク内にあるバックエンドサービスに安全にアクセスするために使用します
今回はLambdaを使用するのでLambda関数を選びました。
「Lambdaプロシキ統合を使用」とは
Lambda関数を選択するとこんな項目が出てきます。
「なんだこれ?」ってなりますよね。
そしてレスポンスが返ってきたときも同様の処理をします。
よってリクエストを送ってレスポンスが返ってくるまでの間に複数回データの変換が行われます。
しかし、Lambdaプロキシ統合を使用すると、データを変換せずにそのまま送れるようになるので、処理が高速化されより効率的な通信が可能になります。
「Lambdaリージョン」とは
次にLambdaリージョンの設定です。
これは、Lambda関数がデプロイされるAWSのリージョンを指します。Lmabda関数は特定のリージョン内で作成・実行されるので、今回は「ap-northeast-1」を選択します。
「Lambda関数名」とは
ここにはAPIgatewayと連携させたいLambda関数名を入力してください。
「デフォルトタイムアウトを使用」とは
リクエストを送ってレスポンスが返ってくるまでの最大時間を設定するものです。
デフォルトタイムアウトを使用するとタイムアウトまで29秒の猶予がありますが、これが最大値なので、これ以上時間を延ばすことはできません。
逆に短くすることは可能なので、短くしたい場合は「デフォルトタイムアウトを使用」のチェックを外し、0.05秒~29秒までの間で指定してください。
「APIのデプロイ」とは
最後にAPIのデプロイです。
デプロイとは簡単に言うと「使える状態にすること」で、その通りAPIをデプロイすることでAPIを呼び出して使えるようになります。
APIをデプロイするには、まず「アクション」タブをクリックして「APIのデプロイ」を選択します。
すると、APIがデプロイされるステージを選択する画面がポップアップします。
ステージとは、API のスナップショットのようなものです。 ステージごとにAPI の状態を開発フェーズ、検証フェーズなどでそれぞれ分けて管理することができます。
最初はステージがないので、「デプロイされるステージ」のプルダウンから「新しいステージ」を選択します。
そうすると「ステージ名」を入力することができます。
今回は適当にtestという名前でステージを作成しました。
ステージが作成されたことが確認出来たら、APIのデプロイ完了です。 これで晴れてAPIを呼び出すことができるようになりました!
画面上部にある「URLでの呼び出し:」の後に表示されるURLをクリックするとAPIを呼び出せます。
以上、APIGatewayの設定値についての解説でした。
ここまで読んでいただき、ありがとうございました。
*1:ANYメソッドはすこし特殊で、プロキシリソースと組み合わせることでリクエストが送られてきた際にそのリクエストに対応する適切なHTTPメソッドを自動的に処理します。
つまり、いくつかの異なるHTTPメソッドを1つのAPIメソッドで処理できるようにしてくれます。
例えば、GETメソッドとPOSTメソッドを両方使いたい場合などにそれぞれに別にメソッド作成しなくてもANYメソッドを作成するだけで済むということです。
参考:API Gateway でメソッドリクエストをセットアップする - Amazon API Gateway