API GatewayでAPIを作成してLambda Functionと紐づけたい(API KEYを設定しない)
の続きで、API KEYの設定を試した手順を書き残しておきます。
API KEY を設定しない場合(前の記事に書きました)
1.Lambda Functionを作成する
名前と言語を決める
2.API Gatewayで API を作成する
API KEY を設定する場合(今見ているこの記事)2.API Gatewayで API を作成する
名前とエンドポイントタイプを決める
アクションからメソッドを作成する
Lambda関数の欄に1で作成したFunctionを入れる
APIをデプロイからステージ名を決めてデプロイする
アクションからメソッドを作成する
Lambda関数の欄に1で作成したFunctionを入れる
APIをデプロイからステージ名を決めてデプロイする
3.API KEYを作成する
名前を決める
4.Usageを新規作成する
ステージを追加する
API KEYをUsageに追加する
1のFunctionを設定する
APIをデプロイする
3.API KEYを作成する
「API Keys」をクリックします
「Actions」から「Create API key」を選択します
「Name」に任意の名前を入力して「Save」をクリックします
「Show」をクリックすると API KEY が表示されます
4.Usage Planを作成する
「Usage Plan」をクリックします
「Create」をクリックします
「Name」に任意の名前を入力します
「Throttling」と「Quota」の値を任意で設定します
「Next」をクリックします
「Add API Stage」をクリックします
「API」と「Stage」を選択して右端のチェックアイコンをクリックします
「Next」をクリックします
「Add API Key to Usage Plan」をクリックします
「Name」でAPI KEY名を入力して右端のチェックアイコンをクリックします
「Done」をクリックします
このような画面になります
API KEYを有効にするため、作ったAPIの「Resources」を選択します
メソッド名をクリックします
falseになっている「API Key Required」の鉛筆アイコンをクリックします
「true」にしてチェックアイコンをクリックします
「Actions」から「Deploy API」を選択します
「Deployment stage」を選択して「Deploy」をクリックします
「Invoke URL」をクリックします
API KEYが必須になったため、ブラウザには以下のようにForbiddenが返ってきます
Google Apps Scriptで API KEY を渡してアクセスしてみる
コード.gs
function runWithKey() { var url = 'https://API_ID.execute-api.us-east-1.amazonaws.com/beta/'; var response = UrlFetchApp.fetch(url, getOptions()); Logger.log(response); Logger.log(JSON.parse(response)['body']); } function getOptions() { var options = { 'method': 'get', 'contentType': 'application/json', 'headers': get_headers() } return options; } function get_headers() { var headers = { "x-api-key": getProp('apigateway_key') } return headers; } function getProp(key) { return PropertiesService.getScriptProperties().getProperty(key); } |
補足
Lambda Functionでエイリアスを作ってバージョンを紐づけている場合
(例えば以下のようなエイリアスにそれぞれバージョンを設定している)
- Alias:Version
- Unqulified:$LATEST
- dev:v2
- prod:v1
それぞれのエイリアスの画面でAPI Gatewayを作成してやると
/beta の後にFunction名がついて、そのバージョンのFunctionを実行できました。
API Gatewayのステージを分けるのとはちょっと違いますが、エイリアス毎にAPI Gatewayを割り当てたい目的は果たせた。
その手順も書いておきます(prodエイリアスを例に)
左のメニューの「API Gateway」をクリックします
右に表示された「API Gateway」のtriggerをクリックします
「API」はSTEP2で作成したものを入力します
「Deployment stage」はこの記事では「beta」としたので選択します
「Security」は 「Open with API key」を選択します
右上の「Save」をクリックします
下部にAPI GatewayのURLとAPI Keyが表示されます
その後、ページを更新してもう一度同じ場所を見ると、API key:の文字列が手順3で作成したものに変わりました。
関連記事
API GatewayでAPIを作成してLambda Functionと紐づけたい(API KEYを設定しない)
参考
API Gateway コンソールでサンプルから API を作成してテストする
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-create-api-from-example-console.html
チュートリアル: Amazon API Gateway で AWS Lambda を使用する
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-on-demand-https-example.html
Create, Configure, and Test Usage Plans with the API Gateway Console
https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-usage-plans-with-console.html
API Gateway コンソールでサンプルから API を作成してテストする
https://docs.aws.amazon.com/ja_jp/apigateway/latest/developerguide/api-gateway-create-api-from-example-console.html
チュートリアル: Amazon API Gateway で AWS Lambda を使用する
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/with-on-demand-https-example.html
Create, Configure, and Test Usage Plans with the API Gateway Console
https://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-create-usage-plans-with-console.html